Mercurial > libavcodec.hg
diff mpeg12.c @ 1992:938e47c809b0 libavcodec
intra_dc_precission>0 encoding support
author | michael |
---|---|
date | Fri, 30 Apr 2004 13:44:29 +0000 |
parents | 11991f81afd6 |
children | 141a9539e270 |
line wrap: on
line diff
--- a/mpeg12.c Fri Apr 30 01:35:45 2004 +0000 +++ b/mpeg12.c Fri Apr 30 13:44:29 2004 +0000 @@ -360,7 +360,7 @@ { s->y_dc_scale_table= - s->c_dc_scale_table= ff_mpeg1_dc_scale_table; + s->c_dc_scale_table= mpeg2_dc_scale_table[s->intra_dc_precision]; } @@ -837,6 +837,27 @@ static inline void encode_dc(MpegEncContext *s, int diff, int component) { + if(((unsigned) (diff+255)) >= 511){ + int index; + + if(diff<0){ + index= av_log2_16bit(-2*diff); + diff--; + }else{ + index= av_log2_16bit(2*diff); + } + if (component == 0) { + put_bits( + &s->pb, + vlc_dc_lum_bits[index] + index, + (vlc_dc_lum_code[index]<<index) + (diff & ((1 << index) - 1))); + }else{ + put_bits( + &s->pb, + vlc_dc_chroma_bits[index] + index, + (vlc_dc_chroma_code[index]<<index) + (diff & ((1 << index) - 1))); + } + }else{ if (component == 0) { put_bits( &s->pb, @@ -848,6 +869,7 @@ mpeg1_chr_dc_uni[diff+255]&0xFF, mpeg1_chr_dc_uni[diff+255]>>8); } + } } static void mpeg1_encode_block(MpegEncContext *s,