From patchwork Thu Sep 17 00:36:09 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 22452 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 7BDDD4480B1 for ; Thu, 17 Sep 2020 03:36:31 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 59F6168BAE9; Thu, 17 Sep 2020 03:36:31 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f193.google.com (mail-qt1-f193.google.com [209.85.160.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9051868BA8A for ; Thu, 17 Sep 2020 03:36:24 +0300 (EEST) Received: by mail-qt1-f193.google.com with SMTP id e7so482416qtj.11 for ; Wed, 16 Sep 2020 17:36:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=oOarybr2HZk7+qRnHiq1cf+Ph37aiTb4fWHUZG1UsOQ=; b=vN6ahKQb5fn6vRbYQMzoFePdzVJF9WIWMyFjXoLnHx5HwC7T2Dz+spjZJZbUn5hYCc LB7F7PZPmuuSa+blF9o/PykvBsC+gZ7z2a23SKcnG9ljjewZ0PqibNNo5d82dieXY7rS z8aE37RXEZ2tIWWSLdPOESSuaRc1YbobGMe/pVs5EWO1kQtGY3DPKFLu3KmUNEmEX2dP 7kT+mo3oQ+95vAm9evE2jtfcb7QFU37pr/e3fTE3mP5Cf5/7b4IGsrutmK9knPXNhxRY SaWEsxy4ial4pyq/5D8pkMzImwIbyFwHIntGEPBN2J3sNtfirF7rau/HLxWdOf8dQ8hL KvQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=oOarybr2HZk7+qRnHiq1cf+Ph37aiTb4fWHUZG1UsOQ=; b=QYmjHBmdXsFP3sPlXaFUT9hK1WvcZshP+GkP1z05lkMAlNeZQC9W5XcUrwTm0koUow oYzsSVFlWj1gyGVw3hYVoJ6I8Gb1URMsGHGIZRqPqJs7eCmDhuqu6yNe+1mKEd6uImn2 Dm2kI/yR/ekKTO7H0TakSZVQJof2DbNPYo6Tb45+bbgFRSGNluztTQYpXFWOatjV0v1Z YIVdYuziSBSxmn9MTJyQNJH+1zt22XBxTN7PR7FqNLBhIdtSB1bCk8L7u0d8Dr8yPAie 4iv59rndQtiu8SdiqtqxaWse35Rgye0gr5dPaDK2qQE79W+X9CmTcExWIttgB3PwBbE3 9ksA== X-Gm-Message-State: AOAM5328JCojPeEtgkecCTE/mY4nMxm5DLzJp3PK8wlo2izPQ0G/hSTb sh/hH91MVr/+sccjUJysE+8GgobM73Vu4A== X-Google-Smtp-Source: ABdhPJxUJsPsi4ki13gbz+jqhq6CrdbLWe72FLcmyd/e7mxxJZOQxkoy4/eRQEudYV4WnYJOadr+hw== X-Received: by 2002:ac8:37bb:: with SMTP id d56mr25242744qtc.222.1600302982965; Wed, 16 Sep 2020 17:36:22 -0700 (PDT) Received: from localhost.localdomain ([191.83.208.67]) by smtp.gmail.com with ESMTPSA id x124sm20876649qkd.72.2020.09.16.17.36.21 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Sep 2020 17:36:22 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 16 Sep 2020 21:36:09 -0300 Message-Id: <20200917003609.2305-1-jamrial@gmail.com> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avocdec/hevcdec: set SEI derived AVCodecContext fields as soon as they are parsed 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" export_stream_params() may not be called in some scenarios, for example leaving both the AVCodecContext and subsequent output frames with the color_trc value taken from the VUI instead of the Alternative Transfer Characteristics SEI. Signed-off-by: James Almer --- libavcodec/hevcdec.c | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index c1de75abe1..2f1e469c94 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -369,12 +369,6 @@ static void export_stream_params(HEVCContext *s, const HEVCSPS *sps) if (num != 0 && den != 0) av_reduce(&avctx->framerate.den, &avctx->framerate.num, num, den, 1 << 30); - - if (s->sei.alternative_transfer.present && - av_color_transfer_name(s->sei.alternative_transfer.preferred_transfer_characteristics) && - s->sei.alternative_transfer.preferred_transfer_characteristics != AVCOL_TRC_UNSPECIFIED) { - avctx->color_trc = s->sei.alternative_transfer.preferred_transfer_characteristics; - } } static enum AVPixelFormat get_format(HEVCContext *s, const HEVCSPS *sps) @@ -2806,8 +2800,6 @@ static int set_side_data(HEVCContext *s) if (!sd) av_buffer_unref(&a53->buf_ref); a53->buf_ref = NULL; - - s->avctx->properties |= FF_CODEC_PROPERTY_CLOSED_CAPTIONS; } for (int i = 0; i < s->sei.unregistered.nb_buf_ref; i++) { @@ -2853,6 +2845,22 @@ static int set_side_data(HEVCContext *s) return 0; } +static int export_stream_params_from_sei(HEVCContext *s) +{ + AVCodecContext *avctx = s->avctx; + + if (s->sei.a53_caption.buf_ref) + s->avctx->properties |= FF_CODEC_PROPERTY_CLOSED_CAPTIONS; + + if (s->sei.alternative_transfer.present && + av_color_transfer_name(s->sei.alternative_transfer.preferred_transfer_characteristics) && + s->sei.alternative_transfer.preferred_transfer_characteristics != AVCOL_TRC_UNSPECIFIED) { + avctx->color_trc = s->sei.alternative_transfer.preferred_transfer_characteristics; + } + + return 0; +} + static int hevc_frame_start(HEVCContext *s) { HEVCLocalContext *lc = s->HEVClc; @@ -2974,6 +2982,9 @@ static int decode_nal_unit(HEVCContext *s, const H2645NAL *nal) goto fail; } ret = ff_hevc_decode_nal_sei(gb, s->avctx, &s->sei, &s->ps, s->nal_unit_type); + if (ret < 0) + goto fail; + ret = export_stream_params_from_sei(s); if (ret < 0) goto fail; break;