aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec
diff options
context:
space:
mode:
authorTimo Rothenpieler <timo@rothenpieler.org>2016-10-12 20:51:43 +0200
committerTimo Rothenpieler <timo@rothenpieler.org>2016-10-12 20:51:43 +0200
commit30c558750374b179dc910da6fc354724679d630e (patch)
tree0f38d60ece33998c8247634e09239dba206cdf4d /libavcodec
parent03d6d5f3760e2b06e3ef1f68de62c79c2e8fb173 (diff)
downloadffmpeg-30c558750374b179dc910da6fc354724679d630e.tar.gz
avcodec/nvenc: add support for forcing intra/idr frames
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/nvenc.c8
-rw-r--r--libavcodec/nvenc.h1
-rw-r--r--libavcodec/nvenc_h264.c2
-rw-r--r--libavcodec/nvenc_hevc.c2
-rw-r--r--libavcodec/version.h2
5 files changed, 13 insertions, 2 deletions
diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c
index f6f756fe00..e6c1c94144 100644
--- a/libavcodec/nvenc.c
+++ b/libavcodec/nvenc.c
@@ -1737,7 +1737,13 @@ int ff_nvenc_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
pic_params.pictureStruct = NV_ENC_PIC_STRUCT_FRAME;
}
- pic_params.encodePicFlags = 0;
+ if (ctx->forced_idr >= 0 && frame->pict_type == AV_PICTURE_TYPE_I) {
+ pic_params.encodePicFlags =
+ ctx->forced_idr ? NV_ENC_PIC_FLAG_FORCEIDR : NV_ENC_PIC_FLAG_FORCEINTRA;
+ } else {
+ pic_params.encodePicFlags = 0;
+ }
+
pic_params.inputTimeStamp = frame->pts;
nvenc_codec_specific_pic_params(avctx, &pic_params);
diff --git a/libavcodec/nvenc.h b/libavcodec/nvenc.h
index 648d1dc347..bad659aece 100644
--- a/libavcodec/nvenc.h
+++ b/libavcodec/nvenc.h
@@ -185,6 +185,7 @@ typedef struct NvencContext
int rc_lookahead;
int aq;
int no_scenecut;
+ int forced_idr;
int b_adapt;
int temporal_aq;
int zerolatency;
diff --git a/libavcodec/nvenc_h264.c b/libavcodec/nvenc_h264.c
index 2d7f2d1059..6914046b8d 100644
--- a/libavcodec/nvenc_h264.c
+++ b/libavcodec/nvenc_h264.c
@@ -91,6 +91,8 @@ static const AVOption options[] = {
OFFSET(async_depth), AV_OPT_TYPE_INT, { .i64 = INT_MAX }, 0, INT_MAX, VE },
{ "no-scenecut", "When lookahead is enabled, set this to 1 to disable adaptive I-frame insertion at scene cuts",
OFFSET(no_scenecut), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE },
+ { "forced-idr", "If forcing keyframes, force them as IDR frames.",
+ OFFSET(forced_idr), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VE },
{ "b_adapt", "When lookahead is enabled, set this to 0 to disable adaptive B-frame decision",
OFFSET(b_adapt), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, VE },
{ "spatial-aq", "set to 1 to enable Spatial AQ", OFFSET(aq), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE },
diff --git a/libavcodec/nvenc_hevc.c b/libavcodec/nvenc_hevc.c
index 4edc7414f0..320f290b54 100644
--- a/libavcodec/nvenc_hevc.c
+++ b/libavcodec/nvenc_hevc.c
@@ -90,6 +90,8 @@ static const AVOption options[] = {
OFFSET(async_depth), AV_OPT_TYPE_INT, { .i64 = INT_MAX }, 0, INT_MAX, VE },
{ "no-scenecut", "When lookahead is enabled, set this to 1 to disable adaptive I-frame insertion at scene cuts",
OFFSET(no_scenecut), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE },
+ { "forced-idr", "If forcing keyframes, force them as IDR frames.",
+ OFFSET(forced_idr), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VE },
{ "spatial_aq", "set to 1 to enable Spatial AQ", OFFSET(aq), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE },
{ "zerolatency", "Set 1 to indicate zero latency operation (no reordering delay)",
OFFSET(zerolatency), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE },
diff --git a/libavcodec/version.h b/libavcodec/version.h
index 4e34850a6c..9c2bf6df30 100644
--- a/libavcodec/version.h
+++ b/libavcodec/version.h
@@ -29,7 +29,7 @@
#define LIBAVCODEC_VERSION_MAJOR 57
#define LIBAVCODEC_VERSION_MINOR 61
-#define LIBAVCODEC_VERSION_MICRO 102
+#define LIBAVCODEC_VERSION_MICRO 103
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
LIBAVCODEC_VERSION_MINOR, \