video-scaler: Correctly handle interlaced vertical scalers in gst_video_scaler_2d()
authorSebastian Dröge <sebastian@centricular.com>
Mon, 21 Oct 2019 14:28:46 +0000 (17:28 +0300)
committerTim-Philipp Müller <tim@centricular.com>
Thu, 24 Oct 2019 17:07:55 +0000 (18:07 +0100)
We need to provide twice as many lines as usual to the scaling function
as every second lines would be skipped.

Without this we read from random memory and produce colorful output and
crashes.

gst-libs/gst/video/video-scaler.c

index 49f697b9145c37e3f2c0962618837cfa1f9dfff6..ce30a0eeb9621a2a80d40ffa5dc4ab6e41f31e32 100644 (file)
@@ -1492,6 +1492,9 @@ gst_video_scaler_2d (GstVideoScaler * hscale, GstVideoScaler * vscale,
       realloc_tmplines (vscale, n_elems, width);
 
     v_taps = vscale->resampler.max_taps;
+    if (vscale->flags & GST_VIDEO_SCALER_FLAG_INTERLACED)
+      v_taps *= 2;
+
     lines = g_alloca (v_taps * sizeof (gpointer));
 
     if (hscale == NULL) {