diff options
author | Diego Biurrun <diego@biurrun.de> | 2008-11-26 10:22:55 +0000 |
---|---|---|
committer | Diego Biurrun <diego@biurrun.de> | 2008-11-26 10:22:55 +0000 |
commit | f107a02d4e417ae5b30b3fc0a5af46c420ba0684 (patch) | |
tree | fe669ee072898696c8571fd393c3ee3375d1e8aa /libavcodec/h264.c | |
parent | 085bf69f310c7de82c9aae8c0555a2a152ee350b (diff) | |
download | ffmpeg-f107a02d4e417ae5b30b3fc0a5af46c420ba0684.tar.gz |
Move encoder-specific quantize_c and related tables to the H.264 encoder.
Originally committed as revision 15937 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/h264.c')
-rw-r--r-- | libavcodec/h264.c | 79 |
1 files changed, 0 insertions, 79 deletions
diff --git a/libavcodec/h264.c b/libavcodec/h264.c index 6782d7f076..e31500f15f 100644 --- a/libavcodec/h264.c +++ b/libavcodec/h264.c @@ -1587,85 +1587,6 @@ static inline int get_chroma_qp(H264Context *h, int t, int qscale){ return h->pps.chroma_qp_table[t][qscale]; } -//FIXME need to check that this does not overflow signed 32 bit for low qp, I am not sure, it's very close -//FIXME check that gcc inlines this (and optimizes intra & separate_dc stuff away) -static inline int quantize_c(DCTELEM *block, uint8_t *scantable, int qscale, int intra, int separate_dc){ - int i; - const int * const quant_table= quant_coeff[qscale]; - const int bias= intra ? (1<<QUANT_SHIFT)/3 : (1<<QUANT_SHIFT)/6; - const unsigned int threshold1= (1<<QUANT_SHIFT) - bias - 1; - const unsigned int threshold2= (threshold1<<1); - int last_non_zero; - - if(separate_dc){ - if(qscale<=18){ - //avoid overflows - const int dc_bias= intra ? (1<<(QUANT_SHIFT-2))/3 : (1<<(QUANT_SHIFT-2))/6; - const unsigned int dc_threshold1= (1<<(QUANT_SHIFT-2)) - dc_bias - 1; - const unsigned int dc_threshold2= (dc_threshold1<<1); - - int level= block[0]*quant_coeff[qscale+18][0]; - if(((unsigned)(level+dc_threshold1))>dc_threshold2){ - if(level>0){ - level= (dc_bias + level)>>(QUANT_SHIFT-2); - block[0]= level; - }else{ - level= (dc_bias - level)>>(QUANT_SHIFT-2); - block[0]= -level; - } -// last_non_zero = i; - }else{ - block[0]=0; - } - }else{ - const int dc_bias= intra ? (1<<(QUANT_SHIFT+1))/3 : (1<<(QUANT_SHIFT+1))/6; - const unsigned int dc_threshold1= (1<<(QUANT_SHIFT+1)) - dc_bias - 1; - const unsigned int dc_threshold2= (dc_threshold1<<1); - - int level= block[0]*quant_table[0]; - if(((unsigned)(level+dc_threshold1))>dc_threshold2){ - if(level>0){ - level= (dc_bias + level)>>(QUANT_SHIFT+1); - block[0]= level; - }else{ - level= (dc_bias - level)>>(QUANT_SHIFT+1); - block[0]= -level; - } -// last_non_zero = i; - }else{ - block[0]=0; - } - } - last_non_zero= 0; - i=1; - }else{ - last_non_zero= -1; - i=0; - } - - for(; i<16; i++){ - const int j= scantable[i]; - int level= block[j]*quant_table[j]; - -// if( bias+level >= (1<<(QMAT_SHIFT - 3)) -// || bias-level >= (1<<(QMAT_SHIFT - 3))){ - if(((unsigned)(level+threshold1))>threshold2){ - if(level>0){ - level= (bias + level)>>QUANT_SHIFT; - block[j]= level; - }else{ - level= (bias - level)>>QUANT_SHIFT; - block[j]= -level; - } - last_non_zero = i; - }else{ - block[j]=0; - } - } - - return last_non_zero; -} - static inline void mc_dir_part(H264Context *h, Picture *pic, int n, int square, int chroma_height, int delta, int list, uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr, int src_x_offset, int src_y_offset, |