Mercurial > libavcodec.hg
diff mpeg12.c @ 4621:5464e5021a67 libavcodec
dummy support for mpeg2 non linear quant
author | bcoudurier |
---|---|
date | Sun, 04 Mar 2007 02:26:20 +0000 |
parents | ff5472c81ab8 |
children | e541c0dd35dd |
line wrap: on
line diff
--- a/mpeg12.c Sat Mar 03 21:33:33 2007 +0000 +++ b/mpeg12.c Sun Mar 04 02:26:20 2007 +0000 @@ -419,9 +419,19 @@ #ifdef CONFIG_ENCODERS +static av_always_inline void put_qscale(MpegEncContext *s) +{ + if(s->q_scale_type){ + assert(s->qscale>=1 && s->qscale <=12); + put_bits(&s->pb, 5, inv_non_linear_qscale[s->qscale]); + }else{ + put_bits(&s->pb, 5, s->qscale); + } +} + void ff_mpeg1_encode_slice_header(MpegEncContext *s){ put_header(s, SLICE_MIN_START_CODE + s->mb_y); - put_bits(&s->pb, 5, s->qscale); /* quantizer scale */ + put_qscale(s); put_bits(&s->pb, 1, 0); /* slice extra information */ } @@ -567,7 +577,7 @@ if (s->pict_type == I_TYPE) { if(s->dquant && cbp){ put_mb_modes(s, 2, 1, 0, 0); /* macroblock_type : macroblock_quant = 1 */ - put_bits(&s->pb, 5, s->qscale); + put_qscale(s); }else{ put_mb_modes(s, 1, 1, 0, 0); /* macroblock_type : macroblock_quant = 0 */ s->qscale -= s->dquant; @@ -577,7 +587,7 @@ } else if (s->mb_intra) { if(s->dquant && cbp){ put_mb_modes(s, 6, 0x01, 0, 0); - put_bits(&s->pb, 5, s->qscale); + put_qscale(s); }else{ put_mb_modes(s, 5, 0x03, 0, 0); s->qscale -= s->dquant; @@ -591,7 +601,7 @@ if ((motion_x|motion_y) == 0) { if(s->dquant){ put_mb_modes(s, 5, 1, 0, 0); /* macroblock_pattern & quant */ - put_bits(&s->pb, 5, s->qscale); + put_qscale(s); }else{ put_mb_modes(s, 2, 1, 0, 0); /* macroblock_pattern only */ } @@ -599,7 +609,7 @@ } else { if(s->dquant){ put_mb_modes(s, 5, 2, 1, 0); /* motion + cbp */ - put_bits(&s->pb, 5, s->qscale); + put_qscale(s); }else{ put_mb_modes(s, 1, 1, 1, 0); /* motion + cbp */ } @@ -626,7 +636,7 @@ if (cbp) { if(s->dquant){ put_mb_modes(s, 5, 2, 1, 1); /* motion + cbp */ - put_bits(&s->pb, 5, s->qscale); + put_qscale(s); }else{ put_mb_modes(s, 1, 1, 1, 1); /* motion + cbp */ } @@ -664,7 +674,7 @@ put_mb_modes(s, 6, 3, 1, 0); else put_mb_modes(s, mb_type_len[s->mv_dir]+3, 2, 1, 0); - put_bits(&s->pb, 5, s->qscale); + put_qscale(s); } else { put_mb_modes(s, mb_type_len[s->mv_dir], 3, 1, 0); } @@ -698,7 +708,7 @@ put_mb_modes(s, 6, 3, 1, 1); else put_mb_modes(s, mb_type_len[s->mv_dir]+3, 2, 1, 1); - put_bits(&s->pb, 5, s->qscale); + put_qscale(s); } else { put_mb_modes(s, mb_type_len[s->mv_dir], 3, 1, 1); }