PageRenderTime 40ms CodeModel.GetById 28ms app.highlight 9ms RepoModel.GetById 1ms app.codeStats 0ms

/H264Dec/source/h264bsd_storage.h

http://github.com/mbebenita/Broadway
C Header | 174 lines | 77 code | 33 blank | 64 comment | 0 complexity | f75acee8c6f1195087a7388688b61130 MD5 | raw file
  1/*
  2 * Copyright (C) 2009 The Android Open Source Project
  3 *
  4 * Licensed under the Apache License, Version 2.0 (the "License");
  5 * you may not use this file except in compliance with the License.
  6 * You may obtain a copy of the License at
  7 *
  8 *      http://www.apache.org/licenses/LICENSE-2.0
  9 *
 10 * Unless required by applicable law or agreed to in writing, software
 11 * distributed under the License is distributed on an "AS IS" BASIS,
 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 13 * See the License for the specific language governing permissions and
 14 * limitations under the License.
 15 */
 16
 17/*------------------------------------------------------------------------------
 18
 19    Table of contents
 20
 21    1. Include headers
 22    2. Module defines
 23    3. Data types
 24    4. Function prototypes
 25
 26------------------------------------------------------------------------------*/
 27
 28#ifndef H264SWDEC_STORAGE_H
 29#define H264SWDEC_STORAGE_H
 30
 31/*------------------------------------------------------------------------------
 32    1. Include headers
 33------------------------------------------------------------------------------*/
 34
 35#include "basetype.h"
 36#include "h264bsd_cfg.h"
 37#include "h264bsd_seq_param_set.h"
 38#include "h264bsd_pic_param_set.h"
 39#include "h264bsd_macroblock_layer.h"
 40#include "h264bsd_nal_unit.h"
 41#include "h264bsd_slice_header.h"
 42#include "h264bsd_seq_param_set.h"
 43#include "h264bsd_dpb.h"
 44#include "h264bsd_pic_order_cnt.h"
 45
 46/*------------------------------------------------------------------------------
 47    2. Module defines
 48------------------------------------------------------------------------------*/
 49
 50/*------------------------------------------------------------------------------
 51    3. Data types
 52------------------------------------------------------------------------------*/
 53
 54typedef struct
 55{
 56    u32 sliceId;
 57    u32 numDecodedMbs;
 58    u32 lastMbAddr;
 59} sliceStorage_t;
 60
 61/* structure to store parameters needed for access unit boundary checking */
 62typedef struct
 63{
 64    nalUnit_t nuPrev[1];
 65    u32 prevFrameNum;
 66    u32 prevIdrPicId;
 67    u32 prevPicOrderCntLsb;
 68    i32 prevDeltaPicOrderCntBottom;
 69    i32 prevDeltaPicOrderCnt[2];
 70    u32 firstCallFlag;
 71} aubCheck_t;
 72
 73/* storage data structure, holds all data of a decoder instance */
 74typedef struct
 75{
 76    /* active paramet set ids and pointers */
 77    u32 oldSpsId;
 78    u32 activePpsId;
 79    u32 activeSpsId;
 80    picParamSet_t *activePps;
 81    seqParamSet_t *activeSps;
 82    seqParamSet_t *sps[MAX_NUM_SEQ_PARAM_SETS];
 83    picParamSet_t *pps[MAX_NUM_PIC_PARAM_SETS];
 84
 85    /* current slice group map, recomputed for each slice */
 86    u32 *sliceGroupMap;
 87
 88    u32 picSizeInMbs;
 89
 90    /* this flag is set after all macroblocks of a picture successfully
 91     * decoded -> redundant slices not decoded */
 92    u32 skipRedundantSlices;
 93    u32 picStarted;
 94
 95    /* flag to indicate if current access unit contains any valid slices */
 96    u32 validSliceInAccessUnit;
 97
 98    /* store information needed for handling of slice decoding */
 99    sliceStorage_t slice[1];
100
101    /* number of concealed macroblocks in the current image */
102    u32 numConcealedMbs;
103
104    /* picId given by application */
105    u32 currentPicId;
106
107    /* macroblock specific storages, size determined by image dimensions */
108    mbStorage_t *mb;
109
110    /* flag to store noOutputReordering flag set by the application */
111    u32 noReordering;
112
113    /* DPB */
114    dpbStorage_t dpb[1];
115
116    /* structure to store picture order count related information */
117    pocStorage_t poc[1];
118
119    /* access unit boundary checking related data */
120    aubCheck_t aub[1];
121
122    /* current processed image */
123    image_t currImage[1];
124
125    /* last valid NAL unit header is stored here */
126    nalUnit_t prevNalUnit[1];
127
128    /* slice header, second structure used as a temporary storage while
129     * decoding slice header, first one stores last successfully decoded
130     * slice header */
131    sliceHeader_t sliceHeader[2];
132
133    /* fields to store old stream buffer pointers, needed when only part of
134     * a stream buffer is processed by h264bsdDecode function */
135    u32 prevBufNotFinished;
136    u8 *prevBufPointer;
137    u32 prevBytesConsumed;
138    strmData_t strm[1];
139
140    /* macroblock layer structure, there is no need to store this but it
141     * would have increased the stack size excessively and needed to be
142     * allocated from head -> easiest to put it here */
143    macroblockLayer_t *mbLayer;
144
145    u32 pendingActivation; /* Activate parameter sets after returning
146                              HEADERS_RDY to the user */
147    u32 intraConcealmentFlag; /* 0 gray picture for corrupted intra
148                                 1 previous frame used if available */
149} storage_t;
150
151/*------------------------------------------------------------------------------
152    4. Function prototypes
153------------------------------------------------------------------------------*/
154
155void h264bsdInitStorage(storage_t *pStorage);
156void h264bsdResetStorage(storage_t *pStorage);
157u32 h264bsdIsStartOfPicture(storage_t *pStorage);
158u32 h264bsdIsEndOfPicture(storage_t *pStorage);
159u32 h264bsdStoreSeqParamSet(storage_t *pStorage, seqParamSet_t *pSeqParamSet);
160u32 h264bsdStorePicParamSet(storage_t *pStorage, picParamSet_t *pPicParamSet);
161u32 h264bsdActivateParamSets(storage_t *pStorage, u32 ppsId, u32 isIdr);
162void h264bsdComputeSliceGroupMap(storage_t *pStorage,
163    u32 sliceGroupChangeCycle);
164
165u32 h264bsdCheckAccessUnitBoundary(
166  strmData_t *strm,
167  nalUnit_t *nuNext,
168  storage_t *storage,
169  u32 *accessUnitBoundaryFlag);
170
171u32 h264bsdValidParamSets(storage_t *pStorage);
172
173#endif /* #ifdef H264SWDEC_STORAGE_H */
174