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