From patchwork Thu Sep 17 13:34:07 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 22457 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 3E10244BA66 for ; Thu, 17 Sep 2020 16:35:45 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 16A7168BC2D; Thu, 17 Sep 2020 16:35:45 +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 656FD68B96E for ; Thu, 17 Sep 2020 16:35:38 +0300 (EEST) Received: by mail-qt1-f193.google.com with SMTP id k25so1836382qtu.4 for ; Thu, 17 Sep 2020 06:35:38 -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=FCvmM9ugQUIGbTTzEcafDTKaPKb/C2CV8XoyPq1hBfw=; b=FlDcZGAypGBleyfF6hOH9tJ3M9GHhLC8GAElA4EDS2HzUeASWZ8/XVB1dhg8Fqq7jg 7UFiR+LfTr2vAfwISJK8l7lVbDjvtle8y2tG/BJK4/4wWa1/fbJYanK6ZM89awgcx2JH d84NCuVdyCx/bpp+84xGHMD/YZDsV/TNOWFKBRk0plkgXVN9Rs7g1gQ4usoPcNYQWTq5 Md1gb0ohxEWRL8ZHbcz8Yqva9ymUaXWgAFQMVBhHeDoXVDHXuP9m2N5em7zWOgkGh7kn FqYgVC9KhXUNJsHUNmuOewqchKB0XKJhL1J5jXxQZgZm1/UKY0c23xp0cJ9MPEtLCgoM WftA== 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=FCvmM9ugQUIGbTTzEcafDTKaPKb/C2CV8XoyPq1hBfw=; b=RctfAJ6XWrr4T/gus0eypBPvK5H4LutcSzEJ5i9AeW3+F8U3l0l0ZatakZLjjxJYh9 cUUvtNHpQYKTK4XuL+0v06Jz4CEzo+AXQjIT50+e0ORrMtbq4FYgycK/Iew07ko13n8h FbaBY23ZEwN/9Q6G6hZKyP/GOpBoQeECz4k2Li10ThDxEqZ0nF3rY82+xneNdWWlqRH7 VZ5WfVOEVZYDzGscVmBUkecXk1vxVivHVi9JVNh0ITZ8SLYVpYH+1I8MRB15ZNL3I9GN 8wiz83xpTBuIeNu9PqEMgFYazLDPyvOSLgH8Q276MuZpqeNu0nfnXwKCQ2PUkEu7oWga nurQ== X-Gm-Message-State: AOAM5316qZ3wFuvRq1/OQeNOvR+4R2WJO1d/L0n42VRnElXTqfmHq8Wc lDnewatIPspyi/5e6/NAWnyFYXjaIecsuA== X-Google-Smtp-Source: ABdhPJxCPC19uCjFsGLL9pGqE1Snx9Abkav1F7HK3/dfU3mnuu9lvwPAXIDwXk3bZDjDCWg0JEaMIg== X-Received: by 2002:ac8:735a:: with SMTP id q26mr15364290qtp.285.1600349736593; Thu, 17 Sep 2020 06:35:36 -0700 (PDT) Received: from localhost.localdomain ([191.83.208.67]) by smtp.gmail.com with ESMTPSA id g45sm22253113qtb.60.2020.09.17.06.35.35 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Sep 2020 06:35:35 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 17 Sep 2020 10:34:07 -0300 Message-Id: <20200917133408.1113-1-jamrial@gmail.com> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/2] avcodec/hevcdec: sync SEI derived AVCodecContext fields across threads 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" Fixes ticket #8610. Found-by: Pavel Koshevoy Signed-off-by: James Almer --- libavcodec/hevcdec.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index c1de75abe1..1f3ea54d39 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -369,12 +369,22 @@ 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); +} + +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 enum AVPixelFormat get_format(HEVCContext *s, const HEVCSPS *sps) @@ -582,6 +592,10 @@ static int hls_slice_header(HEVCContext *s) s->max_ra = INT_MAX; } + ret = export_stream_params_from_sei(s); + if (ret < 0) + return ret; + sh->dependent_slice_segment_flag = 0; if (!sh->first_slice_in_pic_flag) { int slice_address_length; @@ -2806,8 +2820,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++) { @@ -3250,6 +3262,11 @@ static int hevc_decode_extradata(HEVCContext *s, uint8_t *buf, int length, int f } } + /* export stream parameters from SEI */ + ret = export_stream_params_from_sei(s); + if (ret < 0) + return ret; + return 0; } @@ -3537,6 +3554,10 @@ static int hevc_update_thread_context(AVCodecContext *dst, s->sei.content_light = s0->sei.content_light; s->sei.alternative_transfer = s0->sei.alternative_transfer; + ret = export_stream_params_from_sei(s); + if (ret < 0) + return ret; + return 0; } #endif