/H264Dec/source/h264bsd_nal_unit.c
C | 117 lines | 32 code | 19 blank | 66 comment | 27 complexity | 2b2dc8865030a1f72b3778d40f005f12 MD5 | raw file
Possible License(s): BSD-3-Clause
- /*
- * Copyright (C) 2009 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.
- */
- /*------------------------------------------------------------------------------
- Table of contents
- 1. Include headers
- 2. External compiler flags
- 3. Module defines
- 4. Local function prototypes
- 5. Functions
- h264bsdDecodeNalUnit
- ------------------------------------------------------------------------------*/
- /*------------------------------------------------------------------------------
- 1. Include headers
- ------------------------------------------------------------------------------*/
- #include "h264bsd_nal_unit.h"
- #include "h264bsd_util.h"
- /*------------------------------------------------------------------------------
- 2. External compiler flags
- --------------------------------------------------------------------------------
- --------------------------------------------------------------------------------
- 3. Module defines
- ------------------------------------------------------------------------------*/
- /*------------------------------------------------------------------------------
- 4. Local function prototypes
- ------------------------------------------------------------------------------*/
- /*------------------------------------------------------------------------------
- Function name: h264bsdDecodeNalUnit
- Functional description:
- Decode NAL unit header information
- Inputs:
- pStrmData pointer to stream data structure
- Outputs:
- pNalUnit NAL unit header information is stored here
- Returns:
- HANTRO_OK success
- HANTRO_NOK invalid NAL unit header information
- ------------------------------------------------------------------------------*/
- u32 h264bsdDecodeNalUnit(strmData_t *pStrmData, nalUnit_t *pNalUnit)
- {
- /* Variables */
- u32 tmp;
- /* Code */
- ASSERT(pStrmData);
- ASSERT(pNalUnit);
- ASSERT(pStrmData->bitPosInWord == 0);
- /* forbidden_zero_bit (not checked to be zero, errors ignored) */
- tmp = h264bsdGetBits(pStrmData, 1);
- /* Assuming that NAL unit starts from byte boundary > don't have to check
- * following 7 bits for END_OF_STREAM */
- if (tmp == END_OF_STREAM)
- return(HANTRO_NOK);
- tmp = h264bsdGetBits(pStrmData, 2);
- pNalUnit->nalRefIdc = tmp;
- tmp = h264bsdGetBits(pStrmData, 5);
- pNalUnit->nalUnitType = (nalUnitType_e)tmp;
- /* data partitioning NAL units not supported */
- if ( (tmp == 2) || (tmp == 3) || (tmp == 4) )
- {
- return(HANTRO_NOK);
- }
- /* nal_ref_idc shall not be zero for these nal_unit_types */
- if ( ( (tmp == NAL_SEQ_PARAM_SET) || (tmp == NAL_PIC_PARAM_SET) ||
- (tmp == NAL_CODED_SLICE_IDR) ) && (pNalUnit->nalRefIdc == 0) )
- {
- return(HANTRO_NOK);
- }
- /* nal_ref_idc shall be zero for these nal_unit_types */
- else if ( ( (tmp == NAL_SEI) || (tmp == NAL_ACCESS_UNIT_DELIMITER) ||
- (tmp == NAL_END_OF_SEQUENCE) || (tmp == NAL_END_OF_STREAM) ||
- (tmp == NAL_FILLER_DATA) ) && (pNalUnit->nalRefIdc != 0) )
- {
- return(HANTRO_NOK);
- }
- return(HANTRO_OK);
- }