From: Michael Niedermayer <michael@niedermayer.cc> To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> Subject: [FFmpeg-devel] [PATCH 2/2] avcodec/ffv1enc: remap prettification and bufixes Date: Mon, 24 Mar 2025 02:57:47 +0100 Message-ID: <20250324015747.3907914-2-michael@niedermayer.cc> (raw) In-Reply-To: <20250324015747.3907914-1-michael@niedermayer.cc> 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".
prev parent reply other threads:[~2025-03-24 1:58 UTC|newest] Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top 2025-03-24 1:57 [FFmpeg-devel] [PATCH 1/2] configure: Clearer documentation for "disable-safe-bitstream-reader" Michael Niedermayer 2025-03-24 1:57 ` Michael Niedermayer [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=20250324015747.3907914-2-michael@niedermayer.cc \ --to=michael@niedermayer.cc \ --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