From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <ffmpeg-devel-bounces@ffmpeg.org>
Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100])
	by master.gitmailbox.com (Postfix) with ESMTPS id EC8694BA93
	for <ffmpegdev@gitmailbox.com>; Fri, 28 Mar 2025 08:45:55 +0000 (UTC)
Received: from [127.0.1.1] (localhost [127.0.0.1])
	by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7A489687AFD;
	Fri, 28 Mar 2025 10:45:50 +0200 (EET)
Received: from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net
 [217.70.183.197])
 by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EA608687B44
 for <ffmpeg-devel@ffmpeg.org>; Fri, 28 Mar 2025 10:45:43 +0200 (EET)
Received: by mail.gandi.net (Postfix) with ESMTPSA id 41E1444356
 for <ffmpeg-devel@ffmpeg.org>; Fri, 28 Mar 2025 08:45:43 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=niedermayer.cc;
 s=gm1; t=1743151543;
 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=aSSRsABbnzDb8ezd6vXz7n4NKj/9DxRJLSQdlAvXMZg=;
 b=oDwwIz0+GugmBn+abqN5C8rvNyK5kmeWMtoVfEYAlze6Pa0pXzMliJSpwOze5Mi6ChhlcM
 riDb7/2flIANOzQid4/joQKCHLsdGbrbUEFXsWsIaJOqz2P2UMMXVmnwDv/mY6He0ZPgaE
 V4edBjU6g2oiAkRavseFfC723dC4IW5BZhNquysc4AT5BpF5xi9jF8/vN15EdWc5bCTAH5
 WPJtRvuZ52Jopx4+trKzQkMVlNrhtX6ylFKnPZ8A4vJwhdA5NLAtfvQ0RnfCsDlZzrjtiL
 UY0ZiEIJJ6bd6Wpym9Rids2+dlWba+MfzYQYNR5c7wCis1BLeAWfxGpRowGZ5A==
From: Michael Niedermayer <michael@niedermayer.cc>
To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
Date: Fri, 28 Mar 2025 09:45:41 +0100
Message-ID: <20250328084542.263642-1-michael@niedermayer.cc>
X-Mailer: git-send-email 2.48.1
MIME-Version: 1.0
X-GND-State: clean
X-GND-Score: -70
X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgddujedtkeegucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuifetpfffkfdpucggtfgfnhhsuhgsshgtrhhisggvnecuuegrihhlohhuthemuceftddunecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenfghrlhcuvffnffculdeftddmnecujfgurhephffvufffkffoggfgsedtkeertdertddtnecuhfhrohhmpefoihgthhgrvghlucfpihgvuggvrhhmrgihvghruceomhhitghhrggvlhesnhhivgguvghrmhgrhigvrhdrtggtqeenucggtffrrghtthgvrhhnpefhledvvdehgfettdefueevtdeifffhkeeljeetjeeugfelgfffieduheevvefgvdenucfkphepgedurdeiiedrieejrdduudefnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehinhgvthepgedurdeiiedrieejrdduudefpdhhvghloheplhhotggrlhhhohhsthdpmhgrihhlfhhrohhmpehmihgthhgrvghlsehnihgvuggvrhhmrgihvghrrdgttgdpnhgspghrtghpthhtohepuddprhgtphhtthhopehffhhmphgvghdquggvvhgvlhesfhhfmhhpvghgrdhorhhg
X-GND-Sasl: michael@niedermayer.cc
Subject: [FFmpeg-devel] [PATCH 1/2] avcodec/ffv1enc: Eliminate copy_state
X-BeenThere: ffmpeg-devel@ffmpeg.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: FFmpeg development discussions and patches <ffmpeg-devel.ffmpeg.org>
List-Unsubscribe: <https://ffmpeg.org/mailman/options/ffmpeg-devel>,
 <mailto:ffmpeg-devel-request@ffmpeg.org?subject=unsubscribe>
List-Archive: <https://ffmpeg.org/pipermail/ffmpeg-devel>
List-Post: <mailto:ffmpeg-devel@ffmpeg.org>
List-Help: <mailto:ffmpeg-devel-request@ffmpeg.org?subject=help>
List-Subscribe: <https://ffmpeg.org/mailman/listinfo/ffmpeg-devel>,
 <mailto:ffmpeg-devel-request@ffmpeg.org?subject=subscribe>
Reply-To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Errors-To: ffmpeg-devel-bounces@ffmpeg.org
Sender: "ffmpeg-devel" <ffmpeg-devel-bounces@ffmpeg.org>
Archived-At: <https://master.gitmailbox.com/ffmpegdev/20250328084542.263642-1-michael@niedermayer.cc/>
List-Archive: <https://master.gitmailbox.com/ffmpegdev/>
List-Post: <mailto:ffmpegdev@gitmailbox.com>

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
---
 libavcodec/ffv1enc.c | 77 ++++++++++++++------------------------------
 1 file changed, 25 insertions(+), 52 deletions(-)

diff --git a/libavcodec/ffv1enc.c b/libavcodec/ffv1enc.c
index 5e7c714035e..e7372e572b9 100644
--- a/libavcodec/ffv1enc.c
+++ b/libavcodec/ffv1enc.c
@@ -1271,44 +1271,26 @@ typedef struct RemapEncoderState {
     int run1start_mul_index;
 } RemapEncoderState;
 
-static inline void copy_state(RemapEncoderState *dst, const RemapEncoderState *src)
-{
-    dst->rc = src->rc;
-    memcpy(dst->mul, src->mul, (src->mul_count + 1) * sizeof(src->mul[0]));
-    memcpy(dst->state, src->state, sizeof(dst->state));
-    dst->lu             = src->lu;
-    dst->run            = src->run;
-    dst->last_val       = src->last_val;
-    dst->compact_index  = src->compact_index;
-    dst->mul_count      = src->mul_count;
-    dst->i              = src->i;
-    dst->pixel_num      = src->pixel_num;
-    dst->p              = src->p;
-    dst->current_mul_index = src->current_mul_index;
-    dst->run1final      = src->run1final;
-    dst->run1start_i    = src->run1start_i;
-    dst->run1start_last_val = src->run1start_last_val;
-    dst->run1start_mul_index = src->run1start_mul_index;
-}
-
 static int encode_float32_remap_segment(FFV1SliceContext *sc,
-                                        RemapEncoderState *state_arg, int update, int final)
+                                        int p, int mul_count, int *mul_tab, int update, int final)
 {
     RemapEncoderState s;
 
-    copy_state(&s, state_arg);
-
-    if (s.i == 0) {
-        memset(s.state, 128, sizeof(s.state));
-        put_symbol(&s.rc, s.state[0][0], s.mul_count, 0);
-        memset(s.state, 128, sizeof(s.state));
-        s.last_val = -1;
-        s.compact_index = -1;
-        s.lu = 0;
-        s.run = 0;
-        s.current_mul_index = -1;
-        s.run1final = 0;
-    }
+    s.pixel_num = sc->slice_width * sc->slice_height;
+    s.p = p;
+    s.i = 0;
+    s.rc = sc->c;
+    s.mul_count = mul_count;
+    memcpy(s.mul, mul_tab, sizeof(*mul_tab)*(mul_count+1));
+    memset(s.state, 128, sizeof(s.state));
+    put_symbol(&s.rc, s.state[0][0], s.mul_count, 0);
+    memset(s.state, 128, sizeof(s.state));
+    s.last_val = -1;
+    s.compact_index = -1;
+    s.lu = 0;
+    s.run = 0;
+    s.current_mul_index = -1;
+    s.run1final = 0;
 
     for (; s.i < s.pixel_num+1; s.i++) {
         int current_mul = s.current_mul_index < 0 ? 1 : FFABS(s.mul[s.current_mul_index]);
@@ -1395,7 +1377,7 @@ static int encode_float32_remap_segment(FFV1SliceContext *sc,
     }
 
     if (update) {
-        copy_state(state_arg, &s);
+        sc->c = s.rc;
     }
     return get_rac_count(&s.rc);
 }
@@ -1403,25 +1385,22 @@ static int encode_float32_remap_segment(FFV1SliceContext *sc,
 static void encode_float32_remap(FFV1Context *f, FFV1SliceContext *sc,
                                  const uint8_t *src[4])
 {
-    RemapEncoderState s;
-    s.pixel_num = sc->slice_width * sc->slice_height;
+    int pixel_num = sc->slice_width * sc->slice_height;
+    int mul_count;
 
-    av_assert0 (s.pixel_num <= 65536);
+    av_assert0 (pixel_num <= 65536);
 
     for (int p= 0; p < 1 + 2*f->chroma_planes + f->transparency; p++) {
         float score_sum[2] = {0};
         int mul_all[2][513];
-        s.rc = sc->c;
-        s.i = 0;
-        s.p = p;
 
-        for (int mul_count= 1; mul_count<=512; mul_count+=511) {
+        for (mul_count= 1; mul_count<=512; mul_count+=511) {
             float score_tab_all[513][23] = {0};
             int64_t last_val = -1;
             int *mul_tab = mul_all[mul_count>>9];
             int last_mul_index = -1;
             score_sum[mul_count>>9] += log2(mul_count);
-            for (int i= 0; i<s.pixel_num; i++) {
+            for (int i= 0; i<pixel_num; i++) {
                 int64_t val = sc->unit[p][i].val;
                 int mul_index = (val + 1LL)*mul_count >> 32;
                 if (val != last_val) {
@@ -1461,17 +1440,11 @@ static void encode_float32_remap(FFV1Context *f, FFV1SliceContext *sc,
             }
             mul_tab[mul_count] = 1;
 
-            s.mul_count = mul_count;
-            memcpy(s.mul, mul_all[s.mul_count>>9], sizeof(*s.mul)*(s.mul_count+1));
-            score_sum[mul_count>>9] = encode_float32_remap_segment(sc, &s, 0, 0);
+            score_sum[mul_count>>9] = encode_float32_remap_segment(sc, p, mul_count, mul_all[mul_count>>9], 0, 0);
         }
 
-        s.mul_count = score_sum[0] <= score_sum[1] ? 1 : 512;
-        memcpy(s.mul, mul_all[s.mul_count>>9], sizeof(*s.mul)*(s.mul_count+1));
-
-        encode_float32_remap_segment(sc, &s, 1, 1);
-
-        sc->c = s.rc;
+        mul_count = score_sum[0] <= score_sum[1] ? 1 : 512;
+        encode_float32_remap_segment(sc, p, mul_count, mul_all[mul_count>>9], 1, 1);
     }
 }
 
-- 
2.48.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".