10c1bc742181ded4930842b46e9507372f0b1b963James Dong/* 20c1bc742181ded4930842b46e9507372f0b1b963James Dong * Copyright (C) 2009 The Android Open Source Project 30c1bc742181ded4930842b46e9507372f0b1b963James Dong * 40c1bc742181ded4930842b46e9507372f0b1b963James Dong * Licensed under the Apache License, Version 2.0 (the "License"); 50c1bc742181ded4930842b46e9507372f0b1b963James Dong * you may not use this file except in compliance with the License. 60c1bc742181ded4930842b46e9507372f0b1b963James Dong * You may obtain a copy of the License at 70c1bc742181ded4930842b46e9507372f0b1b963James Dong * 80c1bc742181ded4930842b46e9507372f0b1b963James Dong * http://www.apache.org/licenses/LICENSE-2.0 90c1bc742181ded4930842b46e9507372f0b1b963James Dong * 100c1bc742181ded4930842b46e9507372f0b1b963James Dong * Unless required by applicable law or agreed to in writing, software 110c1bc742181ded4930842b46e9507372f0b1b963James Dong * distributed under the License is distributed on an "AS IS" BASIS, 120c1bc742181ded4930842b46e9507372f0b1b963James Dong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130c1bc742181ded4930842b46e9507372f0b1b963James Dong * See the License for the specific language governing permissions and 140c1bc742181ded4930842b46e9507372f0b1b963James Dong * limitations under the License. 150c1bc742181ded4930842b46e9507372f0b1b963James Dong */ 160c1bc742181ded4930842b46e9507372f0b1b963James Dong 170c1bc742181ded4930842b46e9507372f0b1b963James Dong/*------------------------------------------------------------------------------ 180c1bc742181ded4930842b46e9507372f0b1b963James Dong 190c1bc742181ded4930842b46e9507372f0b1b963James Dong Table of contents 200c1bc742181ded4930842b46e9507372f0b1b963James Dong 210c1bc742181ded4930842b46e9507372f0b1b963James Dong 1. Include Headers 220c1bc742181ded4930842b46e9507372f0b1b963James Dong 230c1bc742181ded4930842b46e9507372f0b1b963James Dong 2. Enumerations used as a return value or a parameter. 240c1bc742181ded4930842b46e9507372f0b1b963James Dong 2.1. API's return value enumerations. 250c1bc742181ded4930842b46e9507372f0b1b963James Dong 260c1bc742181ded4930842b46e9507372f0b1b963James Dong 3. User Structures 270c1bc742181ded4930842b46e9507372f0b1b963James Dong 3.1. Structures for H264SwDecDecode() parameters. 280c1bc742181ded4930842b46e9507372f0b1b963James Dong 3.2. Structures for information interchange with 290c1bc742181ded4930842b46e9507372f0b1b963James Dong DEC API and user application. 300c1bc742181ded4930842b46e9507372f0b1b963James Dong 310c1bc742181ded4930842b46e9507372f0b1b963James Dong 4. Prototypes of Decoder API functions 320c1bc742181ded4930842b46e9507372f0b1b963James Dong 330c1bc742181ded4930842b46e9507372f0b1b963James Dong------------------------------------------------------------------------------*/ 340c1bc742181ded4930842b46e9507372f0b1b963James Dong 350c1bc742181ded4930842b46e9507372f0b1b963James Dong#ifndef H264SWDECAPI_H 360c1bc742181ded4930842b46e9507372f0b1b963James Dong#define H264SWDECAPI_H 370c1bc742181ded4930842b46e9507372f0b1b963James Dong 380c1bc742181ded4930842b46e9507372f0b1b963James Dong#ifdef __cplusplus 390c1bc742181ded4930842b46e9507372f0b1b963James Dongextern "C" 400c1bc742181ded4930842b46e9507372f0b1b963James Dong{ 410c1bc742181ded4930842b46e9507372f0b1b963James Dong#endif 420c1bc742181ded4930842b46e9507372f0b1b963James Dong 430c1bc742181ded4930842b46e9507372f0b1b963James Dong/*------------------------------------------------------------------------------ 440c1bc742181ded4930842b46e9507372f0b1b963James Dong 1. Include Headers 450c1bc742181ded4930842b46e9507372f0b1b963James Dong------------------------------------------------------------------------------*/ 460c1bc742181ded4930842b46e9507372f0b1b963James Dong 470c1bc742181ded4930842b46e9507372f0b1b963James Dong #include "basetype.h" 480c1bc742181ded4930842b46e9507372f0b1b963James Dong 490c1bc742181ded4930842b46e9507372f0b1b963James Dong/*------------------------------------------------------------------------------ 500c1bc742181ded4930842b46e9507372f0b1b963James Dong 2.1. API's return value enumerations. 510c1bc742181ded4930842b46e9507372f0b1b963James Dong------------------------------------------------------------------------------*/ 520c1bc742181ded4930842b46e9507372f0b1b963James Dong 530c1bc742181ded4930842b46e9507372f0b1b963James Dong typedef enum 540c1bc742181ded4930842b46e9507372f0b1b963James Dong { 550c1bc742181ded4930842b46e9507372f0b1b963James Dong H264SWDEC_OK = 0, 560c1bc742181ded4930842b46e9507372f0b1b963James Dong H264SWDEC_STRM_PROCESSED = 1, 570c1bc742181ded4930842b46e9507372f0b1b963James Dong H264SWDEC_PIC_RDY, 580c1bc742181ded4930842b46e9507372f0b1b963James Dong H264SWDEC_PIC_RDY_BUFF_NOT_EMPTY, 590c1bc742181ded4930842b46e9507372f0b1b963James Dong H264SWDEC_HDRS_RDY_BUFF_NOT_EMPTY, 600c1bc742181ded4930842b46e9507372f0b1b963James Dong H264SWDEC_PARAM_ERR = -1, 610c1bc742181ded4930842b46e9507372f0b1b963James Dong H264SWDEC_STRM_ERR = -2, 620c1bc742181ded4930842b46e9507372f0b1b963James Dong H264SWDEC_NOT_INITIALIZED = -3, 630c1bc742181ded4930842b46e9507372f0b1b963James Dong H264SWDEC_MEMFAIL = -4, 640c1bc742181ded4930842b46e9507372f0b1b963James Dong H264SWDEC_INITFAIL = -5, 650c1bc742181ded4930842b46e9507372f0b1b963James Dong H264SWDEC_HDRS_NOT_RDY = -6, 660c1bc742181ded4930842b46e9507372f0b1b963James Dong H264SWDEC_EVALUATION_LIMIT_EXCEEDED = -7 670c1bc742181ded4930842b46e9507372f0b1b963James Dong } H264SwDecRet; 680c1bc742181ded4930842b46e9507372f0b1b963James Dong 690c1bc742181ded4930842b46e9507372f0b1b963James Dong/*------------------------------------------------------------------------------ 700c1bc742181ded4930842b46e9507372f0b1b963James Dong 3.1. Structures for H264SwDecDecode() parameters. 710c1bc742181ded4930842b46e9507372f0b1b963James Dong------------------------------------------------------------------------------*/ 720c1bc742181ded4930842b46e9507372f0b1b963James Dong 730c1bc742181ded4930842b46e9507372f0b1b963James Dong /* typedef of the Decoder instance */ 740c1bc742181ded4930842b46e9507372f0b1b963James Dong typedef void *H264SwDecInst; 750c1bc742181ded4930842b46e9507372f0b1b963James Dong 760c1bc742181ded4930842b46e9507372f0b1b963James Dong /* Input structure */ 770c1bc742181ded4930842b46e9507372f0b1b963James Dong typedef struct 780c1bc742181ded4930842b46e9507372f0b1b963James Dong { 790c1bc742181ded4930842b46e9507372f0b1b963James Dong u8 *pStream; /* Pointer to stream to be decoded */ 800c1bc742181ded4930842b46e9507372f0b1b963James Dong u32 dataLen; /* Number of bytes to be decoded */ 810c1bc742181ded4930842b46e9507372f0b1b963James Dong u32 picId; /* Identifier for the picture to be decoded */ 820c1bc742181ded4930842b46e9507372f0b1b963James Dong u32 intraConcealmentMethod; /* 0 = Gray concealment for intra 830c1bc742181ded4930842b46e9507372f0b1b963James Dong 1 = Reference concealment for intra */ 840c1bc742181ded4930842b46e9507372f0b1b963James Dong 850c1bc742181ded4930842b46e9507372f0b1b963James Dong } H264SwDecInput; 860c1bc742181ded4930842b46e9507372f0b1b963James Dong 870c1bc742181ded4930842b46e9507372f0b1b963James Dong 880c1bc742181ded4930842b46e9507372f0b1b963James Dong /* Output structure */ 890c1bc742181ded4930842b46e9507372f0b1b963James Dong typedef struct 900c1bc742181ded4930842b46e9507372f0b1b963James Dong { 910c1bc742181ded4930842b46e9507372f0b1b963James Dong u8 *pStrmCurrPos; /* Pointer to stream position where decoder 920c1bc742181ded4930842b46e9507372f0b1b963James Dong ended up */ 930c1bc742181ded4930842b46e9507372f0b1b963James Dong } H264SwDecOutput; 940c1bc742181ded4930842b46e9507372f0b1b963James Dong 950c1bc742181ded4930842b46e9507372f0b1b963James Dong /* Output structure for H264SwDecNextPicture */ 960c1bc742181ded4930842b46e9507372f0b1b963James Dong typedef struct 970c1bc742181ded4930842b46e9507372f0b1b963James Dong { 980c1bc742181ded4930842b46e9507372f0b1b963James Dong u32 *pOutputPicture; /* Pointer to the picture, YUV format */ 990c1bc742181ded4930842b46e9507372f0b1b963James Dong u32 picId; /* Identifier of the picture to be displayed*/ 1000c1bc742181ded4930842b46e9507372f0b1b963James Dong u32 isIdrPicture; /* Flag to indicate if the picture is an 1010c1bc742181ded4930842b46e9507372f0b1b963James Dong IDR picture */ 1020c1bc742181ded4930842b46e9507372f0b1b963James Dong u32 nbrOfErrMBs; /* Number of concealed MB's in the picture */ 1030c1bc742181ded4930842b46e9507372f0b1b963James Dong } H264SwDecPicture; 1040c1bc742181ded4930842b46e9507372f0b1b963James Dong 1050c1bc742181ded4930842b46e9507372f0b1b963James Dong/*------------------------------------------------------------------------------ 1060c1bc742181ded4930842b46e9507372f0b1b963James Dong 3.2. Structures for information interchange with DEC API 1070c1bc742181ded4930842b46e9507372f0b1b963James Dong and user application. 1080c1bc742181ded4930842b46e9507372f0b1b963James Dong------------------------------------------------------------------------------*/ 1090c1bc742181ded4930842b46e9507372f0b1b963James Dong 1100c1bc742181ded4930842b46e9507372f0b1b963James Dong typedef struct 1110c1bc742181ded4930842b46e9507372f0b1b963James Dong { 1120c1bc742181ded4930842b46e9507372f0b1b963James Dong u32 cropLeftOffset; 1130c1bc742181ded4930842b46e9507372f0b1b963James Dong u32 cropOutWidth; 1140c1bc742181ded4930842b46e9507372f0b1b963James Dong u32 cropTopOffset; 1150c1bc742181ded4930842b46e9507372f0b1b963James Dong u32 cropOutHeight; 1160c1bc742181ded4930842b46e9507372f0b1b963James Dong } CropParams; 1170c1bc742181ded4930842b46e9507372f0b1b963James Dong 1180c1bc742181ded4930842b46e9507372f0b1b963James Dong typedef struct 1190c1bc742181ded4930842b46e9507372f0b1b963James Dong { 1200c1bc742181ded4930842b46e9507372f0b1b963James Dong u32 profile; 1210c1bc742181ded4930842b46e9507372f0b1b963James Dong u32 picWidth; 1220c1bc742181ded4930842b46e9507372f0b1b963James Dong u32 picHeight; 1230c1bc742181ded4930842b46e9507372f0b1b963James Dong u32 videoRange; 1240c1bc742181ded4930842b46e9507372f0b1b963James Dong u32 matrixCoefficients; 1250c1bc742181ded4930842b46e9507372f0b1b963James Dong u32 parWidth; 1260c1bc742181ded4930842b46e9507372f0b1b963James Dong u32 parHeight; 1270c1bc742181ded4930842b46e9507372f0b1b963James Dong u32 croppingFlag; 1280c1bc742181ded4930842b46e9507372f0b1b963James Dong CropParams cropParams; 1290c1bc742181ded4930842b46e9507372f0b1b963James Dong } H264SwDecInfo; 1300c1bc742181ded4930842b46e9507372f0b1b963James Dong 1310c1bc742181ded4930842b46e9507372f0b1b963James Dong /* Version information */ 1320c1bc742181ded4930842b46e9507372f0b1b963James Dong typedef struct 1330c1bc742181ded4930842b46e9507372f0b1b963James Dong { 1340c1bc742181ded4930842b46e9507372f0b1b963James Dong u32 major; /* Decoder API major version */ 1350c1bc742181ded4930842b46e9507372f0b1b963James Dong u32 minor; /* Dncoder API minor version */ 1360c1bc742181ded4930842b46e9507372f0b1b963James Dong } H264SwDecApiVersion; 1370c1bc742181ded4930842b46e9507372f0b1b963James Dong 1380c1bc742181ded4930842b46e9507372f0b1b963James Dong/*------------------------------------------------------------------------------ 1390c1bc742181ded4930842b46e9507372f0b1b963James Dong 4. Prototypes of Decoder API functions 1400c1bc742181ded4930842b46e9507372f0b1b963James Dong------------------------------------------------------------------------------*/ 1410c1bc742181ded4930842b46e9507372f0b1b963James Dong 1420c1bc742181ded4930842b46e9507372f0b1b963James Dong H264SwDecRet H264SwDecDecode(H264SwDecInst decInst, 1430c1bc742181ded4930842b46e9507372f0b1b963James Dong H264SwDecInput *pInput, 1440c1bc742181ded4930842b46e9507372f0b1b963James Dong H264SwDecOutput *pOutput); 1450c1bc742181ded4930842b46e9507372f0b1b963James Dong 1460c1bc742181ded4930842b46e9507372f0b1b963James Dong H264SwDecRet H264SwDecInit(H264SwDecInst *decInst, 1470c1bc742181ded4930842b46e9507372f0b1b963James Dong u32 noOutputReordering); 1480c1bc742181ded4930842b46e9507372f0b1b963James Dong 1490c1bc742181ded4930842b46e9507372f0b1b963James Dong H264SwDecRet H264SwDecNextPicture(H264SwDecInst decInst, 1500c1bc742181ded4930842b46e9507372f0b1b963James Dong H264SwDecPicture *pOutput, 1510c1bc742181ded4930842b46e9507372f0b1b963James Dong u32 endOfStream); 1520c1bc742181ded4930842b46e9507372f0b1b963James Dong 1530c1bc742181ded4930842b46e9507372f0b1b963James Dong H264SwDecRet H264SwDecGetInfo(H264SwDecInst decInst, 1540c1bc742181ded4930842b46e9507372f0b1b963James Dong H264SwDecInfo *pDecInfo); 1550c1bc742181ded4930842b46e9507372f0b1b963James Dong 1560c1bc742181ded4930842b46e9507372f0b1b963James Dong void H264SwDecRelease(H264SwDecInst decInst); 1570c1bc742181ded4930842b46e9507372f0b1b963James Dong 1580c1bc742181ded4930842b46e9507372f0b1b963James Dong H264SwDecApiVersion H264SwDecGetAPIVersion(void); 1590c1bc742181ded4930842b46e9507372f0b1b963James Dong 1600c1bc742181ded4930842b46e9507372f0b1b963James Dong /* function prototype for API trace */ 1610c1bc742181ded4930842b46e9507372f0b1b963James Dong void H264SwDecTrace(char *); 1620c1bc742181ded4930842b46e9507372f0b1b963James Dong 1630c1bc742181ded4930842b46e9507372f0b1b963James Dong /* function prototype for memory allocation */ 164a3dd713893658baf50df88b261aba83bb0c40687Marco Nelissen void* H264SwDecMalloc(u32 size, u32 num); 1650c1bc742181ded4930842b46e9507372f0b1b963James Dong 1660c1bc742181ded4930842b46e9507372f0b1b963James Dong /* function prototype for memory free */ 1670c1bc742181ded4930842b46e9507372f0b1b963James Dong void H264SwDecFree(void *ptr); 1680c1bc742181ded4930842b46e9507372f0b1b963James Dong 1690c1bc742181ded4930842b46e9507372f0b1b963James Dong /* function prototype for memory copy */ 1700c1bc742181ded4930842b46e9507372f0b1b963James Dong void H264SwDecMemcpy(void *dest, void *src, u32 count); 1710c1bc742181ded4930842b46e9507372f0b1b963James Dong 1720c1bc742181ded4930842b46e9507372f0b1b963James Dong /* function prototype for memset */ 1730c1bc742181ded4930842b46e9507372f0b1b963James Dong void H264SwDecMemset(void *ptr, i32 value, u32 count); 1740c1bc742181ded4930842b46e9507372f0b1b963James Dong 1750c1bc742181ded4930842b46e9507372f0b1b963James Dong 1760c1bc742181ded4930842b46e9507372f0b1b963James Dong#ifdef __cplusplus 1770c1bc742181ded4930842b46e9507372f0b1b963James Dong} 1780c1bc742181ded4930842b46e9507372f0b1b963James Dong#endif 1790c1bc742181ded4930842b46e9507372f0b1b963James Dong 1800c1bc742181ded4930842b46e9507372f0b1b963James Dong#endif /* H264SWDECAPI_H */ 1810c1bc742181ded4930842b46e9507372f0b1b963James Dong 1820c1bc742181ded4930842b46e9507372f0b1b963James Dong 1830c1bc742181ded4930842b46e9507372f0b1b963James Dong 1840c1bc742181ded4930842b46e9507372f0b1b963James Dong 1850c1bc742181ded4930842b46e9507372f0b1b963James Dong 1860c1bc742181ded4930842b46e9507372f0b1b963James Dong 1870c1bc742181ded4930842b46e9507372f0b1b963James Dong 1880c1bc742181ded4930842b46e9507372f0b1b963James Dong 1890c1bc742181ded4930842b46e9507372f0b1b963James Dong 1900c1bc742181ded4930842b46e9507372f0b1b963James Dong 1910c1bc742181ded4930842b46e9507372f0b1b963James Dong 1920c1bc742181ded4930842b46e9507372f0b1b963James Dong 193