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 1C0414894A
	for <ffmpegdev@gitmailbox.com>; Mon, 24 Mar 2025 01:58:11 +0000 (UTC)
Received: from [127.0.1.1] (localhost [127.0.0.1])
	by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 22695687BB0;
	Mon, 24 Mar 2025 03:57:57 +0200 (EET)
Received: from relay6-d.mail.gandi.net (relay6-d.mail.gandi.net
 [217.70.183.198])
 by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8ED39687BA3
 for <ffmpeg-devel@ffmpeg.org>; Mon, 24 Mar 2025 03:57:50 +0200 (EET)
Received: by mail.gandi.net (Postfix) with ESMTPSA id C5BD844215
 for <ffmpeg-devel@ffmpeg.org>; Mon, 24 Mar 2025 01:57:49 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=niedermayer.cc;
 s=gm1; t=1742781469;
 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=iJat8mST5X0KWFnCOz/BzQ1L0in4x/wnQA6E/52yVRA=;
 b=BQgFlPIDyOhs5uxyKxSK7c/8yar1WAKXlhOUZ319tFeZ2RN98PRASn0foNtA76orFRDjAr
 1gqcCJmsYNQEf06tAQ9mJfyzTPR64sigUe7qofi33dDTSdorxwCa+DwCesl9WEs9q81cel
 FzfQe1HW1M9OYO5K0A697t0HVFm6oE/VY9EWt+2gf2Orr8m89PCsF39C1f/Yk97ZIy1Llf
 sD0/RmpfwNDgVsAoB56VUa4ZhhPoVLtVvLTR+h8FyDc990+QHp3hKX7OsrQ/Wjq7F9TdW9
 aXmXhBvC8KXtBHI2IlnHRGUCfWDbgemiT8bIL5bIfMNfLjqlypV5iJ6fD5qrGA==
From: Michael Niedermayer <michael@niedermayer.cc>
To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
Date: Mon, 24 Mar 2025 02:57:47 +0100
Message-ID: <20250324015747.3907914-2-michael@niedermayer.cc>
X-Mailer: git-send-email 2.48.1
In-Reply-To: <20250324015747.3907914-1-michael@niedermayer.cc>
References: <20250324015747.3907914-1-michael@niedermayer.cc>
MIME-Version: 1.0
X-GND-State: clean
X-GND-Score: -70
X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgdduheekgeelucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuifetpfffkfdpucggtfgfnhhsuhgsshgtrhhisggvnecuuegrihhlohhuthemuceftddunecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenfghrlhcuvffnffculdeftddmnecujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefoihgthhgrvghlucfpihgvuggvrhhmrgihvghruceomhhitghhrggvlhesnhhivgguvghrmhgrhigvrhdrtggtqeenucggtffrrghtthgvrhhnpedvgfefudeijeetieejkefgfffhtdeludeuffdvfeelieevjeetvedufeetfeejfeenucfkphepgedurdeiiedrieejrdduudefnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehinhgvthepgedurdeiiedrieejrdduudefpdhhvghloheplhhotggrlhhhohhsthdpmhgrihhlfhhrohhmpehmihgthhgrvghlsehnihgvuggvrhhmrgihvghrrdgttgdpnhgspghrtghpthhtohepuddprhgtphhtthhopehffhhmphgvghdquggvvhgvlhesfhhfmhhpvghgrdhorhhg
X-GND-Sasl: michael@niedermayer.cc
Subject: [FFmpeg-devel] [PATCH 2/2] avcodec/ffv1enc: remap prettification
 and bufixes
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/20250324015747.3907914-2-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 | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/libavcodec/ffv1enc.c b/libavcodec/ffv1enc.c
index 5b251ac2e80..4340d1b8732 100644
--- a/libavcodec/ffv1enc.c
+++ b/libavcodec/ffv1enc.c
@@ -1275,6 +1275,7 @@ typedef struct RemapEncoderState {
     int i;
     int pixel_num;
     int p;
+    int current_mul_index;
 } RemapEncoderState;
 
 static inline void copy_state(RemapEncoderState *dst, const RemapEncoderState *src)
@@ -1292,6 +1293,7 @@ static inline void copy_state(RemapEncoderState *dst, const RemapEncoderState *s
     dst->i              = src->i;
     dst->pixel_num      = src->pixel_num;
     dst->p              = src->p;
+    dst->current_mul_index = src->current_mul_index;
 }
 
 static inline void encode_mul(RemapEncoderState *s, int mul_index)
@@ -1318,9 +1320,11 @@ static int encode_float32_remap_segment(FFV1SliceContext *sc, Unit unit[4][65536
         s.compact_index = -1;
         s.lu = 0;
         s.run = 0;
+        s.current_mul_index = -1;
     }
 
     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]);
         int64_t val;
         if (s.i == s.pixel_num) {
             if (s.last_val == 0xFFFFFFFF) {
@@ -1332,8 +1336,6 @@ static int encode_float32_remap_segment(FFV1SliceContext *sc, Unit unit[4][65536
             val = unit[s.p][s.i].val;
 
         if (s.last_val != val) {
-            int current_mul_index = ((s.last_val + 1) * s.mul_count) >> 32;
-            int current_mul = s.i ? FFABS(s.mul[current_mul_index]) : 1;
             int64_t delta = 0;
             av_assert2(s.last_val < val);
             av_assert2(current_mul > 0);
@@ -1349,14 +1351,16 @@ static int encode_float32_remap_segment(FFV1SliceContext *sc, Unit unit[4][65536
             }
             av_assert2(s.last_val < val);
             if (s.lu) {
-                s.index_stack[s.run] = current_mul_index;
+                s.index_stack[s.run] = s.current_mul_index;
                 av_assert2(s.run < FF_ARRAY_ELEMS(s.delta_stack));
                 if (val - s.last_val == 1) {
                     s.delta_stack[s.run] = delta;
                     s.run ++;
+                    av_assert2(s.i == s.pixel_num || s.last_val + current_mul + delta == unit[s.p][s.i].val);
                     s.last_val += current_mul + delta;
                 } else {
                     put_symbol_inline(&s.rc, s.state[s.lu][0], s.run, 0, NULL, NULL);
+
                     for(int k=0; k<s.run; k++) {
                         int stack_mul = s.mul[ s.index_stack[k] ];
                         if (stack_mul>1)
@@ -1373,14 +1377,19 @@ static int encode_float32_remap_segment(FFV1SliceContext *sc, Unit unit[4][65536
             } else {
                 av_assert2(s.run == 0);
                 put_symbol_inline(&s.rc, s.state[s.lu][0], val - s.last_val - 1, 0, NULL, NULL);
+
                 if (current_mul > 1)
                     put_symbol_inline(&s.rc, s.state[s.lu][1], delta, 1, NULL, NULL);
                 if (val - s.last_val == 1)
                     s.lu ^= 1;
-                s.last_val += (val - s.last_val) * current_mul + delta;
 
-                encode_mul(&s, ((s.last_val + 1) * s.mul_count) >> 32);
+                av_assert2(s.i == s.pixel_num || s.last_val + (val - s.last_val) * current_mul + delta == unit[s.p][s.i].val);
+                if (s.i < s.pixel_num)
+                    s.last_val = unit[s.p][s.i].val;
             }
+            s.current_mul_index = ((s.last_val + 1) * s.mul_count) >> 32;
+            if (!s.run)
+                encode_mul(&s, s.current_mul_index);
             s.compact_index ++;
         }
         if (final && s.i < s.pixel_num)
-- 
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".