changeset 2811:edc4fccb3bec libavcodec

motion vector limit for mpeg2
author michael
date Wed, 27 Jul 2005 13:16:35 +0000
parents b866af0c02d6
children 18b231c1cb3d
files motion_est.c
diffstat 1 files changed, 10 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/motion_est.c	Wed Jul 27 07:29:20 2005 +0000
+++ b/motion_est.c	Wed Jul 27 13:16:35 2005 +0000
@@ -1896,6 +1896,11 @@
         int best_fcode=-1;
         int best_score=-10000000;
 
+        if(s->msmpeg4_version) 
+            range= FFMIN(range, 16);
+        else if(s->codec_id == CODEC_ID_MPEG2VIDEO && s->avctx->strict_std_compliance >= FF_COMPLIANCE_NORMAL)
+            range= FFMIN(range, 256);
+
         for(i=0; i<8; i++) score[i]= s->mb_num*(8-i);
 
         for(y=0; y<s->mb_height; y++){
@@ -1950,9 +1955,10 @@
     int y, range;
     assert(s->pict_type==P_TYPE);
 
-    range = (((s->out_format == FMT_MPEG1) ? 8 : 16) << f_code);
-    
-    if(s->msmpeg4_version) range= 16;
+    range = (((s->out_format == FMT_MPEG1 || s->msmpeg4_version) ? 8 : 16) << f_code);
+
+    assert(range <= 16 || !s->msmpeg4_version);
+    assert(range <=256 || !(s->codec_id == CODEC_ID_MPEG2VIDEO && s->avctx->strict_std_compliance >= FF_COMPLIANCE_NORMAL));
     
     if(c->avctx->me_range && range > c->avctx->me_range) range= c->avctx->me_range;
     
@@ -2000,9 +2006,8 @@
     int y, h_range, v_range;
 
     // RAL: 8 in MPEG-1, 16 in MPEG-4
-    int range = (((s->out_format == FMT_MPEG1) ? 8 : 16) << f_code);
+    int range = (((s->out_format == FMT_MPEG1 || s->msmpeg4_version) ? 8 : 16) << f_code);
 
-    if(s->msmpeg4_version) range= 16;
     if(c->avctx->me_range && range > c->avctx->me_range) range= c->avctx->me_range;
 
     h_range= range;