1/* ------------------------------------------------------------------
2 * Copyright (C) 1998-2009 PacketVideo
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
13 * express or implied.
14 * See the License for the specific language governing permissions
15 * and limitations under the License.
16 * -------------------------------------------------------------------
17 */
18/**
19This file contains common type definitions and enumerations used by AVC encoder
20and decoder libraries which are exposed to the users.
21@publishedAll
22*/
23
24#ifndef AVCAPI_COMMON_H_INCLUDED
25#define AVCAPI_COMMON_H_INCLUDED
26
27#include "avc_types.h"
28
29#define PV_MEMORY_POOL
30/**
31This is common return status.
32@publishedAll
33*/
34typedef enum
35{
36    AVC_NO_BUFFER = -2,
37    AVC_MEMORY_FAIL = -1,
38    AVC_FAIL = 0,
39    AVC_SUCCESS = 1,
40    AVC_PICTURE_OUTPUT_READY = 2
41} AVCStatus;
42
43/**
44This enumeration is for profiles. The value follows the profile_idc  in sequence
45parameter set rbsp. See Annex A.
46@publishedAll
47*/
48typedef enum
49{
50    AVC_BASELINE = 66,
51    AVC_MAIN = 77,
52    AVC_EXTENDED = 88,
53    AVC_HIGH = 100,
54    AVC_HIGH10 = 110,
55    AVC_HIGH422 = 122,
56    AVC_HIGH444 = 144
57} AVCProfile;
58
59/**
60This enumeration is for levels. The value follows the level_idc in sequence
61parameter set rbsp. See Annex A.
62@published All
63*/
64typedef enum
65{
66    AVC_LEVEL_AUTO = 0,
67    AVC_LEVEL1_B = 9,
68    AVC_LEVEL1 = 10,
69    AVC_LEVEL1_1 = 11,
70    AVC_LEVEL1_2 = 12,
71    AVC_LEVEL1_3 = 13,
72    AVC_LEVEL2 = 20,
73    AVC_LEVEL2_1 = 21,
74    AVC_LEVEL2_2 = 22,
75    AVC_LEVEL3 = 30,
76    AVC_LEVEL3_1 = 31,
77    AVC_LEVEL3_2 = 32,
78    AVC_LEVEL4 = 40,
79    AVC_LEVEL4_1 = 41,
80    AVC_LEVEL4_2 = 42,
81    AVC_LEVEL5 = 50,
82    AVC_LEVEL5_1 = 51
83} AVCLevel;
84
85/**
86This enumeration follows Table 7-1 for NAL unit type codes.
87This may go to avccommon_api.h later (external common).
88@publishedAll
89*/
90typedef enum
91{
92    AVC_NALTYPE_SLICE = 1,  /* non-IDR non-data partition */
93    AVC_NALTYPE_DPA = 2,    /* data partition A */
94    AVC_NALTYPE_DPB = 3,    /* data partition B */
95    AVC_NALTYPE_DPC = 4,    /* data partition C */
96    AVC_NALTYPE_IDR = 5,    /* IDR NAL */
97    AVC_NALTYPE_SEI = 6,    /* supplemental enhancement info */
98    AVC_NALTYPE_SPS = 7,    /* sequence parameter set */
99    AVC_NALTYPE_PPS = 8,    /* picture parameter set */
100    AVC_NALTYPE_AUD = 9,    /* access unit delimiter */
101    AVC_NALTYPE_EOSEQ = 10, /* end of sequence */
102    AVC_NALTYPE_EOSTREAM = 11, /* end of stream */
103    AVC_NALTYPE_FILL = 12   /* filler data */
104} AVCNalUnitType;
105
106/**
107This enumeration specifies debug logging type.
108This may go to avccommon_api.h later (external common).
109@publishedAll
110*/
111typedef enum
112{
113    AVC_LOGTYPE_ERROR = 0,
114    AVC_LOGTYPE_WARNING = 1,
115    AVC_LOGTYPE_INFO = 2
116} AVCLogType;
117
118/**
119This enumerate the status of certain flags.
120@publishedAll
121*/
122typedef enum
123{
124    AVC_OFF = 0,
125    AVC_ON = 1
126} AVCFlag;
127
128/**
129This structure contains input information.
130Note, this structure is identical to AVCDecOutput for now.
131*/
132typedef struct tagAVCFrameIO
133{
134    /** A unique identification number for a particular instance of this structure.
135    To remain unchanged by the application between the time when it is given to the
136    library and the time when the library returns it back. */
137    uint32 id;
138
139    /** Array of pointers to Y,Cb,Cr content in 4:2:0 format. For AVC decoding,
140    this memory is allocated by the AVC decoder library. For AVC encoding, only the
141    memory for original unencoded frame is allocated by the application. Internal
142    memory is also allocated by the AVC encoder library. */
143    uint8 *YCbCr[3];
144
145    /** In/Out: Coded width of the luma component, it has to be multiple of 16. */
146    int pitch;
147
148    /** In/Out: Coded height of the luma component, must be multiple of 16. */
149    int height;
150
151    /** In/Out: Display width, less than picth */
152    int clip_width;
153
154    /** In/Out: Display height, less than height */
155    int clip_height;
156
157    /** Input: Origin of the display area [0]=>row, [1]=>column  */
158    int clip_origin[2];
159
160    /** Output: Frame number in de/encoding order (not necessary)*/
161    uint32 coding_order;
162
163    /** Output: Frame number in displaying order (this may or may not be associated with the POC at all!!!). */
164    uint32 disp_order;
165
166    /** In/Out: Flag for use for reference or not. */
167    uint  is_reference;
168
169    /** In/Out: Coding timestamp in msec (not display timestamp) */
170    uint32 coding_timestamp;
171
172    /* there could be something else here such as format, DON (decoding order number)
173     if available thru SEI, etc. */
174} AVCFrameIO;
175
176
177/** CALLBACK FUNCTION TO BE IMPLEMENTED BY APPLICATION */
178/** In AVCDecControls structure, userData is a pointer to an object with the following
179    member functions.
180*/
181
182
183/** @brief Decoded picture buffers (DPB) must be allocated or re-allocated before an
184    IDR frame is decoded. If PV_MEMORY_POOL is not defined, AVC lib will allocate DPB
185    internally which cannot be shared with the application. In that case, this function
186    will not be called.
187    @param userData  The same value of userData in AVCHandle object.
188    @param frame_size_in_mbs  The size of each frame in number of macroblocks.
189    @param num_frames The number of frames in DPB.
190    @return 1 for success, 0 for fail (cannot allocate DPB)
191*/
192
193typedef int (*FunctionType_DPBAlloc)(void *userData, uint frame_size_in_mbs, uint num_buffers);
194
195/** @brief AVC library calls this function is reserve a memory of one frame from the DPB.
196    Once reserved, this frame shall not be deleted or over-written by the app.
197    @param userData  The same value of userData in AVCHandle object.
198    @param indx      Index of a frame in DPB (AVC library keeps track of the index).
199    @param yuv      The address of the yuv pointer returned to the AVC lib.
200    @return         1 for success, 0 for fail (no frames available to bind).
201    */
202typedef int (*FunctionType_FrameBind)(void *userData, int indx, uint8 **yuv);
203
204/** @brief AVC library calls this function once a bound frame is not needed for decoding
205    operation (falls out of the sliding window, or marked unused for reference).
206    @param userData  The same value of userData in AVCHandle object.
207    @param indx      Index of frame to be unbound (AVC library keeps track of the index).
208    @return  none.
209*/
210typedef void (*FuctionType_FrameUnbind)(void *userData, int);
211
212/** Pointer to malloc function for general memory allocation, so that application can keep track of
213    memory usage.
214\param "size" "Size of requested memory in bytes."
215\param "attribute" "Some value specifying types, priority, etc. of the memory."
216\return "The address of the allocated, zero-initialized memory"
217*/
218typedef void* (*FunctionType_Malloc)(void *userData, int32 size, int attribute);
219
220/** Function pointer to free
221\param "mem" "Pointer to the memory to be freed"
222\return "void"
223*/
224typedef void (*FunctionType_Free)(void *userData, void *mem);
225
226/** Debug logging information is returned to the application thru this function.
227\param "type"   "Type of logging message, see definition of AVCLogType."
228\param "string1"    "Logging message."
229\param "string2"    "To be defined."
230*/
231typedef void (*FunctionType_DebugLog)(uint32 *userData, AVCLogType type, char *string1, int val1, int val2);
232
233/**
234This structure has to be allocated and maintained by the user of the library.
235This structure is used as a handle to the library object.
236*/
237typedef struct tagAVCHandle
238{
239    /** A pointer to the internal data structure. Users have to make sure that this value
240        is NULL at the beginning.
241    */
242    void        *AVCObject;
243
244    /** A pointer to user object which has the following member functions used for
245    callback purpose.  !!! */
246    void        *userData;
247
248    /** Pointers to functions implemented by the users of AVC library */
249    FunctionType_DPBAlloc CBAVC_DPBAlloc;
250
251    FunctionType_FrameBind CBAVC_FrameBind;
252
253    FuctionType_FrameUnbind CBAVC_FrameUnbind;
254
255    FunctionType_Malloc CBAVC_Malloc;
256
257    FunctionType_Free  CBAVC_Free;
258
259    FunctionType_DebugLog CBAVC_DebugLog;
260
261    /** Flag to enable debugging */
262    uint32  debugEnable;
263
264} AVCHandle;
265
266
267
268#ifdef PVDEBUGMSG_LOG
269#define DEBUG_LOG(a,b,c,d,e)    CBAVC_DebugLog(a,b,c,d,e)
270#else
271#define DEBUG_LOG(a,b,c,d,e)
272#endif
273
274#endif /* _AVCAPI_COMMON_H_ */
275