comparison ratecontrol.c @ 1365:d58fa7cc6008 libavcodec

fix qmin==qmax==1 && msmpeg4 && intra bug
author michaelni
date Wed, 16 Jul 2003 11:48:59 +0000
parents 2fa34e615c76
children c4539ef4d8cb
comparison
equal deleted inserted replaced
1364:463090933f60 1365:d58fa7cc6008
356 * gets the qmin & qmax for pict_type 356 * gets the qmin & qmax for pict_type
357 */ 357 */
358 static void get_qminmax(int *qmin_ret, int *qmax_ret, MpegEncContext *s, int pict_type){ 358 static void get_qminmax(int *qmin_ret, int *qmax_ret, MpegEncContext *s, int pict_type){
359 int qmin= s->avctx->qmin; 359 int qmin= s->avctx->qmin;
360 int qmax= s->avctx->qmax; 360 int qmax= s->avctx->qmax;
361
362 assert(qmin <= qmax);
361 363
362 if(pict_type==B_TYPE){ 364 if(pict_type==B_TYPE){
363 qmin= (int)(qmin*ABS(s->avctx->b_quant_factor)+s->avctx->b_quant_offset + 0.5); 365 qmin= (int)(qmin*ABS(s->avctx->b_quant_factor)+s->avctx->b_quant_offset + 0.5);
364 qmax= (int)(qmax*ABS(s->avctx->b_quant_factor)+s->avctx->b_quant_offset + 0.5); 366 qmax= (int)(qmax*ABS(s->avctx->b_quant_factor)+s->avctx->b_quant_offset + 0.5);
365 }else if(pict_type==I_TYPE){ 367 }else if(pict_type==I_TYPE){
366 qmin= (int)(qmin*ABS(s->avctx->i_quant_factor)+s->avctx->i_quant_offset + 0.5); 368 qmin= (int)(qmin*ABS(s->avctx->i_quant_factor)+s->avctx->i_quant_offset + 0.5);
367 qmax= (int)(qmax*ABS(s->avctx->i_quant_factor)+s->avctx->i_quant_offset + 0.5); 369 qmax= (int)(qmax*ABS(s->avctx->i_quant_factor)+s->avctx->i_quant_offset + 0.5);
368 } 370 }
369 371
370 if(qmin<1) qmin=1; 372 qmin= clip(qmin, 1, 31);
373 qmax= clip(qmax, 1, 31);
374
371 if(qmin==1 && s->avctx->qmin>1) qmin=2; //avoid qmin=1 unless the user wants qmin=1 375 if(qmin==1 && s->avctx->qmin>1) qmin=2; //avoid qmin=1 unless the user wants qmin=1
372 376
373 if(qmin<3 && s->max_qcoeff<=128 && pict_type==I_TYPE) qmin=3; //reduce cliping problems 377 if(qmin<3 && s->max_qcoeff<=128 && pict_type==I_TYPE) qmin=3; //reduce cliping problems
374 378
375 if(qmax>31) qmax=31; 379 if(qmax<qmin) qmax= qmin;
376 if(qmax<=qmin) qmax= qmin= (qmax+qmin+1)>>1;
377 380
378 *qmin_ret= qmin; 381 *qmin_ret= qmin;
379 *qmax_ret= qmax; 382 *qmax_ret= qmax;
380 } 383 }
381 384