14a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/* ------------------------------------------------------------------
24a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber * Copyright (C) 1998-2009 PacketVideo
34a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber *
44a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
54a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber * you may not use this file except in compliance with the License.
64a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber * You may obtain a copy of the License at
74a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber *
84a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
94a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber *
104a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber * Unless required by applicable law or agreed to in writing, software
114a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
124a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
134a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber * express or implied.
144a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber * See the License for the specific language governing permissions
154a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber * and limitations under the License.
164a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber * -------------------------------------------------------------------
174a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber */
184a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/**
194a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberThis file contains common type definitions and enumerations used by AVC encoder
204a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huberand decoder libraries which are exposed to the users.
214a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber@publishedAll
224a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/
234a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
244a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#ifndef AVCAPI_COMMON_H_INCLUDED
254a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define AVCAPI_COMMON_H_INCLUDED
264a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
274a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#include "avc_types.h"
284a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
294a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define PV_MEMORY_POOL
304a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/**
314a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberThis is common return status.
324a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber@publishedAll
334a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/
344a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubertypedef enum
354a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber{
364a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_NO_BUFFER = -2,
374a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_MEMORY_FAIL = -1,
384a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_FAIL = 0,
394a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_SUCCESS = 1,
404a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_PICTURE_OUTPUT_READY = 2
414a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber} AVCStatus;
424a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
434a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/**
444a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberThis enumeration is for profiles. The value follows the profile_idc  in sequence
454a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huberparameter set rbsp. See Annex A.
464a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber@publishedAll
474a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/
484a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubertypedef enum
494a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber{
504a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_BASELINE = 66,
514a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_MAIN = 77,
524a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_EXTENDED = 88,
534a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_HIGH = 100,
544a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_HIGH10 = 110,
554a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_HIGH422 = 122,
564a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_HIGH444 = 144
574a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber} AVCProfile;
584a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
594a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/**
604a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberThis enumeration is for levels. The value follows the level_idc in sequence
614a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huberparameter set rbsp. See Annex A.
624a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber@published All
634a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/
644a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubertypedef enum
654a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber{
664a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_LEVEL_AUTO = 0,
674a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_LEVEL1_B = 9,
684a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_LEVEL1 = 10,
694a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_LEVEL1_1 = 11,
704a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_LEVEL1_2 = 12,
714a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_LEVEL1_3 = 13,
724a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_LEVEL2 = 20,
734a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_LEVEL2_1 = 21,
744a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_LEVEL2_2 = 22,
754a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_LEVEL3 = 30,
764a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_LEVEL3_1 = 31,
774a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_LEVEL3_2 = 32,
784a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_LEVEL4 = 40,
794a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_LEVEL4_1 = 41,
804a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_LEVEL4_2 = 42,
814a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_LEVEL5 = 50,
824a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_LEVEL5_1 = 51
834a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber} AVCLevel;
844a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
854a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/**
864a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberThis enumeration follows Table 7-1 for NAL unit type codes.
874a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberThis may go to avccommon_api.h later (external common).
884a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber@publishedAll
894a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/
904a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubertypedef enum
914a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber{
924a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_NALTYPE_SLICE = 1,  /* non-IDR non-data partition */
934a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_NALTYPE_DPA = 2,    /* data partition A */
944a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_NALTYPE_DPB = 3,    /* data partition B */
954a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_NALTYPE_DPC = 4,    /* data partition C */
964a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_NALTYPE_IDR = 5,    /* IDR NAL */
974a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_NALTYPE_SEI = 6,    /* supplemental enhancement info */
984a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_NALTYPE_SPS = 7,    /* sequence parameter set */
994a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_NALTYPE_PPS = 8,    /* picture parameter set */
1004a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_NALTYPE_AUD = 9,    /* access unit delimiter */
1014a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_NALTYPE_EOSEQ = 10, /* end of sequence */
1024a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_NALTYPE_EOSTREAM = 11, /* end of stream */
1034a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_NALTYPE_FILL = 12   /* filler data */
1044a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber} AVCNalUnitType;
1054a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
1064a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/**
1074a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberThis enumeration specifies debug logging type.
1084a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberThis may go to avccommon_api.h later (external common).
1094a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber@publishedAll
1104a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/
1114a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubertypedef enum
1124a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber{
1134a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_LOGTYPE_ERROR = 0,
1144a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_LOGTYPE_WARNING = 1,
1154a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_LOGTYPE_INFO = 2
1164a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber} AVCLogType;
1174a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
1184a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/**
1194a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberThis enumerate the status of certain flags.
1204a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber@publishedAll
1214a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/
1224a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubertypedef enum
1234a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber{
1244a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_OFF = 0,
1254a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    AVC_ON = 1
1264a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber} AVCFlag;
1274a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
1284a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/**
1294a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberThis structure contains input information.
1304a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberNote, this structure is identical to AVCDecOutput for now.
1314a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/
1324a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubertypedef struct tagAVCFrameIO
1334a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber{
1344a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    /** A unique identification number for a particular instance of this structure.
1354a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    To remain unchanged by the application between the time when it is given to the
1364a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    library and the time when the library returns it back. */
1374a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    uint32 id;
1384a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
1394a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    /** Array of pointers to Y,Cb,Cr content in 4:2:0 format. For AVC decoding,
1404a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    this memory is allocated by the AVC decoder library. For AVC encoding, only the
1414a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    memory for original unencoded frame is allocated by the application. Internal
1424a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    memory is also allocated by the AVC encoder library. */
1434a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    uint8 *YCbCr[3];
1444a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
1454a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    /** In/Out: Coded width of the luma component, it has to be multiple of 16. */
1464a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    int pitch;
1474a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
1484a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    /** In/Out: Coded height of the luma component, must be multiple of 16. */
1494a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    int height;
1504a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
1514a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    /** In/Out: Display width, less than picth */
1524a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    int clip_width;
1534a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
1544a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    /** In/Out: Display height, less than height */
1554a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    int clip_height;
1564a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
1574a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    /** Input: Origin of the display area [0]=>row, [1]=>column  */
1584a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    int clip_origin[2];
1594a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
1604a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    /** Output: Frame number in de/encoding order (not necessary)*/
1614a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    uint32 coding_order;
1624a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
1634a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    /** Output: Frame number in displaying order (this may or may not be associated with the POC at all!!!). */
1644a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    uint32 disp_order;
1654a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
1664a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    /** In/Out: Flag for use for reference or not. */
1674a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    uint  is_reference;
1684a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
1694a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    /** In/Out: Coding timestamp in msec (not display timestamp) */
1704a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    uint32 coding_timestamp;
1714a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
1724a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    /* there could be something else here such as format, DON (decoding order number)
1734a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber     if available thru SEI, etc. */
1744a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber} AVCFrameIO;
1754a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
1764a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
1774a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** CALLBACK FUNCTION TO BE IMPLEMENTED BY APPLICATION */
1784a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** In AVCDecControls structure, userData is a pointer to an object with the following
1794a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    member functions.
1804a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/
1814a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
1824a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
1834a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** @brief Decoded picture buffers (DPB) must be allocated or re-allocated before an
1844a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    IDR frame is decoded. If PV_MEMORY_POOL is not defined, AVC lib will allocate DPB
1854a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    internally which cannot be shared with the application. In that case, this function
1864a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    will not be called.
1874a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    @param userData  The same value of userData in AVCHandle object.
1884a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    @param frame_size_in_mbs  The size of each frame in number of macroblocks.
1894a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    @param num_frames The number of frames in DPB.
1904a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    @return 1 for success, 0 for fail (cannot allocate DPB)
1914a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/
1924a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
1934a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubertypedef int (*FunctionType_DPBAlloc)(void *userData, uint frame_size_in_mbs, uint num_buffers);
1944a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
1954a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** @brief AVC library calls this function is reserve a memory of one frame from the DPB.
1964a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    Once reserved, this frame shall not be deleted or over-written by the app.
1974a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    @param userData  The same value of userData in AVCHandle object.
1984a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    @param indx      Index of a frame in DPB (AVC library keeps track of the index).
1994a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    @param yuv      The address of the yuv pointer returned to the AVC lib.
2004a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    @return         1 for success, 0 for fail (no frames available to bind).
2014a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    */
2024a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubertypedef int (*FunctionType_FrameBind)(void *userData, int indx, uint8 **yuv);
2034a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
2044a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** @brief AVC library calls this function once a bound frame is not needed for decoding
2054a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    operation (falls out of the sliding window, or marked unused for reference).
2064a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    @param userData  The same value of userData in AVCHandle object.
2074a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    @param indx      Index of frame to be unbound (AVC library keeps track of the index).
2084a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    @return  none.
2094a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/
2104a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubertypedef void (*FuctionType_FrameUnbind)(void *userData, int);
2114a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
2124a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** Pointer to malloc function for general memory allocation, so that application can keep track of
2134a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    memory usage.
2144a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber\param "size" "Size of requested memory in bytes."
2154a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber\param "attribute" "Some value specifying types, priority, etc. of the memory."
2164a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber\return "The address of the allocated memory casted to int"
2174a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/
2184a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubertypedef int (*FunctionType_Malloc)(void *userData, int32 size, int attribute);
2194a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
2204a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** Function pointer to free
2214a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber\param "mem" "Pointer to the memory to be freed casted to int"
2224a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber\return "void"
2234a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/
2244a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubertypedef void (*FunctionType_Free)(void *userData, int mem);
2254a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
2264a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/** Debug logging information is returned to the application thru this function.
2274a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber\param "type"   "Type of logging message, see definition of AVCLogType."
2284a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber\param "string1"    "Logging message."
2294a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber\param "string2"    "To be defined."
2304a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/
2314a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubertypedef void (*FunctionType_DebugLog)(uint32 *userData, AVCLogType type, char *string1, int val1, int val2);
2324a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
2334a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber/**
2344a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberThis structure has to be allocated and maintained by the user of the library.
2354a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas HuberThis structure is used as a handle to the library object.
2364a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber*/
2374a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Hubertypedef struct tagAVCHandle
2384a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber{
2394a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    /** A pointer to the internal data structure. Users have to make sure that this value
2404a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber        is NULL at the beginning.
2414a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    */
2424a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    void        *AVCObject;
2434a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
2444a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    /** A pointer to user object which has the following member functions used for
2454a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    callback purpose.  !!! */
2464a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    void        *userData;
2474a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
2484a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    /** Pointers to functions implemented by the users of AVC library */
2494a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    FunctionType_DPBAlloc CBAVC_DPBAlloc;
2504a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
2514a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    FunctionType_FrameBind CBAVC_FrameBind;
2524a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
2534a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    FuctionType_FrameUnbind CBAVC_FrameUnbind;
2544a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
2554a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    FunctionType_Malloc CBAVC_Malloc;
2564a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
2574a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    FunctionType_Free  CBAVC_Free;
2584a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
2594a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    FunctionType_DebugLog CBAVC_DebugLog;
2604a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
2614a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    /** Flag to enable debugging */
2624a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber    uint32  debugEnable;
2634a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
2644a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber} AVCHandle;
2654a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
2664a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
2674a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
2684a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#ifdef PVDEBUGMSG_LOG
2694a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define DEBUG_LOG(a,b,c,d,e)    CBAVC_DebugLog(a,b,c,d,e)
2704a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#else
2714a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#define DEBUG_LOG(a,b,c,d,e)
2724a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#endif
2734a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber
2744a0ec3fda9c0e8e74b36e4e201b65ced80263b1fAndreas Huber#endif /* _AVCAPI_COMMON_H_ */
275