]> git.sesse.net Git - ffmpeg/commitdiff
vc2enc: zero padding of the coefficient buffer
authorLynne <dev@lynne.ee>
Tue, 17 Dec 2019 14:56:33 +0000 (14:56 +0000)
committerLynne <dev@lynne.ee>
Tue, 17 Dec 2019 14:56:33 +0000 (14:56 +0000)
Wavelet types with large amounts of overreading/writing like 9_7 would
write into the padding at high wavelet depths, which would remain and be
read by the next frame's transform and quickly cause artifacts to appear
for subsequent frames.
This fix affects all frames encoded with a non-power-of-two width, with
the artifacts varying between non-observable to very noticeable,
depending on encoder settings, so reencoding is advisable.

libavcodec/vc2enc.c

index d0101e01e430912eb8630b657210b191e019945f..ba5a03e4ec7e5c8eb35112f4d3e8069f83c8ea83 100644 (file)
@@ -867,6 +867,7 @@ static int dwt_plane(AVCodecContext *avctx, void *arg)
             for (x = 0; x < p->width; x++) {
                 buf[x] = pix[x] - s->diff_offset;
             }
+            memset(&buf[x], 0, (p->coef_stride - p->width)*sizeof(dwtcoef));
             buf += p->coef_stride;
             pix += pix_stride;
         }
@@ -876,6 +877,7 @@ static int dwt_plane(AVCodecContext *avctx, void *arg)
             for (x = 0; x < p->width; x++) {
                 buf[x] = pix[x] - s->diff_offset;
             }
+            memset(&buf[x], 0, (p->coef_stride - p->width)*sizeof(dwtcoef));
             buf += p->coef_stride;
             pix += pix_stride;
         }