diff mpegvideo.c @ 1623:1dd437affd27 libavcodec

qprd with b frames fix
author michael
date Thu, 13 Nov 2003 23:45:25 +0000
parents f4794fafc4ce
children e7420fdad5fc
line wrap: on
line diff
--- a/mpegvideo.c	Thu Nov 13 23:22:06 2003 +0000
+++ b/mpegvideo.c	Thu Nov 13 23:45:25 2003 +0000
@@ -3840,6 +3840,7 @@
                         const int last_qp= backup_s.qscale;
                         int dquant, dir, qp, dc[6];
                         DCTELEM ac[6][16];
+                        const int mvdir= (best_s.mv_dir&MV_DIR_BACKWARD) ? 1 : 0;
                         
                         assert(backup_s.dquant == 0);
 
@@ -3853,7 +3854,7 @@
                         s->mv[1][0][1] = best_s.mv[1][0][1];
                         
                         dir= s->pict_type == B_TYPE ? 2 : 1;
-                        if(last_qp + dir >= s->avctx->qmax) dir= -dir;
+                        if(last_qp + dir > s->avctx->qmax) dir= -dir;
                         for(dquant= dir; dquant<=2 && dquant>=-2; dquant += dir){
                             qp= last_qp + dquant;
                             if(qp < s->avctx->qmin || qp > s->avctx->qmax)
@@ -3867,7 +3868,7 @@
                             }
 
                             encode_mb_hq(s, &backup_s, &best_s, MB_TYPE_INTER /* wrong but unused */, pb, pb2, tex_pb, 
-                                         &dmin, &next_block, s->mv[0][0][0], s->mv[0][0][1]);
+                                         &dmin, &next_block, s->mv[mvdir][0][0], s->mv[mvdir][0][1]);
                             if(best_s.qscale != qp){
                                 if(s->mb_intra){
                                     for(i=0; i<6; i++){