/Avc/avclib_common.h
http://github.com/mbebenita/Broadway · C Header · 557 lines · 68 code · 63 blank · 426 comment · 0 complexity · 2cdd69f1623e80f363aefdbfeb6de364 MD5 · raw file
- /* ------------------------------------------------------------------
- * 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 declarations of internal functions for common encoder/decoder library.
- @publishedAll
- */
- #ifndef AVCCOMMON_LIB_H_INCLUDED
- #define AVCCOMMON_LIB_H_INCLUDED
- #include <stdlib.h>
- #ifndef AVCINT_COMMON_H_INCLUDED
- #include "avcint_common.h"
- #endif
- /*----------- deblock.c --------------*/
- /**
- This function performs conditional deblocking on a complete picture.
- \param "video" "Pointer to AVCCommonObj."
- \return "AVC_SUCCESS for success and AVC_FAIL otherwise."
- */
- OSCL_IMPORT_REF AVCStatus DeblockPicture(AVCCommonObj *video);
- /**
- This function performs MB-based deblocking when MB_BASED_DEBLOCK
- is defined at compile time.
- \param "video" "Pointer to AVCCommonObj."
- \return "AVC_SUCCESS for success and AVC_FAIL otherwise."
- */
- void MBInLoopDeblock(AVCCommonObj *video);
- /*---------- dpb.c --------------------*/
- /**
- This function is called everytime a new sequence is detected.
- \param "avcHandle" "Pointer to AVCHandle."
- \param "video" "Pointer to AVCCommonObj."
- \param "padding" "Flag specifying whether padding in luma component is needed (used for encoding)."
- \return "AVC_SUCCESS or AVC_FAIL."
- */
- OSCL_IMPORT_REF AVCStatus AVCConfigureSequence(AVCHandle *avcHandle, AVCCommonObj *video, bool padding);
- /**
- This function allocates and initializes the decoded picture buffer structure based on
- the profile and level for the first sequence parameter set. Currently,
- it does not allow changing in profile/level for subsequent SPS.
- \param "avcHandle" "Pointer to AVCHandle."
- \param "video" "Pointer to AVCCommonObj."
- \param "FrameHeightInMbs" "Height of the frame in the unit of MBs."
- \param "PicWidthInMbs" "Width of the picture in the unit of MBs."
- \param "padding" "Flag specifying whether padding in luma component is needed (used for encoding)."
- \return "AVC_SUCCESS or AVC_FAIL."
- */
- AVCStatus InitDPB(AVCHandle *avcHandle, AVCCommonObj *video, int FrameHeightInMbs, int PicWidthInMbs, bool padding);
- /**
- This function frees the DPB memory.
- \param "avcHandle" "Pointer to AVCHandle."
- \param "video" "Pointer to AVCCommonObj."
- \return "AVC_SUCCESS or AVC_FAIL."
- */
- OSCL_IMPORT_REF AVCStatus CleanUpDPB(AVCHandle *avcHandle, AVCCommonObj *video);
- /**
- This function finds empty frame in the decoded picture buffer to be used for the
- current picture, initializes the corresponding picture structure with Sl, Scb, Scr,
- width, height and pitch.
- \param "avcHandle" "Pointer to the main handle object."
- \param "video" "Pointer to AVCCommonObj."
- \return "AVC_SUCCESS or AVC_FAIL."
- */
- OSCL_IMPORT_REF AVCStatus DPBInitBuffer(AVCHandle *avcHandle, AVCCommonObj *video);
- /**
- This function finds empty frame in the decoded picture buffer to be used for the
- current picture, initializes the corresponding picture structure with Sl, Scb, Scr,
- width, height and pitch.
- \param "video" "Pointer to AVCCommonObj."
- \param "CurrPicNum" "Current picture number (only used in decoder)."
- \return "AVC_SUCCESS or AVC_FAIL."
- */
- OSCL_IMPORT_REF void DPBInitPic(AVCCommonObj *video, int CurrPicNum);
- /**
- This function releases the current frame back to the available pool for skipped frame after encoding.
- \param "avcHandle" "Pointer to the main handle object."
- \param "video" "Pointer to the AVCCommonObj."
- \return "void."
- */
- OSCL_IMPORT_REF void DPBReleaseCurrentFrame(AVCHandle *avcHandle, AVCCommonObj *video);
- /**
- This function performs decoded reference picture marking process and store the current picture to the
- corresponding frame storage in the decoded picture buffer.
- \param "avcHandle" "Pointer to the main handle object."
- \param "video" "Pointer to the AVCCommonObj."
- \return "AVC_SUCCESS or AVC_FAIL."
- */
- OSCL_IMPORT_REF AVCStatus StorePictureInDPB(AVCHandle *avcHandle, AVCCommonObj *video);
- /**
- This function perform sliding window operation on the reference picture lists, see subclause 8.2.5.3.
- It removes short-term ref frames with smallest FrameNumWrap from the reference list.
- \param "avcHandle" "Pointer to the main handle object."
- \param "video" "Pointer to the AVCCommonObj."
- \param "dpb" "Pointer to the AVCDecPicBuffer."
- \return "AVC_SUCCESS or AVC_FAIL (contradicting values or scenario as in the Note in the draft)."
- */
- AVCStatus sliding_window_process(AVCHandle *avcHandle, AVCCommonObj *video, AVCDecPicBuffer *dpb);
- /**
- This function perform adaptive memory marking operation on the reference picture lists,
- see subclause 8.2.5.4. It calls other functions for specific operations.
- \param "video" "Pointer to the AVCCommonObj."
- \param "dpb" "Pointer to the AVCDecPicBuffer."
- \param "sliceHdr" "Pointer to the AVCSliceHeader."
- \return "AVC_SUCCESS or AVC_FAIL (contradicting values or scenario as in the Note in the draft)."
- */
- AVCStatus adaptive_memory_marking(AVCHandle *avcHandle, AVCCommonObj *video, AVCDecPicBuffer *dpb, AVCSliceHeader *sliceHdr);
- /**
- This function performs memory management control operation 1, marking a short-term picture
- as unused for reference. See subclause 8.2.5.4.1.
- \param "video" "Pointer to the AVCCommonObj."
- \param "dpb" "Pointer to the AVCDecPicBuffer."
- \param "difference_of_pic_nums_minus1" "From the syntax in dec_ref_pic_marking()."
- */
- void MemMgrCtrlOp1(AVCHandle *avcHandle, AVCCommonObj *video, AVCDecPicBuffer *dpb, int difference_of_pic_nums_minus1);
- /**
- This function performs memory management control operation 2, marking a long-term picture
- as unused for reference. See subclause 8.2.5.4.2.
- \param "dpb" "Pointer to the AVCDecPicBuffer."
- \param "field_pic_flag" "Flag whether the current picture is field or not."
- \param "long_term_pic_num" "From the syntax in dec_ref_pic_marking()."
- */
- void MemMgrCtrlOp2(AVCHandle *avcHandle, AVCDecPicBuffer *dpb, int long_term_pic_num);
- /**
- This function performs memory management control operation 3, assigning a LongTermFrameIdx to
- a short-term reference picture. See subclause 8.2.5.4.3.
- \param "video" "Pointer to the AVCCommonObj."
- \param "dpb" "Pointer to the AVCDecPicBuffer."
- \param "difference_of_pic_nums_minus1" "From the syntax in dec_ref_pic_marking()."
- \param "long_term_pic_num" "From the syntax in dec_ref_pic_marking()."
- */
- void MemMgrCtrlOp3(AVCHandle *avcHandle, AVCCommonObj *video, AVCDecPicBuffer *dpb, uint difference_of_pic_nums_minus1,
- uint long_term_frame_idx);
- /**
- This function performs memory management control operation 4, getting new MaxLongTermFrameIdx.
- See subclause 8.2.5.4.4.
- \param "video" "Pointer to the AVCCommonObj."
- \param "dpb" "Pointer to the AVCDecPicBuffer."
- \param "max_long_term_frame_idx_plus1" "From the syntax in dec_ref_pic_marking()."
- */
- void MemMgrCtrlOp4(AVCHandle *avcHandle, AVCCommonObj *video, AVCDecPicBuffer *dpb, uint max_long_term_frame_idx_plus1);
- /**
- This function performs memory management control operation 5, marking all reference pictures
- as unused for reference and set MaxLongTermFrameIdx to no long-termframe indices.
- See subclause 8.2.5.4.5.
- \param "video" "Pointer to the AVCCommonObj."
- \param "dpb" "Pointer to the AVCDecPicBuffer."
- */
- void MemMgrCtrlOp5(AVCHandle *avcHandle, AVCCommonObj *video, AVCDecPicBuffer *dpb);
- /**
- This function performs memory management control operation 6, assigning a long-term frame index
- to the current picture. See subclause 8.2.5.4.6.
- \param "video" "Pointer to the AVCCommonObj."
- \param "dpb" "Pointer to the AVCDecPicBuffer."
- \param "long_term_frame_idx" "From the syntax in dec_ref_pic_marking()."
- */
- void MemMgrCtrlOp6(AVCHandle *avcHandle, AVCCommonObj *video, AVCDecPicBuffer *dpb, uint long_term_frame_idx);
- /**
- This function mark a long-term ref frame with a specific frame index as unused for reference.
- \param "dpb" "Pointer to the AVCDecPicBuffer."
- \param "long_term_frame_idx" "To look for"
- */
- void unmark_long_term_frame_for_reference_by_frame_idx(AVCHandle *avcHandle, AVCDecPicBuffer *dpb, uint long_term_frame_idx);
- /**
- This function mark a long-term ref field with a specific frame index as unused for reference except
- a frame that contains a picture with picNumX.
- \param "dpb" "Pointer to the AVCDecPicBuffer."
- \param "long_term_frame_idx" "To look for."
- \param "picNumX" "To look for."
- */
- void unmark_long_term_field_for_reference_by_frame_idx(AVCCommonObj *video, AVCDecPicBuffer *dpb, uint long_term_frame_indx, int picNumX);
- /**
- This function mark a frame to unused for reference.
- \param "fs" "Pointer to AVCFrameStore to be unmarked."
- */
- void unmark_for_reference(AVCHandle *avcHandle, AVCDecPicBuffer *dpb, uint idx);
- void update_ref_list(AVCDecPicBuffer *dpb);
- /*---------- fmo.c --------------*/
- /**
- This function initializes flexible macroblock reordering.
- \param "video" "Pointer to AVCCommonObj."
- \return "AVC_SUCCESS for success and AVC_FAIL otherwise."
- */
- OSCL_IMPORT_REF AVCStatus FMOInit(AVCCommonObj *video);
- /**
- This function fills up an array that maps Map unit to the slice group
- following the interleaved slice group map type.
- \param "mapUnitToSliceGroupMap" "Array of slice group mapping."
- \param "run_length_minus1" "Array of the run-length."
- \param "num_slice_groups_minus_1" "Number of slice group minus 1."
- \param "PicSizeInMapUnit" "Size of the picture in number Map units."
- \return "Void."
- */
- void FmoGenerateType0MapUnitMap(int *mapUnitToSliceGroupMap, uint *run_length_minus1, uint num_slice_groups_minus1, uint PicSizeInMapUnits);
- /**
- This function fills up an array that maps Map unit to the slice group
- following the dispersed slice group map type.
- \param "mapUnitToSliceGroupMap" "Array of slice group mapping."
- \param "PicWidthInMbs" "Width of the luma picture in macroblock unit."
- \param "num_slice_groups_minus_1" "Number of slice group minus 1."
- \param "PicSizeInMapUnit" "Size of the picture in number Map units."
- \return "Void."
- */
- void FmoGenerateType1MapUnitMap(int *mapUnitToSliceGroupMap, int PicWidthInMbs, uint num_slice_groups_minus1, uint PicSizeInMapUnits);
- /**
- This function fills up an array that maps Map unit to the slice group
- following the foreground with left-over slice group map type.
- \param "pps" "Pointer to AVCPicParamSets structure."
- \param "mapUnitToSliceGroupMap" "Array of slice group mapping."
- \param "PicWidthInMbs" "Width of the luma picture in macroblock unit."
- \param "num_slice_groups_minus_1" "Number of slice group minus 1."
- \param "PicSizeInMapUnit" "Size of the picture in number Map units."
- \return "Void."
- */
- void FmoGenerateType2MapUnitMap(AVCPicParamSet *pps, int *mapUnitToSliceGroupMap, int PicWidthInMbs,
- uint num_slice_groups_minus1, uint PicSizeInMapUnits);
- /**
- This function fills up an array that maps Map unit to the slice group
- following the box-out slice group map type.
- \param "pps" "Pointer to AVCPicParamSets structure."
- \param "mapUnitToSliceGroupMap" "Array of slice group mapping."
- \param "PicWidthInMbs" "Width of the luma picture in macroblock unit."
- \return "Void."
- */
- void FmoGenerateType3MapUnitMap(AVCCommonObj *video, AVCPicParamSet* pps, int *mapUnitToSliceGroupMap,
- int PicWidthInMbs);
- /**
- This function fills up an array that maps Map unit to the slice group
- following the raster scan slice group map type.
- \param "mapUnitToSliceGroupMap" "Array of slice group mapping."
- \param "MapUnitsInSliceGroup0" "Derived in subclause 7.4.3."
- \param "slice_group_change_direction_flag" "A value from the slice header."
- \param "PicSizeInMapUnit" "Size of the picture in number Map units."
- \return "void"
- */
- void FmoGenerateType4MapUnitMap(int *mapUnitToSliceGroupMap, int MapUnitsInSliceGroup0,
- int slice_group_change_direction_flag, uint PicSizeInMapUnits);
- /**
- This function fills up an array that maps Map unit to the slice group
- following wipe slice group map type.
- \param "mapUnitToSliceGroupMap" "Array of slice group mapping."
- \param "video" "Pointer to AVCCommonObj structure."
- \param "slice_group_change_direction_flag" "A value from the slice header."
- \param "PicSizeInMapUnit" "Size of the picture in number Map units."
- \return "void"
- */
- void FmoGenerateType5MapUnitMap(int *mapUnitsToSliceGroupMap, AVCCommonObj *video,
- int slice_group_change_direction_flag, uint PicSizeInMapUnits);
- /**
- This function fills up an array that maps Map unit to the slice group
- following wipe slice group map type.
- \param "mapUnitToSliceGroupMap" "Array of slice group mapping."
- \param "slice_group_id" "Array of slice_group_id from AVCPicParamSet structure."
- \param "PicSizeInMapUnit" "Size of the picture in number Map units."
- \return "void"
- */
- void FmoGenerateType6MapUnitMap(int *mapUnitsToSliceGroupMap, int *slice_group_id, uint PicSizeInMapUnits);
- /*------------- itrans.c --------------*/
- /**
- This function performs transformation of the Intra16x16DC value according to
- subclause 8.5.6.
- \param "block" "Pointer to the video->block[0][0][0]."
- \param "QPy" "Quantization parameter."
- \return "void."
- */
- void Intra16DCTrans(int16 *block, int Qq, int Rq);
- /**
- This function performs transformation of a 4x4 block according to
- subclause 8.5.8.
- \param "block" "Pointer to the origin of transform coefficient area."
- \param "pred" "Pointer to the origin of predicted area."
- \param "cur" "Pointer to the origin of the output area."
- \param "width" "Pitch of cur."
- \return "void."
- */
- void itrans(int16 *block, uint8 *pred, uint8 *cur, int width);
- /*
- This function is the same one as itrans except for chroma.
- \param "block" "Pointer to the origin of transform coefficient area."
- \param "pred" "Pointer to the origin of predicted area."
- \param "cur" "Pointer to the origin of the output area."
- \param "width" "Pitch of cur."
- \return "void."
- */
- void ictrans(int16 *block, uint8 *pred, uint8 *cur, int width);
- /**
- This function performs transformation of the DCChroma value according to
- subclause 8.5.7.
- \param "block" "Pointer to the video->block[0][0][0]."
- \param "QPc" "Quantization parameter."
- \return "void."
- */
- void ChromaDCTrans(int16 *block, int Qq, int Rq);
- /**
- This function copies a block from pred to cur.
- \param "pred" "Pointer to prediction block."
- \param "cur" "Pointer to the current YUV block."
- \param "width" "Pitch of cur memory."
- \param "pred_pitch" "Pitch for pred memory.
- \return "void."
- */
- void copy_block(uint8 *pred, uint8 *cur, int width, int pred_pitch);
- /*--------- mb_access.c ----------------*/
- /**
- This function initializes the neighboring information before start macroblock decoding.
- \param "video" "Pointer to AVCCommonObj."
- \param "mbNum" "The current macroblock index."
- \param "currMB" "Pointer to the current AVCMacroblock structure."
- \return "void"
- */
- OSCL_IMPORT_REF void InitNeighborAvailability(AVCCommonObj *video, int mbNum);
- /**
- This function checks whether the requested neighboring macroblock is available.
- \param "MbToSliceGroupMap" "Array containing the slice group ID mapping to MB index."
- \param "PicSizeInMbs" "Size of the picture in number of MBs."
- \param "mbAddr" "Neighboring macroblock index to check."
- \param "currMbAddr" "Current macroblock index."
- \return "TRUE if the neighboring MB is available, FALSE otherwise."
- */
- bool mb_is_available(AVCMacroblock *mblock, uint PicSizeInMbs, int mbAddr, int currMbAddr);
- /**
- This function performs prediction of the nonzero coefficient for a luma block (i,j).
- \param "video" "Pointer to AVCCommonObj."
- \param "i" "Block index, horizontal."
- \param "j" "Block index, vertical."
- \return "Predicted number of nonzero coefficient."
- */
- OSCL_IMPORT_REF int predict_nnz(AVCCommonObj *video, int i, int j);
- /**
- This function performs prediction of the nonzero coefficient for a chroma block (i,j).
- \param "video" "Pointer to AVCCommonObj."
- \param "i" "Block index, horizontal."
- \param "j" "Block index, vertical."
- \return "Predicted number of nonzero coefficient."
- */
- OSCL_IMPORT_REF int predict_nnz_chroma(AVCCommonObj *video, int i, int j);
- /**
- This function calculates the predicted motion vectors for the current macroblock.
- \param "video" "Pointer to AVCCommonObj."
- \param "encFlag" "Boolean whether this function is used by encoder or decoder."
- \return "void."
- */
- OSCL_IMPORT_REF void GetMotionVectorPredictor(AVCCommonObj *video, int encFlag);
- /*---------- reflist.c -----------------*/
- /**
- This function initializes reference picture list used in INTER prediction
- at the beginning of each slice decoding. See subclause 8.2.4.
- \param "video" "Pointer to AVCCommonObj."
- \return "void"
- Output is video->RefPicList0, video->RefPicList1, video->refList0Size and video->refList1Size.
- */
- OSCL_IMPORT_REF void RefListInit(AVCCommonObj *video);
- /**
- This function generates picture list from frame list. Used when current picture is field.
- see subclause 8.2.4.2.5.
- \param "video" "Pointer to AVCCommonObj."
- \param "IsL1" "Is L1 list?"
- \param "long_term" "Is long-term prediction?"
- \return "void"
- */
- void GenPicListFromFrameList(AVCCommonObj *video, int IsL1, int long_term);
- /**
- This function performs reference picture list reordering according to the
- ref_pic_list_reordering() syntax. See subclause 8.2.4.3.
- \param "video" "Pointer to AVCCommonObj."
- \return "AVC_SUCCESS or AVC_FAIL"
- Output is video->RefPicList0, video->RefPicList1, video->refList0Size and video->refList1Size.
- */
- OSCL_IMPORT_REF AVCStatus ReOrderList(AVCCommonObj *video);
- /**
- This function performs reference picture list reordering according to the
- ref_pic_list_reordering() syntax regardless of list 0 or list 1. See subclause 8.2.4.3.
- \param "video" "Pointer to AVCCommonObj."
- \param "isL1" "Is list 1 or not."
- \return "AVC_SUCCESS or AVC_FAIL"
- Output is video->RefPicList0 and video->refList0Size or video->RefPicList1 and video->refList1Size.
- */
- AVCStatus ReorderRefPicList(AVCCommonObj *video, int isL1);
- /**
- This function performs reordering process of reference picture list for short-term pictures.
- See subclause 8.2.4.3.1.
- \param "video" "Pointer to AVCCommonObj."
- \param "picNumLX" "picNumLX of an entry in the reference list."
- \param "refIdxLX" "Pointer to the current entry index in the reference."
- \param "isL1" "Is list 1 or not."
- \return "AVC_SUCCESS or AVC_FAIL"
- */
- AVCStatus ReorderShortTerm(AVCCommonObj *video, int picNumLX, int *refIdxLX, int isL1);
- /**
- This function performs reordering process of reference picture list for long-term pictures.
- See subclause 8.2.4.3.2.
- \param "video" "Pointer to AVCCommonObj."
- \param "LongTermPicNum" "LongTermPicNum of an entry in the reference list."
- \param "refIdxLX" "Pointer to the current entry index in the reference."
- \param "isL1" "Is list 1 or not."
- \return "AVC_SUCCESS or AVC_FAIL"
- */
- AVCStatus ReorderLongTerm(AVCCommonObj *video, int LongTermPicNum, int *refIdxLX, int isL1);
- /**
- This function gets the pictures in DPB according to the PicNum.
- \param "video" "Pointer to AVCCommonObj."
- \param "picNum" "PicNum of the picture we are looking for."
- \return "Pointer to the AVCPictureData or NULL if not found"
- */
- AVCPictureData* GetShortTermPic(AVCCommonObj *video, int picNum);
- /**
- This function gets the pictures in DPB according to the LongtermPicNum.
- \param "video" "Pointer to AVCCommonObj."
- \param "LongtermPicNum" "LongtermPicNum of the picture we are looking for."
- \return "Pointer to the AVCPictureData."
- */
- AVCPictureData* GetLongTermPic(AVCCommonObj *video, int LongtermPicNum);
- /**
- This function indicates whether the picture is used for short-term reference or not.
- \param "s" "Pointer to AVCPictureData."
- \return "1 if it is used for short-term, 0 otherwise."
- */
- int is_short_ref(AVCPictureData *s);
- /**
- This function indicates whether the picture is used for long-term reference or not.
- \param "s" "Pointer to AVCPictureData."
- \return "1 if it is used for long-term, 0 otherwise."
- */
- int is_long_ref(AVCPictureData *s);
- /**
- This function sorts array of pointers to AVCPictureData in descending order of
- the PicNum value.
- \param "data" "Array of pointers to AVCPictureData."
- \param "num" "Size of the array."
- \return "void"
- */
- void SortPicByPicNum(AVCPictureData *data[], int num);
- /**
- This function sorts array of pointers to AVCPictureData in ascending order of
- the PicNum value.
- \param "data" "Array of pointers to AVCPictureData."
- \param "num" "Size of the array."
- \return "void"
- */
- void SortPicByPicNumLongTerm(AVCPictureData *data[], int num);
- /**
- This function sorts array of pointers to AVCFrameStore in descending order of
- the FrameNumWrap value.
- \param "data" "Array of pointers to AVCFrameStore."
- \param "num" "Size of the array."
- \return "void"
- */
- void SortFrameByFrameNumWrap(AVCFrameStore *data[], int num);
- /**
- This function sorts array of pointers to AVCFrameStore in ascending order of
- the LongTermFrameIdx value.
- \param "data" "Array of pointers to AVCFrameStore."
- \param "num" "Size of the array."
- \return "void"
- */
- void SortFrameByLTFrameIdx(AVCFrameStore *data[], int num);
- /**
- This function sorts array of pointers to AVCPictureData in descending order of
- the PicOrderCnt value.
- \param "data" "Array of pointers to AVCPictureData."
- \param "num" "Size of the array."
- \return "void"
- */
- void SortPicByPOC(AVCPictureData *data[], int num, int descending);
- /**
- This function sorts array of pointers to AVCPictureData in ascending order of
- the LongTermPicNum value.
- \param "data" "Array of pointers to AVCPictureData."
- \param "num" "Size of the array."
- \return "void"
- */
- void SortPicByLTPicNum(AVCPictureData *data[], int num);
- /**
- This function sorts array of pointers to AVCFrameStore in descending order of
- the PicOrderCnt value.
- \param "data" "Array of pointers to AVCFrameStore."
- \param "num" "Size of the array."
- \return "void"
- */
- void SortFrameByPOC(AVCFrameStore *data[], int num, int descending);
- #endif /* _AVCCOMMON_LIB_H_ */