From patchwork Wed Jun 24 13:43:20 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lance Wang X-Patchwork-Id: 20575 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id BF71B44AEEF for ; Wed, 24 Jun 2020 16:44:22 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A858868B5E8; Wed, 24 Jun 2020 16:44:22 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf1-f193.google.com (mail-pf1-f193.google.com [209.85.210.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0232D68B566 for ; Wed, 24 Jun 2020 16:44:14 +0300 (EEST) Received: by mail-pf1-f193.google.com with SMTP id x207so1192451pfc.5 for ; Wed, 24 Jun 2020 06:44:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=45Bijbx07SMbyLA1p5pBtS8XpfEu2kuXZsy2jvMIjSc=; b=KFujjjzaWTQIto+TO5CtUVqwKSdIMELGz1fnjS84FSbnFWHL0h0O2ivbYbWFn/2nhk 1JCgw58jbJekos4oNld6JGQaamRoINndvEt7mQVmPbeeB35nkCeqXBWdMma2huFdXoIX /Ps6mJX8LSXtKjTkDnWX4IDRy71lsxbhItRMDTAlymZJWTYCgyiQolomqlLFhwOFUJGH 3i6Qg5kjb/ej8plPXq8lFfFRIXheYYubKxo+qY3mCo1JtT/BKVgG71CLcTXaaCQxv5HL Zw8Ep4rU/dtQoybP7xx6MRVAszsDWUHK/QBQKANjdSkIWKrVkIrVUbaErDdTd20HMWDp Aa6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=45Bijbx07SMbyLA1p5pBtS8XpfEu2kuXZsy2jvMIjSc=; b=VqhrG5IeQS4Lan+JqTLWkdn9431hAIh8C/DHY+VH60ktVi0iy6k/uo7SDhhyBq/u9f 80I7ntAdn2pc5ROGNgxc64JoFiS740gwXruplJY2KaPprZh/zdcAETS6rLRavWtEczWP n+gRrMnnh3KuOg/jbhBdxWUUSIrDIZKBrdcvfiCWpM2gs++YLtImuVoziiOpIXUrY0tw og32Nh/PcS0VwOegGiaDEljc8hZBxsEpH0m8COGzUH83/QlfXGONjqyPo2hFIkQmixau oi/YN3NUOX8yq2lBKKwsftGpv39IsRzMiSeif7HYzUaa77h/aRUMhQ4igdJPSqijn2kY fbcA== X-Gm-Message-State: AOAM5327hIXMRqEe3sPTd9b+/WpeSP5Jhth7VBnzxC5C9vhO8PwP6Ohw Um/f/8LXcq7YQb5elxKYyuRP9CEH X-Google-Smtp-Source: ABdhPJxiasWKY0mVNdEY2kSWqgFChKO3+90jfIG/P3ZR6qOfx5NR4GqH7gcRuq8nbGIU/3RB/nzcDw== X-Received: by 2002:a63:eb55:: with SMTP id b21mr21739173pgk.433.1593006253118; Wed, 24 Jun 2020 06:44:13 -0700 (PDT) Received: from vpn2.localdomain ([161.117.202.209]) by smtp.gmail.com with ESMTPSA id z144sm21622329pfc.195.2020.06.24.06.44.11 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 24 Jun 2020 06:44:12 -0700 (PDT) From: lance.lmwang@gmail.com To: ffmpeg-devel@ffmpeg.org Date: Wed, 24 Jun 2020 21:43:20 +0800 Message-Id: <1593006200-23911-7-git-send-email-lance.lmwang@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1593006200-23911-1-git-send-email-lance.lmwang@gmail.com> References: <1592410030-6553-1-git-send-email-lance.lmwang@gmail.com> <1593006200-23911-1-git-send-email-lance.lmwang@gmail.com> Subject: [FFmpeg-devel] [PATCH v4 7/7] avcodec/nvenc: support for HEVC timecode passthrough X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Limin Wang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Limin Wang Reviewed-by: Timo Rothenpieler Signed-off-by: Limin Wang --- libavcodec/nvenc.c | 17 +++++++++++++++++ libavcodec/nvenc.h | 1 + libavcodec/nvenc_hevc.c | 1 + 3 files changed, 19 insertions(+) diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c index 22c19f3..4efd532 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" @@ -2147,6 +2148,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); } else { pic_params.encodePicFlags = NV_ENC_PIC_FLAG_EOS; diff --git a/libavcodec/nvenc.h b/libavcodec/nvenc.h index 007721a..b67abca 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 434dc66..45dda3d 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 }