diff options
author | Limin Wang <lance.lmwang@gmail.com> | 2020-06-28 10:34:12 +0800 |
---|---|---|
committer | Limin Wang <lance.lmwang@gmail.com> | 2020-06-28 21:40:49 +0800 |
commit | fdead2a31a4686488a29d45c3d2e9b8b7723c0ef (patch) | |
tree | 4d20faf506ced0a41cee4a361ac0e963ff941bed /libavcodec | |
parent | 4ef766e73c47c9928e276d9ec078c060f1d768f7 (diff) | |
download | ffmpeg-fdead2a31a4686488a29d45c3d2e9b8b7723c0ef.tar.gz |
avcodec/nvenc: support for HEVC timecode passthrough
Reviewed-by: Timo Rothenpieler <timo@rothenpieler.org>
Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/nvenc.c | 17 | ||||
-rw-r--r-- | libavcodec/nvenc.h | 1 | ||||
-rw-r--r-- | libavcodec/nvenc_hevc.c | 1 |
3 files changed, 19 insertions, 0 deletions
diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c index de6b0eaa44..b957b9cb7c 100644 --- a/libavcodec/nvenc.c +++ b/libavcodec/nvenc.c @@ -22,6 +22,7 @@ #include "config.h" #include "nvenc.h" +#include "hevc_sei.h" #include "libavutil/hwcontext_cuda.h" #include "libavutil/hwcontext.h" @@ -2153,6 +2154,22 @@ static int nvenc_send_frame(AVCodecContext *avctx, const AVFrame *frame) } } + if (ctx->tc && av_frame_get_side_data(frame, AV_FRAME_DATA_S12M_TIMECODE)) { + void *tc_data = NULL; + size_t tc_size = 0; + + if (ff_alloc_timecode_sei(frame, 0, (void**)&tc_data, &tc_size) < 0) { + av_log(ctx, AV_LOG_ERROR, "Not enough memory for timecode sei, skipping\n"); + } + + if (tc_data) { + sei_data[sei_count].payloadSize = (uint32_t)tc_size; + sei_data[sei_count].payloadType = HEVC_SEI_TYPE_TIME_CODE; + sei_data[sei_count].payload = (uint8_t*)tc_data; + sei_count ++; + } + } + nvenc_codec_specific_pic_params(avctx, &pic_params, sei_data, sei_count); } else { pic_params.encodePicFlags = NV_ENC_PIC_FLAG_EOS; diff --git a/libavcodec/nvenc.h b/libavcodec/nvenc.h index 007721aa66..b67abcaf18 100644 --- a/libavcodec/nvenc.h +++ b/libavcodec/nvenc.h @@ -196,6 +196,7 @@ typedef struct NvencContext int coder; int b_ref_mode; int a53_cc; + int tc; int dpb_size; } NvencContext; diff --git a/libavcodec/nvenc_hevc.c b/libavcodec/nvenc_hevc.c index 434dc6679e..45dda3daac 100644 --- a/libavcodec/nvenc_hevc.c +++ b/libavcodec/nvenc_hevc.c @@ -129,6 +129,7 @@ static const AVOption options[] = { { "each", "", 0, AV_OPT_TYPE_CONST, { .i64 = 1 }, 0, 0, VE, "b_ref_mode" }, { "middle", "", 0, AV_OPT_TYPE_CONST, { .i64 = 2 }, 0, 0, VE, "b_ref_mode" }, #endif + { "tc", "Use timecode (if available)", OFFSET(tc), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, VE }, { "dpb_size", "Specifies the DPB size used for encoding (0 means automatic)", OFFSET(dpb_size), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, VE }, { NULL } |