⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rdoq.h

📁 H.264编码实现
💻 H
字号:

/*!
 ***************************************************************************
 * \file
 *    rdoq.h
 *
 * \brief
 *    Headerfile for trellis based mode decision
 *
 * \author
 *    Limin Liu                       <lliu@dolby.com>
 *    Alexis Michael Tourapis         <alexismt@ieee.org>                
 ***************************************************************************
 */


#ifndef _RDOQ_H_
#define _RDOQ_H_

#include <math.h>


#define MAX_PREC_COEFF    25
#define SIGN_BITS    1

typedef struct 
{
  int  significantBits[16][2];
  int  lastBits[16][2];
  int  greaterOneBits[2][5][2]; // c1 and c2
  int  greaterOneState[5];
  int  blockCbpBits[4][2]; // c1 and c2
} estBitsCabacStruct;

typedef struct 
{
  int level[3];
  int  levelDouble;
  double  errLevel[3];
  int noLevels;
  int coeff_ctr;
  int pre_level;
  int sign;
} levelDataStruct;

extern double norm_factor_4x4;
extern double norm_factor_8x8;


void init_rdoq_slice(int slice_type, int symbol_mode);

/*----------CAVLC related functions----------*/
void est_RunLevel_CAVLC(levelDataStruct *levelData, int *levelTrellis, int block_type, 
                        int b8, int b4, int coeff_num, double lambda);
int est_CAVLC_bits(levelDataStruct *levelData, int level_to_enc[16], int sign_to_enc[16], int nnz, int block_type);

/*----------CABAC related functions----------*/
void precalculate_unary_exp_golomb_level();
int est_unary_exp_golomb_level_bits(unsigned int symbol, int bits0, int bits1);
int est_exp_golomb_encode_eq_prob(unsigned int symbol);

void estRunLevel_CABAC (Macroblock* currMB, int context);
void est_CBP_block_bit (Macroblock* currMB, EncodingEnvironmentPtr eep_dp, int type);
void est_significance_map(Macroblock* currMB, EncodingEnvironmentPtr eep_dp, int type);
void est_significant_coefficients (Macroblock* currMB, EncodingEnvironmentPtr eep_dp,  int type);
int biari_no_bits(EncodingEnvironmentPtr eep, signed short symbol, BiContextTypePtr bi_ct );
int biari_state(EncodingEnvironmentPtr eep, signed short symbol, BiContextTypePtr bi_ct );
int est_write_and_store_CBP_block_bit(Macroblock* currMB, int type);
void est_writeRunLevel_CABAC(levelDataStruct levelData[], int levelTabMin[], int type, double lambda, int kStart, 
                             int kStop, int noCoeff, int estCBP);
int est_unary_exp_golomb_level_encode(unsigned int symbol, int ctx, int type);

void init_trellis_data_4x4_CAVLC(int (*tblock)[16], int block_x, int qp_per, int qp_rem, 
                         int **levelscale, int **leveloffset, const byte *p_scan, Macroblock *currMB,  
                         levelDataStruct *dataLevel, int type);
int init_trellis_data_4x4_CABAC(int (*tblock)[16], int block_x, int qp_per, int qp_rem, 
                         int **levelscale, int **leveloffset, const byte *p_scan, Macroblock *currMB,  
                         levelDataStruct *dataLevel, int* kStart, int* kStop, int type);
void init_trellis_data_8x8_CAVLC(int (*tblock)[16], int block_x, int qp_per, int qp_rem, 
                         int **levelscale, int **leveloffset, const byte *p_scan, Macroblock *currMB,  
                         levelDataStruct levelData[4][16]);
int init_trellis_data_8x8_CABAC(int (*tblock)[16], int block_x, int qp_per, int qp_rem, 
                         int **levelscale, int **leveloffset, const byte *p_scan, Macroblock *currMB,  
                         levelDataStruct *dataLevel, int* kStart, int* kStop, int symbolmode);
void init_trellis_data_DC_CAVLC(int (*tblock)[4], int qp_per, int qp_rem, 
                         int levelscale, int leveloffset, const byte *p_scan, Macroblock *currMB,  
                         levelDataStruct *dataLevel, int type);
int init_trellis_data_DC_CABAC(int (*tblock)[4], int qp_per, int qp_rem, 
                         int levelscale, int leveloffset, const byte *p_scan, Macroblock *currMB,  
                         levelDataStruct *dataLevel, int* kStart, int* kStop);
int init_trellis_data_DC_cr(int (*tblock)[4], int qp_per, int qp_rem, 
                         int levelscale, int **leveloffset, const byte *p_scan, Macroblock *currMB,  
                         levelDataStruct *dataLevel, int* kStart, int* kStop, int type);

void RDOQ_update_mode(RD_PARAMS *enc_mb, int bslice);
void copy_rddata_trellis (RD_DATA *dest, RD_DATA *src);
void updateMV_mp(int *m_cost, short ref, int list, int h, int v, int blocktype, int *lambda_factor, int block8x8);
void trellis_coding(Macroblock *currMB, int CurrentMbAddr, Boolean prev_recode_mb);

#endif  // _RDOQ_H_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -