1609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/* ------------------------------------------------------------------
2609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber * Copyright (C) 1998-2009 PacketVideo
3609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber *
4609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
5609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber * you may not use this file except in compliance with the License.
6609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber * You may obtain a copy of the License at
7609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber *
8609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
9609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber *
10609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber * Unless required by applicable law or agreed to in writing, software
11609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
12609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber * express or implied.
14609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber * See the License for the specific language governing permissions
15609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber * and limitations under the License.
16609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber * -------------------------------------------------------------------
17609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber */
18609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/**
19609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberThis file contains common type definitions and enumerations used by AVC encoder
20609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huberand decoder libraries which are exposed to the users.
21609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber@publishedAll
22609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/
23609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
24609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#ifndef AVCAPI_COMMON_H_INCLUDED
25609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define AVCAPI_COMMON_H_INCLUDED
26609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
27609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#include "avc_types.h"
28609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
29609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define PV_MEMORY_POOL
30609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/**
31609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberThis is common return status.
32609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber@publishedAll
33609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/
34609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Hubertypedef enum
35609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber{
36609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_NO_BUFFER = -2,
37609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_MEMORY_FAIL = -1,
38609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_FAIL = 0,
39609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_SUCCESS = 1,
40609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_PICTURE_OUTPUT_READY = 2
41609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber} AVCStatus;
42609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
43609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/**
44609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberThis enumeration is for profiles. The value follows the profile_idc  in sequence
45609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huberparameter set rbsp. See Annex A.
46609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber@publishedAll
47609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/
48609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Hubertypedef enum
49609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber{
50609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_BASELINE = 66,
51609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_MAIN = 77,
52609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_EXTENDED = 88,
53609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_HIGH = 100,
54609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_HIGH10 = 110,
55609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_HIGH422 = 122,
56609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_HIGH444 = 144
57609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber} AVCProfile;
58609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
59609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/**
60609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberThis enumeration is for levels. The value follows the level_idc in sequence
61609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huberparameter set rbsp. See Annex A.
62609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber@published All
63609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/
64609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Hubertypedef enum
65609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber{
66609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_LEVEL_AUTO = 0,
67609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_LEVEL1_B = 9,
68609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_LEVEL1 = 10,
69609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_LEVEL1_1 = 11,
70609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_LEVEL1_2 = 12,
71609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_LEVEL1_3 = 13,
72609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_LEVEL2 = 20,
73609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_LEVEL2_1 = 21,
74609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_LEVEL2_2 = 22,
75609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_LEVEL3 = 30,
76609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_LEVEL3_1 = 31,
77609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_LEVEL3_2 = 32,
78609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_LEVEL4 = 40,
79609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_LEVEL4_1 = 41,
80609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_LEVEL4_2 = 42,
81609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_LEVEL5 = 50,
82609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_LEVEL5_1 = 51
83609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber} AVCLevel;
84609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
85609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/**
86609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberThis enumeration follows Table 7-1 for NAL unit type codes.
87609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberThis may go to avccommon_api.h later (external common).
88609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber@publishedAll
89609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/
90609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Hubertypedef enum
91609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber{
92609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_NALTYPE_SLICE = 1,  /* non-IDR non-data partition */
93609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_NALTYPE_DPA = 2,    /* data partition A */
94609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_NALTYPE_DPB = 3,    /* data partition B */
95609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_NALTYPE_DPC = 4,    /* data partition C */
96609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_NALTYPE_IDR = 5,    /* IDR NAL */
97609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_NALTYPE_SEI = 6,    /* supplemental enhancement info */
98609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_NALTYPE_SPS = 7,    /* sequence parameter set */
99609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_NALTYPE_PPS = 8,    /* picture parameter set */
100609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_NALTYPE_AUD = 9,    /* access unit delimiter */
101609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_NALTYPE_EOSEQ = 10, /* end of sequence */
102609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_NALTYPE_EOSTREAM = 11, /* end of stream */
103609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_NALTYPE_FILL = 12   /* filler data */
104609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber} AVCNalUnitType;
105609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
106609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/**
107609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberThis enumeration specifies debug logging type.
108609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberThis may go to avccommon_api.h later (external common).
109609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber@publishedAll
110609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/
111609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Hubertypedef enum
112609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber{
113609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_LOGTYPE_ERROR = 0,
114609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_LOGTYPE_WARNING = 1,
115609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_LOGTYPE_INFO = 2
116609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber} AVCLogType;
117609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
118609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/**
119609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberThis enumerate the status of certain flags.
120609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber@publishedAll
121609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/
122609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Hubertypedef enum
123609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber{
124609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_OFF = 0,
125609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    AVC_ON = 1
126609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber} AVCFlag;
127609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
128609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/**
129609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberThis structure contains input information.
130609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberNote, this structure is identical to AVCDecOutput for now.
131609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/
132609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Hubertypedef struct tagAVCFrameIO
133609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber{
134609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    /** A unique identification number for a particular instance of this structure.
135609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    To remain unchanged by the application between the time when it is given to the
136609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    library and the time when the library returns it back. */
137609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    uint32 id;
138609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
139609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    /** Array of pointers to Y,Cb,Cr content in 4:2:0 format. For AVC decoding,
140609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    this memory is allocated by the AVC decoder library. For AVC encoding, only the
141609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    memory for original unencoded frame is allocated by the application. Internal
142609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    memory is also allocated by the AVC encoder library. */
143609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    uint8 *YCbCr[3];
144609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
145609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    /** In/Out: Coded width of the luma component, it has to be multiple of 16. */
146609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    int pitch;
147609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
148609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    /** In/Out: Coded height of the luma component, must be multiple of 16. */
149609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    int height;
150609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
151609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    /** In/Out: Display width, less than picth */
152609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    int clip_width;
153609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
154609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    /** In/Out: Display height, less than height */
155609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    int clip_height;
156609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
157609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    /** Input: Origin of the display area [0]=>row, [1]=>column  */
158609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    int clip_origin[2];
159609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
160609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    /** Output: Frame number in de/encoding order (not necessary)*/
161609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    uint32 coding_order;
162609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
163609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    /** Output: Frame number in displaying order (this may or may not be associated with the POC at all!!!). */
164609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    uint32 disp_order;
165609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
166609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    /** In/Out: Flag for use for reference or not. */
167609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    uint  is_reference;
168609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
169609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    /** In/Out: Coding timestamp in msec (not display timestamp) */
170609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    uint32 coding_timestamp;
171609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
172609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    /* there could be something else here such as format, DON (decoding order number)
173609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber     if available thru SEI, etc. */
174609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber} AVCFrameIO;
175609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
176609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
177609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** CALLBACK FUNCTION TO BE IMPLEMENTED BY APPLICATION */
178609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** In AVCDecControls structure, userData is a pointer to an object with the following
179609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    member functions.
180609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/
181609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
182609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
183609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** @brief Decoded picture buffers (DPB) must be allocated or re-allocated before an
184609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    IDR frame is decoded. If PV_MEMORY_POOL is not defined, AVC lib will allocate DPB
185609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    internally which cannot be shared with the application. In that case, this function
186609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    will not be called.
187609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    @param userData  The same value of userData in AVCHandle object.
188609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    @param frame_size_in_mbs  The size of each frame in number of macroblocks.
189609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    @param num_frames The number of frames in DPB.
190609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    @return 1 for success, 0 for fail (cannot allocate DPB)
191609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/
192609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
193609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Hubertypedef int (*FunctionType_DPBAlloc)(void *userData, uint frame_size_in_mbs, uint num_buffers);
194609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
195609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** @brief AVC library calls this function is reserve a memory of one frame from the DPB.
196609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    Once reserved, this frame shall not be deleted or over-written by the app.
197609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    @param userData  The same value of userData in AVCHandle object.
198609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    @param indx      Index of a frame in DPB (AVC library keeps track of the index).
199609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    @param yuv      The address of the yuv pointer returned to the AVC lib.
200609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    @return         1 for success, 0 for fail (no frames available to bind).
201609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    */
202609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Hubertypedef int (*FunctionType_FrameBind)(void *userData, int indx, uint8 **yuv);
203609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
204609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** @brief AVC library calls this function once a bound frame is not needed for decoding
205609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    operation (falls out of the sliding window, or marked unused for reference).
206609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    @param userData  The same value of userData in AVCHandle object.
207609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    @param indx      Index of frame to be unbound (AVC library keeps track of the index).
208609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    @return  none.
209609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/
210609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Hubertypedef void (*FuctionType_FrameUnbind)(void *userData, int);
211609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
212609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** Pointer to malloc function for general memory allocation, so that application can keep track of
213609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    memory usage.
214609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber\param "size" "Size of requested memory in bytes."
215609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber\param "attribute" "Some value specifying types, priority, etc. of the memory."
216359d8fcd30ff0a8390e4c5560d53ec55a4cc5bcdMartin Storsjo\return "The address of the allocated, zero-initialized memory"
217609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/
21823da4cf305b9bfff07954711a8a2d9ec040865afMartin Storsjotypedef void* (*FunctionType_Malloc)(void *userData, int32 size, int attribute);
219609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
220609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** Function pointer to free
22123da4cf305b9bfff07954711a8a2d9ec040865afMartin Storsjo\param "mem" "Pointer to the memory to be freed"
222609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber\return "void"
223609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/
22423da4cf305b9bfff07954711a8a2d9ec040865afMartin Storsjotypedef void (*FunctionType_Free)(void *userData, void *mem);
225609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
226609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/** Debug logging information is returned to the application thru this function.
227609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber\param "type"   "Type of logging message, see definition of AVCLogType."
228609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber\param "string1"    "Logging message."
229609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber\param "string2"    "To be defined."
230609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/
231609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Hubertypedef void (*FunctionType_DebugLog)(uint32 *userData, AVCLogType type, char *string1, int val1, int val2);
232609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
233609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber/**
234609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberThis structure has to be allocated and maintained by the user of the library.
235609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas HuberThis structure is used as a handle to the library object.
236609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber*/
237609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Hubertypedef struct tagAVCHandle
238609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber{
239609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    /** A pointer to the internal data structure. Users have to make sure that this value
240609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber        is NULL at the beginning.
241609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    */
242609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    void        *AVCObject;
243609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
244609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    /** A pointer to user object which has the following member functions used for
245609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    callback purpose.  !!! */
246609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    void        *userData;
247609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
248609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    /** Pointers to functions implemented by the users of AVC library */
249609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    FunctionType_DPBAlloc CBAVC_DPBAlloc;
250609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
251609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    FunctionType_FrameBind CBAVC_FrameBind;
252609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
253609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    FuctionType_FrameUnbind CBAVC_FrameUnbind;
254609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
255609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    FunctionType_Malloc CBAVC_Malloc;
256609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
257609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    FunctionType_Free  CBAVC_Free;
258609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
259609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    FunctionType_DebugLog CBAVC_DebugLog;
260609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
261609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    /** Flag to enable debugging */
262609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber    uint32  debugEnable;
263609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
264609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber} AVCHandle;
265609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
266609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
267609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
268609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#ifdef PVDEBUGMSG_LOG
269609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define DEBUG_LOG(a,b,c,d,e)    CBAVC_DebugLog(a,b,c,d,e)
270609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#else
271609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#define DEBUG_LOG(a,b,c,d,e)
272609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#endif
273609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber
274609f1a00c96cf5605f4614e7bb6d0487c98969c5Andreas Huber#endif /* _AVCAPI_COMMON_H_ */
275