Template
124 lines
6.3 KiB
C
124 lines
6.3 KiB
C
/*!
|
|
**************************************************************************
|
|
* \file errdo.h
|
|
* \brief Header file for error resilient RDO (name of file should change)
|
|
*
|
|
* \author
|
|
* Main contributors (see contributors.h for copyright, address and affiliation details)
|
|
* - Peshala Pahalawatta <ppaha@dolby.com>
|
|
* - Zhifeng Chen <zzchen@dolby.com>
|
|
* - Alexis Michael Tourapis <atour@ieee.org>
|
|
*
|
|
**************************************************************************
|
|
*/
|
|
|
|
#ifndef _ERRDO_H_
|
|
#define _ERRDO_H_
|
|
|
|
|
|
typedef enum
|
|
{
|
|
LLN = 0,
|
|
ROPE = 1,
|
|
RMPC = 2,
|
|
} DE_Type;
|
|
|
|
struct distortion_estimation
|
|
{
|
|
//To support slice data partitioing, residual and motion vector should use their own buffers (used if rdopt==3)
|
|
int ** res_con_diff_Y; //!< for storing the residual concealment difference for component Y in rmpc algorithm
|
|
int *** res_con_diff_UV; //!< for storing the residual concealment difference for component UV in rmpc algorithm
|
|
int ** p_res_con_diff[MAX_PLANE]; //!< pointer array for accessing res_con_error_Y / res_con_error_UV[]
|
|
int ** MV_con_diff_Y; //!< for storing the MV concealment difference for component Y in rmpc algorithm
|
|
int *** MV_con_diff_UV; //!< for storing the MV concealment difference for component UV in rmpc algorithm
|
|
int ** p_MV_con_diff[MAX_PLANE]; //!< pointer array for accessing MV_con_diff_Y / MV_con_diff_UV[]
|
|
byte ** error_sign_flag_Y; //!< to indicate the sign of transmission error for component Y in rmpc algorithm
|
|
byte ***error_sign_flag_UV; //!< to indicate the sign of transmission error for component UV in rmpc algorithm
|
|
byte ** p_error_sign_flag[MAX_PLANE]; //!< pointer array for accessing error_sign_flag_Y / error_sign_flag_UV[]
|
|
int ** transmission_dist_Y; //!< for storing the transmission distortion for component Y in rmpc algorithm
|
|
int *** transmission_dist_UV; //!< for storing the transmission distortion for component UV in rmpc algorithm
|
|
int ** p_transmission_dist[MAX_PLANE]; //!< pointer array for accessing transmission_dist_Y / transmission_dist_UV[]
|
|
int ** transmission_err_Y; //!< for storing the transmission distortion for component Y in rmpc algorithm
|
|
int *** transmission_err_UV; //!< for storing the transmission distortion for component UV in rmpc algorithm
|
|
int ** p_transmission_err[MAX_PLANE]; //!< pointer array for accessing transmission_dist_Y / transmission_dist_UV[]
|
|
|
|
//Multiple Decoder Buffers (used if rdopt==3)
|
|
imgpel *** dec_imgY; //!< Decoded Y component in multiple hypothetical decoders
|
|
imgpel **** dec_imgUV; //!< Decoded U and V components in multiple hypothetical decoders
|
|
imgpel *** p_dec_img[MAX_PLANE]; //!< pointer array for accessing decoded pictures in hypothetical decoders
|
|
byte *** mb_error_map; //!< Map of macroblock errors in hypothetical decoders.
|
|
|
|
//(used if rdopt==3)
|
|
imgpel ** first_moment_Y; //!< for storing the estimated first moment for component Y in rope algorithm
|
|
imgpel *** first_moment_UV; //!< for storing the estimated first moment for component Y in rope algorithm
|
|
imgpel ** p_first_moment[MAX_PLANE]; //!< pointer array for accessing first_moment_Y / first_moment_UV[]
|
|
uint16 ** second_moment_Y; //!< for storing the estimated second moment for component Y in rope algorithm
|
|
uint16 *** second_moment_UV; //!< for storing the estimated second moment for component Y in rope algorithm
|
|
uint16 ** p_second_moment[MAX_PLANE]; //!< pointer array for accessing second_moment_Y / first_moment_UV[]
|
|
};
|
|
|
|
|
|
//! Info for the "decoders-in-the-encoder" used for rdoptimization with packet losses
|
|
struct decoders
|
|
{
|
|
int ***res_img; //!< Residual values for macroblock
|
|
int ***res_mb_best8x8; //!< Residual values for the best b8x8 to be used in P8x8 mode decision
|
|
|
|
//for RMPC algorithm
|
|
int **RCD_bestY_mb;
|
|
int ***RCD_bestY_b8x8;
|
|
int **MVCD_bestY_mb;
|
|
int ***MVCD_bestY_b8x8;
|
|
byte **flag_bestY_mb;
|
|
byte ***flag_bestY_b8x8;
|
|
byte **flag_wo_res;
|
|
byte ***flag_wo_res_bestY_b8x8;
|
|
int **trans_dist_bestY_mb;
|
|
int ***trans_dist_bestY_b8x8;
|
|
int **trans_dist_wo_res;
|
|
int ***trans_dist_wo_res_bestY_b8x8;
|
|
int **trans_err_bestY_mb;
|
|
int ***trans_err_bestY_b8x8;
|
|
int **trans_err_wo_res;
|
|
int ***trans_err_wo_res_bestY_b8x8;
|
|
|
|
//for LLN algorithm
|
|
imgpel ***dec_mbY_best; //!< Best reconstructed macroblock pixel values
|
|
imgpel ****dec_mbY_best8x8; //!< Best reconstructed 8x8 mode pixel values
|
|
imgpel ****dec_mb_pred_best8x8; //!< Predicted pixel values for best 8x8 modes
|
|
imgpel ***dec_mb_pred; //!< Predicted pixel values for macroblock
|
|
int rec_type;
|
|
|
|
//for ROPE algorithm
|
|
imgpel **first_moment_bestY_mb;
|
|
imgpel ***first_moment_bestY_b8x8;
|
|
imgpel ***first_moment_pred_bestY_b8x8;
|
|
imgpel **first_moment_pred;
|
|
uint16 **second_moment_bestY_mb;
|
|
uint16 ***second_moment_bestY_b8x8;
|
|
uint16 ***second_moment_pred_bestY_b8x8;
|
|
uint16 **second_moment_pred;
|
|
};
|
|
|
|
typedef struct decoders Decoders;
|
|
|
|
//============= rate-distortion opt with packet losses ===========
|
|
|
|
extern void init_error_conceal (VideoParameters *p_Vid, int concealment_type);
|
|
extern void errdo_compute_residue (Macroblock *currMB, imgpel **imgY, int **res_img, imgpel **mb_pred, int b8block, int block_size);
|
|
extern int allocate_errdo_mem (VideoParameters *p_Vid, InputParameters *p_Inp);
|
|
extern void free_errdo_mem (VideoParameters *p_Vid);
|
|
|
|
extern void init_distortion_estimation (VideoParameters *p_Vid, int de_algorithm);
|
|
extern void errdo_store_best_b8x8(Macroblock *currMB, int transform8x8, int block);
|
|
extern void errdo_get_best_b8x8(Macroblock *currMB, int transform8x8, int block);
|
|
extern void errdo_store_best_MB(Macroblock *currMB);
|
|
extern void errdo_get_best_MB(Macroblock *currMB);
|
|
extern void errdo_get_best_P8x8(Macroblock *currMB, int transform8x8);
|
|
extern void errdo_alloc_storable_picture(StorablePicture *s, VideoParameters *p_Vid, InputParameters *p_Inp, int size_x, int size_y, int size_x_cr, int size_y_cr);
|
|
extern void errdo_free_storable_picture(StorablePicture* p);
|
|
extern StorablePicture* find_nearest_ref_picture(DecodedPictureBuffer *p_Dpb, int poc);
|
|
|
|
#endif
|
|
|