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.  ***********************************************************************
  13.  */
  14. #ifndef _MBUFFER_H_
  15. #define _MBUFFER_H_
  16. #include "global.h"
  17. #include "enc_statistics.h"
  18. #define MAX_LIST_SIZE 33
  19. typedef struct picture_stats
  20. {
  21.   double dsum[3];
  22.   double dvar[3];
  23. } PictureStats;
  24. //! definition of pic motion parameters
  25. typedef struct pic_motion_params
  26. {
  27.   int64 ***   ref_pic_id;    //!< reference picture identifier [list][subblock_y][subblock_x]
  28.   int64 ***   ref_id;        //!< reference picture identifier [list][subblock_y][subblock_x]
  29.   short ****  mv;            //!< motion vector       [list][subblock_x][subblock_y][component]
  30.   char  ***   ref_idx;       //!< reference picture   [list][subblock_y][subblock_x]
  31.   byte *      mb_field;      //!< field macroblock indicator
  32.   byte **     field_frame;   //!< indicates if co_located is field or frame.
  33. } PicMotionParams;
  34. //! definition a picture (field or frame)
  35. typedef struct storable_picture
  36. {
  37.   PictureStructure structure;
  38.   int         poc;
  39.   int         top_poc;
  40.   int         bottom_poc;
  41.   int         frame_poc;
  42.   int         order_num;
  43.   int64       ref_pic_num[6][MAX_LIST_SIZE];
  44.   int64       frm_ref_pic_num[6][MAX_LIST_SIZE];
  45.   int64       top_ref_pic_num[6][MAX_LIST_SIZE];
  46.   int64       bottom_ref_pic_num[6][MAX_LIST_SIZE];
  47.   unsigned    frame_num;
  48.   int         pic_num;
  49.   int         long_term_pic_num;
  50.   int         long_term_frame_idx;
  51.   int         is_long_term;
  52.   int         used_for_reference;
  53.   int         is_output;
  54.   int         non_existing;
  55.   int         size_x, size_y, size_x_cr, size_y_cr;
  56.   int         size_x_padded, size_y_padded;
  57.   int         size_x_pad, size_y_pad;
  58.   int         size_x_cr_pad, size_y_cr_pad;
  59.   int         chroma_vector_adjustment;
  60.   int         coded_frame;
  61.   int         MbaffFrameFlag;
  62.   imgpel **   imgY;          //!< Y picture component
  63.   imgpel **** imgY_sub;      //!< Y picture component upsampled (Quarter pel)
  64.   imgpel ***  imgUV;         //!< U and V picture components
  65.   imgpel *****imgUV_sub;     //!< UV picture component upsampled (Quarter/One-Eighth pel)
  66.   //Multiple Decoder Buffers (used if rdopt==3)
  67.   imgpel ***  dec_imgY;       //!< Decoded Y component in multiple hypothetical decoders
  68.   imgpel **** dec_imgUV;      //!< Decoded U and V components in multiple hypothetical decoders
  69.   imgpel ***  p_dec_img[MAX_PLANE];      //!< pointer array for accessing decoded pictures in hypothetical decoders
  70.   byte   ***  mb_error_map;    //!< Map of macroblock errors in hypothetical decoders.
  71.   imgpel **   p_img[MAX_PLANE];          //!< pointer array for accessing imgY/imgUV[]
  72.   imgpel **** p_img_sub[MAX_PLANE];      //!< pointer array for storing top address of imgY_sub/imgUV_sub[]
  73.   imgpel **   p_curr_img;                //!< current int-pel ref. picture area to be used for motion estimation
  74.   imgpel **** p_curr_img_sub;            //!< current sub-pel ref. picture area to be used for motion estimation
  75.   PicMotionParams2 ***mv_info;    //!< Motion info
  76.   PicMotionParams  motion;    //!< Motion info
  77.   PicMotionParams JVmotion[MAX_PLANE];    //!< Motion info for 4:4:4 independent coding
  78.   int colour_plane_id;                     //!< colour_plane_id to be used for 4:4:4 independent mode encoding
  79.   struct storable_picture *top_field;     // for mb aff, if frame for referencing the top field
  80.   struct storable_picture *bottom_field;  // for mb aff, if frame for referencing the bottom field
  81.   struct storable_picture *frame;         // for mb aff, if field for referencing the combined frame
  82.   int         chroma_format_idc;
  83.   int         frame_mbs_only_flag;
  84.   int         frame_cropping_flag;
  85.   int         frame_cropping_rect_left_offset;
  86.   int         frame_cropping_rect_right_offset;
  87.   int         frame_cropping_rect_top_offset;
  88.   int         frame_cropping_rect_bottom_offset;
  89.   PictureStats p_stats;
  90.   StatParameters stats;
  91. } StorablePicture;
  92. //! definition of motion parameters
  93. typedef struct motion_params
  94. {
  95.   int64 ***   ref_pic_id;    //!< reference picture identifier [list][subblock_y][subblock_x]
  96.   short ****  mv;            //!< motion vector       [list][subblock_x][subblock_y][component]
  97.   char  ***   ref_idx;       //!< reference picture   [list][subblock_y][subblock_x]
  98.   byte **     moving_block;
  99. } MotionParams;
  100. //! definition a picture (field or frame)
  101. typedef struct colocated_params
  102. {
  103.   int         mb_adaptive_frame_field_flag;
  104.   int         size_x, size_y;
  105.   byte        is_long_term;
  106.   MotionParams frame;
  107.   MotionParams top;
  108.   MotionParams bottom;
  109. } ColocatedParams;
  110. //! Frame Stores for Decoded Picture Buffer
  111. typedef struct frame_store
  112. {
  113.   int       is_used;                //!< 0=empty; 1=top; 2=bottom; 3=both fields (or frame)
  114.   int       is_reference;           //!< 0=not used for ref; 1=top used; 2=bottom used; 3=both fields (or frame) used
  115.   int       is_long_term;           //!< 0=not used for ref; 1=top used; 2=bottom used; 3=both fields (or frame) used
  116.   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
  117.   int       is_non_existent;
  118.   unsigned  frame_num;
  119.   int       frame_num_wrap;
  120.   int       long_term_frame_idx;
  121.   int       is_output;
  122.   int       poc;
  123.   StorablePicture *frame;
  124.   StorablePicture *top_field;
  125.   StorablePicture *bottom_field;
  126. } FrameStore;
  127. //! Decoded Picture Buffer
  128. typedef struct decoded_picture_buffer
  129. {
  130.   FrameStore  **fs;
  131.   FrameStore  **fs_ref;
  132.   FrameStore  **fs_ltref;
  133.   unsigned      size;
  134.   unsigned      used_size;
  135.   unsigned      ref_frames_in_buffer;
  136.   unsigned      ltref_frames_in_buffer;
  137.   int           last_output_poc;
  138.   int           max_long_term_pic_idx;
  139.   int           init_done;
  140.   FrameStore   *last_picture;
  141. } DecodedPictureBuffer;
  142. extern DecodedPictureBuffer dpb;
  143. extern StorablePicture **listX[6];
  144. extern int listXsize[6];
  145. void             init_dpb(void);
  146. void             free_dpb(void);
  147. FrameStore*      alloc_frame_store(void);
  148. void             free_frame_store(FrameStore* f);
  149. StorablePicture* alloc_storable_picture(PictureStructure type, int size_x, int size_y, int size_x_cr, int size_y_cr);
  150. void             free_storable_picture(StorablePicture* p);
  151. void             store_picture_in_dpb(StorablePicture* p);
  152. void             replace_top_pic_with_frame(StorablePicture* p);
  153. void             flush_dpb(void);
  154. void             dpb_split_field(FrameStore *fs);
  155. void             dpb_combine_field(FrameStore *fs);
  156. void             dpb_combine_field_yuv(FrameStore *fs);
  157. void             init_lists(int currSliceType, PictureStructure currPicStructure);
  158. void             reorder_ref_pic_list(StorablePicture **list, int *list_size,
  159.                                       int num_ref_idx_lX_active_minus1, int *reordering_of_pic_nums_idc,
  160.                                       int *abs_diff_pic_num_minus1, int *long_term_pic_idx);
  161. void             init_mbaff_lists(void);
  162. void             alloc_ref_pic_list_reordering_buffer(Slice *currSlice);
  163. void             free_ref_pic_list_reordering_buffer(Slice *currSlice);
  164. void             fill_frame_num_gap(ImageParameters *img);
  165. ColocatedParams* alloc_colocated(int size_x, int size_y,int mb_adaptive_frame_field_flag);
  166. void free_colocated(ColocatedParams* p);
  167. void compute_colocated(ColocatedParams* p, StorablePicture **listX[6]);
  168. // For 4:4:4 independent mode
  169. void compute_colocated_JV(ColocatedParams* p, StorablePicture **listX[6]);
  170. void copy_storable_param_JV( int nplane, StorablePicture *d, StorablePicture *s );
  171. #endif