mbuffer.h
上传用户:hjq518
上传日期:2021-12-09
资源大小:5084k
文件大小:8k
源码类别:

Audio

开发平台:

Visual C++

  1. /*!
  2.  ***********************************************************************
  3.  *  file
  4.  *      mbuffer.h
  5.  *
  6.  *  brief
  7.  *      Frame buffer functions
  8.  *
  9.  *  author
  10.  *      Main contributors (see contributors.h for copyright, address and affiliation details)
  11.  *      - Karsten S黨ring          <suehring@hhi.de>
  12.  *      - Alexis Michael Tourapis  <alexismt@ieee.org>
  13.  
  14.  *      - Jill Boyce               <jill.boyce@thomson.net>
  15.  *      - Saurav K Bandyopadhyay   <saurav@ieee.org>
  16.  *      - Zhenyu Wu                <Zhenyu.Wu@thomson.net
  17.  *      - Purvin Pandit            <Purvin.Pandit@thomson.net>
  18.  *
  19.  ***********************************************************************
  20.  */
  21. #ifndef _MBUFFER_H_
  22. #define _MBUFFER_H_
  23. #include "global.h"
  24. #define MAX_LIST_SIZE 33
  25. //! definition of pic motion parameters
  26. typedef struct pic_motion_params
  27. {
  28.   int64 ***   ref_pic_id;    //!< reference picture identifier [list][subblock_y][subblock_x]
  29.   int64 ***   ref_id;        //!< reference picture identifier [list][subblock_y][subblock_x]
  30.   short ****  mv;            //!< motion vector       [list][subblock_x][subblock_y][component]
  31.   char  ***   ref_idx;       //!< reference picture   [list][subblock_y][subblock_x]
  32.   byte *      mb_field;      //!< field macroblock indicator
  33.   byte **     field_frame;   //!< indicates if co_located is field or frame.
  34. } PicMotionParams;
  35. //! definition a picture (field or frame)
  36. typedef struct storable_picture
  37. {
  38.   PictureStructure structure;
  39.   int         poc;
  40.   int         top_poc;
  41.   int         bottom_poc;
  42.   int         frame_poc;
  43.   int64       ref_pic_num        [MAX_NUM_SLICES][6][MAX_LIST_SIZE];
  44.   int64       frm_ref_pic_num    [MAX_NUM_SLICES][6][MAX_LIST_SIZE];
  45.   int64       top_ref_pic_num    [MAX_NUM_SLICES][6][MAX_LIST_SIZE];
  46.   int64       bottom_ref_pic_num [MAX_NUM_SLICES][6][MAX_LIST_SIZE];
  47.   unsigned    frame_num;
  48.   unsigned    recovery_frame;
  49.   int         pic_num;
  50.   int         long_term_pic_num;
  51.   int         long_term_frame_idx;
  52.   int         is_long_term;
  53.   int         used_for_reference;
  54.   int         is_output;
  55.   int         non_existing;
  56.   short       max_slice_id;
  57.   int         size_x, size_y, size_x_cr, size_y_cr;
  58.   int         size_x_m1, size_y_m1, size_x_cr_m1, size_y_cr_m1;
  59.   int         chroma_vector_adjustment;
  60.   int         coded_frame;
  61.   int         MbaffFrameFlag;
  62.   unsigned    PicWidthInMbs;
  63.   unsigned    PicSizeInMbs;
  64.   imgpel **     imgY;         //!< Y picture component
  65.   imgpel ***    imgUV;        //!< U and V picture components
  66.   
  67.   PicMotionParams motion;              //!< Motion info
  68.   PicMotionParams JVmotion[MAX_PLANE]; //!< Motion info for 4:4:4 independent mode decoding
  69.   short **     slice_id;      //!< reference picture   [mb_x][mb_y]
  70.   struct storable_picture *top_field;     // for mb aff, if frame for referencing the top field
  71.   struct storable_picture *bottom_field;  // for mb aff, if frame for referencing the bottom field
  72.   struct storable_picture *frame;         // for mb aff, if field for referencing the combined frame
  73.   int         slice_type;
  74.   int         idr_flag;
  75.   int         no_output_of_prior_pics_flag;
  76.   int         long_term_reference_flag;
  77.   int         adaptive_ref_pic_buffering_flag;
  78.   int         chroma_format_idc;
  79.   int         frame_mbs_only_flag;
  80.   int         frame_cropping_flag;
  81.   int         frame_cropping_rect_left_offset;
  82.   int         frame_cropping_rect_right_offset;
  83.   int         frame_cropping_rect_top_offset;
  84.   int         frame_cropping_rect_bottom_offset;
  85.   int         qp;
  86.   int         chroma_qp_offset[2];
  87.   int         slice_qp_delta;
  88.   DecRefPicMarking_t *dec_ref_pic_marking_buffer;                    //!< stores the memory management control operations
  89.   // picture error concealment
  90.   int         concealed_pic; //indicates if this is a concealed picture
  91.   
  92.   // variables for tone mapping
  93.   int         seiHasTone_mapping;
  94.   int         tone_mapping_model_id;
  95.   int         tonemapped_bit_depth;  
  96.   imgpel*     tone_mapping_lut;                //!< tone mapping look up table
  97. } StorablePicture;
  98. //! definition of motion parameters
  99. typedef struct motion_params
  100. {
  101.   int64 ***   ref_pic_id;    //!< reference picture identifier [list][subblock_y][subblock_x]
  102.   short ****  mv;            //!< motion vector       [list][subblock_x][subblock_y][component]
  103.   char  ***   ref_idx;       //!< reference picture   [list][subblock_y][subblock_x]
  104.   byte **     moving_block;
  105. } MotionParams;
  106. //! definition a picture (field or frame)
  107. typedef struct colocated_params
  108. {
  109.   int         mb_adaptive_frame_field_flag;
  110.   int         size_x, size_y;
  111.   byte        is_long_term;
  112.   MotionParams frame;
  113.   MotionParams top;
  114.   MotionParams bottom;
  115. } ColocatedParams;
  116. //! Frame Stores for Decoded Picture Buffer
  117. typedef struct frame_store
  118. {
  119.   int       is_used;                //!< 0=empty; 1=top; 2=bottom; 3=both fields (or frame)
  120.   int       is_reference;           //!< 0=not used for ref; 1=top used; 2=bottom used; 3=both fields (or frame) used
  121.   int       is_long_term;           //!< 0=not used for ref; 1=top used; 2=bottom used; 3=both fields (or frame) used
  122.   int       is_orig_reference;      //!< original marking by nal_ref_idc: 0=not used for ref; 1=top used; 2=bottom used; 3=both fields (or frame) used
  123.   int       is_non_existent;
  124.   unsigned  frame_num;
  125.   unsigned  recovery_frame;
  126.   int       frame_num_wrap;
  127.   int       long_term_frame_idx;
  128.   int       is_output;
  129.   int       poc;
  130.   // picture error concealment
  131.   int concealment_reference;
  132.   StorablePicture *frame;
  133.   StorablePicture *top_field;
  134.   StorablePicture *bottom_field;
  135. } FrameStore;
  136. //! Decoded Picture Buffer
  137. typedef struct decoded_picture_buffer
  138. {
  139.   FrameStore  **fs;
  140.   FrameStore  **fs_ref;
  141.   FrameStore  **fs_ltref;
  142.   unsigned      size;
  143.   unsigned      used_size;
  144.   unsigned      ref_frames_in_buffer;
  145.   unsigned      ltref_frames_in_buffer;
  146.   int           last_output_poc;
  147.   int           max_long_term_pic_idx;
  148.   int           init_done;
  149.   int           num_ref_frames;
  150.   FrameStore   *last_picture;
  151. } DecodedPictureBuffer;
  152. extern DecodedPictureBuffer dpb;
  153. extern StorablePicture **listX[6];
  154. extern int listXsize[6];
  155. void             init_dpb(void);
  156. void             free_dpb(void);
  157. FrameStore*      alloc_frame_store(void);
  158. void             free_frame_store(FrameStore* f);
  159. StorablePicture* alloc_storable_picture(PictureStructure type, int size_x, int size_y, int size_x_cr, int size_y_cr);
  160. void             free_storable_picture(StorablePicture* p);
  161. void             store_picture_in_dpb(StorablePicture* p);
  162. void             flush_dpb(void);
  163. void             dpb_split_field(FrameStore *fs);
  164. void             dpb_combine_field(FrameStore *fs);
  165. void             dpb_combine_field_yuv(FrameStore *fs);
  166. void             init_lists(int currSliceType, PictureStructure currPicStructure);
  167. void             reorder_ref_pic_list(StorablePicture **list, int *list_size,
  168.                                       int num_ref_idx_lX_active_minus1, int *reordering_of_pic_nums_idc,
  169.                                       int *abs_diff_pic_num_minus1, int *long_term_pic_idx);
  170. void             init_mbaff_lists(void);
  171. void             alloc_ref_pic_list_reordering_buffer(Slice *currSlice);
  172. void             free_ref_pic_list_reordering_buffer(Slice *currSlice);
  173. void             fill_frame_num_gap(ImageParameters *img);
  174. ColocatedParams* alloc_colocated(int size_x, int size_y,int mb_adaptive_frame_field_flag);
  175. void free_colocated(ColocatedParams* p);
  176. void compute_colocated(ColocatedParams* p, StorablePicture **listX[6]);
  177. // For 4:4:4 independent mode
  178. void compute_colocated_JV(ColocatedParams* p, StorablePicture **listX[6]);
  179. void copy_storable_param_JV( PicMotionParams  *JVplane, PicMotionParams  *motion );
  180. #endif