From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 0730340EDA for ; Sat, 18 Jan 2025 05:00:49 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 37D0268B851; Sat, 18 Jan 2025 07:00:13 +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 F144E68B0F4 for ; Sat, 18 Jan 2025 07:00:04 +0200 (EET) Received: by mail.gandi.net (Postfix) with ESMTPSA id 4B8961C0002 for ; Sat, 18 Jan 2025 05:00:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=niedermayer.cc; s=gm1; t=1737176404; 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=cbsg3cHRxWvFIfS0UOZIocIkfhau9gYxk0znRQeLPLY=; b=H4JawkwU6P5ue3casKMdIAG/milHWLhgiDnfa4FL9vG2WTRKHDK0wgH2bTnwpnyPqvQW/8 8D79QEME9qd40x6+TCwXr5XaGPcTHi3pgEKsy1213x1+1R6IbUpFvGM87SidLJKGljwS9k I4cqVWQ7IW0uisR3EGyzKFUuns20ABJot4uYXHvv8LdjcPdkNaaO5wrUfEbethALrWeS5q +EKPX0j5JKWc2tO1vshUh0+mDGkVimYhej13f8EALaQZNoVzsGk87yaqmq99CrLyucI3WT O3CxEr7Na80fRIYUICliuPd5qEHGsnMZOztXoTmo5KbFe6F8A0iq4sg/FcuoDg== From: Michael Niedermayer To: FFmpeg development discussions and patches Date: Sat, 18 Jan 2025 06:00:00 +0100 Message-ID: <20250118050001.1809058-4-michael@niedermayer.cc> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250118050001.1809058-1-michael@niedermayer.cc> References: <20250118050001.1809058-1-michael@niedermayer.cc> MIME-Version: 1.0 X-GND-Sasl: michael@niedermayer.cc Subject: [FFmpeg-devel] [PATCH 4/4] avcodec/ffv1: NOT FOR GIT, experiment about float decorrelation 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: This performs a tiny bit better than not using it but it is incompatible with the RCT which gives a bigger gain Sponsored-by: Sovereign Tech Fund Signed-off-by: Michael Niedermayer --- libavcodec/ffv1.h | 20 ++++++++++++++++++++ libavcodec/ffv1enc_template.c | 33 ++++++++++++++++++++++++--------- 2 files changed, 44 insertions(+), 9 deletions(-) diff --git a/libavcodec/ffv1.h b/libavcodec/ffv1.h index 2c2df154037..84a443613df 100644 --- a/libavcodec/ffv1.h +++ b/libavcodec/ffv1.h @@ -196,6 +196,26 @@ static av_always_inline int fold(int diff, int bits) return diff; } +// We treat infinite as a big number, 0 as a small non 0 number, this is close enough, we ignore denormal numbers +static av_always_inline int64_t f2i(uint16_t f) +{ + int s = -(f>>15); + int64_t v = (1024L + (f & 1023)) << ((f & 0x7C00) >> 10); + return (v + s) ^ s; +} + +//undo above +static av_always_inline uint16_t i2f(int64_t v) +{ + int s = v>>63; + int e; + v = (v + s) ^ s; + + e = av_log2(v>>10); + + return (s&32768) + (e<<10) + ((v + (1U<> e) - 1024; +} + static inline void update_vlc_state(VlcState *const state, const int v) { int drift = state->drift; diff --git a/libavcodec/ffv1enc_template.c b/libavcodec/ffv1enc_template.c index bc14926ab95..12d519320c0 100644 --- a/libavcodec/ffv1enc_template.c +++ b/libavcodec/ffv1enc_template.c @@ -64,7 +64,13 @@ RENAME(encode_line)(FFV1Context *f, FFV1SliceContext *sc, context = RENAME(get_context)(f->quant_tables[p->quant_table_index], sample[0] + x, sample[1] + x, sample[2] + x); - diff = sample[0][x] - RENAME(predict)(sample[0] + x, sample[1] + x); + + int64_t L = f2i(sample[0][x-1]); + int64_t T = f2i(sample[1][x]); + int64_t LT = f2i(sample[1][x-1]); + + diff = sample[0][x] - mid_pred(i2f(L), i2f(L + T - LT), i2f(T)); +// diff = sample[0][x] - RENAME(predict)(sample[0] + x, sample[1] + x); if (context < 0) { context = -context; @@ -147,7 +153,16 @@ static int RENAME(encode_rgb_frame)(FFV1Context *f, FFV1SliceContext *sc, memset(RENAME(sc->sample_buffer), 0, ring_size * MAX_PLANES * (w + 6) * sizeof(*RENAME(sc->sample_buffer))); - + if(0){ + int v; + for (v = 0; v<65536; v++) { + int64_t i = f2i(v); + int v2 = i2f(i); + if (v != v2) + av_log(0,0, "D %X %X %LX\n", v, v2, i); + av_assert0(v2 == v); + } + } for (y = 0; y < h; y++) { for (i = 0; i < ring_size; i++) for (p = 0; p < MAX_PLANES; p++) @@ -180,13 +195,13 @@ static int RENAME(encode_rgb_frame)(FFV1Context *f, FFV1SliceContext *sc, r = *((const uint16_t *)(src[2] + x*2 + stride[2]*y)); } - if (sc->slice_coding_mode != 1) { - b -= g; - r -= g; - g += (b * sc->slice_rct_by_coef + r * sc->slice_rct_ry_coef) >> 2; - b += offset; - r += offset; - } +// if (sc->slice_coding_mode != 1) { +// b -= g; +// r -= g; +// g += (b * sc->slice_rct_by_coef + r * sc->slice_rct_ry_coef) >> 2; +// b += offset; +// r += offset; +// } sample[0][0][x] = g; sample[1][0][x] = b; -- 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".