123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 |
- /*!
- ***********************************************************************
- * \file
- * mbuffer.h
- *
- * \brief
- * Frame buffer functions
- *
- * \author
- * Main contributors (see contributors.h for copyright, address and affiliation details)
- * - Karsten Sühring <[email protected]>
- * - Alexis Michael Tourapis <[email protected]>
-
- * - Jill Boyce <[email protected]>
- * - Saurav K Bandyopadhyay <[email protected]>
- * - Zhenyu Wu <[email protected]
- * - Purvin Pandit <[email protected]>
- *
- ***********************************************************************
- */
- #ifndef _MBUFFER_H_
- #define _MBUFFER_H_
- #include "global.h"
- #include <bfc/platform/types.h>
- #define MAX_LIST_SIZE 33
- //! definition of pic motion parameters
- typedef struct pic_motion_params
- {
- PicMotion **motion[2];
- h264_ref_t ***field_references;
- byte * mb_field; //!< field macroblock indicator
- byte ** field_frame; //!< indicates if co_located is field or frame.
- int padding[1];
- } PicMotionParams;
- typedef struct video_image
- {
- imgpel **img;
- imgpel *base_address;
- size_t stride;
- struct video_image *next; // for the memory cacher
- } VideoImage;
- //! definition a picture (field or frame)
- typedef struct storable_picture
- {
- PictureStructure structure;
- int poc;
- int top_poc;
- int bottom_poc;
- int frame_poc;
- h264_ref_t ref_pic_num [MAX_NUM_SLICES][6][MAX_LIST_SIZE];
- h264_ref_t frm_ref_pic_num [MAX_NUM_SLICES][6][MAX_LIST_SIZE];
- h264_ref_t top_ref_pic_num [MAX_NUM_SLICES][6][MAX_LIST_SIZE];
- h264_ref_t bottom_ref_pic_num [MAX_NUM_SLICES][6][MAX_LIST_SIZE];
- unsigned frame_num;
- unsigned recovery_frame;
- int pic_num;
- int long_term_pic_num;
- int long_term_frame_idx;
- byte is_long_term;
- int used_for_reference;
- int is_output;
- int non_existing;
- short max_slice_id;
- int size_x, size_y, size_x_cr, size_y_cr;
- int size_x_m1, size_y_m1, size_x_cr_m1, size_y_cr_m1;
- int chroma_vector_adjustment;
- int coded_frame;
- int mb_aff_frame_flag;
- unsigned PicWidthInMbs;
- unsigned PicSizeInMbs;
- //imgpel ** imgY; //!< Y picture component
- union
- {
- VideoImage *plane_images[3]; // to ensure array alignment
- struct
- {
- VideoImage *imgY;
- VideoImage *imgUV[2]; //!< U and V picture components
- };
- };
-
- struct pic_motion_params motion; //!< Motion info
- struct pic_motion_params JVmotion[MAX_PLANE]; //!< Motion info for 4:4:4 independent mode decoding
- short ** slice_id; //!< reference picture [mb_x][mb_y]
- struct storable_picture *top_field; // for mb aff, if frame for referencing the top field
- struct storable_picture *bottom_field; // for mb aff, if frame for referencing the bottom field
- struct storable_picture *frame; // for mb aff, if field for referencing the combined frame
- int slice_type;
- int idr_flag;
- int no_output_of_prior_pics_flag;
- int long_term_reference_flag;
- int adaptive_ref_pic_buffering_flag;
- int chroma_format_idc;
- int frame_mbs_only_flag;
- int frame_cropping_flag;
- int frame_cropping_rect_left_offset;
- int frame_cropping_rect_right_offset;
- int frame_cropping_rect_top_offset;
- int frame_cropping_rect_bottom_offset;
- int qp;
- int chroma_qp_offset[2];
- int slice_qp_delta;
- DecRefPicMarking_t *dec_ref_pic_marking_buffer; //!< stores the memory management control operations
- // picture error concealment
- int concealed_pic; //indicates if this is a concealed picture
-
- // variables for tone mapping
- int seiHasTone_mapping;
- int tone_mapping_model_id;
- int tonemapped_bit_depth;
- imgpel* tone_mapping_lut; //!< tone mapping look up table
- int retain_count; // benski> we're going to reference count these things
- uint64_t time_code; // user-passed timecode for this frame
- } StorablePicture;
- //! definition a picture (field or frame)
- typedef struct colocated_params
- {
- int mb_adaptive_frame_field_flag;
- int size_x, size_y;
- byte is_long_term;
- MotionParams frame;
- MotionParams top;
- MotionParams bottom;
- } ColocatedParams;
- //! Frame Stores for Decoded Picture Buffer
- typedef struct frame_store
- {
- int is_used; //!< 0=empty; 1=top; 2=bottom; 3=both fields (or frame)
- int is_reference; //!< 0=not used for ref; 1=top used; 2=bottom used; 3=both fields (or frame) used
- int is_long_term; //!< 0=not used for ref; 1=top used; 2=bottom used; 3=both fields (or frame) used
- 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
- int is_non_existent;
- unsigned frame_num;
- unsigned recovery_frame;
- int frame_num_wrap;
- int long_term_frame_idx;
- int is_output;
- int poc;
- // picture error concealment
- int concealment_reference;
- StorablePicture *frame;
- StorablePicture *top_field;
- StorablePicture *bottom_field;
- } FrameStore;
- //! Decoded Picture Buffer
- typedef struct decoded_picture_buffer
- {
- VideoParameters *p_Vid;
- InputParameters *p_Inp;
- FrameStore **fs;
- FrameStore **fs_ref;
- FrameStore **fs_ltref;
- unsigned size;
- unsigned used_size;
- unsigned ref_frames_in_buffer;
- unsigned ltref_frames_in_buffer;
- int last_output_poc;
- int max_long_term_pic_idx;
- int init_done;
- int num_ref_frames;
- FrameStore *last_picture;
- } DecodedPictureBuffer;
- extern void init_dpb(VideoParameters *p_Vid);
- extern void free_dpb(VideoParameters *p_Vid);
- extern FrameStore* alloc_frame_store(void);
- extern void free_frame_store(VideoParameters *p_Vid, FrameStore* f);
- extern StorablePicture* alloc_storable_picture(VideoParameters *p_Vid, PictureStructure type, int size_x, int size_y, int size_x_cr, int size_y_cr);
- extern void free_storable_picture(VideoParameters *p_Vid, StorablePicture* p);
- extern void store_picture_in_dpb(VideoParameters *p_Vid, StorablePicture* p);
- extern void flush_dpb(VideoParameters *p_Vid);
- extern void dpb_split_field (VideoParameters *p_Vid, FrameStore *fs);
- extern void dpb_combine_field(VideoParameters *p_Vid, FrameStore *fs);
- extern void dpb_combine_field_yuv(VideoParameters *p_Vid, FrameStore *fs);
- extern void init_lists (Slice *currSlice);
- extern void reorder_ref_pic_list(VideoParameters *p_Vid, StorablePicture **list, char *list_size,
- int num_ref_idx_lX_active_minus1, int *reordering_of_pic_nums_idc,
- int *abs_diff_pic_num_minus1, int *long_term_pic_idx);
- extern void init_mbaff_lists(VideoParameters *p_Vid);
- extern void alloc_ref_pic_list_reordering_buffer(Slice *currSlice);
- extern void free_ref_pic_list_reordering_buffer(Slice *currSlice);
- extern void fill_frame_num_gap(VideoParameters *p_Vid);
- extern ColocatedParams* alloc_colocated(VideoParameters *p_Vid, int size_x, int size_y,int mb_adaptive_frame_field_flag);
- extern void free_colocated(VideoParameters *p_Vid, ColocatedParams* p);
- extern void compute_colocated (Slice *currSlice, ColocatedParams* p, StorablePicture **listX[6]);
- extern void compute_colocated_frames_mbs (Slice *currSlice, ColocatedParams* p, StorablePicture **listX[6]);
- // For 4:4:4 independent mode
- extern void compute_colocated_JV ( Slice *currSlice, ColocatedParams* p, StorablePicture **listX[6]);
- extern void copy_storable_param_JV( VideoParameters *p_Vid, PicMotionParams *JVplane, PicMotionParams *motion );
- // benski> decoded output pictures
- void out_storable_picture_get(VideoParameters *img, StorablePicture **pic);
- void out_storable_picture_add(VideoParameters *img, StorablePicture *pic);
- void out_storable_pictures_init(VideoParameters *img, size_t count);
- void out_storable_pictures_destroy(VideoParameters *img);
- #endif
|