diff options
author | Derek Buitenhuis <derek.buitenhuis@gmail.com> | 2015-08-18 17:39:01 -0300 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2015-08-18 17:40:36 -0300 |
commit | c981b1145a857c8f962c93b8eecb1c613b20ffe9 (patch) | |
tree | 3a5243c3e50f5dbf45860d62d0ae76330e9a6145 /libavcodec/libx264.c | |
parent | 87068ea5c5c800ff9bf1c3fa83665f63b07a7951 (diff) | |
download | ffmpeg-c981b1145a857c8f962c93b8eecb1c613b20ffe9.tar.gz |
libx264: Add option to force IDR frames
Currently, when forcing an I frame, via API, or via the ffmpeg cli,
using -force_key_frames, we still let x264 decide what sort of
keyframe to user. In some cases, it is useful to be able to force
an IDR frame, e.g. for cutting streams.
Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
Diffstat (limited to 'libavcodec/libx264.c')
-rw-r--r-- | libavcodec/libx264.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c index c017685bb9..a54743e4b4 100644 --- a/libavcodec/libx264.c +++ b/libavcodec/libx264.c @@ -82,6 +82,7 @@ typedef struct X264Context { int nal_hrd; int avcintra_class; int motion_est; + int forced_idr; char *x264_params; } X264Context; @@ -270,7 +271,8 @@ static int X264_frame(AVCodecContext *ctx, AVPacket *pkt, const AVFrame *frame, x4->pic.i_pts = frame->pts; x4->pic.i_type = - frame->pict_type == AV_PICTURE_TYPE_I ? X264_TYPE_KEYFRAME : + frame->pict_type == AV_PICTURE_TYPE_I ? + (x4->forced_idr >= 0 ? X264_TYPE_IDR : X264_TYPE_KEYFRAME) : frame->pict_type == AV_PICTURE_TYPE_P ? X264_TYPE_P : frame->pict_type == AV_PICTURE_TYPE_B ? X264_TYPE_B : X264_TYPE_AUTO; @@ -875,6 +877,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_INT, { .i64 = -1 }, -1, 1, VE }, { "x264-params", "Override the x264 configuration using a :-separated list of key=value parameters", OFFSET(x264_params), AV_OPT_TYPE_STRING, { 0 }, 0, 0, VE }, { NULL }, }; |