From patchwork Mon Mar 28 01:08:51 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 35010 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6d9d:b0:79:214c:b845 with SMTP id gl29csp4144648pzb; Sun, 27 Mar 2022 18:09:28 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzjCxuzMDk1P8Ajzq2pg72wMMWInzZJiakBiOsYqK7/1YkdVuis44AmD89tC99pu2v8MX8l X-Received: by 2002:a05:6402:51c7:b0:419:2bd7:efa4 with SMTP id r7-20020a05640251c700b004192bd7efa4mr13195773edd.135.1648429768747; Sun, 27 Mar 2022 18:09:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1648429768; cv=none; d=google.com; s=arc-20160816; b=oXQd5CkKUkYvj/yaVkh2/ZNP065ch8TpVvMI/zbxJfIGeZoqCg8ePUNVbclnbUjSEs 1qG4V6PKLxupYJneCacy6s9gQVbBsBrrLSP6RSZt8mE5KMXqs09Pn0KwqzuyXPHEIcS7 QFWCoALgYNJmK5cuiKfgpO7H+cuAOgYqVOkQNQDfeHlzT6xn2/17eKU+bIQ6TPnj/Wc+ s8Qf9LICCFFhVYv5QL4+dD4gv/6Q4WWIBHnsqvYTvanIKppMBzzcn4BaUYyuVYGie1wi rAuv1einzZrKcYFeUjNzAlV0VVMJNGVKzsW4IlTZCc6bR+gZwnmeeg6J/B/Fn73tmyyY gSkg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=wldmaWwML/dMwMGSj+p//M289MQiBf5gvtaeVIK0GO8=; b=ZKqXOxDTfoon+koVsJ/9wf1pTFdzlrpeRv6zkEH7Ohe8VVgUr8TDhy/K56TPB2ANRK az5Spd/EefqQiuQ5JsOC/QWH+AFgkWpBLK1JFTDI1C+hBqSMKQ0Wq9PyacRVuKw3JKQd /bpRdAYAAsAF7wuN030hqtGOnQn5BP+VfCShC+31Bsk4Cg3YYv8oF6ABwuxubaXVRHEU zT52xJLm4C8JntPOzczUJCYYebFo8M1wtphQS2qqBBrsIsdTyifaQV590EffvFYPGsE0 oQdwZuMufvwnZk0kNw9U0APlqM61Qg+qipUCPogHZk9VIZZpihbS4Sql8PkN+991sD79 vMFQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=KMUvCAz8; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id y16-20020a1709060a9000b006df76385c76si11870713ejf.278.2022.03.27.18.09.28; Sun, 27 Mar 2022 18:09:28 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=KMUvCAz8; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B520F68B2A1; Mon, 28 Mar 2022 04:09:14 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ot1-f46.google.com (mail-ot1-f46.google.com [209.85.210.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id F03D968A8F5 for ; Mon, 28 Mar 2022 04:09:06 +0300 (EEST) Received: by mail-ot1-f46.google.com with SMTP id k25-20020a056830151900b005b25d8588dbso9729377otp.4 for ; Sun, 27 Mar 2022 18:09:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=NfU8pBoUp2U84so04d1FYuyJVGB5R4gNxhrjOGlQWh4=; b=KMUvCAz868ViYSM0/VTQmK8tbHS4fJmAMlO0Q7XFvKJzRtXLZssIGIA4QZTF7gwW0m O2ZY67Wzqr2LgXulk+LiOqKym8Z7OugSVMmstr7YRjAi4tbb+ERgiS23CrJtGfH9xYFH 4kEWY6MGhwGHs/Pcvbsgrz5v4YPdqVTmXQv1sDVzzGfVcadYJ7RtrJCyLwAxLj9FZCHI SBgzPAYx85UawCAX/sYAxGxxPZBpSTHBKcw1UteoVxw+/gNuo2fSKjHBTBH4TSEn+hjm phA+F+Ktt5j9a5tdFCAazkjBpoS92Nvq8JTXlZ89QwXjQkM95t+Oj91aDCHrVnkH2gj0 L3hQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=NfU8pBoUp2U84so04d1FYuyJVGB5R4gNxhrjOGlQWh4=; b=Lb9pHd/p1vBdKBm6V0iREI5aVtCeWe4BrdZxYFJQSBfg6V2lDhcrUaSTtIQTH/ymxF u1ZKJe9DmdkDmxEMIEnAu4fB24psZFNrI1MAeNX2CW0C7Pn/rTPP1lQRZWqr8DSSvbFZ z0TGGTEtwYbo+iLP1E9Nw8O29yoijBN5IZO3QMBbDjphIHboFOSex3P3GbBramtZaW4y PbuhMEC9aXyY2u71Mfz8R3PC6M+qoLNJQZV65YvbsvWZK7qc7siqkMQTlk8vaPj0yqWM J+QoSqb0cnul0OjanHWtEZ9eQcFspuCa7A082HWjmHGvPtBOqUC+em9FcdqldlSkjeWY BvGg== X-Gm-Message-State: AOAM533BV7sfwGYzaxJb7G0xsRwInenDnwVdcPowYbb8BzPCl1vA4hDf wM0W2OwkkRCunXMs+u+5xpisQwy3gzVD1A== X-Received: by 2002:a05:6830:2641:b0:5c9:7b11:16e5 with SMTP id f1-20020a056830264100b005c97b1116e5mr9161188otu.220.1648429745191; Sun, 27 Mar 2022 18:09:05 -0700 (PDT) Received: from localhost.localdomain ([186.136.131.95]) by smtp.gmail.com with ESMTPSA id bc36-20020a05682016a400b003240a532a1csm6136054oob.29.2022.03.27.18.09.04 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 27 Mar 2022 18:09:04 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Sun, 27 Mar 2022 22:08:51 -0300 Message-Id: <20220328010851.1193-2-jamrial@gmail.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220328010851.1193-1-jamrial@gmail.com> References: <20220328010851.1193-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/2] avcodec/cbs_av1: also copy the last frame header's decomposed content when parsing redundant frame headers X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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" X-TUID: sjb7x+GPA38h This prevents CBS from propagating zeroed AV1RawFrameHeader units in reading scenarios. Writing scenarios remain unaffected as the content of these units is not used to assemble the bitstream. Signed-off-by: James Almer --- libavcodec/cbs_av1.c | 11 +++++++++++ libavcodec/cbs_av1.h | 2 ++ libavcodec/cbs_av1_syntax_template.c | 6 ++++++ 3 files changed, 19 insertions(+) diff --git a/libavcodec/cbs_av1.c b/libavcodec/cbs_av1.c index ecd775ea2a..6cb832210c 100644 --- a/libavcodec/cbs_av1.c +++ b/libavcodec/cbs_av1.c @@ -969,6 +969,15 @@ static int cbs_av1_read_unit(CodedBitstreamContext *ctx, unit->data_ref); if (err < 0) return err; + + if (priv->frame_header) + break; + + av_buffer_unref(&priv->frame_header_ref); + priv->frame_header_ref = av_buffer_ref(unit->content_ref); + if (!priv->frame_header_ref) + return AVERROR(ENOMEM); + priv->frame_header = &obu->obu.frame_header; } break; case AV1_OBU_TILE_GROUP: @@ -1251,6 +1260,7 @@ static void cbs_av1_flush(CodedBitstreamContext *ctx) av_buffer_unref(&priv->frame_header_data_ref); priv->sequence_header = NULL; + priv->frame_header = NULL; priv->frame_header_data = NULL; memset(priv->ref, 0, sizeof(priv->ref)); @@ -1264,6 +1274,7 @@ static void cbs_av1_close(CodedBitstreamContext *ctx) CodedBitstreamAV1Context *priv = ctx->priv_data; av_buffer_unref(&priv->sequence_header_ref); + av_buffer_unref(&priv->frame_header_ref); av_buffer_unref(&priv->frame_header_data_ref); } diff --git a/libavcodec/cbs_av1.h b/libavcodec/cbs_av1.h index d4776b7a30..138b273470 100644 --- a/libavcodec/cbs_av1.h +++ b/libavcodec/cbs_av1.h @@ -431,6 +431,8 @@ typedef struct CodedBitstreamAV1Context { AVBufferRef *sequence_header_ref; int seen_frame_header; + AVBufferRef *frame_header_ref; + AV1RawFrameHeader *frame_header; AVBufferRef *frame_header_data_ref; uint8_t *frame_header_data; size_t frame_header_data_size; diff --git a/libavcodec/cbs_av1_syntax_template.c b/libavcodec/cbs_av1_syntax_template.c index bd50cfbe38..aadfa34b3c 100644 --- a/libavcodec/cbs_av1_syntax_template.c +++ b/libavcodec/cbs_av1_syntax_template.c @@ -1708,6 +1708,11 @@ static int FUNC(frame_header_obu)(CodedBitstreamContext *ctx, RWContext *rw, xf(b, frame_header_copy[i], val, val, val, 1, i / 8); } + +#ifdef READ + av_assert0(priv->frame_header_ref && priv->frame_header); + memcpy(current, priv->frame_header, sizeof(*current)); +#endif } } else { if (redundant) @@ -1730,6 +1735,7 @@ static int FUNC(frame_header_obu)(CodedBitstreamContext *ctx, RWContext *rw, } else { priv->seen_frame_header = 1; + priv->frame_header = NULL; av_buffer_unref(&priv->frame_header_data_ref); #ifdef READ