diff options
author | jstebbins <[email protected]> | 2010-11-07 17:21:13 +0000 |
---|---|---|
committer | jstebbins <[email protected]> | 2010-11-07 17:21:13 +0000 |
commit | eb25aaa29fa9295286d22be6fd7b2f568e9af063 (patch) | |
tree | b371ece165cc0469ea0b717f31896bb64ecb5d40 /libhb/encx264.c | |
parent | a51600727f1c60e80b4790383ab37a2546183545 (diff) |
Improved logging of keyint min/max
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://svn.handbrake.fr/HandBrake/trunk@3658 b64f7644-9d1e-0410-96f1-a4d463321fa5
Diffstat (limited to 'libhb/encx264.c')
-rw-r--r-- | libhb/encx264.c | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/libhb/encx264.c b/libhb/encx264.c index bdc32e6e4..0ba54dfa1 100644 --- a/libhb/encx264.c +++ b/libhb/encx264.c @@ -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. */ |