summaryrefslogtreecommitdiffstats
path: root/libvideoeditor/vss/src/M4VD_EXTERNAL_BitstreamParser.c
diff options
context:
space:
mode:
Diffstat (limited to 'libvideoeditor/vss/src/M4VD_EXTERNAL_BitstreamParser.c')
-rwxr-xr-xlibvideoeditor/vss/src/M4VD_EXTERNAL_BitstreamParser.c703
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;
-}