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".