--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/videoeditorengine/h263decoder/src/vdeti_mpeg.cpp Fri Jan 29 14:08:33 2010 +0200
@@ -0,0 +1,114 @@
+/*
+* Copyright (c) 2010 Ixonos Plc.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - Initial contribution
+*
+* Contributors:
+* Ixonos Plc
+*
+* Description:
+* Input stream type determination.
+*
+*/
+
+
+
+
+/*
+ * Includes
+ */
+
+#include "h263dConfig.h"
+
+#include "debug.h"
+#include "sync.h"
+#include "vde.h"
+#include "vdemain.h"
+#include "mpegcons.h"
+
+#include "core.h"
+
+
+/*
+ * Functions visible outside this module
+ */
+
+/*
+ * vdeDetermineStreamType
+ *
+ * Parameters:
+ * hInstance instance data
+ *
+ * Function:
+ * This function detects the stream type, looking at the start code
+ * (h.263 vs. MPEG-4) and sets the flag "fMPEG4" which is
+ * used for the configuration of the decoder.
+ * In case of an MPEG-4 stream calls the Video Object Header and the VOL Header
+ * decoding function to set initial parameters.
+ *
+ * Returns:
+ * VDE_OK if the stream type could be detected and
+ * it is supported
+ * VDE_ERROR_HALTED if the stream type couldn't be detected or
+ * the configuration is not supported
+ * VDE_ERROR if unrecoverable bitbuffer error occered
+ *
+ */
+int vdeDetermineStreamType(vdeHInstance_t hInstance, CMPEG4Transcoder *hTranscoder)
+{
+ vdeInstance_t *vdeinstance = (vdeInstance_t *) hInstance;
+ bibBuffer_t *inBuffer = vdeinstance->inBuffer;
+
+ int numBitsGot,
+ bitErrorIndication = 0;
+ int16 error = 0;
+ u_int32 bits;
+
+ bits = bibShowBits(32, inBuffer, &numBitsGot, &bitErrorIndication, &error);
+ if (error)
+ return VDE_ERROR;
+
+ /* If PSC */
+ if ((bits >> 10) == 32) {
+ vdeinstance->fMPEG4 = 0;
+ }
+
+ /* Else check for Visual Sequence, Visual Object or Video Object start code */
+ else if ((bits == MP4_VOS_START_CODE) ||
+ (bits == MP4_VO_START_CODE) ||
+ ((bits >> MP4_VID_ID_CODE_LENGTH) == MP4_VID_START_CODE) ||
+ ((bits >> MP4_VOL_ID_CODE_LENGTH) == MP4_VOL_START_CODE)) {
+
+ vdeinstance->fMPEG4 = 1;
+
+ if (vdcDecodeMPEGVolHeader(vdeinstance->vdcHInstance, inBuffer, hTranscoder) != 0)
+ return VDE_ERROR;
+
+ bits = bibShowBits(22, inBuffer, &numBitsGot, &bitErrorIndication, &error);
+ if (error)
+ return VDE_ERROR;
+
+ /* Check if H.263 PSC follows the VOL header, in which case this is
+ MPEG-4 with short header and is decoded as H.263 */
+ if ( bits == 32 ) {
+ vdeinstance->fMPEG4 = 0;
+ }
+
+ }
+
+ /* Else no H.263 and no MPEG-4 start code detected -> let's try H.263,
+ since MPEG-4 cannot anyway be decoded without starting header */
+ else {
+ vdeinstance->fMPEG4 = 0;
+ }
+
+ return VDE_OK;
+}
+
+// End of File