| /* ------------------------------------------------------------------ |
| * Copyright (C) 1998-2009 PacketVideo |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either |
| * express or implied. |
| * See the License for the specific language governing permissions |
| * and limitations under the License. |
| * ------------------------------------------------------------------- |
| */ |
| /** |
| This file contains common type definitions and enumerations used by AVC encoder |
| and decoder libraries which are exposed to the users. |
| @publishedAll |
| */ |
| |
| #ifndef AVCAPI_COMMON_H_INCLUDED |
| #define AVCAPI_COMMON_H_INCLUDED |
| |
| #include "avc_types.h" |
| |
| #define PV_MEMORY_POOL |
| /** |
| This is common return status. |
| @publishedAll |
| */ |
| typedef enum |
| { |
| AVC_NO_BUFFER = -2, |
| AVC_MEMORY_FAIL = -1, |
| AVC_FAIL = 0, |
| AVC_SUCCESS = 1, |
| AVC_PICTURE_OUTPUT_READY = 2 |
| } AVCStatus; |
| |
| /** |
| This enumeration is for profiles. The value follows the profile_idc in sequence |
| parameter set rbsp. See Annex A. |
| @publishedAll |
| */ |
| typedef enum |
| { |
| AVC_BASELINE = 66, |
| AVC_MAIN = 77, |
| AVC_EXTENDED = 88, |
| AVC_HIGH = 100, |
| AVC_HIGH10 = 110, |
| AVC_HIGH422 = 122, |
| AVC_HIGH444 = 144 |
| } AVCProfile; |
| |
| /** |
| This enumeration is for levels. The value follows the level_idc in sequence |
| parameter set rbsp. See Annex A. |
| @published All |
| */ |
| typedef enum |
| { |
| AVC_LEVEL_AUTO = 0, |
| AVC_LEVEL1_B = 9, |
| AVC_LEVEL1 = 10, |
| AVC_LEVEL1_1 = 11, |
| AVC_LEVEL1_2 = 12, |
| AVC_LEVEL1_3 = 13, |
| AVC_LEVEL2 = 20, |
| AVC_LEVEL2_1 = 21, |
| AVC_LEVEL2_2 = 22, |
| AVC_LEVEL3 = 30, |
| AVC_LEVEL3_1 = 31, |
| AVC_LEVEL3_2 = 32, |
| AVC_LEVEL4 = 40, |
| AVC_LEVEL4_1 = 41, |
| AVC_LEVEL4_2 = 42, |
| AVC_LEVEL5 = 50, |
| AVC_LEVEL5_1 = 51 |
| } AVCLevel; |
| |
| /** |
| This enumeration follows Table 7-1 for NAL unit type codes. |
| This may go to avccommon_api.h later (external common). |
| @publishedAll |
| */ |
| typedef enum |
| { |
| AVC_NALTYPE_SLICE = 1, /* non-IDR non-data partition */ |
| AVC_NALTYPE_DPA = 2, /* data partition A */ |
| AVC_NALTYPE_DPB = 3, /* data partition B */ |
| AVC_NALTYPE_DPC = 4, /* data partition C */ |
| AVC_NALTYPE_IDR = 5, /* IDR NAL */ |
| AVC_NALTYPE_SEI = 6, /* supplemental enhancement info */ |
| AVC_NALTYPE_SPS = 7, /* sequence parameter set */ |
| AVC_NALTYPE_PPS = 8, /* picture parameter set */ |
| AVC_NALTYPE_AUD = 9, /* access unit delimiter */ |
| AVC_NALTYPE_EOSEQ = 10, /* end of sequence */ |
| AVC_NALTYPE_EOSTREAM = 11, /* end of stream */ |
| AVC_NALTYPE_FILL = 12 /* filler data */ |
| } AVCNalUnitType; |
| |
| /** |
| This enumeration specifies debug logging type. |
| This may go to avccommon_api.h later (external common). |
| @publishedAll |
| */ |
| typedef enum |
| { |
| AVC_LOGTYPE_ERROR = 0, |
| AVC_LOGTYPE_WARNING = 1, |
| AVC_LOGTYPE_INFO = 2 |
| } AVCLogType; |
| |
| /** |
| This enumerate the status of certain flags. |
| @publishedAll |
| */ |
| typedef enum |
| { |
| AVC_OFF = 0, |
| AVC_ON = 1 |
| } AVCFlag; |
| |
| /** |
| This structure contains input information. |
| Note, this structure is identical to AVCDecOutput for now. |
| */ |
| typedef struct tagAVCFrameIO |
| { |
| /** A unique identification number for a particular instance of this structure. |
| To remain unchanged by the application between the time when it is given to the |
| library and the time when the library returns it back. */ |
| uint32 id; |
| |
| /** Array of pointers to Y,Cb,Cr content in 4:2:0 format. For AVC decoding, |
| this memory is allocated by the AVC decoder library. For AVC encoding, only the |
| memory for original unencoded frame is allocated by the application. Internal |
| memory is also allocated by the AVC encoder library. */ |
| uint8 *YCbCr[3]; |
| |
| /** In/Out: Coded width of the luma component, it has to be multiple of 16. */ |
| int pitch; |
| |
| /** In/Out: Coded height of the luma component, must be multiple of 16. */ |
| int height; |
| |
| /** In/Out: Display width, less than picth */ |
| int clip_width; |
| |
| /** In/Out: Display height, less than height */ |
| int clip_height; |
| |
| /** Input: Origin of the display area [0]=>row, [1]=>column */ |
| int clip_origin[2]; |
| |
| /** Output: Frame number in de/encoding order (not necessary)*/ |
| uint32 coding_order; |
| |
| /** Output: Frame number in displaying order (this may or may not be associated with the POC at all!!!). */ |
| uint32 disp_order; |
| |
| /** In/Out: Flag for use for reference or not. */ |
| uint is_reference; |
| |
| /** In/Out: Coding timestamp in msec (not display timestamp) */ |
| uint32 coding_timestamp; |
| |
| /* there could be something else here such as format, DON (decoding order number) |
| if available thru SEI, etc. */ |
| } AVCFrameIO; |
| |
| |
| /** CALLBACK FUNCTION TO BE IMPLEMENTED BY APPLICATION */ |
| /** In AVCDecControls structure, userData is a pointer to an object with the following |
| member functions. |
| */ |
| |
| |
| /** @brief Decoded picture buffers (DPB) must be allocated or re-allocated before an |
| IDR frame is decoded. If PV_MEMORY_POOL is not defined, AVC lib will allocate DPB |
| internally which cannot be shared with the application. In that case, this function |
| will not be called. |
| @param userData The same value of userData in AVCHandle object. |
| @param frame_size_in_mbs The size of each frame in number of macroblocks. |
| @param num_frames The number of frames in DPB. |
| @return 1 for success, 0 for fail (cannot allocate DPB) |
| */ |
| |
| typedef int (*FunctionType_DPBAlloc)(void *userData, uint frame_size_in_mbs, uint num_buffers); |
| |
| /** @brief AVC library calls this function is reserve a memory of one frame from the DPB. |
| Once reserved, this frame shall not be deleted or over-written by the app. |
| @param userData The same value of userData in AVCHandle object. |
| @param indx Index of a frame in DPB (AVC library keeps track of the index). |
| @param yuv The address of the yuv pointer returned to the AVC lib. |
| @return 1 for success, 0 for fail (no frames available to bind). |
| */ |
| typedef int (*FunctionType_FrameBind)(void *userData, int indx, uint8 **yuv); |
| |
| /** @brief AVC library calls this function once a bound frame is not needed for decoding |
| operation (falls out of the sliding window, or marked unused for reference). |
| @param userData The same value of userData in AVCHandle object. |
| @param indx Index of frame to be unbound (AVC library keeps track of the index). |
| @return none. |
| */ |
| typedef void (*FuctionType_FrameUnbind)(void *userData, int); |
| |
| /** Pointer to malloc function for general memory allocation, so that application can keep track of |
| memory usage. |
| \param "size" "Size of requested memory in bytes." |
| \param "attribute" "Some value specifying types, priority, etc. of the memory." |
| \return "The address of the allocated, zero-initialized memory" |
| */ |
| typedef void* (*FunctionType_Malloc)(void *userData, int32 size, int attribute); |
| |
| /** Function pointer to free |
| \param "mem" "Pointer to the memory to be freed" |
| \return "void" |
| */ |
| typedef void (*FunctionType_Free)(void *userData, void *mem); |
| |
| /** Debug logging information is returned to the application thru this function. |
| \param "type" "Type of logging message, see definition of AVCLogType." |
| \param "string1" "Logging message." |
| \param "string2" "To be defined." |
| */ |
| typedef void (*FunctionType_DebugLog)(uint32 *userData, AVCLogType type, char *string1, int val1, int val2); |
| |
| /** |
| This structure has to be allocated and maintained by the user of the library. |
| This structure is used as a handle to the library object. |
| */ |
| typedef struct tagAVCHandle |
| { |
| /** A pointer to the internal data structure. Users have to make sure that this value |
| is NULL at the beginning. |
| */ |
| void *AVCObject; |
| |
| /** A pointer to user object which has the following member functions used for |
| callback purpose. !!! */ |
| void *userData; |
| |
| /** Pointers to functions implemented by the users of AVC library */ |
| FunctionType_DPBAlloc CBAVC_DPBAlloc; |
| |
| FunctionType_FrameBind CBAVC_FrameBind; |
| |
| FuctionType_FrameUnbind CBAVC_FrameUnbind; |
| |
| FunctionType_Malloc CBAVC_Malloc; |
| |
| FunctionType_Free CBAVC_Free; |
| |
| FunctionType_DebugLog CBAVC_DebugLog; |
| |
| /** Flag to enable debugging */ |
| uint32 debugEnable; |
| |
| } AVCHandle; |
| |
| |
| |
| #ifdef PVDEBUGMSG_LOG |
| #define DEBUG_LOG(a,b,c,d,e) CBAVC_DebugLog(a,b,c,d,e) |
| #else |
| #define DEBUG_LOG(a,b,c,d,e) |
| #endif |
| |
| #endif /* _AVCAPI_COMMON_H_ */ |