From: Paul B Mahol <onemda@gmail.com>
To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
Subject: Re: [FFmpeg-devel] [PATCH] fate: add rpza encoder tests
Date: Thu, 7 Sep 2023 11:11:51 +0200
Message-ID: <CAPYw7P6QROFXB0abqRsQwNROR7u6UZzHaUdk31=Ywmu4OJyY6g@mail.gmail.com> (raw)
In-Reply-To: <CAPYw7P5_k8tJCxe5D5H6mYvoMJP38GLhyTvCVuMpBeG=juGdeg@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 125 bytes --]
Attached. Now without floats.
On Thu, Sep 7, 2023 at 10:10 AM Paul B Mahol <onemda@gmail.com> wrote:
> Attached.
>
[-- Attachment #2: 0002-fate-add-rpza-encoder-tests.patch --]
[-- Type: text/x-patch, Size: 2578 bytes --]
From 5e9d20d393659c1c94ac328237699c3aa65f3ac9 Mon Sep 17 00:00:00 2001
From: Paul B Mahol <onemda@gmail.com>
Date: Thu, 7 Sep 2023 10:08:30 +0200
Subject: [PATCH 2/2] fate: add rpza encoder tests
Signed-off-by: Paul B Mahol <onemda@gmail.com>
---
tests/fate/vcodec.mak | 4 ++++
tests/ref/vsynth/vsynth1-rpza | 4 ++++
tests/ref/vsynth/vsynth2-rpza | 4 ++++
tests/ref/vsynth/vsynth3-rpza | 4 ++++
4 files changed, 16 insertions(+)
create mode 100644 tests/ref/vsynth/vsynth1-rpza
create mode 100644 tests/ref/vsynth/vsynth2-rpza
create mode 100644 tests/ref/vsynth/vsynth3-rpza
diff --git a/tests/fate/vcodec.mak b/tests/fate/vcodec.mak
index e32d28c556..45ed88da96 100644
--- a/tests/fate/vcodec.mak
+++ b/tests/fate/vcodec.mak
@@ -396,6 +396,10 @@ fate-vsynth%-roqvideo: ENCOPTS = -frames 5
fate-vsynth%-roqvideo: RAWDECOPTS = -r 30
fate-vsynth%-roqvideo: FMT = roq
+FATE_VCODEC_SCALE-$(call ENCDEC, RPZA, MOV) += rpza
+fate-vsynth%-rpza: CODEC = rpza
+fate-vsynth%-rpza: FMT = mov
+
FATE_VCODEC-$(call ENCDEC, RV10, RM) += rv10
fate-vsynth%-rv10: ENCOPTS = -qscale 10
fate-vsynth%-rv10: FMT = rm
diff --git a/tests/ref/vsynth/vsynth1-rpza b/tests/ref/vsynth/vsynth1-rpza
new file mode 100644
index 0000000000..b238b245d3
--- /dev/null
+++ b/tests/ref/vsynth/vsynth1-rpza
@@ -0,0 +1,4 @@
+e4e9660c4a13709b277aac42419b9a23 *tests/data/fate/vsynth1-rpza.mov
+10138529 tests/data/fate/vsynth1-rpza.mov
+99bece160cfb0da47f446b60d42fa3ae *tests/data/fate/vsynth1-rpza.out.rawvideo
+stddev: 4.06 PSNR: 35.94 MAXDIFF: 47 bytes: 7603200/ 7603200
diff --git a/tests/ref/vsynth/vsynth2-rpza b/tests/ref/vsynth/vsynth2-rpza
new file mode 100644
index 0000000000..847844f384
--- /dev/null
+++ b/tests/ref/vsynth/vsynth2-rpza
@@ -0,0 +1,4 @@
+e7c5b381214556507f64052ba26ccb68 *tests/data/fate/vsynth2-rpza.mov
+9975182 tests/data/fate/vsynth2-rpza.mov
+eb3f0c974ed17ede7cd3ce30ce417d8d *tests/data/fate/vsynth2-rpza.out.rawvideo
+stddev: 2.81 PSNR: 39.14 MAXDIFF: 19 bytes: 7603200/ 7603200
diff --git a/tests/ref/vsynth/vsynth3-rpza b/tests/ref/vsynth/vsynth3-rpza
new file mode 100644
index 0000000000..c933a44c4b
--- /dev/null
+++ b/tests/ref/vsynth/vsynth3-rpza
@@ -0,0 +1,4 @@
+791ad5931c5d54eff406c639be0c79e2 *tests/data/fate/vsynth3-rpza.mov
+130493 tests/data/fate/vsynth3-rpza.mov
+19f61c34cbdef98b0f4aca6c19f59ed4 *tests/data/fate/vsynth3-rpza.out.rawvideo
+stddev: 4.35 PSNR: 35.35 MAXDIFF: 46 bytes: 86700/ 86700
--
2.39.1
[-- Attachment #3: 0001-avcodec-rpzaenc-replace-float-point-calculations-wit.patch --]
[-- Type: text/x-patch, Size: 3687 bytes --]
From 8c2df35828b5b15a1c9915b118a8f8ad6ba08ee6 Mon Sep 17 00:00:00 2001
From: Paul B Mahol <onemda@gmail.com>
Date: Thu, 7 Sep 2023 11:00:38 +0200
Subject: [PATCH 1/2] avcodec/rpzaenc: replace float-point calculations with
integer ones
Signed-off-by: Paul B Mahol <onemda@gmail.com>
---
libavcodec/rpzaenc.c | 21 +++++++++++----------
1 file changed, 11 insertions(+), 10 deletions(-)
diff --git a/libavcodec/rpzaenc.c b/libavcodec/rpzaenc.c
index a399d55c93..9da929718a 100644
--- a/libavcodec/rpzaenc.c
+++ b/libavcodec/rpzaenc.c
@@ -30,6 +30,7 @@
#include "avcodec.h"
#include "codec_internal.h"
#include "encode.h"
+#include "mathops.h"
#include "put_bits.h"
typedef struct RpzaContext {
@@ -266,9 +267,9 @@ static int compare_blocks(const uint16_t *block1, const uint16_t *block2,
*/
static int leastsquares(const uint16_t *block_ptr, const BlockInfo *bi,
channel_offset xchannel, channel_offset ychannel,
- double *slope, double *y_intercept, double *correlation_coef)
+ int *slope, int *y_intercept, int *correlation_coef)
{
- double sumx = 0, sumy = 0, sumx2 = 0, sumy2 = 0, sumxy = 0,
+ int sumx = 0, sumy = 0, sumx2 = 0, sumy2 = 0, sumxy = 0,
sumx_sq = 0, sumy_sq = 0, tmp, tmp2;
int i, j, count;
uint8_t x, y;
@@ -305,10 +306,10 @@ static int leastsquares(const uint16_t *block_ptr, const BlockInfo *bi,
tmp2 = count * sumy2 - sumy_sq;
if (tmp2 == 0) {
- *correlation_coef = 0.0;
+ *correlation_coef = 0;
} else {
*correlation_coef = (count * sumxy - sumx * sumy) /
- sqrt(tmp * tmp2);
+ ff_sqrt(tmp * tmp2);
}
return 0; // success
@@ -332,18 +333,18 @@ static int calc_lsq_max_fit_error(const uint16_t *block_ptr, const BlockInfo *bi
y = GET_CHAN(block_ptr[j], ychannel);
/* calculate x_inc as the 4-color index (0..3) */
- x_inc = floor( (x - min) * 3.0 / (max - min) + 0.5);
+ x_inc = (x - min) * 3 / (max - min) + 1;
x_inc = FFMAX(FFMIN(3, x_inc), 0);
/* calculate lin_y corresponding to x_inc */
- lin_y = (int)(tmp_min + (tmp_max - tmp_min) * x_inc / 3.0 + 0.5);
+ lin_y = tmp_min + (tmp_max - tmp_min) * x_inc / 3 + 1;
err = FFABS(lin_y - y);
if (err > max_err)
max_err = err;
/* calculate lin_x corresponding to x_inc */
- lin_x = (int)(min + (max - min) * x_inc / 3.0 + 0.5);
+ lin_x = min + (max - min) * x_inc / 3 + 1;
err = FFABS(lin_x - x);
if (err > max_err)
@@ -577,7 +578,7 @@ static void rpza_encode_stream(RpzaContext *s, const AVFrame *pict)
uint8_t avg_color[3];
int pixel_count;
uint8_t min_color[3], max_color[3];
- double slope, y_intercept, correlation_coef;
+ int slope, y_intercept, correlation_coef;
const uint16_t *src_pixels = (const uint16_t *)pict->data[0];
uint16_t *prev_pixels = (uint16_t *)s->prev_frame->data[0];
@@ -730,8 +731,8 @@ post_skip :
min_color[i] = GET_CHAN(src_pixels[block_offset], i);
max_color[i] = GET_CHAN(src_pixels[block_offset], i);
} else {
- tmp_min = (int)(0.5 + min * slope + y_intercept);
- tmp_max = (int)(0.5 + max * slope + y_intercept);
+ tmp_min = 1 + min * slope + y_intercept;
+ tmp_max = 1 + max * slope + y_intercept;
av_assert0(tmp_min <= tmp_max);
// clamp min and max color values
--
2.39.1
[-- Attachment #4: Type: text/plain, Size: 251 bytes --]
_______________________________________________
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".
prev parent reply other threads:[~2023-09-07 9:04 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-07 8:10 Paul B Mahol
2023-09-07 8:23 ` Andreas Rheinhardt
2023-09-07 9:11 ` Paul B Mahol [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAPYw7P6QROFXB0abqRsQwNROR7u6UZzHaUdk31=Ywmu4OJyY6g@mail.gmail.com' \
--to=onemda@gmail.com \
--cc=ffmpeg-devel@ffmpeg.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
This inbox may be cloned and mirrored by anyone:
git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
ffmpegdev@gitmailbox.com
public-inbox-index ffmpegdev
Example config snippet for mirrors.
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git