• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 Samsung Electronics Co., Ltd.
3  * All Rights Reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *
8  * - Redistributions of source code must retain the above copyright notice,
9  *   this list of conditions and the following disclaimer.
10  *
11  * - Redistributions in binary form must reproduce the above copyright notice,
12  *   this list of conditions and the following disclaimer in the documentation
13  *   and/or other materials provided with the distribution.
14  *
15  * - Neither the name of the copyright owner, nor the names of its contributors
16  *   may be used to endorse or promote products derived from this software
17  *   without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22  * ARE DISCLAIMED.IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24  * CONSEQUENTIAL DAMAGES(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29  * POSSIBILITY OF SUCH DAMAGE.
30  */
31 
32 #ifndef __OAPV_H__3342320849320483827648324783920483920432847382948__
33 #define __OAPV_H__3342320849320483827648324783920483920432847382948__
34 
35 #ifdef __cplusplus
36 extern "C" {
37 #endif
38 
39 #ifdef OAPV_STATIC_DEFINE
40 #define OAPV_EXPORT
41 #else
42 #include <oapv/oapv_exports.h>
43 #endif
44 
45 
46 /* size of macroblock */
47 #define OAPV_LOG2_MB                    (4)
48 #define OAPV_LOG2_MB_W                  (4)
49 #define OAPV_LOG2_MB_H                  (4)
50 #define OAPV_MB_W                       (1 << OAPV_LOG2_MB_W)
51 #define OAPV_MB_H                       (1 << OAPV_LOG2_MB_H)
52 #define OAPV_MB_D                       (OAPV_MB_W * OAPV_MB_H)
53 
54 /* size of block */
55 #define OAPV_LOG2_BLK                   (3)
56 #define OAPV_LOG2_BLK_W                 (3)
57 #define OAPV_LOG2_BLK_H                 (3)
58 #define OAPV_BLK_W                      (1 << OAPV_LOG2_BLK)
59 #define OAPV_BLK_H                      (1 << OAPV_LOG2_BLK)
60 #define OAPV_BLK_D                      (OAPV_BLK_W * OAPV_BLK_H)
61 
62 /* size of tile */
63 #define OAPV_MAX_TILE_ROWS              (20)
64 #define OAPV_MAX_TILE_COLS              (20)
65 #define OAPV_MAX_TILES                  (OAPV_MAX_TILE_ROWS * OAPV_MAX_TILE_COLS)
66 #define OAPV_MIN_TILE_W_MB              (16)
67 #define OAPV_MIN_TILE_H_MB              (8)
68 
69 /* maximum number of thread */
70 #define OAPV_MAX_THREADS                (32)
71 
72 /*****************************************************************************
73  * return values and error code
74  *****************************************************************************/
75 #define OAPV_OK                         (0)
76 #define OAPV_ERR                        (-1) /* generic error */
77 #define OAPV_ERR_INVALID_ARGUMENT       (-101)
78 #define OAPV_ERR_OUT_OF_MEMORY          (-102)
79 #define OAPV_ERR_REACHED_MAX            (-103)
80 #define OAPV_ERR_UNSUPPORTED            (-104)
81 #define OAPV_ERR_UNEXPECTED             (-105)
82 #define OAPV_ERR_UNSUPPORTED_COLORSPACE (-201)
83 #define OAPV_ERR_MALFORMED_BITSTREAM    (-202)
84 #define OAPV_ERR_OUT_OF_BS_BUF          (-203) /* too small bitstream buffer */
85 #define OAPV_ERR_NOT_FOUND              (-204)
86 #define OAPV_ERR_FAILED_SYSCALL         (-301)   /* failed system call */
87 #define OAPV_ERR_UNKNOWN                (-32767) /* unknown error */
88 
89 /* return value checking */
90 #define OAPV_SUCCEEDED(ret)             ((ret) >= OAPV_OK)
91 #define OAPV_FAILED(ret)                ((ret) < OAPV_OK)
92 
93 /*****************************************************************************
94  * color spaces
95  * - value format = (endian << 14) | (bit-depth << 8) | (color format)
96  * - endian (1bit): little endian = 0, big endian = 1
97  * - bit-depth (6bit): 0~63
98  * - color format (8bit): 0~255
99  *****************************************************************************/
100 /* color formats */
101 #define OAPV_CF_UNKNOWN                 (0)  /* unknown color format */
102 #define OAPV_CF_YCBCR400                (10) /* Y only */
103 #define OAPV_CF_YCBCR420                (11) /* YCbCr 420 */
104 #define OAPV_CF_YCBCR422                (12) /* YCBCR 422 narrow chroma*/
105 #define OAPV_CF_YCBCR444                (13) /* YCBCR 444*/
106 #define OAPV_CF_YCBCR4444               (14) /* YCBCR 4444*/
107 #define OAPV_CF_YCBCR422N               OAPV_CF_YCBCR422
108 #define OAPV_CF_YCBCR422W               (18) /* YCBCR422 wide chroma */
109 #define OAPV_CF_PLANAR2                 (20) /* Planar Y, Combined CB-CR, 422 */
110 
111 /* macro for color space */
112 #define OAPV_CS_GET_FORMAT(cs)          (((cs) >> 0) & 0xFF)
113 #define OAPV_CS_GET_BIT_DEPTH(cs)       (((cs) >> 8) & 0x3F)
114 #define OAPV_CS_GET_BYTE_DEPTH(cs)      ((OAPV_CS_GET_BIT_DEPTH(cs) + 7) >> 3)
115 #define OAPV_CS_GET_ENDIAN(cs)          (((cs) >> 14) & 0x1)
116 #define OAPV_CS_SET(f, bit, e)          (((e) << 14) | ((bit) << 8) | (f))
117 #define OAPV_CS_SET_FORMAT(cs, v)       (((cs) & ~0xFF) | ((v) << 0))
118 #define OAPV_CS_SET_BIT_DEPTH(cs, v)    (((cs) & ~(0x3F << 8)) | ((v) << 8))
119 #define OAPV_CS_SET_ENDIAN(cs, v)       (((cs) & ~(0x1 << 14)) | ((v) << 14))
120 
121 /* pre-defined color spaces */
122 #define OAPV_CS_UNKNOWN                 OAPV_CS_SET(0, 0, 0)
123 #define OAPV_CS_YCBCR400                OAPV_CS_SET(OAPV_CF_YCBCR400, 8, 0)
124 #define OAPV_CS_YCBCR420                OAPV_CS_SET(OAPV_CF_YCBCR420, 8, 0)
125 #define OAPV_CS_YCBCR422                OAPV_CS_SET(OAPV_CF_YCBCR422, 8, 0)
126 #define OAPV_CS_YCBCR444                OAPV_CS_SET(OAPV_CF_YCBCR444, 8, 0)
127 #define OAPV_CS_YCBCR4444               OAPV_CS_SET(OAPV_CF_YCBCR4444, 8, 0)
128 #define OAPV_CS_YCBCR400_10LE           OAPV_CS_SET(OAPV_CF_YCBCR400, 10, 0)
129 #define OAPV_CS_YCBCR420_10LE           OAPV_CS_SET(OAPV_CF_YCBCR420, 10, 0)
130 #define OAPV_CS_YCBCR422_10LE           OAPV_CS_SET(OAPV_CF_YCBCR422, 10, 0)
131 #define OAPV_CS_YCBCR444_10LE           OAPV_CS_SET(OAPV_CF_YCBCR444, 10, 0)
132 #define OAPV_CS_YCBCR4444_10LE          OAPV_CS_SET(OAPV_CF_YCBCR4444, 10, 0)
133 #define OAPV_CS_YCBCR400_12LE           OAPV_CS_SET(OAPV_CF_YCBCR400, 12, 0)
134 #define OAPV_CS_YCBCR420_12LE           OAPV_CS_SET(OAPV_CF_YCBCR420, 12, 0)
135 #define OAPV_CS_YCBCR400_14LE           OAPV_CS_SET(OAPV_CF_YCBCR400, 14, 0)
136 #define OAPV_CS_YCBCR420_14LE           OAPV_CS_SET(OAPV_CF_YCBCR420, 14, 0)
137 #define OAPV_CS_P210                    OAPV_CS_SET(OAPV_CF_PLANAR2, 10, 0)
138 
139 /* max number of color channel: ex) YCbCr4444 -> 4 channels */
140 #define OAPV_MAX_CC                     (4)
141 
142 /*****************************************************************************
143  * config types
144  *****************************************************************************/
145 #define OAPV_CFG_SET_QP                 (201)
146 #define OAPV_CFG_SET_BPS                (202)
147 #define OAPV_CFG_SET_FPS_NUM            (204)
148 #define OAPV_CFG_SET_FPS_DEN            (205)
149 #define OAPV_CFG_SET_QP_MIN             (208)
150 #define OAPV_CFG_SET_QP_MAX             (209)
151 #define OAPV_CFG_SET_USE_FRM_HASH       (301)
152 #define OAPV_CFG_GET_QP_MIN             (600)
153 #define OAPV_CFG_GET_QP_MAX             (601)
154 #define OAPV_CFG_GET_QP                 (602)
155 #define OAPV_CFG_GET_RCT                (603)
156 #define OAPV_CFG_GET_BPS                (604)
157 #define OAPV_CFG_GET_FPS_NUM            (605)
158 #define OAPV_CFG_GET_FPS_DEN            (606)
159 #define OAPV_CFG_GET_WIDTH              (701)
160 #define OAPV_CFG_GET_HEIGHT             (702)
161 
162 /*****************************************************************************
163  * HLS configs
164  *****************************************************************************/
165 #define OAPV_MAX_GRP_SIZE               ((1 << 16) - 1) // 0xFFFF reserved
166 
167 /*****************************************************************************
168  * PBU types
169  *****************************************************************************/
170 #define OAPV_PBU_TYPE_RESERVED          (0)
171 #define OAPV_PBU_TYPE_PRIMARY_FRAME     (1)
172 #define OAPV_PBU_TYPE_NON_PRIMARY_FRAME (2)
173 #define OAPV_PBU_TYPE_PREVIEW_FRAME     (25)
174 #define OAPV_PBU_TYPE_DEPTH_FRAME       (26)
175 #define OAPV_PBU_TYPE_ALPHA_FRAME       (27)
176 #define OAPV_PBU_TYPE_AU_INFO           (65)
177 #define OAPV_PBU_TYPE_METADATA          (66)
178 #define OAPV_PBU_TYPE_FILLER            (67)
179 #define OAPV_PBU_TYPE_UNKNOWN           (-1)
180 #define OAPV_PBU_NUMS                   (10)
181 
182 #define OAPV_PBU_FRAME_TYPE_NUM         (5)
183 
184 /*****************************************************************************
185  * metadata types
186  *****************************************************************************/
187 #define OAPV_METADATA_ITU_T_T35         (4)
188 #define OAPV_METADATA_MDCV              (5)
189 #define OAPV_METADATA_CLL               (6)
190 #define OAPV_METADATA_FILLER            (10)
191 #define OAPV_METADATA_USER_DEFINED      (170)
192 
193 /*****************************************************************************
194  * profiles
195  *****************************************************************************/
196 #define OAPV_PROFILE_422_10             (33)
197 
198 /*****************************************************************************
199  * optimization level control
200  *****************************************************************************/
201 #define OAPV_PRESET_FASTEST             (0)
202 #define OAPV_PRESET_FAST                (1)
203 #define OAPV_PRESET_MEDIUM              (2)
204 #define OAPV_PRESET_SLOW                (3)
205 #define OAPV_PRESET_PLACEBO             (4)
206 #define OAPV_PRESET_DEFAULT             OAPV_PRESET_MEDIUM
207 
208 /*****************************************************************************
209  * rate-control types
210  *****************************************************************************/
211 #define OAPV_RC_CQP                     (0)
212 #define OAPV_RC_ABR                     (1)
213 
214 /*****************************************************************************
215  * type and macro for media time
216  *****************************************************************************/
217 typedef long long        oapv_mtime_t; /* in 100-nanosec unit */
218 
219 /*****************************************************************************
220  * image buffer format
221  *
222  *    baddr
223  *     +---------------------------------------------------+ ---
224  *     |                                                   |  ^
225  *     |                                              |    |  |
226  *     |      a                                       v    |  |
227  *     |   --- +-----------------------------------+ ---   |  |
228  *     |    ^  |  (x, y)                           |  y    |  |
229  *     |    |  |   +---------------------------+   + ---   |  |
230  *     |    |  |   |                           |   |  ^    |  |
231  *     |    |  |   |            /\             |   |  |    |  |
232  *     |    |  |   |           /  \            |   |  |    |  |
233  *     |    |  |   |          /    \           |   |  |    |  |
234  *     |       |   |  +--------------------+   |   |       |
235  *     |    ah |   |   \                  /    |   |  h    |  e
236  *     |       |   |    +----------------+     |   |       |
237  *     |    |  |   |       |          |        |   |  |    |  |
238  *     |    |  |   |      @    O   O   @       |   |  |    |  |
239  *     |    |  |   |        \    ~   /         |   |  v    |  |
240  *     |    |  |   +---------------------------+   | ---   |  |
241  *     |    v  |                                   |       |  |
242  *     |   --- +---+-------------------------------+       |  |
243  *     |     ->| x |<----------- w ----------->|           |  |
244  *     |       |<--------------- aw -------------->|       |  |
245  *     |                                                   |  v
246  *     +---------------------------------------------------+ ---
247  *
248  *     |<---------------------- s ------------------------>|
249  *
250  * - x, y, w, aw, h, ah : unit of pixel
251  * - s, e : unit of byte
252  *****************************************************************************/
253 
254 typedef struct oapv_imgb oapv_imgb_t;
255 struct oapv_imgb {
256     int           cs; /* color space */
257     int           np; /* number of plane */
258     /* width (in unit of pixel) */
259     int           w[OAPV_MAX_CC];
260     /* height (in unit of pixel) */
261     int           h[OAPV_MAX_CC];
262     /* X position of left top (in unit of pixel) */
263     int           x[OAPV_MAX_CC];
264     /* Y postion of left top (in unit of pixel) */
265     int           y[OAPV_MAX_CC];
266     /* buffer stride (in unit of byte) */
267     int           s[OAPV_MAX_CC];
268     /* buffer elevation (in unit of byte) */
269     int           e[OAPV_MAX_CC];
270     /* address of each plane */
271     void         *a[OAPV_MAX_CC];
272 
273     /* hash data for signature */
274     unsigned char hash[OAPV_MAX_CC][16];
275 
276     /* time-stamps */
277     oapv_mtime_t  ts[4];
278 
279     int           ndata[4]; /* arbitrary data, if needs */
280     void         *pdata[4]; /* arbitrary adedress if needs */
281 
282     /* aligned width (in unit of pixel) */
283     int           aw[OAPV_MAX_CC];
284     /* aligned height (in unit of pixel) */
285     int           ah[OAPV_MAX_CC];
286 
287     /* left padding size (in unit of pixel) */
288     int           padl[OAPV_MAX_CC];
289     /* right padding size (in unit of pixel) */
290     int           padr[OAPV_MAX_CC];
291     /* up padding size (in unit of pixel) */
292     int           padu[OAPV_MAX_CC];
293     /* bottom padding size (in unit of pixel) */
294     int           padb[OAPV_MAX_CC];
295 
296     /* address of actual allocated buffer */
297     void         *baddr[OAPV_MAX_CC];
298     /* actual allocated buffer size */
299     int           bsize[OAPV_MAX_CC];
300 
301     /* life cycle management */
302     int           refcnt;
303     int (*addref)(oapv_imgb_t *imgb);
304     int (*getref)(oapv_imgb_t *imgb);
305     int (*release)(oapv_imgb_t *imgb);
306 };
307 
308 typedef struct oapv_frm oapv_frm_t;
309 struct oapv_frm {
310     oapv_imgb_t *imgb;
311     int          pbu_type;
312     int          group_id;
313 };
314 
315 #define OAPV_MAX_NUM_FRAMES (16) // max number of frames in an access unit
316 #define OAPV_MAX_NUM_METAS  (16) // max number of metadata in an access unit
317 
318 typedef struct oapv_frms oapv_frms_t;
319 struct oapv_frms {
320     int        num_frms;                 // number of frames
321     oapv_frm_t frm[OAPV_MAX_NUM_FRAMES]; // container of frames
322 };
323 
324 /*****************************************************************************
325  * Bitstream buffer
326  *****************************************************************************/
327 typedef struct oapv_bitb oapv_bitb_t;
328 struct oapv_bitb {
329     /* user space address indicating buffer */
330     void        *addr;
331     /* physical address indicating buffer, if any */
332     void        *pddr;
333     /* byte size of buffer memory */
334     int          bsize;
335     /* byte size of bitstream in buffer */
336     int          ssize;
337     /* bitstream has an error? */
338     int          err;
339     /* arbitrary data, if needs */
340     int          ndata[4];
341     /* arbitrary address, if needs */
342     void        *pdata[4];
343     /* time-stamps */
344     oapv_mtime_t ts[4];
345 };
346 
347 /*****************************************************************************
348  * brief information of frame
349  *****************************************************************************/
350 typedef struct oapv_frm_info oapv_frm_info_t;
351 struct oapv_frm_info {
352     int           w;
353     int           h;
354     int           cs;
355     int           pbu_type;
356     int           group_id;
357     int           profile_idc;
358     int           level_idc;
359     int           band_idc;
360     int           chroma_format_idc;
361     int           bit_depth;
362     int           capture_time_distance;
363     /* custom quantization matrix */
364     int           use_q_matrix;
365     unsigned char q_matrix[OAPV_MAX_CC][OAPV_BLK_D]; // only meaningful if use_q_matrix is true
366     /* color description values */
367     int           color_description_present_flag;
368     unsigned char color_primaries;          // only meaningful if color_description_present_flag is true
369     unsigned char transfer_characteristics; // only meaningful if color_description_present_flag is true
370     unsigned char matrix_coefficients;      // only meaningful if color_description_present_flag is true
371     int           full_range_flag;          // only meaningful if color_description_present_flag is true
372 };
373 
374 typedef struct oapv_au_info oapv_au_info_t;
375 struct oapv_au_info {
376     int             num_frms; // number of frames
377     oapv_frm_info_t frm_info[OAPV_MAX_NUM_FRAMES];
378 };
379 
380 /*****************************************************************************
381  * coding parameters
382  *****************************************************************************/
383 typedef struct oapve_param oapve_param_t;
384 struct oapve_param {
385     /* profile_idc */
386     int           profile_idc;
387     /* level */
388     int           level_idc;
389     /* band */
390     int           band_idc;
391     /* width of input frame */
392     int           w;
393     /* height of input frame */
394     int           h;
395     /* frame rate (Hz) numerator, denominator */
396     int           fps_num;
397     int           fps_den;
398     /* rate control type */
399     int           rc_type;
400     /* quantization parameters : 0 ~ (63 + (bitdepth - 10)*6)
401        - 10bit input: 0 ~ 63
402        - 12bit input: 0 ~ 75
403     */
404     unsigned char qp;
405     /* quantization parameter offsets */
406     signed char   qp_offset_c1;
407     /* quantization parameter offsets */
408     signed char   qp_offset_c2;
409     /* quantization parameter offsets */
410     signed char   qp_offset_c3;
411     /* bitrate (unit: kbps) */
412     int           bitrate;
413     /* use filler data for tight constant bitrate */
414     int           use_filler;
415     /* use quantization matrix */
416     int           use_q_matrix;
417     unsigned char q_matrix[OAPV_MAX_CC][OAPV_BLK_D]; // raster-scan order
418     /* color space */
419     int           csp;
420     int           tile_cols;
421     int           tile_rows;
422     int           tile_w_mb;
423     int           tile_h_mb;
424     int           preset;
425     /* color description values */
426     int           color_description_present_flag;
427     unsigned char color_primaries;
428     unsigned char transfer_characteristics;
429     unsigned char matrix_coefficients;
430     int           full_range_flag;
431 };
432 
433 /*****************************************************************************
434  * description for encoder creation
435  *****************************************************************************/
436 typedef struct oapve_cdesc oapve_cdesc_t;
437 struct oapve_cdesc {
438     int           max_bs_buf_size;            // max bitstream buffer size
439     int           max_num_frms;               // max number of frames to be encoded
440     int           threads;                    // number of threads
441     oapve_param_t param[OAPV_MAX_NUM_FRAMES]; // encoding parameters
442 };
443 
444 /*****************************************************************************
445  * encoding status
446  *****************************************************************************/
447 typedef struct oapve_stat oapve_stat_t;
448 struct oapve_stat {
449     int            write;                         // byte size of encoded bitstream
450     oapv_au_info_t aui;                           // information of encoded frames
451     int            frm_size[OAPV_MAX_NUM_FRAMES]; // bitstream byte size of each frame
452 };
453 
454 /*****************************************************************************
455  * description for decoder creation
456  *****************************************************************************/
457 typedef struct oapvd_cdesc oapvd_cdesc_t;
458 struct oapvd_cdesc {
459     int threads; // number of threads
460 };
461 
462 /*****************************************************************************
463  * decoding status
464  *****************************************************************************/
465 typedef struct oapvd_stat oapvd_stat_t;
466 struct oapvd_stat {
467     int            read;                          // byte size of decoded bitstream (read size)
468     oapv_au_info_t aui;                           // information of decoded frames
469     int            frm_size[OAPV_MAX_NUM_FRAMES]; // bitstream byte size of each frame
470 };
471 
472 /*****************************************************************************
473  * metadata payload
474  *****************************************************************************/
475 typedef struct oapvm_payload oapvm_payload_t;
476 struct oapvm_payload {
477     int           group_id;  // group ID
478     int           type;      // payload type
479     unsigned char uuid[16];  // UUID for user-defined metadata payload
480     void         *data;      // address of metadata payload
481     int           data_size; // byte size of metadata payload
482 };
483 
484 /*****************************************************************************
485  * interface for metadata container
486  *****************************************************************************/
487 typedef void       *oapvm_t; /* instance identifier for OAPV metadata container */
488 
489 oapvm_t OAPV_EXPORT oapvm_create(int *err);
490 void OAPV_EXPORT oapvm_delete(oapvm_t mid);
491 void OAPV_EXPORT oapvm_rem_all(oapvm_t mid);
492 int OAPV_EXPORT oapvm_set(oapvm_t mid, int group_id, int type, void *data, int size, unsigned char *uuid);
493 int OAPV_EXPORT oapvm_get(oapvm_t mid, int group_id, int type, void **data, int *size, unsigned char *uuid);
494 int OAPV_EXPORT oapvm_rem(oapvm_t mid, int group_id, int type, unsigned char *uuid);
495 int OAPV_EXPORT oapvm_set_all(oapvm_t mid, oapvm_payload_t *pld, int num_plds);
496 int OAPV_EXPORT oapvm_get_all(oapvm_t mid, oapvm_payload_t *pld, int *num_plds);
497 
498 /*****************************************************************************
499  * interface for encoder
500  *****************************************************************************/
501 typedef void       *oapve_t; /* instance identifier for OAPV encoder */
502 
503 oapve_t OAPV_EXPORT oapve_create(oapve_cdesc_t *cdesc, int *err);
504 void OAPV_EXPORT oapve_delete(oapve_t eid);
505 int OAPV_EXPORT oapve_config(oapve_t eid, int cfg, void *buf, int *size);
506 int OAPV_EXPORT oapve_param_default(oapve_param_t *param);
507 int OAPV_EXPORT oapve_encode(oapve_t eid, oapv_frms_t *ifrms, oapvm_t mid, oapv_bitb_t *bitb, oapve_stat_t *stat, oapv_frms_t *rfrms);
508 
509 /*****************************************************************************
510  * interface for decoder
511  *****************************************************************************/
512 typedef void       *oapvd_t; /* instance identifier for OAPV decoder */
513 
514 oapvd_t OAPV_EXPORT oapvd_create(oapvd_cdesc_t *cdesc, int *err);
515 void OAPV_EXPORT oapvd_delete(oapvd_t did);
516 int OAPV_EXPORT oapvd_config(oapvd_t did, int cfg, void *buf, int *size);
517 int OAPV_EXPORT oapvd_decode(oapvd_t did, oapv_bitb_t *bitb, oapv_frms_t *ofrms, oapvm_t mid, oapvd_stat_t *stat);
518 
519 /*****************************************************************************
520  * interface for utility
521  *****************************************************************************/
522 int OAPV_EXPORT oapvd_info(void *au, int au_size, oapv_au_info_t *aui);
523 
524 #ifdef __cplusplus
525 } /* extern "C" */
526 #endif
527 
528 #endif /* __OAPV_H__3342320849320483827648324783920483920432847382948__ */
529