OSCL_EXPORT_REF int16 iGetM4VConfigInfo(uint8 *buffer, int32 length, int32 *width, int32 *height, int32 *display_width, int32 *display_height) { int16 status; mp4StreamType psBits; psBits.data = buffer; psBits.numBytes = length; psBits.bitBuf = 0; psBits.bitPos = 32; psBits.bytePos = 0; psBits.dataBitPos = 0; *width = *height = *display_height = *display_width = 0; if (length == 0) { return MP4_INVALID_VOL_PARAM; } int32 profilelevel = 0; // dummy value discarded here /* Mobile Media Lab. Start */ int32 is_valid = 0; uint32 tmp; /* check input buffer has visual_object_sequence_start_code or visual_object_start_code or video_object_start_code or video_object_layer_start_code or short video header */ ShowBits(&psBits, 32, &tmp); if (tmp == VISUAL_OBJECT_SEQUENCE_START_CODE || tmp == VISUAL_OBJECT_START_CODE || (tmp >= 0x0100 && tmp <= 0x011F) || /* video_object_start_code */ ((tmp & 0x20) == 0x20)) /* video_object_layer_start_code */ { /* check MPEG-4 start code */ is_valid = 1; } else { /* check short video header */ ShowBits(&psBits, SHORT_VIDEO_START_MARKER_LENGTH, &tmp); if (tmp == SHORT_VIDEO_START_MARKER) is_valid = 1; } if (is_valid == 0) { /* this stream may have a garbage data */ return MP4_INVALID_VOL_PARAM; } /* Mobile Media Lab. End */ status = iDecodeVOLHeader(&psBits, width, height, display_width, display_height, &profilelevel); return status; }
OSCL_EXPORT_REF int16 iGetM4VConfigInfo(uint8 *buffer, int32 length, int32 *width, int32 *height, int32 *display_width, int32 *display_height) { int16 status; mp4StreamType psBits; psBits.data = buffer; psBits.numBytes = length; psBits.bitBuf = 0; psBits.bitPos = 32; psBits.bytePos = 0; psBits.dataBitPos = 0; *width = *height = *display_height = *display_width = 0; if (length == 0) { return MP4_INVALID_VOL_PARAM; } int32 profilelevel = 0; // dummy value discarded here status = iDecodeVOLHeader(&psBits, width, height, display_width, display_height, &profilelevel); return status; }