M4VD_EXTERNAL_BitstreamParser.c revision f8bd29c66308c820d579b3efb0942a53a277e2c5
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