aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilip Langdale <philipl@overt.org>2019-12-20 15:34:33 -0800
committerPhilip Langdale <philipl@overt.org>2020-01-08 19:20:36 -0800
commit3ea705767720033754e8d85566460390191ae27d (patch)
tree6a1e3ecef1311a5eb427e1ed42124f371208e9c5
parent94cdf82d53fe9be260dc6106634a9f9b218211bd (diff)
downloadffmpeg-3ea705767720033754e8d85566460390191ae27d.tar.gz
nvenc: implement flush to help allow an encoder to be re-used
It can be useful to re-use an encoder instance when doing segmented encodings, and this requires flushing the encoder at the start of each segment.
-rw-r--r--libavcodec/nvenc.c5
-rw-r--r--libavcodec/nvenc.h2
-rw-r--r--libavcodec/nvenc_h264.c1
-rw-r--r--libavcodec/nvenc_hevc.c1
-rw-r--r--libavcodec/version.h2
5 files changed, 10 insertions, 1 deletions
diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c
index 310e30805d..9a96bf2bba 100644
--- a/libavcodec/nvenc.c
+++ b/libavcodec/nvenc.c
@@ -2262,3 +2262,8 @@ int ff_nvenc_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
return 0;
}
+
+av_cold void ff_nvenc_encode_flush(AVCodecContext *avctx)
+{
+ ff_nvenc_send_frame(avctx, NULL);
+}
diff --git a/libavcodec/nvenc.h b/libavcodec/nvenc.h
index a269bd97bb..c44c81e675 100644
--- a/libavcodec/nvenc.h
+++ b/libavcodec/nvenc.h
@@ -214,6 +214,8 @@ int ff_nvenc_receive_packet(AVCodecContext *avctx, AVPacket *pkt);
int ff_nvenc_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
const AVFrame *frame, int *got_packet);
+void ff_nvenc_encode_flush(AVCodecContext *avctx);
+
extern const enum AVPixelFormat ff_nvenc_pix_fmts[];
#endif /* AVCODEC_NVENC_H */
diff --git a/libavcodec/nvenc_h264.c b/libavcodec/nvenc_h264.c
index d5c7370aaa..479155fe15 100644
--- a/libavcodec/nvenc_h264.c
+++ b/libavcodec/nvenc_h264.c
@@ -240,6 +240,7 @@ AVCodec ff_h264_nvenc_encoder = {
.receive_packet = ff_nvenc_receive_packet,
.encode2 = ff_nvenc_encode_frame,
.close = ff_nvenc_encode_close,
+ .flush = ff_nvenc_encode_flush,
.priv_data_size = sizeof(NvencContext),
.priv_class = &h264_nvenc_class,
.defaults = defaults,
diff --git a/libavcodec/nvenc_hevc.c b/libavcodec/nvenc_hevc.c
index c668b97f86..7c9b3848f1 100644
--- a/libavcodec/nvenc_hevc.c
+++ b/libavcodec/nvenc_hevc.c
@@ -198,6 +198,7 @@ AVCodec ff_hevc_nvenc_encoder = {
.receive_packet = ff_nvenc_receive_packet,
.encode2 = ff_nvenc_encode_frame,
.close = ff_nvenc_encode_close,
+ .flush = ff_nvenc_encode_flush,
.priv_data_size = sizeof(NvencContext),
.priv_class = &hevc_nvenc_class,
.defaults = defaults,
diff --git a/libavcodec/version.h b/libavcodec/version.h
index 77da913df0..1a88432460 100644
--- a/libavcodec/version.h
+++ b/libavcodec/version.h
@@ -29,7 +29,7 @@
#define LIBAVCODEC_VERSION_MAJOR 58
#define LIBAVCODEC_VERSION_MINOR 65
-#define LIBAVCODEC_VERSION_MICRO 102
+#define LIBAVCODEC_VERSION_MICRO 103
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
LIBAVCODEC_VERSION_MINOR, \