From 5ea8f7062300fea30b32280ea59a911caea68d5a Mon Sep 17 00:00:00 2001 From: Timo Rothenpieler Date: Wed, 12 Oct 2016 21:54:52 +0200 Subject: [PATCH] avcodec/libx264: fix forced_idr logic Currently, it forces IDR frames for both true and false. Not entirely sure what the original idea behind the tri-state bool option is. Reviewed-by: Derek Buitenhuis --- libavcodec/libx264.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c index 9e1246477e..b11ede6198 100644 --- a/libavcodec/libx264.c +++ b/libavcodec/libx264.c @@ -293,8 +293,8 @@ static int X264_frame(AVCodecContext *ctx, AVPacket *pkt, const AVFrame *frame, switch (frame->pict_type) { case AV_PICTURE_TYPE_I: - x4->pic.i_type = x4->forced_idr >= 0 ? X264_TYPE_IDR - : X264_TYPE_KEYFRAME; + x4->pic.i_type = x4->forced_idr > 0 ? X264_TYPE_IDR + : X264_TYPE_KEYFRAME; break; case AV_PICTURE_TYPE_P: x4->pic.i_type = X264_TYPE_P; @@ -964,7 +964,7 @@ static const AVOption options[] = { { "umh", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = X264_ME_UMH }, INT_MIN, INT_MAX, VE, "motion-est" }, { "esa", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = X264_ME_ESA }, INT_MIN, INT_MAX, VE, "motion-est" }, { "tesa", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = X264_ME_TESA }, INT_MIN, INT_MAX, VE, "motion-est" }, - { "forced-idr", "If forcing keyframes, force them as IDR frames.", OFFSET(forced_idr), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VE }, + { "forced-idr", "If forcing keyframes, force them as IDR frames.", OFFSET(forced_idr), AV_OPT_TYPE_BOOL, { .i64 = 0 }, -1, 1, VE }, { "coder", "Coder type", OFFSET(coder), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE, "coder" }, { "default", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = -1 }, INT_MIN, INT_MAX, VE, "coder" }, { "cavlc", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, INT_MIN, INT_MAX, VE, "coder" },