]> granicus.if.org Git - libx264/commitdiff
Fix bug with negative lookahead mb costs in high bit depth
authorFiona Glaser <fiona@x264.com>
Thu, 6 Jan 2011 03:21:18 +0000 (22:21 -0500)
committerFiona Glaser <fiona@x264.com>
Mon, 10 Jan 2011 19:38:35 +0000 (11:38 -0800)
encoder/slicetype.c

index 3dfed2a6ec92c0d4f521d97257ecd8ad36dea796..67d7ebfcec3d5822f9b676a1d1a0bff051766df1 100644 (file)
@@ -520,7 +520,7 @@ static void x264_slicetype_mb_cost( x264_t *h, x264_mb_analysis_t *a,
             }
 
             x264_me_search( h, &m[l], mvc, i_mvc );
-            m[l].cost -= 2 * a->i_lambda; // remove mvcost from skip mbs
+            m[l].cost -= a->p_cost_mv[0]; // remove mvcost from skip mbs
             if( M32( m[l].mv ) )
                 m[l].cost += 5 * a->i_lambda;
 
@@ -1215,6 +1215,8 @@ void x264_slicetype_analyse( x264_t *h, int keyframe )
     for( framecnt = 0; framecnt < i_max_search && h->lookahead->next.list[framecnt]->i_type == X264_TYPE_AUTO; framecnt++ )
         frames[framecnt+1] = h->lookahead->next.list[framecnt];
 
+    x264_lowres_context_init( h, &a );
+
     if( !framecnt )
     {
         if( h->param.rc.b_mb_tree )
@@ -1225,8 +1227,6 @@ void x264_slicetype_analyse( x264_t *h, int keyframe )
     keyint_limit = h->param.i_keyint_max - frames[0]->i_frame + h->lookahead->i_last_keyframe - 1;
     orig_num_frames = num_frames = h->param.b_intra_refresh ? framecnt : X264_MIN( framecnt, keyint_limit );
 
-    x264_lowres_context_init( h, &a );
-
     /* This is important psy-wise: if we have a non-scenecut keyframe,
      * there will be significant visual artifacts if the frames just before
      * go down in quality due to being referenced less, despite it being