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 150