diff options
author | Tom Greenwood <tgreenwood@Toms-MacBook-Pro.local> | 2013-03-06 13:28:37 +0000 |
---|---|---|
committer | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2013-03-25 10:08:44 +0100 |
commit | 2e38f24b56d906c25af5b270079aa9e822029c08 (patch) | |
tree | 7d06e45f09fa87953398e32d3bf8b2622697f3d0 /ext | |
parent | 53d7e8436ce5dd33b385a6261a5b6784bace2305 (diff) |
x264enc: Fix for 0/1 framerate - now uses VFR in this case
Previously did a division by zero.
https://bugzilla.gnome.org/show_bug.cgi?id=695728
Diffstat (limited to 'ext')
-rw-r--r-- | ext/x264/gstx264enc.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/ext/x264/gstx264enc.c b/ext/x264/gstx264enc.c index 9b235863..0f5b9d3e 100644 --- a/ext/x264/gstx264enc.c +++ b/ext/x264/gstx264enc.c @@ -312,7 +312,7 @@ static const GFlagsValue tune_types[] = { {0x0, "No tuning", "none"}, {0x1, "Still image", "stillimage"}, {0x2, "Fast decode", "fastdecode"}, - {0x4, "Zero latency (requires constant framerate)", "zerolatency"}, + {0x4, "Zero latency", "zerolatency"}, {0, NULL, NULL}, }; @@ -1217,8 +1217,21 @@ gst_x264_enc_init_encoder (GstX264Enc * encoder) /* set up encoder parameters */ encoder->x264param.i_csp = gst_x264_enc_gst_to_x264_video_format (info->finfo->format, NULL); - encoder->x264param.i_fps_num = info->fps_n; - encoder->x264param.i_fps_den = info->fps_d; + if (info->fps_d == 0 || info->fps_n == 0) { + /* No FPS so must use VFR + * This raises latency apparently see http://mewiki.project357.com/wiki/X264_Encoding_Suggestions */ + encoder->x264param.b_vfr_input = TRUE; + if (encoder->keyint_max) { /* NB the default is 250 setup by x264 itself */ + encoder->x264param.i_keyint_max = encoder->keyint_max; + } + } else { + /* FPS available so set it up */ + encoder->x264param.i_fps_num = info->fps_n; + encoder->x264param.i_fps_den = info->fps_d; + encoder->x264param.i_keyint_max = + encoder->keyint_max ? encoder->keyint_max : (10 * info->fps_n / + info->fps_d); + } encoder->x264param.i_width = info->width; encoder->x264param.i_height = info->height; if (info->par_d > 0) { @@ -1226,9 +1239,6 @@ gst_x264_enc_init_encoder (GstX264Enc * encoder) encoder->x264param.vui.i_sar_height = info->par_d; } - encoder->x264param.i_keyint_max = encoder->keyint_max ? encoder->keyint_max : - (10 * info->fps_n / info->fps_d); - if ((((info->height == 576) && ((info->width == 720) || (info->width == 704) || (info->width == 352))) || ((info->height == 288) && (info->width == 352))) |