* [FFmpeg-devel] [PATCH 1/4] avcodec/ffv1enc: add space for the remap table to max_size
@ 2025-03-09 22:58 Michael Niedermayer
2025-03-09 22:58 ` [FFmpeg-devel] [PATCH 2/4] avcodec/ffv1enc: Fix slice coding mode 1 with rgb frames Michael Niedermayer
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Michael Niedermayer @ 2025-03-09 22:58 UTC (permalink / raw)
To: FFmpeg development discussions and patches
Sponsored-by: Sovereign Tech Fund
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
---
libavcodec/ffv1enc.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/libavcodec/ffv1enc.c b/libavcodec/ffv1enc.c
index b4080f29002..7c73ff12c2f 100644
--- a/libavcodec/ffv1enc.c
+++ b/libavcodec/ffv1enc.c
@@ -1211,7 +1211,8 @@ size_t ff_ffv1_encode_buffer_size(AVCodecContext *avctx)
size_t maxsize = avctx->width*avctx->height * (1 + f->transparency);
if (f->chroma_planes)
maxsize += AV_CEIL_RSHIFT(avctx->width, f->chroma_h_shift) * AV_CEIL_RSHIFT(f->height, f->chroma_v_shift) * 2;
- maxsize += f->slice_count * 800; //for slice header
+ maxsize += f->slice_count * 800; //for slice header and
+ maxsize += f->slice_count * 9000 * !!f->flt; //remap table
if (f->version > 3) {
maxsize *= f->bits_per_raw_sample + 1;
} else {
--
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".
^ permalink raw reply [flat|nested] 8+ messages in thread
* [FFmpeg-devel] [PATCH 2/4] avcodec/ffv1enc: Fix slice coding mode 1 with rgb frames
2025-03-09 22:58 [FFmpeg-devel] [PATCH 1/4] avcodec/ffv1enc: add space for the remap table to max_size Michael Niedermayer
@ 2025-03-09 22:58 ` Michael Niedermayer
2025-03-11 0:53 ` Michael Niedermayer
2025-03-09 22:58 ` [FFmpeg-devel] [PATCH 3/4] avcodec/ffv1: Fix remap and float with golomb rice Michael Niedermayer
2025-03-09 22:58 ` [FFmpeg-devel] [PATCH 4/4] avcodec/ffv1enc_template: Be a bit more verbose on error Michael Niedermayer
2 siblings, 1 reply; 8+ messages in thread
From: Michael Niedermayer @ 2025-03-09 22:58 UTC (permalink / raw)
To: FFmpeg development discussions and patches
Sponsored-by: Sovereign Tech Fund
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
---
libavcodec/ffv1enc.c | 4 ++--
libavcodec/ffv1enc_template.c | 37 +++++++++++++++++++++++++++++++++--
2 files changed, 37 insertions(+), 4 deletions(-)
diff --git a/libavcodec/ffv1enc.c b/libavcodec/ffv1enc.c
index 7c73ff12c2f..11753386724 100644
--- a/libavcodec/ffv1enc.c
+++ b/libavcodec/ffv1enc.c
@@ -1176,9 +1176,9 @@ retry:
ret = encode_plane(f, sc, p->data[0] + ps*x + y*p->linesize[0], width, height, p->linesize[0], 0, 2, ac);
ret |= encode_plane(f, sc, p->data[0] + 1 + ps*x + y*p->linesize[0], width, height, p->linesize[0], 1, 2, ac);
} else if (f->use32bit) {
- ret = encode_rgb_frame32(f, sc, planes, width, height, p->linesize);
+ ret = encode_rgb_frame32(f, sc, planes, width, height, p->linesize, ac);
} else {
- ret = encode_rgb_frame(f, sc, planes, width, height, p->linesize);
+ ret = encode_rgb_frame(f, sc, planes, width, height, p->linesize, ac);
}
if (ac != AC_GOLOMB_RICE) {
diff --git a/libavcodec/ffv1enc_template.c b/libavcodec/ffv1enc_template.c
index 9e1252010dd..8cc8876411b 100644
--- a/libavcodec/ffv1enc_template.c
+++ b/libavcodec/ffv1enc_template.c
@@ -143,14 +143,47 @@ RENAME(encode_line)(FFV1Context *f, FFV1SliceContext *sc,
return 0;
}
+static void RENAME(load_rgb_frame)(FFV1Context *f, FFV1SliceContext *sc,
+ const uint8_t *src[4],
+ int w, int h, const int stride[4])
+{
+ int x, y;
+ int transparency = f->transparency;
+
+ memset(sc->fltmap, 0, sizeof(sc->fltmap));
+
+ for (y = 0; y < h; y++) {
+ for (x = 0; x < w; x++) {
+ int b, g, r, av_uninit(a);
+
+ if (sizeof(TYPE) == 4 || transparency) {
+ g = *((const uint16_t *)(src[0] + x*2 + stride[0]*y));
+ b = *((const uint16_t *)(src[1] + x*2 + stride[1]*y));
+ r = *((const uint16_t *)(src[2] + x*2 + stride[2]*y));
+ if (transparency)
+ a = *((const uint16_t *)(src[3] + x*2 + stride[3]*y));
+ } else {
+ b = *((const uint16_t *)(src[0] + x*2 + stride[0]*y));
+ g = *((const uint16_t *)(src[1] + x*2 + stride[1]*y));
+ r = *((const uint16_t *)(src[2] + x*2 + stride[2]*y));
+ }
+
+ sc->fltmap[0][r] = 1;
+ sc->fltmap[1][g] = 1;
+ sc->fltmap[2][b] = 1;
+ if (transparency)
+ sc->fltmap[3][a] = 1;
+ }
+ }
+}
+
static int RENAME(encode_rgb_frame)(FFV1Context *f, FFV1SliceContext *sc,
const uint8_t *src[4],
- int w, int h, const int stride[4])
+ int w, int h, const int stride[4], int ac)
{
int x, y, p, i;
const int ring_size = f->context_model ? 3 : 2;
TYPE *sample[4][3];
- const int ac = f->ac;
const int pass1 = !!(f->avctx->flags & AV_CODEC_FLAG_PASS1);
int lbd = f->bits_per_raw_sample <= 8;
int packed = !src[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".
^ permalink raw reply [flat|nested] 8+ messages in thread
* [FFmpeg-devel] [PATCH 3/4] avcodec/ffv1: Fix remap and float with golomb rice
2025-03-09 22:58 [FFmpeg-devel] [PATCH 1/4] avcodec/ffv1enc: add space for the remap table to max_size Michael Niedermayer
2025-03-09 22:58 ` [FFmpeg-devel] [PATCH 2/4] avcodec/ffv1enc: Fix slice coding mode 1 with rgb frames Michael Niedermayer
@ 2025-03-09 22:58 ` Michael Niedermayer
2025-03-10 18:41 ` Lynne
2025-03-09 22:58 ` [FFmpeg-devel] [PATCH 4/4] avcodec/ffv1enc_template: Be a bit more verbose on error Michael Niedermayer
2 siblings, 1 reply; 8+ messages in thread
From: Michael Niedermayer @ 2025-03-09 22:58 UTC (permalink / raw)
To: FFmpeg development discussions and patches
Sponsored-by: Sovereign Tech Fund
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
---
libavcodec/ffv1dec.c | 37 +++++++++++++++++++++++++
libavcodec/ffv1dec_template.c | 27 ------------------
libavcodec/ffv1enc.c | 42 ++++++++++++++++++++++++++++
libavcodec/ffv1enc_template.c | 52 -----------------------------------
4 files changed, 79 insertions(+), 79 deletions(-)
diff --git a/libavcodec/ffv1dec.c b/libavcodec/ffv1dec.c
index 49a363208db..9738e4e9c9f 100644
--- a/libavcodec/ffv1dec.c
+++ b/libavcodec/ffv1dec.c
@@ -244,6 +244,37 @@ static void slice_set_damaged(FFV1Context *f, FFV1SliceContext *sc)
f->frame_damaged = 1;
}
+static int decode_remap(FFV1Context *f, FFV1SliceContext *sc)
+{
+ int transparency = f->transparency;
+
+ for (int p= 0; p<3 + transparency; p++) {
+ int j = 0;
+ int lu = 0;
+ uint8_t state[2][32];
+ memset(state, 128, sizeof(state));
+
+ for (int i= 0; i<65536; i++) {
+ int run = get_symbol_inline(&sc->c, state[lu], 0);
+ if (run > 65536U - i)
+ return AVERROR_INVALIDDATA;
+ if (lu) {
+ lu ^= !run;
+ while (run--) {
+ sc->fltmap[p][j++] = i ^ ((i&0x8000) ? 0 : 0x7FFF);
+ i++;
+ }
+ } else {
+ i += run;
+ if (i != 65536)
+ sc->fltmap[p][j++] = i ^ ((i&0x8000) ? 0 : 0x7FFF);
+ lu ^= !run;
+ }
+ }
+ }
+ return 0;
+}
+
static int decode_slice(AVCodecContext *c, void *arg)
{
FFV1Context *f = c->priv_data;
@@ -289,6 +320,12 @@ static int decode_slice(AVCodecContext *c, void *arg)
chroma_width = AV_CEIL_RSHIFT(width, f->chroma_h_shift);
chroma_height = AV_CEIL_RSHIFT(height, f->chroma_v_shift);
+ if (sc->remap) {
+ ret = decode_remap(f, sc);
+ if (ret < 0)
+ return ret;
+ }
+
if (ac == AC_GOLOMB_RICE) {
if (f->combined_version >= 0x30002)
get_rac(&sc->c, (uint8_t[]) { 129 });
diff --git a/libavcodec/ffv1dec_template.c b/libavcodec/ffv1dec_template.c
index 818f12f865d..f9499931b1d 100644
--- a/libavcodec/ffv1dec_template.c
+++ b/libavcodec/ffv1dec_template.c
@@ -167,33 +167,6 @@ static int RENAME(decode_rgb_frame)(FFV1Context *f, FFV1SliceContext *sc,
memset(RENAME(sc->sample_buffer), 0, 8 * (w + 6) * sizeof(*RENAME(sc->sample_buffer)));
- if (sc->remap) {
- for (int p= 0; p<3 + transparency; p++) {
- int j = 0;
- int lu = 0;
- uint8_t state[2][32];
- memset(state, 128, sizeof(state));
-
- for (int i= 0; i<65536; i++) {
- int run = get_symbol_inline(&sc->c, state[lu], 0);
- if (run > 65536U - i)
- return AVERROR_INVALIDDATA;
- if (lu) {
- lu ^= !run;
- while (run--) {
- sc->fltmap[p][j++] = i ^ ((i&0x8000) ? 0 : 0x7FFF);
- i++;
- }
- } else {
- i += run;
- if (i != 65536)
- sc->fltmap[p][j++] = i ^ ((i&0x8000) ? 0 : 0x7FFF);
- lu ^= !run;
- }
- }
- }
- }
-
for (y = 0; y < h; y++) {
for (p = 0; p < 3 + transparency; p++) {
int ret;
diff --git a/libavcodec/ffv1enc.c b/libavcodec/ffv1enc.c
index 11753386724..f3041219b71 100644
--- a/libavcodec/ffv1enc.c
+++ b/libavcodec/ffv1enc.c
@@ -1110,6 +1110,36 @@ static void choose_rct_params(const FFV1Context *f, FFV1SliceContext *sc,
sc->slice_rct_ry_coef = rct_y_coeff[best][0];
}
+static void encode_remap(FFV1Context *f, FFV1SliceContext *sc)
+{
+ int transparency = f->transparency;
+
+ for (int p= 0; p<3 + transparency; p++) {
+ int j = 0;
+ int lu = 0;
+ uint8_t state[2][32];
+ int run = 0;
+ memset(state, 128, sizeof(state));
+ for (int i= 0; i<65536; i++) {
+ int ri = i ^ ((i&0x8000) ? 0 : 0x7FFF);
+ int u = sc->fltmap[p][ri];
+ sc->fltmap[p][ri] = j;
+ j+= u;
+
+ if (lu == u) {
+ run ++;
+ } else {
+ put_symbol_inline(&sc->c, state[lu], run, 0, NULL, NULL);
+ if (run == 0)
+ lu = u;
+ run = 0;
+ }
+ }
+ if (run)
+ put_symbol(&sc->c, state[lu], run, 0);
+ }
+}
+
static int encode_slice(AVCodecContext *c, void *arg)
{
FFV1SliceContext *sc = arg;
@@ -1146,6 +1176,18 @@ retry:
if (f->version > 2) {
encode_slice_header(f, sc);
}
+
+ if (sc->remap) {
+ if (f->colorspace == 0) {
+ av_assert0(0);
+ } else if (f->use32bit) {
+ load_rgb_frame32(f, sc, planes, width, height, p->linesize);
+ } else
+ load_rgb_frame (f, sc, planes, width, height, p->linesize);
+
+ encode_remap(f, sc);
+ }
+
if (ac == AC_GOLOMB_RICE) {
sc->ac_byte_count = f->version > 2 || (!x && !y) ? ff_rac_terminate(&sc->c, f->version > 2) : 0;
init_put_bits(&sc->pb,
diff --git a/libavcodec/ffv1enc_template.c b/libavcodec/ffv1enc_template.c
index 8cc8876411b..d8160282b2e 100644
--- a/libavcodec/ffv1enc_template.c
+++ b/libavcodec/ffv1enc_template.c
@@ -197,58 +197,6 @@ 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 (sc->remap) {
- memset(sc->fltmap, 0, sizeof(sc->fltmap));
-
- for (y = 0; y < h; y++) {
- for (x = 0; x < w; x++) {
- int b, g, r, av_uninit(a);
-
- if (sizeof(TYPE) == 4 || transparency) {
- g = *((const uint16_t *)(src[0] + x*2 + stride[0]*y));
- b = *((const uint16_t *)(src[1] + x*2 + stride[1]*y));
- r = *((const uint16_t *)(src[2] + x*2 + stride[2]*y));
- if (transparency)
- a = *((const uint16_t *)(src[3] + x*2 + stride[3]*y));
- } else {
- b = *((const uint16_t *)(src[0] + x*2 + stride[0]*y));
- g = *((const uint16_t *)(src[1] + x*2 + stride[1]*y));
- r = *((const uint16_t *)(src[2] + x*2 + stride[2]*y));
- }
-
- sc->fltmap[0][r] = 1;
- sc->fltmap[1][g] = 1;
- sc->fltmap[2][b] = 1;
- if (transparency)
- sc->fltmap[3][a] = 1;
- }
- }
- for (int p= 0; p<3 + transparency; p++) {
- int j = 0;
- int lu = 0;
- uint8_t state[2][32];
- int run = 0;
- memset(state, 128, sizeof(state));
- for (int i= 0; i<65536; i++) {
- int ri = i ^ ((i&0x8000) ? 0 : 0x7FFF);
- int u = sc->fltmap[p][ri];
- sc->fltmap[p][ri] = j;
- j+= u;
-
- if (lu == u) {
- run ++;
- } else {
- put_symbol_inline(&sc->c, state[lu], run, 0, NULL, NULL);
- if (run == 0)
- lu = u;
- run = 0;
- }
- }
- if (run)
- put_symbol(&sc->c, state[lu], run, 0);
- }
- }
-
for (y = 0; y < h; y++) {
for (i = 0; i < ring_size; i++)
for (p = 0; p < MAX_PLANES; p++)
--
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".
^ permalink raw reply [flat|nested] 8+ messages in thread
* [FFmpeg-devel] [PATCH 4/4] avcodec/ffv1enc_template: Be a bit more verbose on error
2025-03-09 22:58 [FFmpeg-devel] [PATCH 1/4] avcodec/ffv1enc: add space for the remap table to max_size Michael Niedermayer
2025-03-09 22:58 ` [FFmpeg-devel] [PATCH 2/4] avcodec/ffv1enc: Fix slice coding mode 1 with rgb frames Michael Niedermayer
2025-03-09 22:58 ` [FFmpeg-devel] [PATCH 3/4] avcodec/ffv1: Fix remap and float with golomb rice Michael Niedermayer
@ 2025-03-09 22:58 ` Michael Niedermayer
2025-03-11 0:54 ` Michael Niedermayer
2 siblings, 1 reply; 8+ messages in thread
From: Michael Niedermayer @ 2025-03-09 22:58 UTC (permalink / raw)
To: FFmpeg development discussions and patches
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
---
libavcodec/ffv1enc_template.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/libavcodec/ffv1enc_template.c b/libavcodec/ffv1enc_template.c
index d8160282b2e..8b2d938770f 100644
--- a/libavcodec/ffv1enc_template.c
+++ b/libavcodec/ffv1enc_template.c
@@ -39,12 +39,12 @@ RENAME(encode_line)(FFV1Context *f, FFV1SliceContext *sc,
if (ac != AC_GOLOMB_RICE) {
if (c->bytestream_end - c->bytestream < w * 35) {
- av_log(logctx, AV_LOG_ERROR, "encoded frame too large\n");
+ av_log(logctx, AV_LOG_ERROR, "encoded Range Coder frame too large\n");
return AVERROR_INVALIDDATA;
}
} else {
if (put_bytes_left(&sc->pb, 0) < w * 4) {
- av_log(logctx, AV_LOG_ERROR, "encoded frame too large\n");
+ av_log(logctx, AV_LOG_ERROR, "encoded Golomb Rice frame too large\n");
return AVERROR_INVALIDDATA;
}
}
--
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".
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [FFmpeg-devel] [PATCH 3/4] avcodec/ffv1: Fix remap and float with golomb rice
2025-03-09 22:58 ` [FFmpeg-devel] [PATCH 3/4] avcodec/ffv1: Fix remap and float with golomb rice Michael Niedermayer
@ 2025-03-10 18:41 ` Lynne
2025-03-11 0:52 ` Michael Niedermayer
0 siblings, 1 reply; 8+ messages in thread
From: Lynne @ 2025-03-10 18:41 UTC (permalink / raw)
To: ffmpeg-devel
On 09/03/2025 23:58, Michael Niedermayer wrote:
> Sponsored-by: Sovereign Tech Fund
> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
> ---
> libavcodec/ffv1dec.c | 37 +++++++++++++++++++++++++
> libavcodec/ffv1dec_template.c | 27 ------------------
> libavcodec/ffv1enc.c | 42 ++++++++++++++++++++++++++++
> libavcodec/ffv1enc_template.c | 52 -----------------------------------
> 4 files changed, 79 insertions(+), 79 deletions(-)
>
> diff --git a/libavcodec/ffv1dec.c b/libavcodec/ffv1dec.c
> index 49a363208db..9738e4e9c9f 100644
> --- a/libavcodec/ffv1dec.c
> +++ b/libavcodec/ffv1dec.c
> @@ -244,6 +244,37 @@ static void slice_set_damaged(FFV1Context *f, FFV1SliceContext *sc)
> f->frame_damaged = 1;
> }
>
> +static int decode_remap(FFV1Context *f, FFV1SliceContext *sc)
> +{
> + int transparency = f->transparency;
> +
> + for (int p= 0; p<3 + transparency; p++) {
> + int j = 0;
> + int lu = 0;
> + uint8_t state[2][32];
> + memset(state, 128, sizeof(state));
> +
> + for (int i= 0; i<65536; i++) {
> + int run = get_symbol_inline(&sc->c, state[lu], 0);
> + if (run > 65536U - i)
> + return AVERROR_INVALIDDATA;
> + if (lu) {
> + lu ^= !run;
> + while (run--) {
> + sc->fltmap[p][j++] = i ^ ((i&0x8000) ? 0 : 0x7FFF);
> + i++;
> + }
> + } else {
> + i += run;
> + if (i != 65536)
> + sc->fltmap[p][j++] = i ^ ((i&0x8000) ? 0 : 0x7FFF);
> + lu ^= !run;
> + }
> + }
> + }
> + return 0;
> +}
> +
> static int decode_slice(AVCodecContext *c, void *arg)
> {
> FFV1Context *f = c->priv_data;
> @@ -289,6 +320,12 @@ static int decode_slice(AVCodecContext *c, void *arg)
> chroma_width = AV_CEIL_RSHIFT(width, f->chroma_h_shift);
> chroma_height = AV_CEIL_RSHIFT(height, f->chroma_v_shift);
>
> + if (sc->remap) {
> + ret = decode_remap(f, sc);
> + if (ret < 0)
> + return ret;
> + }
> +
> if (ac == AC_GOLOMB_RICE) {
> if (f->combined_version >= 0x30002)
> get_rac(&sc->c, (uint8_t[]) { 129 });
> diff --git a/libavcodec/ffv1dec_template.c b/libavcodec/ffv1dec_template.c
> index 818f12f865d..f9499931b1d 100644
> --- a/libavcodec/ffv1dec_template.c
> +++ b/libavcodec/ffv1dec_template.c
> @@ -167,33 +167,6 @@ static int RENAME(decode_rgb_frame)(FFV1Context *f, FFV1SliceContext *sc,
>
> memset(RENAME(sc->sample_buffer), 0, 8 * (w + 6) * sizeof(*RENAME(sc->sample_buffer)));
>
> - if (sc->remap) {
> - for (int p= 0; p<3 + transparency; p++) {
> - int j = 0;
> - int lu = 0;
> - uint8_t state[2][32];
> - memset(state, 128, sizeof(state));
> -
> - for (int i= 0; i<65536; i++) {
> - int run = get_symbol_inline(&sc->c, state[lu], 0);
> - if (run > 65536U - i)
> - return AVERROR_INVALIDDATA;
> - if (lu) {
> - lu ^= !run;
> - while (run--) {
> - sc->fltmap[p][j++] = i ^ ((i&0x8000) ? 0 : 0x7FFF);
> - i++;
> - }
> - } else {
> - i += run;
> - if (i != 65536)
> - sc->fltmap[p][j++] = i ^ ((i&0x8000) ? 0 : 0x7FFF);
> - lu ^= !run;
> - }
> - }
> - }
> - }
> -
> for (y = 0; y < h; y++) {
> for (p = 0; p < 3 + transparency; p++) {
> int ret;
> diff --git a/libavcodec/ffv1enc.c b/libavcodec/ffv1enc.c
> index 11753386724..f3041219b71 100644
> --- a/libavcodec/ffv1enc.c
> +++ b/libavcodec/ffv1enc.c
> @@ -1110,6 +1110,36 @@ static void choose_rct_params(const FFV1Context *f, FFV1SliceContext *sc,
> sc->slice_rct_ry_coef = rct_y_coeff[best][0];
> }
>
> +static void encode_remap(FFV1Context *f, FFV1SliceContext *sc)
> +{
> + int transparency = f->transparency;
> +
> + for (int p= 0; p<3 + transparency; p++) {
> + int j = 0;
> + int lu = 0;
> + uint8_t state[2][32];
> + int run = 0;
> + memset(state, 128, sizeof(state));
> + for (int i= 0; i<65536; i++) {
> + int ri = i ^ ((i&0x8000) ? 0 : 0x7FFF);
> + int u = sc->fltmap[p][ri];
> + sc->fltmap[p][ri] = j;
> + j+= u;
> +
> + if (lu == u) {
> + run ++;
> + } else {
> + put_symbol_inline(&sc->c, state[lu], run, 0, NULL, NULL);
> + if (run == 0)
> + lu = u;
> + run = 0;
> + }
> + }
> + if (run)
> + put_symbol(&sc->c, state[lu], run, 0);
> + }
> +}
> +
> static int encode_slice(AVCodecContext *c, void *arg)
> {
> FFV1SliceContext *sc = arg;
> @@ -1146,6 +1176,18 @@ retry:
> if (f->version > 2) {
> encode_slice_header(f, sc);
> }
> +
> + if (sc->remap) {
> + if (f->colorspace == 0) {
> + av_assert0(0);
> + } else if (f->use32bit) {
> + load_rgb_frame32(f, sc, planes, width, height, p->linesize);
> + } else
> + load_rgb_frame (f, sc, planes, width, height, p->linesize);
> +
> + encode_remap(f, sc);
> + }
> +
> if (ac == AC_GOLOMB_RICE) {
> sc->ac_byte_count = f->version > 2 || (!x && !y) ? ff_rac_terminate(&sc->c, f->version > 2) : 0;
> init_put_bits(&sc->pb,
> diff --git a/libavcodec/ffv1enc_template.c b/libavcodec/ffv1enc_template.c
> index 8cc8876411b..d8160282b2e 100644
> --- a/libavcodec/ffv1enc_template.c
> +++ b/libavcodec/ffv1enc_template.c
> @@ -197,58 +197,6 @@ 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 (sc->remap) {
> - memset(sc->fltmap, 0, sizeof(sc->fltmap));
> -
> - for (y = 0; y < h; y++) {
> - for (x = 0; x < w; x++) {
> - int b, g, r, av_uninit(a);
> -
> - if (sizeof(TYPE) == 4 || transparency) {
> - g = *((const uint16_t *)(src[0] + x*2 + stride[0]*y));
> - b = *((const uint16_t *)(src[1] + x*2 + stride[1]*y));
> - r = *((const uint16_t *)(src[2] + x*2 + stride[2]*y));
> - if (transparency)
> - a = *((const uint16_t *)(src[3] + x*2 + stride[3]*y));
> - } else {
> - b = *((const uint16_t *)(src[0] + x*2 + stride[0]*y));
> - g = *((const uint16_t *)(src[1] + x*2 + stride[1]*y));
> - r = *((const uint16_t *)(src[2] + x*2 + stride[2]*y));
> - }
> -
> - sc->fltmap[0][r] = 1;
> - sc->fltmap[1][g] = 1;
> - sc->fltmap[2][b] = 1;
> - if (transparency)
> - sc->fltmap[3][a] = 1;
> - }
> - }
> - for (int p= 0; p<3 + transparency; p++) {
> - int j = 0;
> - int lu = 0;
> - uint8_t state[2][32];
> - int run = 0;
> - memset(state, 128, sizeof(state));
> - for (int i= 0; i<65536; i++) {
> - int ri = i ^ ((i&0x8000) ? 0 : 0x7FFF);
> - int u = sc->fltmap[p][ri];
> - sc->fltmap[p][ri] = j;
> - j+= u;
> -
> - if (lu == u) {
> - run ++;
> - } else {
> - put_symbol_inline(&sc->c, state[lu], run, 0, NULL, NULL);
> - if (run == 0)
> - lu = u;
> - run = 0;
> - }
> - }
> - if (run)
> - put_symbol(&sc->c, state[lu], run, 0);
> - }
> - }
> -
> for (y = 0; y < h; y++) {
> for (i = 0; i < ring_size; i++)
> for (p = 0; p < MAX_PLANES; p++)
That's a lot better and cleaner than the current code.
LGTM.
_______________________________________________
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".
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [FFmpeg-devel] [PATCH 3/4] avcodec/ffv1: Fix remap and float with golomb rice
2025-03-10 18:41 ` Lynne
@ 2025-03-11 0:52 ` Michael Niedermayer
0 siblings, 0 replies; 8+ messages in thread
From: Michael Niedermayer @ 2025-03-11 0:52 UTC (permalink / raw)
To: FFmpeg development discussions and patches
[-- Attachment #1.1: Type: text/plain, Size: 1243 bytes --]
On Mon, Mar 10, 2025 at 07:41:26PM +0100, Lynne wrote:
> On 09/03/2025 23:58, Michael Niedermayer wrote:
> > Sponsored-by: Sovereign Tech Fund
> > Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
> > ---
> > libavcodec/ffv1dec.c | 37 +++++++++++++++++++++++++
> > libavcodec/ffv1dec_template.c | 27 ------------------
> > libavcodec/ffv1enc.c | 42 ++++++++++++++++++++++++++++
> > libavcodec/ffv1enc_template.c | 52 -----------------------------------
> > 4 files changed, 79 insertions(+), 79 deletions(-)
> >
> > diff --git a/libavcodec/ffv1dec.c b/libavcodec/ffv1dec.c
> > index 49a363208db..9738e4e9c9f 100644
> > --- a/libavcodec/ffv1dec.c
> > +++ b/libavcodec/ffv1dec.c
[...]
>
> That's a lot better and cleaner than the current code.
> LGTM.
will apply (with one hunk moved to the correct patch)
thx
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
If you drop bombs on a foreign country and kill a hundred thousand
innocent people, expect your government to call the consequence
"unprovoked inhuman terrorist attacks" and use it to justify dropping
more bombs and killing more people. The technology changed, the idea is old.
[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]
[-- Attachment #2: 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".
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [FFmpeg-devel] [PATCH 2/4] avcodec/ffv1enc: Fix slice coding mode 1 with rgb frames
2025-03-09 22:58 ` [FFmpeg-devel] [PATCH 2/4] avcodec/ffv1enc: Fix slice coding mode 1 with rgb frames Michael Niedermayer
@ 2025-03-11 0:53 ` Michael Niedermayer
0 siblings, 0 replies; 8+ messages in thread
From: Michael Niedermayer @ 2025-03-11 0:53 UTC (permalink / raw)
To: FFmpeg development discussions and patches
[-- Attachment #1.1: Type: text/plain, Size: 537 bytes --]
On Sun, Mar 09, 2025 at 11:58:04PM +0100, Michael Niedermayer wrote:
> Sponsored-by: Sovereign Tech Fund
> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
> ---
> libavcodec/ffv1enc.c | 4 ++--
> libavcodec/ffv1enc_template.c | 37 +++++++++++++++++++++++++++++++++--
> 2 files changed, 37 insertions(+), 4 deletions(-)
will apply
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
The worst form of inequality is to try to make unequal things equal.
-- Aristotle
[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]
[-- Attachment #2: 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".
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [FFmpeg-devel] [PATCH 4/4] avcodec/ffv1enc_template: Be a bit more verbose on error
2025-03-09 22:58 ` [FFmpeg-devel] [PATCH 4/4] avcodec/ffv1enc_template: Be a bit more verbose on error Michael Niedermayer
@ 2025-03-11 0:54 ` Michael Niedermayer
0 siblings, 0 replies; 8+ messages in thread
From: Michael Niedermayer @ 2025-03-11 0:54 UTC (permalink / raw)
To: FFmpeg development discussions and patches
[-- Attachment #1.1: Type: text/plain, Size: 1323 bytes --]
On Sun, Mar 09, 2025 at 11:58:06PM +0100, Michael Niedermayer wrote:
> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
> ---
> libavcodec/ffv1enc_template.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/libavcodec/ffv1enc_template.c b/libavcodec/ffv1enc_template.c
> index d8160282b2e..8b2d938770f 100644
> --- a/libavcodec/ffv1enc_template.c
> +++ b/libavcodec/ffv1enc_template.c
> @@ -39,12 +39,12 @@ RENAME(encode_line)(FFV1Context *f, FFV1SliceContext *sc,
>
> if (ac != AC_GOLOMB_RICE) {
> if (c->bytestream_end - c->bytestream < w * 35) {
> - av_log(logctx, AV_LOG_ERROR, "encoded frame too large\n");
> + av_log(logctx, AV_LOG_ERROR, "encoded Range Coder frame too large\n");
> return AVERROR_INVALIDDATA;
> }
> } else {
> if (put_bytes_left(&sc->pb, 0) < w * 4) {
> - av_log(logctx, AV_LOG_ERROR, "encoded frame too large\n");
> + av_log(logctx, AV_LOG_ERROR, "encoded Golomb Rice frame too large\n");
> return AVERROR_INVALIDDATA;
will apply, this just disambiguates 2 messages
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
Avoid a single point of failure, be that a person or equipment.
[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]
[-- Attachment #2: 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".
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2025-03-11 0:55 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-03-09 22:58 [FFmpeg-devel] [PATCH 1/4] avcodec/ffv1enc: add space for the remap table to max_size Michael Niedermayer
2025-03-09 22:58 ` [FFmpeg-devel] [PATCH 2/4] avcodec/ffv1enc: Fix slice coding mode 1 with rgb frames Michael Niedermayer
2025-03-11 0:53 ` Michael Niedermayer
2025-03-09 22:58 ` [FFmpeg-devel] [PATCH 3/4] avcodec/ffv1: Fix remap and float with golomb rice Michael Niedermayer
2025-03-10 18:41 ` Lynne
2025-03-11 0:52 ` Michael Niedermayer
2025-03-09 22:58 ` [FFmpeg-devel] [PATCH 4/4] avcodec/ffv1enc_template: Be a bit more verbose on error Michael Niedermayer
2025-03-11 0:54 ` Michael Niedermayer
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