From patchwork Tue Oct 1 20:31:24 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Niedermayer X-Patchwork-Id: 51978 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:cb8a:0:b0:48e:c0f8:d0de with SMTP id d10csp547309vqv; Tue, 1 Oct 2024 13:31:40 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVqiZ05g3Qnn1BVhbF5FBYC4W8pbxPJNuJ8d3bfvvoT+IPtkygMjOU42M3NWZ8c0S2sPaQ8cV5wWwfyrOB8Ehi/@gmail.com X-Google-Smtp-Source: AGHT+IGVNI1wTjiGyxh73WDLB5QdTOdtvuRSH292aoeBfdVUd/KqMKiGmNM68agvPBSqU7kgUJqm X-Received: by 2002:a2e:4619:0:b0:2f7:67c6:466 with SMTP id 38308e7fff4ca-2fae1438a56mr1989771fa.13.1727814700604; Tue, 01 Oct 2024 13:31:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727814700; cv=none; d=google.com; s=arc-20240605; b=PQOo6TKfXg79dmmFDgsgSNm8l/JGVBqc0/Xxm3rbSmvOpIpupTQMSfhdcw229Zxjp8 ES/EJ8HIycQb4KETw/vOIddY9b5r6tozT8eLPHr4ulz6G8rg459woxG1Fir81OA61qCt EPpN5JE2jHAClpvFNAAwDII/myUjxssoeGGCqhaEKbqwxs+R1/IQgx3LE0kuewekApPT uBGh/VRpKYTeoY27iGeU6KMO0hFO1oQyygAQhDVyjywF0oQtzM+iAvEOlYyrkTttQTDk yIN/x178PYV5gT31h5Lyt4X59kzSSR4qJWOtdHZhq1O5ukiAytS83ean12UgWcnlLZVA 2h4g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; 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:message-id:date:to:from :dkim-signature:delivered-to; bh=4f/JLti6ym1zg22CmXFsbAPySysDFAXLSfBrQ2Wb7DA=; fh=e5zN9xSzcxLA6bGo3lF+CqTbY/oLwzApV03EO/RBfgQ=; b=kWkVHzsagpLGyH8OeGcL57HlK1XfLWFKhQsU/Xy7TdDxUorsbfyBGYcuVymfPziEbw rub8VnhH0yLHRqyzjgEHP3VnHvtS0n/S/urSDf168I7itkjpliGu/vxBjoyPC5Uu7yTa 3LFP+xWLTWIswq3lV9W67U/SlP9aQDEzOnNG9GHlC4GYMesNO1GolE5F+/WR4H151v0j KJQWE4GSsh8I6L2bSdBj5jXRQfBDRRjlUpEoj7v1+NbVUqwDwxrm6Cay8KWAeBVWrPrI kQA6dj0gGFmDS+gdN4ns/aiTHTo1PTOCqv91kalBSA8AdsIIcULh4Xu5V+O336Jgr227 TaDg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@niedermayer.cc header.s=gm1 header.b=ecqpPMMn; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 38308e7fff4ca-2f9d4602f2csi34870921fa.235.2024.10.01.13.31.40; Tue, 01 Oct 2024 13:31:40 -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=@niedermayer.cc header.s=gm1 header.b=ecqpPMMn; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 90E0368D9D4; Tue, 1 Oct 2024 23:31:35 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from relay9-d.mail.gandi.net (relay9-d.mail.gandi.net [217.70.183.199]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C3B8968D50D for ; Tue, 1 Oct 2024 23:31:28 +0300 (EEST) Received: by mail.gandi.net (Postfix) with ESMTPSA id EFD3FFF803 for ; Tue, 1 Oct 2024 20:31:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=niedermayer.cc; s=gm1; t=1727814688; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=AqIe+Lq5yfJT7O86XDAkjNwDgEewoH9uBauK4/99Hyg=; b=ecqpPMMnVqrL3ZGsQZazCp3AtFK1OpMNHRe4Pzv9NSZq7IbVCOGHL1h7f3DlZCMATu27SY fgUTHqM7POu93tE7rus7s27Onan2Moomu7zt9BY4q0QCsW4PLSSB0EeVregu/ui1Gbfdkt 5DPfNLPDMoYMByXe7PqFhXIxWn06jrb/k2gJIM/UKTqbOsuWtZDv0Axnfzc12hb9jUFo3X Rme4Ca2/UU3Ht1n7YsPfe+9cmeKMOlcpi+2iimjRPmHVPgMCZn45SI2rsqsphv4d4IAk9k TIOy4HzZh59TAdDQztXMdbescAt3+x1MW8TSRBV22YrLfeY7hQv8lNh8rEKR7g== From: Michael Niedermayer To: FFmpeg development discussions and patches Date: Tue, 1 Oct 2024 22:31:24 +0200 Message-ID: <20241001203126.1656651-1-michael@niedermayer.cc> X-Mailer: git-send-email 2.46.2 MIME-Version: 1.0 X-GND-Sasl: michael@niedermayer.cc Subject: [FFmpeg-devel] [PATCH 1/3] avcodec/ffv1enc: Correct error message about unsupported version 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: FBiIplX0c+Za Sponsored-by: Sovereign Tech Fund Signed-off-by: Michael Niedermayer --- libavcodec/ffv1enc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavcodec/ffv1enc.c b/libavcodec/ffv1enc.c index 266ef13b247..94d9830e07b 100644 --- a/libavcodec/ffv1enc.c +++ b/libavcodec/ffv1enc.c @@ -557,7 +557,7 @@ static av_cold int encode_init(AVCodecContext *avctx) s->version = FFMAX(s->version, 3); if ((s->version == 2 || s->version>3) && avctx->strict_std_compliance > FF_COMPLIANCE_EXPERIMENTAL) { - av_log(avctx, AV_LOG_ERROR, "Version 2 needed for requested features but version 2 is experimental and not enabled\n"); + av_log(avctx, AV_LOG_ERROR, "Version 2 or 4 needed for requested features but version 2 or 4 is experimental and not enabled\n"); return AVERROR_INVALIDDATA; } From patchwork Tue Oct 1 20:31:25 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Niedermayer X-Patchwork-Id: 51979 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:cb8a:0:b0:48e:c0f8:d0de with SMTP id d10csp547418vqv; Tue, 1 Oct 2024 13:31:51 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUJpDvHCZ8hCrLLtwJabNDv5NLJbbUoE4rIqSGFUCjFRKHznIHndlupq8fnMzbP+7POQIZykYVn6xqntxat1kb9@gmail.com X-Google-Smtp-Source: AGHT+IH8QOTcH1H5Pf8CdgCFX5537N5VwsSVRUc6C52A1N0zS0Am5wPrHp6YJVLc54u3MDuUCq6q X-Received: by 2002:a2e:a106:0:b0:2f7:9e1d:f6e7 with SMTP id 38308e7fff4ca-2fad866c539mr16416491fa.9.1727814711275; Tue, 01 Oct 2024 13:31:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727814711; cv=none; d=google.com; s=arc-20240605; b=gV+xwXU6gHKOGE0dLwSpHCYC3V35wNbHk9jyBHu9WVphlHFqhuvftOhdsYBrR4kPB1 wylL7/AKfzZTZqs5iQqWLJUTcpivasFK/Vtv/XfdYWF3Ie98xeSR9tWjXcEoPmLBairH DnTbyy2qDLOFC/DZf49IWZOUGuAIEHKncYlFINVUCirek/t4tQ6mNtZ2csB3VifhBaUn JAkBFzFR6trKNVje4yBQg1yZzjI/LeqMw7whcquySgqom/LQd6xlsZFgmrGWmvM6gVWM Q+MHdDyeJSL4zuT5oq4m2JZYzpR4ehHDyH+klag9AYB7kBX4VfdBTzNoWGDz3Vz+6Onp OMOA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; 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=gbWAudAmAOAay8FcLOTxDzBSXyilRCClCKKRvf9W9rs=; fh=e5zN9xSzcxLA6bGo3lF+CqTbY/oLwzApV03EO/RBfgQ=; b=PzdoFSGECb8GAPNBbmPco9PKesEYjgw7OYq1cZVcDTqG7b59hChHbKGpItV6Y4QCBm a1w5PW1tzzw+Sd0NvX7VgfWnPr/+8kXLyRkNjuVP5h0uCWH7x4GwD5OpqxF4B7uBIsbx xg/IVzctWcVIsd6leDA8oFsFYjiZceQxvOVrK6Kq1eP92F5YXPpykE8KfH1g+064Yw7W +k9kAqxKeZhB/UFIxiCeo8vHa2Mjbq/HGhM3l2OwYbcSzY2T7wPwQXIfsI2Dlbl/W0zx q+mLeq8HQWvlMFhvfBg04oieoNBq8LGi6jlgyLMlKqgAZ9WS8D8hmlHT8QWFm3q+gwpq Mg0Q==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@niedermayer.cc header.s=gm1 header.b=azkIIkMa; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 38308e7fff4ca-2fad3a51a4bsi12043231fa.128.2024.10.01.13.31.50; Tue, 01 Oct 2024 13:31:51 -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=@niedermayer.cc header.s=gm1 header.b=azkIIkMa; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 891CE68DA2C; Tue, 1 Oct 2024 23:31:36 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from relay1-d.mail.gandi.net (relay1-d.mail.gandi.net [217.70.183.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B722D68D73B for ; Tue, 1 Oct 2024 23:31:29 +0300 (EEST) Received: by mail.gandi.net (Postfix) with ESMTPSA id E995A240002 for ; Tue, 1 Oct 2024 20:31:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=niedermayer.cc; s=gm1; t=1727814689; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=AnfNl3PSo0+g7wyYQq/frT089bZ9O7O3KQVmmaWnfZ8=; b=azkIIkMaYH40WjryuyscVad3vdqNYcV8iwPd9a9wdsYEoV5F1JMFvkiRVc3v8fHrvCcJKq pJG98luthmYrWTUrkD1j04ocpMGjuDvfi1GadCv0s3zVROP+2Cwu9yFXWkZyzy7H5Rw7GN FPo47dB19X0E9qJudDTn61xyfluyfKCjPCKJs5xCccaueb+yjg2QJzXKvx1dbQrwFO8lZo e9NJmHwcP+Nm23ZAevWV+0WPg9y8JG8SI0oEnYKXiPGT4Zj82zy1g1S9otDKtJOTuxZyil YFViac4R4Rn0CBFmtOciETaZMeW56svOpBoK8OSYkioHTwzGrloxJYv4n0RshA== From: Michael Niedermayer To: FFmpeg development discussions and patches Date: Tue, 1 Oct 2024 22:31:25 +0200 Message-ID: <20241001203126.1656651-2-michael@niedermayer.cc> X-Mailer: git-send-email 2.46.2 In-Reply-To: <20241001203126.1656651-1-michael@niedermayer.cc> References: <20241001203126.1656651-1-michael@niedermayer.cc> MIME-Version: 1.0 X-GND-Sasl: michael@niedermayer.cc Subject: [FFmpeg-devel] [PATCH 2/3] avcodec/ffv1enc: Prevent generation of files with broken slices 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: Bw8Owa+9nH/4 Fixes: Ticket5548 Sponsored-by: Sovereign Tech Fund Signed-off-by: Michael Niedermayer --- libavcodec/ffv1.c | 7 +++++++ libavcodec/ffv1.h | 1 + libavcodec/ffv1enc.c | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/libavcodec/ffv1.c b/libavcodec/ffv1.c index 56a36e479fc..2b8564c2f56 100644 --- a/libavcodec/ffv1.c +++ b/libavcodec/ffv1.c @@ -119,6 +119,13 @@ av_cold int ff_ffv1_init_slices_state(FFV1Context *f) return 0; } +int ff_need_new_slices(int width, int num_h_slices, int chroma_shift) { + int mpw = 1<num_h_slices * f->num_v_slices; diff --git a/libavcodec/ffv1.h b/libavcodec/ffv1.h index a35197964e4..e19c0df0142 100644 --- a/libavcodec/ffv1.h +++ b/libavcodec/ffv1.h @@ -171,6 +171,7 @@ PlaneContext *ff_ffv1_planes_alloc(void); int ff_ffv1_allocate_initial_states(FFV1Context *f); void ff_ffv1_clear_slice_state(const FFV1Context *f, FFV1SliceContext *sc); int ff_ffv1_close(AVCodecContext *avctx); +int ff_need_new_slices(int width, int num_h_slices, int chroma_shift); static av_always_inline int fold(int diff, int bits) { diff --git a/libavcodec/ffv1enc.c b/libavcodec/ffv1enc.c index 94d9830e07b..56af7dc4274 100644 --- a/libavcodec/ffv1enc.c +++ b/libavcodec/ffv1enc.c @@ -865,6 +865,10 @@ static av_cold int encode_init(AVCodecContext *avctx) continue; if (maxw * maxh * (int64_t)(s->bits_per_raw_sample+1) * plane_count > 8<<24) continue; + if (s->version < 4) + if ( ff_need_new_slices(avctx->width , s->num_h_slices, s->chroma_h_shift) + ||ff_need_new_slices(avctx->height, s->num_v_slices, s->chroma_v_shift)) + continue; if (avctx->slices == s->num_h_slices * s->num_v_slices && avctx->slices <= MAX_SLICES || !avctx->slices) goto slices_ok; } From patchwork Tue Oct 1 20:31:26 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Niedermayer X-Patchwork-Id: 51980 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:cb8a:0:b0:48e:c0f8:d0de with SMTP id d10csp547511vqv; Tue, 1 Oct 2024 13:32:00 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVrnOGMrElbkrPVZFF8kRu1bLTDgwy3mUDaWCPtJv00RJmzNnbQX5/lh9lsEM/n24DclLBLkJKBHZIjHfiKtviW@gmail.com X-Google-Smtp-Source: AGHT+IFyWor1ZoymKmBKhmkgYvXNyo+ID3bA2QRCU1Qg3yFRO11hcw+RPoDs+ohUo5QbIHoGGPif X-Received: by 2002:a17:906:bc07:b0:a8a:6db7:665d with SMTP id a640c23a62f3a-a98f825a874mr88111366b.17.1727814719924; Tue, 01 Oct 2024 13:31:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1727814719; cv=none; d=google.com; s=arc-20240605; b=NQ4JPCCyrL4UiJg/1zj7jbmgVOUfdva3sSgJRb3mjv34E1xqM8iDB3Tc9X8SnWvcBs uIgMmIu1OmTGJoRJ3h/6uX9sonyJVZFq8kl1vBHCCw+ddbnvVzhgpsvmFFCkL7U+exHv Ju2p6Ljnl5kzNjnG60xncXQdCVk4E1ZJu+xfOF5wKBx0RrL79gJ7ubEv72c031JJwTe9 eZgp7H3i+gq65sqCpc1nDopaIIyumxGFC1mc59y/VI7B4gvhqAVvFPfgGqmmX4/ugJBe ZSubYtNGaWzaGCOiNmRgEuLkk/Aws+nOjx1kb4pjGs4Xv7CF1ltTA94SM57RZDDuTi5p cyEw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; 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=vyqJ28Aclu5ZUZNFjLWJ/nIG1KkcGAH6pES2wXUubbA=; fh=e5zN9xSzcxLA6bGo3lF+CqTbY/oLwzApV03EO/RBfgQ=; b=H+eCVxrFdC8HPqJmdzkR+DJTEUqi6m83OdU7nEdOwQh/QftRTvN50vCrPuBiFSRauI 0OjKPyRCG27YAVYlM13ibNNu4NDOAxi8UzY/u6Ase766DdyE9Z9NwGDds2Gm6d7Nfqgh 6l2Xov0W3gObD3kBNJVKCIf2eeNCGJxFC6gO2+qgpX7mrU2FJzfWye6clvAIlva0S3Q/ AukSMEQqvMEnK6iXTzzyHX5M2PKfp8FGBlQZv0Dosgbo4ySMEEF+1UCRTWZy0B4bnZIV xtOCS+Of3uivFqO13Cugftxa6cJoObMN/3y98rPg0eNXRKysPx60yj/mRUviCgxs4ZEL CuXg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@niedermayer.cc header.s=gm1 header.b="Vk/nYUvD"; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a640c23a62f3a-a93c2a5387csi787350266b.889.2024.10.01.13.31.59; Tue, 01 Oct 2024 13:31:59 -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=@niedermayer.cc header.s=gm1 header.b="Vk/nYUvD"; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9302068DCCE; Tue, 1 Oct 2024 23:31:37 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from relay2-d.mail.gandi.net (relay2-d.mail.gandi.net [217.70.183.194]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 775CF68D50D for ; Tue, 1 Oct 2024 23:31:30 +0300 (EEST) Received: by mail.gandi.net (Postfix) with ESMTPSA id C434D40004 for ; Tue, 1 Oct 2024 20:31:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=niedermayer.cc; s=gm1; t=1727814689; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=gwjr7RSpaa1gSMxBQe1rATR4FQiDAlyyYNPirHf0sCY=; b=Vk/nYUvDjq9yhJMW2sQP3DeBlkL3IAVPMEkbKlxfdbJybdRKJi/Gtnj8eSKEdYEt6GNjtt Q2gcH7iZW8p/WS5Sjvjo18jgykJT4Xb7cdzwSXI38CVPzoEANn/bkyIjRUVMukcfRCwA/2 xKMLhBePuP91Jr/AfFtXOiRXIVsZxHvfIwl1XQ9LYd57NHvvvEgn0dA8SWKHXcYYk4aCWO VjoPYMfpSAJwOWEmFSalbK95eQasqPW70Fm7i7DQDNHXthAkB5Mvt3zCsibYt51Jxpx17G mREXdSJen9gMF3xoIFHxAUyOEusPc1MA/s29GrmWI6G17LDvLZ6INw25MBO6VQ== From: Michael Niedermayer To: FFmpeg development discussions and patches Date: Tue, 1 Oct 2024 22:31:26 +0200 Message-ID: <20241001203126.1656651-3-michael@niedermayer.cc> X-Mailer: git-send-email 2.46.2 In-Reply-To: <20241001203126.1656651-1-michael@niedermayer.cc> References: <20241001203126.1656651-1-michael@niedermayer.cc> MIME-Version: 1.0 X-GND-Sasl: michael@niedermayer.cc Subject: [FFmpeg-devel] [PATCH 3/3] avcodec/ffv1: Implement new slice tiling 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: mu/C52Q6Y4yW This fixes corner cases (requires version 4 or a spec update) Fixes: Ticket5548 Sponsored-by: Sovereign Tech Fund Signed-off-by: Michael Niedermayer --- libavcodec/ffv1.c | 21 +++++++++++++++++---- libavcodec/ffv1.h | 1 + libavcodec/ffv1dec.c | 8 ++++---- libavcodec/ffv1enc.c | 2 +- 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/libavcodec/ffv1.c b/libavcodec/ffv1.c index 2b8564c2f56..6c953e860f8 100644 --- a/libavcodec/ffv1.c +++ b/libavcodec/ffv1.c @@ -126,6 +126,19 @@ int ff_need_new_slices(int width, int num_h_slices, int chroma_shift) { return width % mpw && (width - i) % mpw == 0; } +int ff_slice_coord(const FFV1Context *f, int width, int sx, int num_h_slices, int chroma_shift) { + int mpw = 1<version < 4 || f->version == 4 && f->micro_version < 3) + return width * sx / num_h_slices; + + sx = (2LL * awidth * sx + num_h_slices * mpw) / (2 * num_h_slices * mpw) * mpw; + if (sx == awidth) + sx = width; + return sx; +} + av_cold int ff_ffv1_init_slice_contexts(FFV1Context *f) { int max_slice_count = f->num_h_slices * f->num_v_slices; @@ -142,10 +155,10 @@ av_cold int ff_ffv1_init_slice_contexts(FFV1Context *f) FFV1SliceContext *sc = &f->slices[i]; int sx = i % f->num_h_slices; int sy = i / f->num_h_slices; - int sxs = f->avctx->width * sx / f->num_h_slices; - int sxe = f->avctx->width * (sx + 1) / f->num_h_slices; - int sys = f->avctx->height * sy / f->num_v_slices; - int sye = f->avctx->height * (sy + 1) / f->num_v_slices; + int sxs = ff_slice_coord(f, f->avctx->width , sx , f->num_h_slices, f->chroma_h_shift); + int sxe = ff_slice_coord(f, f->avctx->width , sx + 1, f->num_h_slices, f->chroma_h_shift); + int sys = ff_slice_coord(f, f->avctx->height, sy , f->num_v_slices, f->chroma_v_shift); + int sye = ff_slice_coord(f, f->avctx->height, sy + 1, f->num_v_slices, f->chroma_v_shift); sc->slice_width = sxe - sxs; sc->slice_height = sye - sys; diff --git a/libavcodec/ffv1.h b/libavcodec/ffv1.h index e19c0df0142..10f46c80ee1 100644 --- a/libavcodec/ffv1.h +++ b/libavcodec/ffv1.h @@ -172,6 +172,7 @@ int ff_ffv1_allocate_initial_states(FFV1Context *f); void ff_ffv1_clear_slice_state(const FFV1Context *f, FFV1SliceContext *sc); int ff_ffv1_close(AVCodecContext *avctx); int ff_need_new_slices(int width, int num_h_slices, int chroma_shift); +int ff_slice_coord(const FFV1Context *f, int width, int sx, int num_h_slices, int chroma_shift); static av_always_inline int fold(int diff, int bits) { diff --git a/libavcodec/ffv1dec.c b/libavcodec/ffv1dec.c index 0afdeabd915..da31b863da5 100644 --- a/libavcodec/ffv1dec.c +++ b/libavcodec/ffv1dec.c @@ -187,10 +187,10 @@ static int decode_slice_header(const FFV1Context *f, if (sx > f->num_h_slices - sw || sy > f->num_v_slices - sh) return AVERROR_INVALIDDATA; - sc->slice_x = sx * (int64_t)f->width / f->num_h_slices; - sc->slice_y = sy * (int64_t)f->height / f->num_v_slices; - sc->slice_width = (sx + sw) * (int64_t)f->width / f->num_h_slices - sc->slice_x; - sc->slice_height = (sy + sh) * (int64_t)f->height / f->num_v_slices - sc->slice_y; + sc->slice_x = ff_slice_coord(f, f->width , sx , f->num_h_slices, f->chroma_h_shift); + sc->slice_y = ff_slice_coord(f, f->height, sy , f->num_v_slices, f->chroma_v_shift); + sc->slice_width = ff_slice_coord(f, f->width , sx + sw, f->num_h_slices, f->chroma_h_shift) - sc->slice_x; + sc->slice_height = ff_slice_coord(f, f->height, sy + sh, f->num_v_slices, f->chroma_v_shift) - sc->slice_y; av_assert0((unsigned)sc->slice_width <= f->width && (unsigned)sc->slice_height <= f->height); diff --git a/libavcodec/ffv1enc.c b/libavcodec/ffv1enc.c index 56af7dc4274..8b23e73c841 100644 --- a/libavcodec/ffv1enc.c +++ b/libavcodec/ffv1enc.c @@ -416,7 +416,7 @@ static int write_extradata(FFV1Context *f) if (f->version == 3) { f->micro_version = 4; } else if (f->version == 4) - f->micro_version = 2; + f->micro_version = 3; put_symbol(&c, state, f->micro_version, 0); }