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