diff -r 000000000000 -r 951a5db380a0 videoeditorengine/h263decoder/src/vdeti_mpeg.cpp --- /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