Sam LeitchInitial commit4e6482e12 years agoHistory
187 lines · 5.7 KB · C
RawDownload
/* * Copyright (C) 2009 The Android Open Source Project * Modified for use by h264bsd standalone library * * 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. Module defines    3. Data types    4. Function prototypes ------------------------------------------------------------------------------*/ #ifndef H264SWDEC_SLICE_HEADER_H#define H264SWDEC_SLICE_HEADER_H /*------------------------------------------------------------------------------    1. Include headers------------------------------------------------------------------------------*/ #include "basetype.h"#include "h264bsd_stream.h"#include "h264bsd_cfg.h"#include "h264bsd_seq_param_set.h"#include "h264bsd_pic_param_set.h"#include "h264bsd_nal_unit.h" /*------------------------------------------------------------------------------    2. Module defines------------------------------------------------------------------------------*/ enum {    P_SLICE = 0,    I_SLICE = 2}; enum {NO_LONG_TERM_FRAME_INDICES = 0xFFFF}; /* macro to determine if slice is an inter slice, sliceTypes 0 and 5 */#define IS_P_SLICE(sliceType) (((sliceType) == P_SLICE) || \    ((sliceType) == P_SLICE + 5)) /* macro to determine if slice is an intra slice, sliceTypes 2 and 7 */#define IS_I_SLICE(sliceType) (((sliceType) == I_SLICE) || \    ((sliceType) == I_SLICE + 5)) /*------------------------------------------------------------------------------    3. Data types------------------------------------------------------------------------------*/ /* structure to store data of one reference picture list reordering operation */typedef struct{    u32 reorderingOfPicNumsIdc;    u32 absDiffPicNum;    u32 longTermPicNum;} refPicListReorderingOperation_t; /* structure to store reference picture list reordering operations */typedef struct{    u32 refPicListReorderingFlagL0;    refPicListReorderingOperation_t command[MAX_NUM_REF_PICS+1];} refPicListReordering_t; /* structure to store data of one DPB memory management control operation */typedef struct{    u32 memoryManagementControlOperation;    u32 differenceOfPicNums;    u32 longTermPicNum;    u32 longTermFrameIdx;    u32 maxLongTermFrameIdx;} memoryManagementOperation_t; /* worst case scenario: all MAX_NUM_REF_PICS pictures in the buffer are * short term pictures, each one of them is first marked as long term * reference picture which is then marked as unused for reference. * Additionally, max long-term frame index is set and current picture is * marked as long term reference picture. Last position reserved for * end memory_management_control_operation command */#define MAX_NUM_MMC_OPERATIONS (2*MAX_NUM_REF_PICS+2+1) /* structure to store decoded reference picture marking data */typedef struct{    u32 noOutputOfPriorPicsFlag;    u32 longTermReferenceFlag;    u32 adaptiveRefPicMarkingModeFlag;    memoryManagementOperation_t operation[MAX_NUM_MMC_OPERATIONS];} decRefPicMarking_t; /* structure to store slice header data decoded from the stream */typedef struct{    u32 firstMbInSlice;    u32 sliceType;    u32 picParameterSetId;    u32 frameNum;    u32 idrPicId;    u32 picOrderCntLsb;    i32 deltaPicOrderCntBottom;    i32 deltaPicOrderCnt[2];    u32 redundantPicCnt;    u32 numRefIdxActiveOverrideFlag;    u32 numRefIdxL0Active;    i32 sliceQpDelta;    u32 disableDeblockingFilterIdc;    i32 sliceAlphaC0Offset;    i32 sliceBetaOffset;    u32 sliceGroupChangeCycle;    refPicListReordering_t refPicListReordering;    decRefPicMarking_t decRefPicMarking;} sliceHeader_t; /*------------------------------------------------------------------------------    4. Function prototypes------------------------------------------------------------------------------*/ u32 h264bsdDecodeSliceHeader(strmData_t *pStrmData,  sliceHeader_t *pSliceHeader,  seqParamSet_t *pSeqParamSet,  picParamSet_t *pPicParamSet,  nalUnit_t *pNalUnit); u32 h264bsdCheckPpsId(strmData_t *pStrmData, u32 *ppsId); u32 h264bsdCheckFrameNum(  strmData_t *pStrmData,  u32 maxFrameNum,  u32 *frameNum); u32 h264bsdCheckIdrPicId(  strmData_t *pStrmData,  u32 maxFrameNum,  nalUnitType_e nalUnitType,  u32 *idrPicId); u32 h264bsdCheckPicOrderCntLsb(  strmData_t *pStrmData,  seqParamSet_t *pSeqParamSet,  nalUnitType_e nalUnitType,  u32 *picOrderCntLsb); u32 h264bsdCheckDeltaPicOrderCntBottom(  strmData_t *pStrmData,  seqParamSet_t *pSeqParamSet,  nalUnitType_e nalUnitType,  i32 *deltaPicOrderCntBottom); u32 h264bsdCheckDeltaPicOrderCnt(  strmData_t *pStrmData,  seqParamSet_t *pSeqParamSet,  nalUnitType_e nalUnitType,  u32 picOrderPresentFlag,  i32 *deltaPicOrderCnt); u32 h264bsdCheckRedundantPicCnt(  strmData_t *pStrmData,  seqParamSet_t *pSeqParamSet,  picParamSet_t *pPicParamSet,  nalUnitType_e nalUnitType,  u32 *redundantPicCnt); u32 h264bsdCheckPriorPicsFlag(u32 * noOutputOfPriorPicsFlag,                              const strmData_t * pStrmData,                              const seqParamSet_t * pSeqParamSet,                              const picParamSet_t * pPicParamSet,                              nalUnitType_e nalUnitType); #endif /* #ifdef H264SWDEC_SLICE_HEADER_H */ 

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t