17c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/* 27c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project 37c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 47c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License"); 57c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * you may not use this file except in compliance with the License. 67c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * You may obtain a copy of the License at 77c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 87c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * http://www.apache.org/licenses/LICENSE-2.0 97c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * 107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Unless required by applicable law or agreed to in writing, software 117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS, 127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * See the License for the specific language governing permissions and 147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * limitations under the License. 157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 160a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury#include "utils/Log.h" 177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Types.h" 187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Debug.h" 197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4VD_EXTERNAL_Interface.h" 217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4VD_Tools.h" 220a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury#include "M4_VideoEditingCommon.h" 230a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury#include "OMX_Video.h" 247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/** 257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @file M4VD_EXTERNAL_BitstreamParser.c 277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief 287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note This file implements external Bitstream parser 297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************ 307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */ 317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 320a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdurytypedef struct { 330a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury M4OSA_UInt8 code; 340a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury M4OSA_Int32 profile; 350a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury M4OSA_Int32 level; 360a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury} codeProfileLevel; 370a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury 380a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdurystatic codeProfileLevel mpeg4ProfileLevelTable[] = { 390a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0x01, OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level1}, 400a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0x02, OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level2}, 410a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0x03, OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level3}, 420a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0x04, OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level4a}, 430a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0x05, OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level5}, 440a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0x08, OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level0}, 450a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0x11, OMX_VIDEO_MPEG4ProfileSimpleScalable,OMX_VIDEO_MPEG4Level1}, 460a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0x12, OMX_VIDEO_MPEG4ProfileSimpleScalable,OMX_VIDEO_MPEG4Level2}, 470a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0x21, OMX_VIDEO_MPEG4ProfileCore, OMX_VIDEO_MPEG4Level1}, 480a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0x22, OMX_VIDEO_MPEG4ProfileCore, OMX_VIDEO_MPEG4Level2}, 490a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0x32, OMX_VIDEO_MPEG4ProfileMain, OMX_VIDEO_MPEG4Level2}, 500a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0x33, OMX_VIDEO_MPEG4ProfileMain, OMX_VIDEO_MPEG4Level3}, 510a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0x34, OMX_VIDEO_MPEG4ProfileMain, OMX_VIDEO_MPEG4Level4}, 520a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0x42, OMX_VIDEO_MPEG4ProfileNbit, OMX_VIDEO_MPEG4Level2}, 530a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0x51, OMX_VIDEO_MPEG4ProfileScalableTexture, OMX_VIDEO_MPEG4Level1}, 540a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0x61, OMX_VIDEO_MPEG4ProfileSimpleFace, OMX_VIDEO_MPEG4Level1}, 550a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0x62, OMX_VIDEO_MPEG4ProfileSimpleFace, OMX_VIDEO_MPEG4Level2}, 560a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0x71, OMX_VIDEO_MPEG4ProfileBasicAnimated, OMX_VIDEO_MPEG4Level1}, 570a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0x72, OMX_VIDEO_MPEG4ProfileBasicAnimated, OMX_VIDEO_MPEG4Level2}, 580a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0x81, OMX_VIDEO_MPEG4ProfileHybrid, OMX_VIDEO_MPEG4Level1}, 590a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0x82, OMX_VIDEO_MPEG4ProfileHybrid, OMX_VIDEO_MPEG4Level2}, 600a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0x91, OMX_VIDEO_MPEG4ProfileAdvancedRealTime, OMX_VIDEO_MPEG4Level1}, 610a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0x92, OMX_VIDEO_MPEG4ProfileAdvancedRealTime, OMX_VIDEO_MPEG4Level2}, 620a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0x93, OMX_VIDEO_MPEG4ProfileAdvancedRealTime, OMX_VIDEO_MPEG4Level3}, 630a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0x94, OMX_VIDEO_MPEG4ProfileAdvancedRealTime, OMX_VIDEO_MPEG4Level4}, 640a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0xa1, OMX_VIDEO_MPEG4ProfileCoreScalable, OMX_VIDEO_MPEG4Level1}, 650a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0xa2, OMX_VIDEO_MPEG4ProfileCoreScalable, OMX_VIDEO_MPEG4Level2}, 660a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0xa3, OMX_VIDEO_MPEG4ProfileCoreScalable, OMX_VIDEO_MPEG4Level3}, 670a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0xb1, OMX_VIDEO_MPEG4ProfileAdvancedCoding, OMX_VIDEO_MPEG4Level1}, 680a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0xb2, OMX_VIDEO_MPEG4ProfileAdvancedCoding, OMX_VIDEO_MPEG4Level2}, 690a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0xb3, OMX_VIDEO_MPEG4ProfileAdvancedCoding, OMX_VIDEO_MPEG4Level3}, 700a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0xb4, OMX_VIDEO_MPEG4ProfileAdvancedCoding, OMX_VIDEO_MPEG4Level4}, 710a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0xc1, OMX_VIDEO_MPEG4ProfileAdvancedCore, OMX_VIDEO_MPEG4Level1}, 720a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0xc2, OMX_VIDEO_MPEG4ProfileAdvancedCore, OMX_VIDEO_MPEG4Level2}, 730a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0xd1, OMX_VIDEO_MPEG4ProfileAdvancedScalable, OMX_VIDEO_MPEG4Level1}, 740a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0xd2, OMX_VIDEO_MPEG4ProfileAdvancedScalable, OMX_VIDEO_MPEG4Level2}, 750a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0xd3, OMX_VIDEO_MPEG4ProfileAdvancedScalable, OMX_VIDEO_MPEG4Level3}, 760a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0xf0, OMX_VIDEO_MPEG4ProfileAdvancedSimple, OMX_VIDEO_MPEG4Level0}, 770a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0xf1, OMX_VIDEO_MPEG4ProfileAdvancedSimple, OMX_VIDEO_MPEG4Level1}, 780a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0xf2, OMX_VIDEO_MPEG4ProfileAdvancedSimple, OMX_VIDEO_MPEG4Level2}, 790a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0xf3, OMX_VIDEO_MPEG4ProfileAdvancedSimple, OMX_VIDEO_MPEG4Level3}, 800a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0xf4, OMX_VIDEO_MPEG4ProfileAdvancedSimple, OMX_VIDEO_MPEG4Level4}, 810a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury {0xf5, OMX_VIDEO_MPEG4ProfileAdvancedSimple, OMX_VIDEO_MPEG4Level5} 820a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury}; 830a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury 847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_UInt32 M4VD_EXTERNAL_GetBitsFromMemory(M4VS_Bitstream_ctxt* parsingCtxt, 857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 nb_bits) 867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return(M4VD_Tools_GetBitsFromMemory(parsingCtxt,nb_bits)); 887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4VD_EXTERNAL_WriteBitsToMemory(M4OSA_UInt32 bitsToWrite, 917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_MemAddr32 dest_bits, 927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 offset, M4OSA_UInt8 nb_bits) 937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return (M4VD_Tools_WriteBitsToMemory( bitsToWrite,dest_bits, 957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi offset, nb_bits)); 967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4DECODER_EXTERNAL_ParseVideoDSI(M4OSA_UInt8* pVol, M4OSA_Int32 aVolSize, 997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4DECODER_MPEG4_DecoderConfigInfo* pDci, 1007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4DECODER_VideoSize* pVideoSize) 1017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{ 1027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4VS_Bitstream_ctxt parsingCtxt; 1037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 code, j; 1047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_MemAddr8 start; 1057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 i; 1067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt32 time_incr_length; 1077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 vol_verid=0, b_hierarchy_type; 1087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Parsing variables */ 1107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 video_object_layer_shape = 0; 1117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 sprite_enable = 0; 1127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 reduced_resolution_vop_enable = 0; 1137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 scalability = 0; 1147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 enhancement_type = 0; 1157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 complexity_estimation_disable = 0; 1167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 interlaced = 0; 1177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 sprite_warping_points = 0; 1187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 sprite_brightness_change = 0; 1197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi M4OSA_UInt8 quant_precision = 0; 1207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Fill the structure with default parameters */ 1227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pVideoSize->m_uiWidth = 0; 1237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pVideoSize->m_uiHeight = 0; 1247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pDci->uiTimeScale = 0; 1267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pDci->uiProfile = 0; 1277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pDci->uiUseOfResynchMarker = 0; 1287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pDci->bDataPartition = M4OSA_FALSE; 1297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pDci->bUseOfRVLC = M4OSA_FALSE; 1307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Reset the bitstream context */ 1327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi parsingCtxt.stream_byte = 0; 1337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi parsingCtxt.stream_index = 8; 1347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi parsingCtxt.in = (M4OSA_Int8 *)pVol; 1357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi start = (M4OSA_Int8 *)pVol; 1377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Start parsing */ 1397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi while (parsingCtxt.in - start < aVolSize) 1407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 8); 1427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (code == 0) 1437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 8); 1457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (code == 0) 1467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 8); 1487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (code == 1) 1497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* start code found */ 1517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 8); 1527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* ----- 0x20..0x2F : video_object_layer_start_code ----- */ 1547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if ((code > 0x1F) && (code < 0x30)) 1567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1);/* random accessible vol */ 1597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 8);/* video object type indication */ 1617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1);/* is object layer identifier */ 1637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (code == 1) 1647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4); /* video object layer verid */ 1677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi vol_verid = (M4OSA_UInt8)code; 1687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3); /* video object layer priority */ 1707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4);/* aspect ratio */ 1737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (code == 15) 1747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 16); /* par_width and par_height (8+8) */ 1767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1);/* vol control parameters */ 1787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (code == 1) 1797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3);/* chroma format + low delay (3+1) */ 1827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1);/* vbv parameters */ 1847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (code == 1) 1857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 1867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 32);/* first and latter half bitrate + 2 marker bits 1887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi (15 + 1 + 15 + 1) */ 1897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 31);/* first and latter half vbv buffer size + first 1917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi half vbv occupancy + marker bits (15+1+3+11+1)*/ 1927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 16);/* first half vbv occupancy + marker bits (15+1)*/ 1947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 1967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2); /* video object layer shape */ 1987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Need to save it for vop parsing */ 1997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi video_object_layer_shape = (M4OSA_UInt8)code; 2007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (code != 0) return 0; /* only rectangular case supported */ 2027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 2047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1); /* Marker bit */ 2057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 2067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 16); /* VOP time increment resolution */ 2077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pDci->uiTimeScale = code; 2087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Computes time increment length */ 2107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi j = code - 1; 2117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi for (i = 0; (i < 32) && (j != 0); j >>=1) 2127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi i++; 2147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi time_incr_length = (i == 0) ? 1 : i; 2167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 2187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1);/* Marker bit */ 2197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 2207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1);/* Fixed VOP rate */ 2217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (code == 1) 2227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 2247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi time_incr_length);/* Fixed VOP time increment */ 2257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(video_object_layer_shape != 1) /* 1 = Binary */ 2287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(video_object_layer_shape == 0) /* 0 = rectangular */ 2307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 2327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1);/* Marker bit */ 2337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 2347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 13);/* Width */ 2357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pVideoSize->m_uiWidth = code; 2367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 2377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1);/* Marker bit */ 2387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 2397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 13);/* Height */ 2407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pVideoSize->m_uiHeight = code; 2417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 2427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1);/* Marker bit */ 2437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 2477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1);/* interlaced */ 2487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi interlaced = (M4OSA_UInt8)code; 2497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 2507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1);/* OBMC disable */ 2517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(vol_verid == 1) 2537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 2557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1);/* sprite enable */ 2567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sprite_enable = (M4OSA_UInt8)code; 2577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 2597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 2617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2);/* sprite enable */ 2627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sprite_enable = (M4OSA_UInt8)code; 2637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if ((sprite_enable == 1) || (sprite_enable == 2)) 2657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Sprite static = 1 and Sprite GMC = 2 */ 2667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (sprite_enable != 2) 2687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 2717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 13);/* sprite width */ 2727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 2737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1);/* Marker bit */ 2747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 2757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 13);/* sprite height */ 2767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 2777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1);/* Marker bit */ 2787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 2797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 13);/* sprite l coordinate */ 2807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 2817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1);/* Marker bit */ 2827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 2837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 13);/* sprite top coordinate */ 2847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 2857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1);/* Marker bit */ 2867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 2877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 2897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 6);/* sprite warping points */ 2907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sprite_warping_points = (M4OSA_UInt8)code; 2917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 2927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 2);/* sprite warping accuracy */ 2937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 2947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1);/* sprite brightness change */ 2957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi sprite_brightness_change = (M4OSA_UInt8)code; 2967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (sprite_enable != 2) 2977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 2987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 2997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1);/* low latency sprite enable */ 3007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if ((vol_verid != 1) && (video_object_layer_shape != 0)) 3037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 3057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1);/* sadct disable */ 3067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1); /* not 8 bits */ 3097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (code) 3107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 3127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4);/* quant precision */ 3137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi quant_precision = (M4OSA_UInt8)code; 3147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 3157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4);/* bits per pixel */ 3167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* greyscale not supported */ 3197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if(video_object_layer_shape == 3) 3207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 3227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3); /* nogray quant update + composition method + 3237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi linear composition */ 3247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 3277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1);/* quant type */ 3287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (code) 3297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 3317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1);/* load intra quant mat */ 3327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (code) 3337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 8);/* */ 3357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi i = 1; 3367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi while (i < 64) 3377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 8); 3397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (code == 0) 3407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 3417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi i++; 3427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 3467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1);/* load non intra quant mat */ 3477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (code) 3487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 8);/* */ 3507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi i = 1; 3517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi while (i < 64) 3527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 8); 3547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (code == 0) 3557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 3567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi i++; 3577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (vol_verid != 1) 3627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 3647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1);/* quarter sample */ 3657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 3687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1);/* complexity estimation disable */ 3697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi complexity_estimation_disable = (M4OSA_UInt8)code; 3707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (!code) 3717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi //return M4ERR_NOT_IMPLEMENTED; 3737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 3767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1);/* resync marker disable */ 3777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pDci->uiUseOfResynchMarker = (code) ? 0 : 1; 3787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 3807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 1);/* data partitionned */ 3817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pDci->bDataPartition = (code) ? M4OSA_TRUE : M4OSA_FALSE; 3827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (code) 3837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* reversible VLC */ 3857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1); 3867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pDci->bUseOfRVLC = (code) ? M4OSA_TRUE : M4OSA_FALSE; 3877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 3897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (vol_verid != 1) 3907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1);/* newpred */ 3927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (code) 3937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 3947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi //return M4ERR_PARAMETER; 3957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 3967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* reduced resolution vop enable */ 3977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1); 3987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi reduced_resolution_vop_enable = (M4OSA_UInt8)code; 3997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1);/* scalability */ 4027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi scalability = (M4OSA_UInt8)code; 4037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (code) 4047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* hierarchy type */ 4067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1); 4077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi b_hierarchy_type = (M4OSA_UInt8)code; 4087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* ref layer id */ 4097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 4); 4107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* ref sampling direct */ 4117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1); 4127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* hor sampling factor N */ 4137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 5); 4147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* hor sampling factor M */ 4157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 5); 4167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* vert sampling factor N */ 4177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 5); 4187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* vert sampling factor M */ 4197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 5); 4207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* enhancement type */ 4217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1); 4227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi enhancement_type = (M4OSA_UInt8)code; 4237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if ((!b_hierarchy_type) && (video_object_layer_shape == 1)) 4247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* use ref shape */ 4267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1); 4277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* use ref texture */ 4287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1); 4297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* shape hor sampling factor N */ 4307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 5); 4317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* shape hor sampling factor M */ 4327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 5); 4337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* shape vert sampling factor N */ 4347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 5); 4357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* shape vert sampling factor M */ 4367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 5); 4377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 4407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* ----- 0xB0 : visual_object_sequence_start_code ----- */ 4437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else if(code == 0xB0) 4457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* profile_and_level_indication */ 4477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 8); 4487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi pDci->uiProfile = (M4OSA_UInt8)code; 4497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* ----- 0xB5 : visual_object_start_code ----- */ 4527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else if(code == 0xB5) 4547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* is object layer identifier */ 4567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1); 4577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if (code == 1) 4587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* visual object verid */ 4607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 4); 4617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi vol_verid = (M4OSA_UInt8)code; 4627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* visual object layer priority */ 4637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 3); 4647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 4667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* Realign on byte */ 4687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 7); 4697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi vol_verid = 1; 4707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* ----- end ----- */ 4747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 4767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi if ((code >> 2) == 0x20) 4787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi { 4797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi /* H263 ...-> wrong*/ 4807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 4817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 4867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi return M4NO_ERROR; 4887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 4897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 4900a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh ChowduryM4OSA_ERR getAVCProfileAndLevel(M4OSA_UInt8* pDSI, M4OSA_Int32 DSISize, 4910a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury M4OSA_Int32 *pProfile, M4OSA_Int32 *pLevel) { 4920a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury 493f21b91e7e6ba0de65a64b556224e7985113eeb67Danny Fernandes M4OSA_UInt16 index = 28; /* the 29th byte is SPS start */ 494f21b91e7e6ba0de65a64b556224e7985113eeb67Danny Fernandes M4OSA_Bool constraintSet3; 495f21b91e7e6ba0de65a64b556224e7985113eeb67Danny Fernandes 4960a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury if ((pProfile == M4OSA_NULL) || (pLevel == M4OSA_NULL)) { 497f21b91e7e6ba0de65a64b556224e7985113eeb67Danny Fernandes return M4ERR_PARAMETER; 498f21b91e7e6ba0de65a64b556224e7985113eeb67Danny Fernandes } 4997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5000a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury if ((DSISize <= index) || (pDSI == M4OSA_NULL)) { 501f8bd29c66308c820d579b3efb0942a53a277e2c5Steve Block ALOGE("getAVCProfileAndLevel: DSI is invalid"); 5020a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pProfile = M4VIDEOEDITING_VIDEO_UNKNOWN_PROFILE; 5030a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pLevel = M4VIDEOEDITING_VIDEO_UNKNOWN_LEVEL; 5040a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury return M4ERR_PARAMETER; 5057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 506f21b91e7e6ba0de65a64b556224e7985113eeb67Danny Fernandes 5070a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury constraintSet3 = (pDSI[index+2] & 0x10); 5082703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("getAVCProfileAndLevel profile_byte %d, level_byte: %d constrain3flag", 5090a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury pDSI[index+1], pDSI[index+3], constraintSet3); 5100a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury 5110a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury switch (pDSI[index+1]) { 5120a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury case 66: 5130a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pProfile = OMX_VIDEO_AVCProfileBaseline; 5140a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury break; 5150a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury case 77: 5160a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pProfile = OMX_VIDEO_AVCProfileMain; 5170a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury break; 5180a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury case 88: 5190a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pProfile = OMX_VIDEO_AVCProfileExtended; 5200a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury break; 5210a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury case 100: 5220a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pProfile = OMX_VIDEO_AVCProfileHigh; 5230a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury break; 5240a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury case 110: 5250a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pProfile = OMX_VIDEO_AVCProfileHigh10; 5260a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury break; 5270a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury case 122: 5280a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pProfile = OMX_VIDEO_AVCProfileHigh422; 5290a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury break; 5300a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury case 244: 5310a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pProfile = OMX_VIDEO_AVCProfileHigh444; 5320a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury break; 5330a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury default: 5340a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pProfile = M4VIDEOEDITING_VIDEO_UNKNOWN_PROFILE; 5357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5360a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury 5370a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury switch (pDSI[index+3]) { 5387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case 10: 5390a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pLevel = OMX_VIDEO_AVCLevel1; 5407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 5417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case 11: 5420a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury if (constraintSet3) 5430a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pLevel = OMX_VIDEO_AVCLevel1b; 5447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi else 5450a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pLevel = OMX_VIDEO_AVCLevel11; 5467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 5477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case 12: 5480a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pLevel = OMX_VIDEO_AVCLevel12; 5497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 5507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case 13: 5510a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pLevel = OMX_VIDEO_AVCLevel13; 5527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 5537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case 20: 5540a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pLevel = OMX_VIDEO_AVCLevel2; 5557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 5567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case 21: 5570a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pLevel = OMX_VIDEO_AVCLevel21; 5587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 5597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case 22: 5600a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pLevel = OMX_VIDEO_AVCLevel22; 5617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 5627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case 30: 5630a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pLevel = OMX_VIDEO_AVCLevel3; 5647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 5657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case 31: 5660a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pLevel = OMX_VIDEO_AVCLevel31; 5677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 5687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case 32: 5690a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pLevel = OMX_VIDEO_AVCLevel32; 5707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 5717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case 40: 5720a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pLevel = OMX_VIDEO_AVCLevel4; 5737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 5747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case 41: 5750a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pLevel = OMX_VIDEO_AVCLevel41; 5767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 5777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case 42: 5780a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pLevel = OMX_VIDEO_AVCLevel42; 5797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 5807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case 50: 5810a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pLevel = OMX_VIDEO_AVCLevel5; 5827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 5837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi case 51: 5840a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pLevel = OMX_VIDEO_AVCLevel51; 5857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi break; 5867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi default: 5870a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pLevel = M4VIDEOEDITING_VIDEO_UNKNOWN_LEVEL; 5887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi } 5892703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("getAVCProfileAndLevel profile %ld level %ld", *pProfile, *pLevel); 5900a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury return M4NO_ERROR; 5917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} 5927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi 5930a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh ChowduryM4OSA_ERR getH263ProfileAndLevel(M4OSA_UInt8* pDSI, M4OSA_Int32 DSISize, 5940a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury M4OSA_Int32 *pProfile, M4OSA_Int32 *pLevel) { 5950a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury 5960a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury M4OSA_UInt16 index = 7; /* the 5th and 6th bytes contain the level and profile */ 5970a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury 5980a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury if ((pProfile == M4OSA_NULL) || (pLevel == M4OSA_NULL)) { 599f8bd29c66308c820d579b3efb0942a53a277e2c5Steve Block ALOGE("getH263ProfileAndLevel invalid pointer for pProfile"); 6000a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury return M4ERR_PARAMETER; 6010a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury } 6020a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury 6030a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury if ((DSISize < index) || (pDSI == M4OSA_NULL)) { 604f8bd29c66308c820d579b3efb0942a53a277e2c5Steve Block ALOGE("getH263ProfileAndLevel: DSI is invalid"); 6050a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pProfile = M4VIDEOEDITING_VIDEO_UNKNOWN_PROFILE; 6060a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pLevel = M4VIDEOEDITING_VIDEO_UNKNOWN_LEVEL; 6070a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury return M4ERR_PARAMETER; 6080a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury } 6092703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("getH263ProfileAndLevel profile_byte %d, level_byte", 6100a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury pDSI[6], pDSI[5]); 6110a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury /* get the H263 level */ 6120a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury switch (pDSI[5]) { 6130a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury case 10: 6140a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pLevel = OMX_VIDEO_H263Level10; 6150a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury break; 6160a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury case 20: 6170a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pLevel = OMX_VIDEO_H263Level20; 6180a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury break; 6190a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury case 30: 6200a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pLevel = OMX_VIDEO_H263Level30; 6210a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury break; 6220a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury case 40: 6230a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pLevel = OMX_VIDEO_H263Level40; 6240a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury break; 6250a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury case 45: 6260a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pLevel = OMX_VIDEO_H263Level45; 6270a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury break; 6280a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury case 50: 6290a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pLevel = OMX_VIDEO_H263Level50; 6300a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury break; 6310a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury case 60: 6320a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pLevel = OMX_VIDEO_H263Level60; 6330a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury break; 6340a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury case 70: 6350a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pLevel = OMX_VIDEO_H263Level70; 6360a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury break; 6370a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury default: 6380a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pLevel = M4VIDEOEDITING_VIDEO_UNKNOWN_LEVEL; 6390a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury } 6400a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury 6410a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury /* get H263 profile */ 6420a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury switch (pDSI[6]) { 6430a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury case 0: 6440a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pProfile = OMX_VIDEO_H263ProfileBaseline; 6450a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury break; 6460a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury case 1: 6470a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pProfile = OMX_VIDEO_H263ProfileH320Coding; 6480a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury break; 6490a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury case 2: 6500a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pProfile = OMX_VIDEO_H263ProfileBackwardCompatible; 6510a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury break; 6520a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury case 3: 6530a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pProfile = OMX_VIDEO_H263ProfileISWV2; 6540a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury break; 6550a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury case 4: 6560a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pProfile = OMX_VIDEO_H263ProfileISWV3; 6570a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury break; 6580a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury case 5: 6590a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pProfile = OMX_VIDEO_H263ProfileHighCompression; 6600a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury break; 6610a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury case 6: 6620a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pProfile = OMX_VIDEO_H263ProfileInternet; 6630a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury break; 6640a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury case 7: 6650a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pProfile = OMX_VIDEO_H263ProfileInterlace; 6660a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury break; 6670a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury case 8: 6680a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pProfile = OMX_VIDEO_H263ProfileHighLatency; 6690a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury break; 6700a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury default: 6710a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pProfile = M4VIDEOEDITING_VIDEO_UNKNOWN_PROFILE; 6720a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury } 6732703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("getH263ProfileAndLevel profile %ld level %ld", *pProfile, *pLevel); 6740a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury return M4NO_ERROR; 6750a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury} 6760a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury 6770a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh ChowduryM4OSA_ERR getMPEG4ProfileAndLevel(M4OSA_UInt8 profileAndLevel, 6780a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury M4OSA_Int32 *pProfile, M4OSA_Int32 *pLevel) { 6790a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury 6800a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury M4OSA_UInt32 i = 0; 6810a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury M4OSA_UInt32 length = 0; 6820a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury if ((pProfile == M4OSA_NULL) || (pLevel == M4OSA_NULL)) { 6830a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury return M4ERR_PARAMETER; 6840a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury } 6852703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("getMPEG4ProfileAndLevel profileAndLevel %d", profileAndLevel); 6860a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury length = sizeof(mpeg4ProfileLevelTable) /sizeof(mpeg4ProfileLevelTable[0]); 6870a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pProfile = M4VIDEOEDITING_VIDEO_UNKNOWN_PROFILE; 6880a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pLevel = M4VIDEOEDITING_VIDEO_UNKNOWN_LEVEL; 6890a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury for (i = 0; i < length; i++) { 6900a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury if (mpeg4ProfileLevelTable[i].code == profileAndLevel) { 6910a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pProfile = mpeg4ProfileLevelTable[i].profile; 6920a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury *pLevel = mpeg4ProfileLevelTable[i].level; 6930a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury break; 6940a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury } 6950a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury } 6962703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block ALOGV("getMPEG4ProfileAndLevel profile %ld level %ld", *pProfile, *pLevel); 6970a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury return M4NO_ERROR; 6980a25bd5bacf5408ca205b15e53cfb6dc2fc1d171Rajneesh Chowdury} 699