diff options
Diffstat (limited to 'media/libstagefright/codecs/avc/common/include/avclib_common.h')
-rw-r--r-- | media/libstagefright/codecs/avc/common/include/avclib_common.h | 557 |
1 files changed, 557 insertions, 0 deletions
diff --git a/media/libstagefright/codecs/avc/common/include/avclib_common.h b/media/libstagefright/codecs/avc/common/include/avclib_common.h new file mode 100644 index 0000000..cbbf0c6 --- /dev/null +++ b/media/libstagefright/codecs/avc/common/include/avclib_common.h @@ -0,0 +1,557 @@ +/* ------------------------------------------------------------------ + * 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_ */ |