| /* |
| * 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. Module defines |
| 3. Data types |
| 4. Function prototypes |
| |
| ------------------------------------------------------------------------------*/ |
| |
| #ifndef H264SWDEC_STORAGE_H |
| #define H264SWDEC_STORAGE_H |
| |
| /*------------------------------------------------------------------------------ |
| 1. Include headers |
| ------------------------------------------------------------------------------*/ |
| |
| #include "basetype.h" |
| #include "h264bsd_cfg.h" |
| #include "h264bsd_seq_param_set.h" |
| #include "h264bsd_pic_param_set.h" |
| #include "h264bsd_macroblock_layer.h" |
| #include "h264bsd_nal_unit.h" |
| #include "h264bsd_slice_header.h" |
| #include "h264bsd_seq_param_set.h" |
| #include "h264bsd_dpb.h" |
| #include "h264bsd_pic_order_cnt.h" |
| |
| /*------------------------------------------------------------------------------ |
| 2. Module defines |
| ------------------------------------------------------------------------------*/ |
| |
| /*------------------------------------------------------------------------------ |
| 3. Data types |
| ------------------------------------------------------------------------------*/ |
| |
| typedef struct |
| { |
| u32 sliceId; |
| u32 numDecodedMbs; |
| u32 lastMbAddr; |
| } sliceStorage_t; |
| |
| /* structure to store parameters needed for access unit boundary checking */ |
| typedef struct |
| { |
| nalUnit_t nuPrev[1]; |
| u32 prevFrameNum; |
| u32 prevIdrPicId; |
| u32 prevPicOrderCntLsb; |
| i32 prevDeltaPicOrderCntBottom; |
| i32 prevDeltaPicOrderCnt[2]; |
| u32 firstCallFlag; |
| } aubCheck_t; |
| |
| /* storage data structure, holds all data of a decoder instance */ |
| typedef struct |
| { |
| /* active paramet set ids and pointers */ |
| u32 oldSpsId; |
| u32 activePpsId; |
| u32 activeSpsId; |
| picParamSet_t *activePps; |
| seqParamSet_t *activeSps; |
| seqParamSet_t *sps[MAX_NUM_SEQ_PARAM_SETS]; |
| picParamSet_t *pps[MAX_NUM_PIC_PARAM_SETS]; |
| |
| /* current slice group map, recomputed for each slice */ |
| u32 *sliceGroupMap; |
| |
| u32 picSizeInMbs; |
| |
| /* this flag is set after all macroblocks of a picture successfully |
| * decoded -> redundant slices not decoded */ |
| u32 skipRedundantSlices; |
| u32 picStarted; |
| |
| /* flag to indicate if current access unit contains any valid slices */ |
| u32 validSliceInAccessUnit; |
| |
| /* store information needed for handling of slice decoding */ |
| sliceStorage_t slice[1]; |
| |
| /* number of concealed macroblocks in the current image */ |
| u32 numConcealedMbs; |
| |
| /* picId given by application */ |
| u32 currentPicId; |
| |
| /* macroblock specific storages, size determined by image dimensions */ |
| mbStorage_t *mb; |
| |
| /* flag to store noOutputReordering flag set by the application */ |
| u32 noReordering; |
| |
| /* DPB */ |
| dpbStorage_t dpb[1]; |
| |
| /* structure to store picture order count related information */ |
| pocStorage_t poc[1]; |
| |
| /* access unit boundary checking related data */ |
| aubCheck_t aub[1]; |
| |
| /* current processed image */ |
| image_t currImage[1]; |
| |
| /* last valid NAL unit header is stored here */ |
| nalUnit_t prevNalUnit[1]; |
| |
| /* slice header, second structure used as a temporary storage while |
| * decoding slice header, first one stores last successfully decoded |
| * slice header */ |
| sliceHeader_t sliceHeader[2]; |
| |
| /* fields to store old stream buffer pointers, needed when only part of |
| * a stream buffer is processed by h264bsdDecode function */ |
| u32 prevBufNotFinished; |
| u8 *prevBufPointer; |
| u32 prevBytesConsumed; |
| strmData_t strm[1]; |
| |
| /* macroblock layer structure, there is no need to store this but it |
| * would have increased the stack size excessively and needed to be |
| * allocated from head -> easiest to put it here */ |
| macroblockLayer_t *mbLayer; |
| |
| u32 pendingActivation; /* Activate parameter sets after returning |
| HEADERS_RDY to the user */ |
| u32 intraConcealmentFlag; /* 0 gray picture for corrupted intra |
| 1 previous frame used if available */ |
| } storage_t; |
| |
| /*------------------------------------------------------------------------------ |
| 4. Function prototypes |
| ------------------------------------------------------------------------------*/ |
| |
| void h264bsdInitStorage(storage_t *pStorage); |
| void h264bsdResetStorage(storage_t *pStorage); |
| u32 h264bsdIsStartOfPicture(storage_t *pStorage); |
| u32 h264bsdIsEndOfPicture(storage_t *pStorage); |
| u32 h264bsdStoreSeqParamSet(storage_t *pStorage, seqParamSet_t *pSeqParamSet); |
| u32 h264bsdStorePicParamSet(storage_t *pStorage, picParamSet_t *pPicParamSet); |
| u32 h264bsdActivateParamSets(storage_t *pStorage, u32 ppsId, u32 isIdr); |
| void h264bsdComputeSliceGroupMap(storage_t *pStorage, |
| u32 sliceGroupChangeCycle); |
| |
| u32 h264bsdCheckAccessUnitBoundary( |
| strmData_t *strm, |
| nalUnit_t *nuNext, |
| storage_t *storage, |
| u32 *accessUnitBoundaryFlag); |
| |
| u32 h264bsdValidParamSets(storage_t *pStorage); |
| |
| #endif /* #ifdef H264SWDEC_STORAGE_H */ |
| |