* [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
* 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
* [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
* 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
* [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 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