This way the remap encode loop needs fewer iterations and it allows some additional simplifications
Signed-off-by: Michael Niedermayer <mich...@niedermayer.cc> --- libavcodec/ffv1enc.c | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/libavcodec/ffv1enc.c b/libavcodec/ffv1enc.c index 0c879fe5ce5..143c378c1b5 100644 --- a/libavcodec/ffv1enc.c +++ b/libavcodec/ffv1enc.c @@ -1310,23 +1310,28 @@ static int encode_float32_remap_segment(FFV1SliceContext *sc, s.run1final = 0; } - if (final) { - int64_t last_val = s.last_val; - for (int i = s.i; i<s.pixel_num; i++) { - int val = sc->unit[s.p][i].val; - - if (last_val != val) { - s.compact_index ++; - last_val = val; - } - sc->bitmap[s.p][sc->unit[s.p][i].ndx] = s.compact_index; + int64_t last_val = s.last_val; + int j = 0; + + for (int i = s.i; i<s.pixel_num; i++) { + int val = sc->unit[s.p][i].val; + int ndx = sc->unit[s.p][i].ndx; + + if (last_val != val) { + s.compact_index ++; + last_val = val; + sc->unit[s.p][s.compact_index].val = val; + sc->unit[s.p][s.compact_index].ndx = ndx; //we dont need ndx but copy all should be simpler and faster } + if (final) + sc->bitmap[s.p][ndx] = s.compact_index; } - for (; s.i < s.pixel_num+1; s.i++) { + s.compact_index++; + for (; s.i < s.compact_index + 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.i == s.compact_index) { if (s.last_val == 0xFFFFFFFF) { break; } else { @@ -1337,7 +1342,7 @@ static int encode_float32_remap_segment(FFV1SliceContext *sc, } else val = sc->unit[s.p][s.i].val; - if (s.last_val != val) { + { int64_t delta = val - s.last_val; int64_t step = FFMAX(1, (delta + current_mul/2) / current_mul); av_assert2(s.last_val < val); -- 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-requ...@ffmpeg.org with subject "unsubscribe".