PageRenderTime 161ms CodeModel.GetById 151ms app.highlight 8ms RepoModel.GetById 1ms app.codeStats 0ms

/H264Dec/source/h264bsd_dpb.h

http://github.com/mbebenita/Broadway
C Header | 149 lines | 84 code | 24 blank | 41 comment | 0 complexity | c2c9bc48bf079fbdaacaf8abf360da94 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_DPB_H
 29#define H264SWDEC_DPB_H
 30
 31/*------------------------------------------------------------------------------
 32    1. Include headers
 33------------------------------------------------------------------------------*/
 34
 35#include "basetype.h"
 36#include "h264bsd_slice_header.h"
 37#include "h264bsd_image.h"
 38
 39/*------------------------------------------------------------------------------
 40    2. Module defines
 41------------------------------------------------------------------------------*/
 42
 43/*------------------------------------------------------------------------------
 44    3. Data types
 45------------------------------------------------------------------------------*/
 46
 47/* enumeration to represent status of buffered image */
 48typedef enum {
 49    UNUSED = 0,
 50    NON_EXISTING,
 51    SHORT_TERM,
 52    LONG_TERM
 53} dpbPictureStatus_e;
 54
 55/* structure to represent a buffered picture */
 56typedef struct {
 57    u8 *data;           /* 16-byte aligned pointer of pAllocatedData */
 58    u8 *pAllocatedData; /* allocated picture pointer; (size + 15) bytes */
 59    i32 picNum;
 60    u32 frameNum;
 61    i32 picOrderCnt;
 62    dpbPictureStatus_e status;
 63    u32 toBeDisplayed;
 64    u32 picId;
 65    u32 numErrMbs;
 66    u32 isIdr;
 67} dpbPicture_t;
 68
 69/* structure to represent display image output from the buffer */
 70typedef struct {
 71    u8 *data;
 72    u32 picId;
 73    u32 numErrMbs;
 74    u32 isIdr;
 75} dpbOutPicture_t;
 76
 77/* structure to represent DPB */
 78typedef struct {
 79    dpbPicture_t *buffer;
 80    dpbPicture_t **list;
 81    dpbPicture_t *currentOut;
 82    dpbOutPicture_t *outBuf;
 83    u32 numOut;
 84    u32 outIndex;
 85    u32 maxRefFrames;
 86    u32 dpbSize;
 87    u32 maxFrameNum;
 88    u32 maxLongTermFrameIdx;
 89    u32 numRefFrames;
 90    u32 fullness;
 91    u32 prevRefFrameNum;
 92    u32 lastContainsMmco5;
 93    u32 noReordering;
 94    u32 flushed;
 95} dpbStorage_t;
 96
 97/*------------------------------------------------------------------------------
 98    4. Function prototypes
 99------------------------------------------------------------------------------*/
100
101u32 h264bsdInitDpb(
102  dpbStorage_t *dpb,
103  u32 picSizeInMbs,
104  u32 dpbSize,
105  u32 numRefFrames,
106  u32 maxFrameNum,
107  u32 noReordering);
108
109u32 h264bsdResetDpb(
110  dpbStorage_t *dpb,
111  u32 picSizeInMbs,
112  u32 dpbSize,
113  u32 numRefFrames,
114  u32 maxFrameNum,
115  u32 noReordering);
116
117void h264bsdInitRefPicList(dpbStorage_t *dpb);
118
119u8* h264bsdAllocateDpbImage(dpbStorage_t *dpb);
120
121u8* h264bsdGetRefPicData(dpbStorage_t *dpb, u32 index);
122
123u32 h264bsdReorderRefPicList(
124  dpbStorage_t *dpb,
125  refPicListReordering_t *order,
126  u32 currFrameNum,
127  u32 numRefIdxActive);
128
129u32 h264bsdMarkDecRefPic(
130  dpbStorage_t *dpb,
131  decRefPicMarking_t *mark,
132  image_t *image,
133  u32 frameNum,
134  i32 picOrderCnt,
135  u32 isIdr,
136  u32 picId,
137  u32 numErrMbs);
138
139u32 h264bsdCheckGapsInFrameNum(dpbStorage_t *dpb, u32 frameNum, u32 isRefPic,
140                               u32 gapsAllowed);
141
142dpbOutPicture_t* h264bsdDpbOutputPicture(dpbStorage_t *dpb);
143
144void h264bsdFlushDpb(dpbStorage_t *dpb);
145
146void h264bsdFreeDpb(dpbStorage_t *dpb);
147
148#endif /* #ifdef H264SWDEC_DPB_H */
149