diff options
Diffstat (limited to 'libvideoeditor/vss/src/M4VD_EXTERNAL_BitstreamParser.c')
-rwxr-xr-x | libvideoeditor/vss/src/M4VD_EXTERNAL_BitstreamParser.c | 703 |
1 files changed, 0 insertions, 703 deletions
diff --git a/libvideoeditor/vss/src/M4VD_EXTERNAL_BitstreamParser.c b/libvideoeditor/vss/src/M4VD_EXTERNAL_BitstreamParser.c deleted file mode 100755 index fb83952..0000000 --- a/libvideoeditor/vss/src/M4VD_EXTERNAL_BitstreamParser.c +++ /dev/null @@ -1,703 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include <inttypes.h> - -#include "utils/Log.h" -#include "M4OSA_Types.h" -#include "M4OSA_Debug.h" - -#include "M4VD_EXTERNAL_Interface.h" -#include "M4VD_Tools.h" -#include "M4_VideoEditingCommon.h" -#include "OMX_Video.h" -/** - ************************************************************************ - * @file M4VD_EXTERNAL_BitstreamParser.c - * @brief - * @note This file implements external Bitstream parser - ************************************************************************ - */ - -typedef struct { - M4OSA_UInt8 code; - M4OSA_Int32 profile; - M4OSA_Int32 level; -} codeProfileLevel; - -static codeProfileLevel mpeg4ProfileLevelTable[] = { - {0x01, OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level1}, - {0x02, OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level2}, - {0x03, OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level3}, - {0x04, OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level4a}, - {0x05, OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level5}, - {0x08, OMX_VIDEO_MPEG4ProfileSimple, OMX_VIDEO_MPEG4Level0}, - {0x11, OMX_VIDEO_MPEG4ProfileSimpleScalable,OMX_VIDEO_MPEG4Level1}, - {0x12, OMX_VIDEO_MPEG4ProfileSimpleScalable,OMX_VIDEO_MPEG4Level2}, - {0x21, OMX_VIDEO_MPEG4ProfileCore, OMX_VIDEO_MPEG4Level1}, - {0x22, OMX_VIDEO_MPEG4ProfileCore, OMX_VIDEO_MPEG4Level2}, - {0x32, OMX_VIDEO_MPEG4ProfileMain, OMX_VIDEO_MPEG4Level2}, - {0x33, OMX_VIDEO_MPEG4ProfileMain, OMX_VIDEO_MPEG4Level3}, - {0x34, OMX_VIDEO_MPEG4ProfileMain, OMX_VIDEO_MPEG4Level4}, - {0x42, OMX_VIDEO_MPEG4ProfileNbit, OMX_VIDEO_MPEG4Level2}, - {0x51, OMX_VIDEO_MPEG4ProfileScalableTexture, OMX_VIDEO_MPEG4Level1}, - {0x61, OMX_VIDEO_MPEG4ProfileSimpleFace, OMX_VIDEO_MPEG4Level1}, - {0x62, OMX_VIDEO_MPEG4ProfileSimpleFace, OMX_VIDEO_MPEG4Level2}, - {0x71, OMX_VIDEO_MPEG4ProfileBasicAnimated, OMX_VIDEO_MPEG4Level1}, - {0x72, OMX_VIDEO_MPEG4ProfileBasicAnimated, OMX_VIDEO_MPEG4Level2}, - {0x81, OMX_VIDEO_MPEG4ProfileHybrid, OMX_VIDEO_MPEG4Level1}, - {0x82, OMX_VIDEO_MPEG4ProfileHybrid, OMX_VIDEO_MPEG4Level2}, - {0x91, OMX_VIDEO_MPEG4ProfileAdvancedRealTime, OMX_VIDEO_MPEG4Level1}, - {0x92, OMX_VIDEO_MPEG4ProfileAdvancedRealTime, OMX_VIDEO_MPEG4Level2}, - {0x93, OMX_VIDEO_MPEG4ProfileAdvancedRealTime, OMX_VIDEO_MPEG4Level3}, - {0x94, OMX_VIDEO_MPEG4ProfileAdvancedRealTime, OMX_VIDEO_MPEG4Level4}, - {0xa1, OMX_VIDEO_MPEG4ProfileCoreScalable, OMX_VIDEO_MPEG4Level1}, - {0xa2, OMX_VIDEO_MPEG4ProfileCoreScalable, OMX_VIDEO_MPEG4Level2}, - {0xa3, OMX_VIDEO_MPEG4ProfileCoreScalable, OMX_VIDEO_MPEG4Level3}, - {0xb1, OMX_VIDEO_MPEG4ProfileAdvancedCoding, OMX_VIDEO_MPEG4Level1}, - {0xb2, OMX_VIDEO_MPEG4ProfileAdvancedCoding, OMX_VIDEO_MPEG4Level2}, - {0xb3, OMX_VIDEO_MPEG4ProfileAdvancedCoding, OMX_VIDEO_MPEG4Level3}, - {0xb4, OMX_VIDEO_MPEG4ProfileAdvancedCoding, OMX_VIDEO_MPEG4Level4}, - {0xc1, OMX_VIDEO_MPEG4ProfileAdvancedCore, OMX_VIDEO_MPEG4Level1}, - {0xc2, OMX_VIDEO_MPEG4ProfileAdvancedCore, OMX_VIDEO_MPEG4Level2}, - {0xd1, OMX_VIDEO_MPEG4ProfileAdvancedScalable, OMX_VIDEO_MPEG4Level1}, - {0xd2, OMX_VIDEO_MPEG4ProfileAdvancedScalable, OMX_VIDEO_MPEG4Level2}, - {0xd3, OMX_VIDEO_MPEG4ProfileAdvancedScalable, OMX_VIDEO_MPEG4Level3}, - {0xf0, OMX_VIDEO_MPEG4ProfileAdvancedSimple, OMX_VIDEO_MPEG4Level0}, - {0xf1, OMX_VIDEO_MPEG4ProfileAdvancedSimple, OMX_VIDEO_MPEG4Level1}, - {0xf2, OMX_VIDEO_MPEG4ProfileAdvancedSimple, OMX_VIDEO_MPEG4Level2}, - {0xf3, OMX_VIDEO_MPEG4ProfileAdvancedSimple, OMX_VIDEO_MPEG4Level3}, - {0xf4, OMX_VIDEO_MPEG4ProfileAdvancedSimple, OMX_VIDEO_MPEG4Level4}, - {0xf5, OMX_VIDEO_MPEG4ProfileAdvancedSimple, OMX_VIDEO_MPEG4Level5} -}; - -M4OSA_UInt32 M4VD_EXTERNAL_GetBitsFromMemory(M4VS_Bitstream_ctxt* parsingCtxt, - M4OSA_UInt32 nb_bits) -{ - return(M4VD_Tools_GetBitsFromMemory(parsingCtxt,nb_bits)); -} - -M4OSA_ERR M4VD_EXTERNAL_WriteBitsToMemory(M4OSA_UInt32 bitsToWrite, - M4OSA_MemAddr32 dest_bits, - M4OSA_UInt8 offset, M4OSA_UInt8 nb_bits) -{ - return (M4VD_Tools_WriteBitsToMemory( bitsToWrite,dest_bits, - offset, nb_bits)); -} - -M4OSA_ERR M4DECODER_EXTERNAL_ParseVideoDSI(M4OSA_UInt8* pVol, M4OSA_Int32 aVolSize, - M4DECODER_MPEG4_DecoderConfigInfo* pDci, - M4DECODER_VideoSize* pVideoSize) -{ - M4VS_Bitstream_ctxt parsingCtxt; - M4OSA_UInt32 code, j; - M4OSA_MemAddr8 start; - M4OSA_UInt8 i; - M4OSA_UInt32 time_incr_length; - M4OSA_UInt8 vol_verid=0, b_hierarchy_type; - - /* Parsing variables */ - M4OSA_UInt8 video_object_layer_shape = 0; - M4OSA_UInt8 sprite_enable = 0; - M4OSA_UInt8 reduced_resolution_vop_enable = 0; - M4OSA_UInt8 scalability = 0; - M4OSA_UInt8 enhancement_type = 0; - M4OSA_UInt8 complexity_estimation_disable = 0; - M4OSA_UInt8 interlaced = 0; - M4OSA_UInt8 sprite_warping_points = 0; - M4OSA_UInt8 sprite_brightness_change = 0; - M4OSA_UInt8 quant_precision = 0; - - /* Fill the structure with default parameters */ - pVideoSize->m_uiWidth = 0; - pVideoSize->m_uiHeight = 0; - - pDci->uiTimeScale = 0; - pDci->uiProfile = 0; - pDci->uiUseOfResynchMarker = 0; - pDci->bDataPartition = M4OSA_FALSE; - pDci->bUseOfRVLC = M4OSA_FALSE; - - /* Reset the bitstream context */ - parsingCtxt.stream_byte = 0; - parsingCtxt.stream_index = 8; - parsingCtxt.in = (M4OSA_Int8 *)pVol; - - start = (M4OSA_Int8 *)pVol; - - /* Start parsing */ - while (parsingCtxt.in - start < aVolSize) - { - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 8); - if (code == 0) - { - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 8); - if (code == 0) - { - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 8); - if (code == 1) - { - /* start code found */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 8); - - /* ----- 0x20..0x2F : video_object_layer_start_code ----- */ - - if ((code > 0x1F) && (code < 0x30)) - { - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 1);/* random accessible vol */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 8);/* video object type indication */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 1);/* is object layer identifier */ - if (code == 1) - { - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 4); /* video object layer verid */ - vol_verid = (M4OSA_UInt8)code; - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 3); /* video object layer priority */ - } - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 4);/* aspect ratio */ - if (code == 15) - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 16); /* par_width and par_height (8+8) */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 1);/* vol control parameters */ - if (code == 1) - { - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 3);/* chroma format + low delay (3+1) */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 1);/* vbv parameters */ - if (code == 1) - { - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 32);/* first and latter half bitrate + 2 marker bits - (15 + 1 + 15 + 1) */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 31);/* first and latter half vbv buffer size + first - half vbv occupancy + marker bits (15+1+3+11+1)*/ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 16);/* first half vbv occupancy + marker bits (15+1)*/ - } - } - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 2); /* video object layer shape */ - /* Need to save it for vop parsing */ - video_object_layer_shape = (M4OSA_UInt8)code; - - if (code != 0) return 0; /* only rectangular case supported */ - - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 1); /* Marker bit */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 16); /* VOP time increment resolution */ - pDci->uiTimeScale = code; - - /* Computes time increment length */ - j = code - 1; - for (i = 0; (i < 32) && (j != 0); j >>=1) - { - i++; - } - time_incr_length = (i == 0) ? 1 : i; - - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 1);/* Marker bit */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 1);/* Fixed VOP rate */ - if (code == 1) - { - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - time_incr_length);/* Fixed VOP time increment */ - } - - if(video_object_layer_shape != 1) /* 1 = Binary */ - { - if(video_object_layer_shape == 0) /* 0 = rectangular */ - { - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 1);/* Marker bit */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 13);/* Width */ - pVideoSize->m_uiWidth = code; - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 1);/* Marker bit */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 13);/* Height */ - pVideoSize->m_uiHeight = code; - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 1);/* Marker bit */ - } - } - - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 1);/* interlaced */ - interlaced = (M4OSA_UInt8)code; - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 1);/* OBMC disable */ - - if(vol_verid == 1) - { - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 1);/* sprite enable */ - sprite_enable = (M4OSA_UInt8)code; - } - else - { - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 2);/* sprite enable */ - sprite_enable = (M4OSA_UInt8)code; - } - if ((sprite_enable == 1) || (sprite_enable == 2)) - /* Sprite static = 1 and Sprite GMC = 2 */ - { - if (sprite_enable != 2) - { - - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 13);/* sprite width */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 1);/* Marker bit */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 13);/* sprite height */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 1);/* Marker bit */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 13);/* sprite l coordinate */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 1);/* Marker bit */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 13);/* sprite top coordinate */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 1);/* Marker bit */ - } - - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 6);/* sprite warping points */ - sprite_warping_points = (M4OSA_UInt8)code; - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 2);/* sprite warping accuracy */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 1);/* sprite brightness change */ - sprite_brightness_change = (M4OSA_UInt8)code; - if (sprite_enable != 2) - { - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 1);/* low latency sprite enable */ - } - } - if ((vol_verid != 1) && (video_object_layer_shape != 0)) - { - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 1);/* sadct disable */ - } - - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1); /* not 8 bits */ - if (code) - { - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 4);/* quant precision */ - quant_precision = (M4OSA_UInt8)code; - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 4);/* bits per pixel */ - } - - /* greyscale not supported */ - if(video_object_layer_shape == 3) - { - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 3); /* nogray quant update + composition method + - linear composition */ - } - - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 1);/* quant type */ - if (code) - { - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 1);/* load intra quant mat */ - if (code) - { - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 8);/* */ - i = 1; - while (i < 64) - { - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 8); - if (code == 0) - break; - i++; - } - } - - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 1);/* load non intra quant mat */ - if (code) - { - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 8);/* */ - i = 1; - while (i < 64) - { - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 8); - if (code == 0) - break; - i++; - } - } - } - - if (vol_verid != 1) - { - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 1);/* quarter sample */ - } - - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 1);/* complexity estimation disable */ - complexity_estimation_disable = (M4OSA_UInt8)code; - if (!code) - { - //return M4ERR_NOT_IMPLEMENTED; - } - - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 1);/* resync marker disable */ - pDci->uiUseOfResynchMarker = (code) ? 0 : 1; - - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, - 1);/* data partitionned */ - pDci->bDataPartition = (code) ? M4OSA_TRUE : M4OSA_FALSE; - if (code) - { - /* reversible VLC */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1); - pDci->bUseOfRVLC = (code) ? M4OSA_TRUE : M4OSA_FALSE; - } - - if (vol_verid != 1) - { - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1);/* newpred */ - if (code) - { - //return M4ERR_PARAMETER; - } - /* reduced resolution vop enable */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1); - reduced_resolution_vop_enable = (M4OSA_UInt8)code; - } - - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1);/* scalability */ - scalability = (M4OSA_UInt8)code; - if (code) - { - /* hierarchy type */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1); - b_hierarchy_type = (M4OSA_UInt8)code; - /* ref layer id */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 4); - /* ref sampling direct */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1); - /* hor sampling factor N */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 5); - /* hor sampling factor M */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 5); - /* vert sampling factor N */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 5); - /* vert sampling factor M */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 5); - /* enhancement type */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1); - enhancement_type = (M4OSA_UInt8)code; - if ((!b_hierarchy_type) && (video_object_layer_shape == 1)) - { - /* use ref shape */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1); - /* use ref texture */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1); - /* shape hor sampling factor N */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 5); - /* shape hor sampling factor M */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 5); - /* shape vert sampling factor N */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 5); - /* shape vert sampling factor M */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 5); - } - } - break; - } - - /* ----- 0xB0 : visual_object_sequence_start_code ----- */ - - else if(code == 0xB0) - { - /* profile_and_level_indication */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 8); - pDci->uiProfile = (M4OSA_UInt8)code; - } - - /* ----- 0xB5 : visual_object_start_code ----- */ - - else if(code == 0xB5) - { - /* is object layer identifier */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 1); - if (code == 1) - { - /* visual object verid */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 4); - vol_verid = (M4OSA_UInt8)code; - /* visual object layer priority */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 3); - } - else - { - /* Realign on byte */ - code = M4VD_EXTERNAL_GetBitsFromMemory(&parsingCtxt, 7); - vol_verid = 1; - } - } - - /* ----- end ----- */ - } - else - { - if ((code >> 2) == 0x20) - { - /* H263 ...-> wrong*/ - break; - } - } - } - } - } - - return M4NO_ERROR; -} - -M4OSA_ERR getAVCProfileAndLevel(M4OSA_UInt8* pDSI, M4OSA_Int32 DSISize, - M4OSA_Int32 *pProfile, M4OSA_Int32 *pLevel) { - - M4OSA_UInt16 index = 28; /* the 29th byte is SPS start */ - M4OSA_Bool constraintSet3; - - if ((pProfile == M4OSA_NULL) || (pLevel == M4OSA_NULL)) { - return M4ERR_PARAMETER; - } - - if ((DSISize <= index) || (pDSI == M4OSA_NULL)) { - ALOGE("getAVCProfileAndLevel: DSI is invalid"); - *pProfile = M4VIDEOEDITING_VIDEO_UNKNOWN_PROFILE; - *pLevel = M4VIDEOEDITING_VIDEO_UNKNOWN_LEVEL; - return M4ERR_PARAMETER; - } - - constraintSet3 = (pDSI[index+2] & 0x10); - ALOGV("getAVCProfileAndLevel profile_byte %d, level_byte: %d constrain3flag: %d", - pDSI[index+1], pDSI[index+3], constraintSet3); - - switch (pDSI[index+1]) { - case 66: - *pProfile = OMX_VIDEO_AVCProfileBaseline; - break; - case 77: - *pProfile = OMX_VIDEO_AVCProfileMain; - break; - case 88: - *pProfile = OMX_VIDEO_AVCProfileExtended; - break; - case 100: - *pProfile = OMX_VIDEO_AVCProfileHigh; - break; - case 110: - *pProfile = OMX_VIDEO_AVCProfileHigh10; - break; - case 122: - *pProfile = OMX_VIDEO_AVCProfileHigh422; - break; - case 244: - *pProfile = OMX_VIDEO_AVCProfileHigh444; - break; - default: - *pProfile = M4VIDEOEDITING_VIDEO_UNKNOWN_PROFILE; - } - - switch (pDSI[index+3]) { - case 10: - *pLevel = OMX_VIDEO_AVCLevel1; - break; - case 11: - if (constraintSet3) - *pLevel = OMX_VIDEO_AVCLevel1b; - else - *pLevel = OMX_VIDEO_AVCLevel11; - break; - case 12: - *pLevel = OMX_VIDEO_AVCLevel12; - break; - case 13: - *pLevel = OMX_VIDEO_AVCLevel13; - break; - case 20: - *pLevel = OMX_VIDEO_AVCLevel2; - break; - case 21: - *pLevel = OMX_VIDEO_AVCLevel21; - break; - case 22: - *pLevel = OMX_VIDEO_AVCLevel22; - break; - case 30: - *pLevel = OMX_VIDEO_AVCLevel3; - break; - case 31: - *pLevel = OMX_VIDEO_AVCLevel31; - break; - case 32: - *pLevel = OMX_VIDEO_AVCLevel32; - break; - case 40: - *pLevel = OMX_VIDEO_AVCLevel4; - break; - case 41: - *pLevel = OMX_VIDEO_AVCLevel41; - break; - case 42: - *pLevel = OMX_VIDEO_AVCLevel42; - break; - case 50: - *pLevel = OMX_VIDEO_AVCLevel5; - break; - case 51: - *pLevel = OMX_VIDEO_AVCLevel51; - break; - default: - *pLevel = M4VIDEOEDITING_VIDEO_UNKNOWN_LEVEL; - } - ALOGV("getAVCProfileAndLevel profile %" PRId32 " level %" PRId32, - *pProfile, *pLevel); - return M4NO_ERROR; -} - -M4OSA_ERR getH263ProfileAndLevel(M4OSA_UInt8* pDSI, M4OSA_Int32 DSISize, - M4OSA_Int32 *pProfile, M4OSA_Int32 *pLevel) { - - M4OSA_UInt16 index = 7; /* the 5th and 6th bytes contain the level and profile */ - - if ((pProfile == M4OSA_NULL) || (pLevel == M4OSA_NULL)) { - ALOGE("getH263ProfileAndLevel invalid pointer for pProfile"); - return M4ERR_PARAMETER; - } - - if ((DSISize < index) || (pDSI == M4OSA_NULL)) { - ALOGE("getH263ProfileAndLevel: DSI is invalid"); - *pProfile = M4VIDEOEDITING_VIDEO_UNKNOWN_PROFILE; - *pLevel = M4VIDEOEDITING_VIDEO_UNKNOWN_LEVEL; - return M4ERR_PARAMETER; - } - ALOGV("getH263ProfileAndLevel profile_byte %d, level_byte %d", - pDSI[6], pDSI[5]); - /* get the H263 level */ - switch (pDSI[5]) { - case 10: - *pLevel = OMX_VIDEO_H263Level10; - break; - case 20: - *pLevel = OMX_VIDEO_H263Level20; - break; - case 30: - *pLevel = OMX_VIDEO_H263Level30; - break; - case 40: - *pLevel = OMX_VIDEO_H263Level40; - break; - case 45: - *pLevel = OMX_VIDEO_H263Level45; - break; - case 50: - *pLevel = OMX_VIDEO_H263Level50; - break; - case 60: - *pLevel = OMX_VIDEO_H263Level60; - break; - case 70: - *pLevel = OMX_VIDEO_H263Level70; - break; - default: - *pLevel = M4VIDEOEDITING_VIDEO_UNKNOWN_LEVEL; - } - - /* get H263 profile */ - switch (pDSI[6]) { - case 0: - *pProfile = OMX_VIDEO_H263ProfileBaseline; - break; - case 1: - *pProfile = OMX_VIDEO_H263ProfileH320Coding; - break; - case 2: - *pProfile = OMX_VIDEO_H263ProfileBackwardCompatible; - break; - case 3: - *pProfile = OMX_VIDEO_H263ProfileISWV2; - break; - case 4: - *pProfile = OMX_VIDEO_H263ProfileISWV3; - break; - case 5: - *pProfile = OMX_VIDEO_H263ProfileHighCompression; - break; - case 6: - *pProfile = OMX_VIDEO_H263ProfileInternet; - break; - case 7: - *pProfile = OMX_VIDEO_H263ProfileInterlace; - break; - case 8: - *pProfile = OMX_VIDEO_H263ProfileHighLatency; - break; - default: - *pProfile = M4VIDEOEDITING_VIDEO_UNKNOWN_PROFILE; - } - ALOGV("getH263ProfileAndLevel profile %" PRId32 " level %" PRId32, - *pProfile, *pLevel); - return M4NO_ERROR; -} - -M4OSA_ERR getMPEG4ProfileAndLevel(M4OSA_UInt8 profileAndLevel, - M4OSA_Int32 *pProfile, M4OSA_Int32 *pLevel) { - - M4OSA_UInt32 i = 0; - M4OSA_UInt32 length = 0; - if ((pProfile == M4OSA_NULL) || (pLevel == M4OSA_NULL)) { - return M4ERR_PARAMETER; - } - ALOGV("getMPEG4ProfileAndLevel profileAndLevel %d", profileAndLevel); - length = sizeof(mpeg4ProfileLevelTable) /sizeof(mpeg4ProfileLevelTable[0]); - *pProfile = M4VIDEOEDITING_VIDEO_UNKNOWN_PROFILE; - *pLevel = M4VIDEOEDITING_VIDEO_UNKNOWN_LEVEL; - for (i = 0; i < length; i++) { - if (mpeg4ProfileLevelTable[i].code == profileAndLevel) { - *pProfile = mpeg4ProfileLevelTable[i].profile; - *pLevel = mpeg4ProfileLevelTable[i].level; - break; - } - } - ALOGV("getMPEG4ProfileAndLevel profile %" PRId32 " level %" PRId32, - *pProfile, *pLevel); - return M4NO_ERROR; -} |