1bebc99d6fa433c04139294a5057f8439d772dbd9James Dong/* 2bebc99d6fa433c04139294a5057f8439d772dbd9James Dong * Copyright (C) 2009 The Android Open Source Project 3bebc99d6fa433c04139294a5057f8439d772dbd9James Dong * 4bebc99d6fa433c04139294a5057f8439d772dbd9James Dong * Licensed under the Apache License, Version 2.0 (the "License"); 5bebc99d6fa433c04139294a5057f8439d772dbd9James Dong * you may not use this file except in compliance with the License. 6bebc99d6fa433c04139294a5057f8439d772dbd9James Dong * You may obtain a copy of the License at 7bebc99d6fa433c04139294a5057f8439d772dbd9James Dong * 8bebc99d6fa433c04139294a5057f8439d772dbd9James Dong * http://www.apache.org/licenses/LICENSE-2.0 9bebc99d6fa433c04139294a5057f8439d772dbd9James Dong * 10bebc99d6fa433c04139294a5057f8439d772dbd9James Dong * Unless required by applicable law or agreed to in writing, software 11bebc99d6fa433c04139294a5057f8439d772dbd9James Dong * distributed under the License is distributed on an "AS IS" BASIS, 12bebc99d6fa433c04139294a5057f8439d772dbd9James Dong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bebc99d6fa433c04139294a5057f8439d772dbd9James Dong * See the License for the specific language governing permissions and 14bebc99d6fa433c04139294a5057f8439d772dbd9James Dong * limitations under the License. 15bebc99d6fa433c04139294a5057f8439d772dbd9James Dong */ 16bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 17bebc99d6fa433c04139294a5057f8439d772dbd9James Dong/*------------------------------------------------------------------------------ 18bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 19bebc99d6fa433c04139294a5057f8439d772dbd9James Dong Table of contents 20bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 21bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 1. Include Headers 22bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 23bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 2. Enumerations used as a return value or a parameter. 24bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 2.1. API's return value enumerations. 25bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 26bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 3. User Structures 27bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 3.1. Structures for H264SwDecDecode() parameters. 28bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 3.2. Structures for information interchange with 29bebc99d6fa433c04139294a5057f8439d772dbd9James Dong DEC API and user application. 30bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 31bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 4. Prototypes of Decoder API functions 32bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 33bebc99d6fa433c04139294a5057f8439d772dbd9James Dong------------------------------------------------------------------------------*/ 34bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 35bebc99d6fa433c04139294a5057f8439d772dbd9James Dong#ifndef H264SWDECAPI_H 36bebc99d6fa433c04139294a5057f8439d772dbd9James Dong#define H264SWDECAPI_H 37bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 38bebc99d6fa433c04139294a5057f8439d772dbd9James Dong#ifdef __cplusplus 39bebc99d6fa433c04139294a5057f8439d772dbd9James Dongextern "C" 40bebc99d6fa433c04139294a5057f8439d772dbd9James Dong{ 41bebc99d6fa433c04139294a5057f8439d772dbd9James Dong#endif 42bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 43bebc99d6fa433c04139294a5057f8439d772dbd9James Dong/*------------------------------------------------------------------------------ 44bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 1. Include Headers 45bebc99d6fa433c04139294a5057f8439d772dbd9James Dong------------------------------------------------------------------------------*/ 46bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 47bebc99d6fa433c04139294a5057f8439d772dbd9James Dong #include "basetype.h" 48bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 49bebc99d6fa433c04139294a5057f8439d772dbd9James Dong/*------------------------------------------------------------------------------ 50bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 2.1. API's return value enumerations. 51bebc99d6fa433c04139294a5057f8439d772dbd9James Dong------------------------------------------------------------------------------*/ 52bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 53bebc99d6fa433c04139294a5057f8439d772dbd9James Dong typedef enum 54bebc99d6fa433c04139294a5057f8439d772dbd9James Dong { 55bebc99d6fa433c04139294a5057f8439d772dbd9James Dong H264SWDEC_OK = 0, 56bebc99d6fa433c04139294a5057f8439d772dbd9James Dong H264SWDEC_STRM_PROCESSED = 1, 57bebc99d6fa433c04139294a5057f8439d772dbd9James Dong H264SWDEC_PIC_RDY, 58bebc99d6fa433c04139294a5057f8439d772dbd9James Dong H264SWDEC_PIC_RDY_BUFF_NOT_EMPTY, 59bebc99d6fa433c04139294a5057f8439d772dbd9James Dong H264SWDEC_HDRS_RDY_BUFF_NOT_EMPTY, 60bebc99d6fa433c04139294a5057f8439d772dbd9James Dong H264SWDEC_PARAM_ERR = -1, 61bebc99d6fa433c04139294a5057f8439d772dbd9James Dong H264SWDEC_STRM_ERR = -2, 62bebc99d6fa433c04139294a5057f8439d772dbd9James Dong H264SWDEC_NOT_INITIALIZED = -3, 63bebc99d6fa433c04139294a5057f8439d772dbd9James Dong H264SWDEC_MEMFAIL = -4, 64bebc99d6fa433c04139294a5057f8439d772dbd9James Dong H264SWDEC_INITFAIL = -5, 65bebc99d6fa433c04139294a5057f8439d772dbd9James Dong H264SWDEC_HDRS_NOT_RDY = -6, 66bebc99d6fa433c04139294a5057f8439d772dbd9James Dong H264SWDEC_EVALUATION_LIMIT_EXCEEDED = -7 67bebc99d6fa433c04139294a5057f8439d772dbd9James Dong } H264SwDecRet; 68bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 69bebc99d6fa433c04139294a5057f8439d772dbd9James Dong/*------------------------------------------------------------------------------ 70bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 3.1. Structures for H264SwDecDecode() parameters. 71bebc99d6fa433c04139294a5057f8439d772dbd9James Dong------------------------------------------------------------------------------*/ 72bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 73bebc99d6fa433c04139294a5057f8439d772dbd9James Dong /* typedef of the Decoder instance */ 74bebc99d6fa433c04139294a5057f8439d772dbd9James Dong typedef void *H264SwDecInst; 75bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 76bebc99d6fa433c04139294a5057f8439d772dbd9James Dong /* Input structure */ 77bebc99d6fa433c04139294a5057f8439d772dbd9James Dong typedef struct 78bebc99d6fa433c04139294a5057f8439d772dbd9James Dong { 79bebc99d6fa433c04139294a5057f8439d772dbd9James Dong u8 *pStream; /* Pointer to stream to be decoded */ 80bebc99d6fa433c04139294a5057f8439d772dbd9James Dong u32 dataLen; /* Number of bytes to be decoded */ 81bebc99d6fa433c04139294a5057f8439d772dbd9James Dong u32 picId; /* Identifier for the picture to be decoded */ 82bebc99d6fa433c04139294a5057f8439d772dbd9James Dong u32 intraConcealmentMethod; /* 0 = Gray concealment for intra 83bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 1 = Reference concealment for intra */ 84bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 85bebc99d6fa433c04139294a5057f8439d772dbd9James Dong } H264SwDecInput; 86bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 87bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 88bebc99d6fa433c04139294a5057f8439d772dbd9James Dong /* Output structure */ 89bebc99d6fa433c04139294a5057f8439d772dbd9James Dong typedef struct 90bebc99d6fa433c04139294a5057f8439d772dbd9James Dong { 91bebc99d6fa433c04139294a5057f8439d772dbd9James Dong u8 *pStrmCurrPos; /* Pointer to stream position where decoder 92bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ended up */ 93bebc99d6fa433c04139294a5057f8439d772dbd9James Dong } H264SwDecOutput; 94bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 95bebc99d6fa433c04139294a5057f8439d772dbd9James Dong /* Output structure for H264SwDecNextPicture */ 96bebc99d6fa433c04139294a5057f8439d772dbd9James Dong typedef struct 97bebc99d6fa433c04139294a5057f8439d772dbd9James Dong { 98bebc99d6fa433c04139294a5057f8439d772dbd9James Dong u32 *pOutputPicture; /* Pointer to the picture, YUV format */ 99bebc99d6fa433c04139294a5057f8439d772dbd9James Dong u32 picId; /* Identifier of the picture to be displayed*/ 100bebc99d6fa433c04139294a5057f8439d772dbd9James Dong u32 isIdrPicture; /* Flag to indicate if the picture is an 101bebc99d6fa433c04139294a5057f8439d772dbd9James Dong IDR picture */ 102bebc99d6fa433c04139294a5057f8439d772dbd9James Dong u32 nbrOfErrMBs; /* Number of concealed MB's in the picture */ 103bebc99d6fa433c04139294a5057f8439d772dbd9James Dong } H264SwDecPicture; 104bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 105bebc99d6fa433c04139294a5057f8439d772dbd9James Dong/*------------------------------------------------------------------------------ 106bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 3.2. Structures for information interchange with DEC API 107bebc99d6fa433c04139294a5057f8439d772dbd9James Dong and user application. 108bebc99d6fa433c04139294a5057f8439d772dbd9James Dong------------------------------------------------------------------------------*/ 109bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 110bebc99d6fa433c04139294a5057f8439d772dbd9James Dong typedef struct 111bebc99d6fa433c04139294a5057f8439d772dbd9James Dong { 112bebc99d6fa433c04139294a5057f8439d772dbd9James Dong u32 cropLeftOffset; 113bebc99d6fa433c04139294a5057f8439d772dbd9James Dong u32 cropOutWidth; 114bebc99d6fa433c04139294a5057f8439d772dbd9James Dong u32 cropTopOffset; 115bebc99d6fa433c04139294a5057f8439d772dbd9James Dong u32 cropOutHeight; 116bebc99d6fa433c04139294a5057f8439d772dbd9James Dong } CropParams; 117bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 118bebc99d6fa433c04139294a5057f8439d772dbd9James Dong typedef struct 119bebc99d6fa433c04139294a5057f8439d772dbd9James Dong { 120bebc99d6fa433c04139294a5057f8439d772dbd9James Dong u32 profile; 121bebc99d6fa433c04139294a5057f8439d772dbd9James Dong u32 picWidth; 122bebc99d6fa433c04139294a5057f8439d772dbd9James Dong u32 picHeight; 123bebc99d6fa433c04139294a5057f8439d772dbd9James Dong u32 videoRange; 124bebc99d6fa433c04139294a5057f8439d772dbd9James Dong u32 matrixCoefficients; 125bebc99d6fa433c04139294a5057f8439d772dbd9James Dong u32 parWidth; 126bebc99d6fa433c04139294a5057f8439d772dbd9James Dong u32 parHeight; 127bebc99d6fa433c04139294a5057f8439d772dbd9James Dong u32 croppingFlag; 128bebc99d6fa433c04139294a5057f8439d772dbd9James Dong CropParams cropParams; 129bebc99d6fa433c04139294a5057f8439d772dbd9James Dong } H264SwDecInfo; 130bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 131bebc99d6fa433c04139294a5057f8439d772dbd9James Dong /* Version information */ 132bebc99d6fa433c04139294a5057f8439d772dbd9James Dong typedef struct 133bebc99d6fa433c04139294a5057f8439d772dbd9James Dong { 134bebc99d6fa433c04139294a5057f8439d772dbd9James Dong u32 major; /* Decoder API major version */ 135bebc99d6fa433c04139294a5057f8439d772dbd9James Dong u32 minor; /* Dncoder API minor version */ 136bebc99d6fa433c04139294a5057f8439d772dbd9James Dong } H264SwDecApiVersion; 137bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 138bebc99d6fa433c04139294a5057f8439d772dbd9James Dong/*------------------------------------------------------------------------------ 139bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 4. Prototypes of Decoder API functions 140bebc99d6fa433c04139294a5057f8439d772dbd9James Dong------------------------------------------------------------------------------*/ 141bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 142bebc99d6fa433c04139294a5057f8439d772dbd9James Dong H264SwDecRet H264SwDecDecode(H264SwDecInst decInst, 143bebc99d6fa433c04139294a5057f8439d772dbd9James Dong H264SwDecInput *pInput, 144bebc99d6fa433c04139294a5057f8439d772dbd9James Dong H264SwDecOutput *pOutput); 145bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 146bebc99d6fa433c04139294a5057f8439d772dbd9James Dong H264SwDecRet H264SwDecInit(H264SwDecInst *decInst, 147bebc99d6fa433c04139294a5057f8439d772dbd9James Dong u32 noOutputReordering); 148bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 149bebc99d6fa433c04139294a5057f8439d772dbd9James Dong H264SwDecRet H264SwDecNextPicture(H264SwDecInst decInst, 150bebc99d6fa433c04139294a5057f8439d772dbd9James Dong H264SwDecPicture *pOutput, 151bebc99d6fa433c04139294a5057f8439d772dbd9James Dong u32 endOfStream); 152bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 153bebc99d6fa433c04139294a5057f8439d772dbd9James Dong H264SwDecRet H264SwDecGetInfo(H264SwDecInst decInst, 154bebc99d6fa433c04139294a5057f8439d772dbd9James Dong H264SwDecInfo *pDecInfo); 155bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 156bebc99d6fa433c04139294a5057f8439d772dbd9James Dong void H264SwDecRelease(H264SwDecInst decInst); 157bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 158bebc99d6fa433c04139294a5057f8439d772dbd9James Dong H264SwDecApiVersion H264SwDecGetAPIVersion(void); 159bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 160bebc99d6fa433c04139294a5057f8439d772dbd9James Dong /* function prototype for API trace */ 161bebc99d6fa433c04139294a5057f8439d772dbd9James Dong void H264SwDecTrace(char *); 162bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 163bebc99d6fa433c04139294a5057f8439d772dbd9James Dong /* function prototype for memory allocation */ 164bebc99d6fa433c04139294a5057f8439d772dbd9James Dong void* H264SwDecMalloc(u32 size); 165bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 166bebc99d6fa433c04139294a5057f8439d772dbd9James Dong /* function prototype for memory free */ 167bebc99d6fa433c04139294a5057f8439d772dbd9James Dong void H264SwDecFree(void *ptr); 168bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 169bebc99d6fa433c04139294a5057f8439d772dbd9James Dong /* function prototype for memory copy */ 170bebc99d6fa433c04139294a5057f8439d772dbd9James Dong void H264SwDecMemcpy(void *dest, void *src, u32 count); 171bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 172bebc99d6fa433c04139294a5057f8439d772dbd9James Dong /* function prototype for memset */ 173bebc99d6fa433c04139294a5057f8439d772dbd9James Dong void H264SwDecMemset(void *ptr, i32 value, u32 count); 174bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 175bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 176bebc99d6fa433c04139294a5057f8439d772dbd9James Dong#ifdef __cplusplus 177bebc99d6fa433c04139294a5057f8439d772dbd9James Dong} 178bebc99d6fa433c04139294a5057f8439d772dbd9James Dong#endif 179bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 180bebc99d6fa433c04139294a5057f8439d772dbd9James Dong#endif /* H264SWDECAPI_H */ 181bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 182bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 183bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 184bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 185bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 186bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 187bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 188bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 189bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 190bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 191bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 192bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 193