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