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
39extern "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