OSDN Git Service

Improved logging of keyint min/max
authorjstebbins <jstebbins@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Sun, 7 Nov 2010 17:21:13 +0000 (17:21 +0000)
committerjstebbins <jstebbins@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Sun, 7 Nov 2010 17:21:13 +0000 (17:21 +0000)
And small tweak to keyint_max calculation.

x264 slightly changed the way the automatic min-keyint is calculated.
Also, keyint infinite was added. This does not cause any encoding issues,
but depending on the settings and the framerate, the log contained
keyint values that don't correspond to the actual encode's values.

The keyint_max was calculated, 59.94 fps sources will get a keyint of 599
rather than 600.  With this change, It is rounded to the closest integer
then multiplied by 10.

Thanks to Rodeo

git-svn-id: svn://localhost/HandBrake/trunk@3658 b64f7644-9d1e-0410-96f1-a4d463321fa5

libhb/encx264.c

index bdc32e6..0ba54df 100644 (file)
@@ -120,13 +120,13 @@ int encx264Init( hb_work_object_t * w, hb_job_t * job )
                we still want the same keyframe intervals as the 1st pass,
                so the 1st pass stats won't conflict on frame decisions.    */
             hb_interjob_t * interjob = hb_interjob_get( job->h );
-            param.i_keyint_max = ( ( 10 * (double)interjob->vrate / (double)interjob->vrate_base ) + 0.5 );
+            param.i_keyint_max = 10 * (int)( (double)interjob->vrate / (double)interjob->vrate_base + 0.5 );
         }
         else
         {
             /* adjust +0.5 for when fps has remainder to bump
                { 23.976, 29.976, 59.94 } to { 24, 30, 60 } */
-            param.i_keyint_max = ( ( 10 * (double)job->vrate / (double)job->vrate_base ) + 0.5 );
+            param.i_keyint_max = 10 * (int)( (double)job->vrate / (double)job->vrate_base + 0.5 );
         }
     }
 
@@ -206,8 +206,25 @@ int encx264Init( hb_work_object_t * w, hb_job_t * job )
     }
     
     if( param.i_keyint_min != X264_KEYINT_MIN_AUTO || param.i_keyint_max != 250 )
-        hb_log("encx264: min-keyint: %i, keyint: %i", param.i_keyint_min == X264_KEYINT_MIN_AUTO ? param.i_keyint_max / 10 : param.i_keyint_min,
-                                                      param.i_keyint_max);
+    {
+        int min_auto;
+
+        if ( param.i_fps_num / param.i_fps_den < param.i_keyint_max / 10 )
+            min_auto = param.i_fps_num / param.i_fps_den;
+        else
+            min_auto = param.i_keyint_max / 10;
+
+        char min[40], max[40];
+        param.i_keyint_min == X264_KEYINT_MIN_AUTO ? 
+            snprintf( min, 40, "auto (%d)", min_auto ) : 
+            snprintf( min, 40, "%d", param.i_keyint_min );
+
+        param.i_keyint_max == X264_KEYINT_MAX_INFINITE ? 
+            snprintf( max, 40, "infinite" ) : 
+            snprintf( max, 40, "%d", param.i_keyint_max );
+
+        hb_log( "encx264: min-keyint: %s, keyint: %s", min, max );
+    }
 
     /* set up the VUI color model & gamma to match what the COLR atom
      * set in muxmp4.c says. See libhb/muxmp4.c for notes. */