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

Audio

开发平台:

Visual C++

  1. /*!
  2.  ***************************************************************************
  3.  * file
  4.  *    rdoq.h
  5.  *
  6.  * brief
  7.  *    Headerfile for trellis based mode decision
  8.  *
  9.  * author
  10.  *    Limin Liu                       <lliu@dolby.com>
  11.  *    Alexis Michael Tourapis         <alexismt@ieee.org>                
  12.  ***************************************************************************
  13.  */
  14. #ifndef _RDOQ_H_
  15. #define _RDOQ_H_
  16. #include <math.h>
  17. #define MAX_PREC_COEFF    25
  18. #define SIGN_BITS    1
  19. typedef struct 
  20. {
  21.   int  significantBits[16][2];
  22.   int  lastBits[16][2];
  23.   int  greaterOneBits[2][5][2]; // c1 and c2
  24.   int  greaterOneState[5];
  25.   int  blockCbpBits[4][2]; // c1 and c2
  26. } estBitsCabacStruct;
  27. typedef struct 
  28. {
  29.   int level[3];
  30.   int  levelDouble;
  31.   double  errLevel[3];
  32.   int noLevels;
  33.   int coeff_ctr;
  34.   int pre_level;
  35.   int sign;
  36. } levelDataStruct;
  37. extern double norm_factor_4x4;
  38. extern double norm_factor_8x8;
  39. void init_rdoq_slice(int slice_type, int symbol_mode);
  40. /*----------CAVLC related functions----------*/
  41. void est_RunLevel_CAVLC(levelDataStruct *levelData, int *levelTrellis, int block_type, 
  42.                         int b8, int b4, int coeff_num, double lambda);
  43. int est_CAVLC_bits(levelDataStruct *levelData, int level_to_enc[16], int sign_to_enc[16], int nnz, int block_type);
  44. /*----------CABAC related functions----------*/
  45. void precalculate_unary_exp_golomb_level();
  46. int est_unary_exp_golomb_level_bits(unsigned int symbol, int bits0, int bits1);
  47. int est_exp_golomb_encode_eq_prob(unsigned int symbol);
  48. void estRunLevel_CABAC (Macroblock* currMB, int context);
  49. void est_CBP_block_bit (Macroblock* currMB, EncodingEnvironmentPtr eep_dp, int type);
  50. void est_significance_map(Macroblock* currMB, EncodingEnvironmentPtr eep_dp, int type);
  51. void est_significant_coefficients (Macroblock* currMB, EncodingEnvironmentPtr eep_dp,  int type);
  52. int biari_no_bits(EncodingEnvironmentPtr eep, signed short symbol, BiContextTypePtr bi_ct );
  53. int biari_state(EncodingEnvironmentPtr eep, signed short symbol, BiContextTypePtr bi_ct );
  54. int est_write_and_store_CBP_block_bit(Macroblock* currMB, int type);
  55. void est_writeRunLevel_CABAC(levelDataStruct levelData[], int levelTabMin[], int type, double lambda, int kStart, 
  56.                              int kStop, int noCoeff, int estCBP);
  57. int est_unary_exp_golomb_level_encode(unsigned int symbol, int ctx, int type);
  58. void init_trellis_data_4x4_CAVLC(int (*tblock)[16], int block_x, int qp_per, int qp_rem, 
  59.                          int **levelscale, int **leveloffset, const byte *p_scan, Macroblock *currMB,  
  60.                          levelDataStruct *dataLevel, int type);
  61. int init_trellis_data_4x4_CABAC(int (*tblock)[16], int block_x, int qp_per, int qp_rem, 
  62.                          int **levelscale, int **leveloffset, const byte *p_scan, Macroblock *currMB,  
  63.                          levelDataStruct *dataLevel, int* kStart, int* kStop, int type);
  64. void init_trellis_data_8x8_CAVLC(int (*tblock)[16], int block_x, int qp_per, int qp_rem, 
  65.                          int **levelscale, int **leveloffset, const byte *p_scan, Macroblock *currMB,  
  66.                          levelDataStruct levelData[4][16]);
  67. int init_trellis_data_8x8_CABAC(int (*tblock)[16], int block_x, int qp_per, int qp_rem, 
  68.                          int **levelscale, int **leveloffset, const byte *p_scan, Macroblock *currMB,  
  69.                          levelDataStruct *dataLevel, int* kStart, int* kStop, int symbolmode);
  70. void init_trellis_data_DC_CAVLC(int (*tblock)[4], int qp_per, int qp_rem, 
  71.                          int levelscale, int leveloffset, const byte *p_scan, Macroblock *currMB,  
  72.                          levelDataStruct *dataLevel, int type);
  73. int init_trellis_data_DC_CABAC(int (*tblock)[4], int qp_per, int qp_rem, 
  74.                          int levelscale, int leveloffset, const byte *p_scan, Macroblock *currMB,  
  75.                          levelDataStruct *dataLevel, int* kStart, int* kStop);
  76. int init_trellis_data_DC_cr(int (*tblock)[4], int qp_per, int qp_rem, 
  77.                          int levelscale, int **leveloffset, const byte *p_scan, Macroblock *currMB,  
  78.                          levelDataStruct *dataLevel, int* kStart, int* kStop, int type);
  79. void RDOQ_update_mode(RD_PARAMS *enc_mb, int bslice);
  80. void copy_rddata_trellis (RD_DATA *dest, RD_DATA *src);
  81. void updateMV_mp(int *m_cost, short ref, int list, int h, int v, int blocktype, int *lambda_factor, int block8x8);
  82. void trellis_coding(Macroblock *currMB, int CurrentMbAddr, Boolean prev_recode_mb);
  83. #endif  // _RDOQ_H_