fix qmin==qmax==1 && msmpeg4 && intra bug
Originally committed as revision 2051 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
afdd82bbf0
commit
fa12b5469d
@ -358,6 +358,8 @@ static double get_diff_limited_q(MpegEncContext *s, RateControlEntry *rce, doubl
|
|||||||
static void get_qminmax(int *qmin_ret, int *qmax_ret, MpegEncContext *s, int pict_type){
|
static void get_qminmax(int *qmin_ret, int *qmax_ret, MpegEncContext *s, int pict_type){
|
||||||
int qmin= s->avctx->qmin;
|
int qmin= s->avctx->qmin;
|
||||||
int qmax= s->avctx->qmax;
|
int qmax= s->avctx->qmax;
|
||||||
|
|
||||||
|
assert(qmin <= qmax);
|
||||||
|
|
||||||
if(pict_type==B_TYPE){
|
if(pict_type==B_TYPE){
|
||||||
qmin= (int)(qmin*ABS(s->avctx->b_quant_factor)+s->avctx->b_quant_offset + 0.5);
|
qmin= (int)(qmin*ABS(s->avctx->b_quant_factor)+s->avctx->b_quant_offset + 0.5);
|
||||||
@ -367,13 +369,14 @@ static void get_qminmax(int *qmin_ret, int *qmax_ret, MpegEncContext *s, int pic
|
|||||||
qmax= (int)(qmax*ABS(s->avctx->i_quant_factor)+s->avctx->i_quant_offset + 0.5);
|
qmax= (int)(qmax*ABS(s->avctx->i_quant_factor)+s->avctx->i_quant_offset + 0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(qmin<1) qmin=1;
|
qmin= clip(qmin, 1, 31);
|
||||||
|
qmax= clip(qmax, 1, 31);
|
||||||
|
|
||||||
if(qmin==1 && s->avctx->qmin>1) qmin=2; //avoid qmin=1 unless the user wants qmin=1
|
if(qmin==1 && s->avctx->qmin>1) qmin=2; //avoid qmin=1 unless the user wants qmin=1
|
||||||
|
|
||||||
if(qmin<3 && s->max_qcoeff<=128 && pict_type==I_TYPE) qmin=3; //reduce cliping problems
|
if(qmin<3 && s->max_qcoeff<=128 && pict_type==I_TYPE) qmin=3; //reduce cliping problems
|
||||||
|
|
||||||
if(qmax>31) qmax=31;
|
if(qmax<qmin) qmax= qmin;
|
||||||
if(qmax<=qmin) qmax= qmin= (qmax+qmin+1)>>1;
|
|
||||||
|
|
||||||
*qmin_ret= qmin;
|
*qmin_ret= qmin;
|
||||||
*qmax_ret= qmax;
|
*qmax_ret= qmax;
|
||||||
|
Loading…
Reference in New Issue
Block a user