You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
150 lines
4.1 KiB
150 lines
4.1 KiB
/*
|
|
* 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_DPB_H
|
|
#define H264SWDEC_DPB_H
|
|
|
|
/*------------------------------------------------------------------------------
|
|
1. Include headers
|
|
------------------------------------------------------------------------------*/
|
|
|
|
#include "basetype.h"
|
|
#include "h264bsd_slice_header.h"
|
|
#include "h264bsd_image.h"
|
|
|
|
/*------------------------------------------------------------------------------
|
|
2. Module defines
|
|
------------------------------------------------------------------------------*/
|
|
|
|
/*------------------------------------------------------------------------------
|
|
3. Data types
|
|
------------------------------------------------------------------------------*/
|
|
|
|
/* enumeration to represent status of buffered image */
|
|
typedef enum {
|
|
UNUSED = 0,
|
|
NON_EXISTING,
|
|
SHORT_TERM,
|
|
LONG_TERM
|
|
} dpbPictureStatus_e;
|
|
|
|
/* structure to represent a buffered picture */
|
|
typedef struct {
|
|
u8 *data; /* 16-byte aligned pointer of pAllocatedData */
|
|
u8 *pAllocatedData; /* allocated picture pointer; (size + 15) bytes */
|
|
i32 picNum;
|
|
u32 frameNum;
|
|
i32 picOrderCnt;
|
|
dpbPictureStatus_e status;
|
|
u32 toBeDisplayed;
|
|
u32 picId;
|
|
u32 numErrMbs;
|
|
u32 isIdr;
|
|
} dpbPicture_t;
|
|
|
|
/* structure to represent display image output from the buffer */
|
|
typedef struct {
|
|
u8 *data;
|
|
u32 picId;
|
|
u32 numErrMbs;
|
|
u32 isIdr;
|
|
} dpbOutPicture_t;
|
|
|
|
/* structure to represent DPB */
|
|
typedef struct {
|
|
dpbPicture_t *buffer;
|
|
dpbPicture_t **list;
|
|
dpbPicture_t *currentOut;
|
|
dpbOutPicture_t *outBuf;
|
|
u32 numOut;
|
|
u32 outIndex;
|
|
u32 maxRefFrames;
|
|
u32 dpbSize;
|
|
u32 maxFrameNum;
|
|
u32 maxLongTermFrameIdx;
|
|
u32 numRefFrames;
|
|
u32 fullness;
|
|
u32 prevRefFrameNum;
|
|
u32 lastContainsMmco5;
|
|
u32 noReordering;
|
|
u32 flushed;
|
|
} dpbStorage_t;
|
|
|
|
/*------------------------------------------------------------------------------
|
|
4. Function prototypes
|
|
------------------------------------------------------------------------------*/
|
|
|
|
u32 h264bsdInitDpb(
|
|
dpbStorage_t *dpb,
|
|
u32 picSizeInMbs,
|
|
u32 dpbSize,
|
|
u32 numRefFrames,
|
|
u32 maxFrameNum,
|
|
u32 noReordering);
|
|
|
|
u32 h264bsdResetDpb(
|
|
dpbStorage_t *dpb,
|
|
u32 picSizeInMbs,
|
|
u32 dpbSize,
|
|
u32 numRefFrames,
|
|
u32 maxFrameNum,
|
|
u32 noReordering);
|
|
|
|
void h264bsdInitRefPicList(dpbStorage_t *dpb);
|
|
|
|
u8* h264bsdAllocateDpbImage(dpbStorage_t *dpb);
|
|
|
|
u8* h264bsdGetRefPicData(dpbStorage_t *dpb, u32 index);
|
|
|
|
u32 h264bsdReorderRefPicList(
|
|
dpbStorage_t *dpb,
|
|
refPicListReordering_t *order,
|
|
u32 currFrameNum,
|
|
u32 numRefIdxActive);
|
|
|
|
u32 h264bsdMarkDecRefPic(
|
|
dpbStorage_t *dpb,
|
|
decRefPicMarking_t *mark,
|
|
image_t *image,
|
|
u32 frameNum,
|
|
i32 picOrderCnt,
|
|
u32 isIdr,
|
|
u32 picId,
|
|
u32 numErrMbs);
|
|
|
|
u32 h264bsdCheckGapsInFrameNum(dpbStorage_t *dpb, u32 frameNum, u32 isRefPic,
|
|
u32 gapsAllowed);
|
|
|
|
dpbOutPicture_t* h264bsdDpbOutputPicture(dpbStorage_t *dpb);
|
|
|
|
void h264bsdFlushDpb(dpbStorage_t *dpb);
|
|
|
|
void h264bsdFreeDpb(dpbStorage_t *dpb);
|
|
|
|
#endif /* #ifdef H264SWDEC_DPB_H */
|
|
|
|
|