video-converter: Fix v210->I420 last line conversion
authorPiotrek Brzeziński <piotr@centricular.com>
Wed, 13 Oct 2021 19:28:58 +0000 (21:28 +0200)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Thu, 14 Oct 2021 21:03:58 +0000 (21:03 +0000)
Last line would not be converted correctly if height was an odd number.
Fixed by accounting for data type (8bit vs. 16bit) differences between
respective packing and unpacking functions.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/973>

subprojects/gst-plugins-base/gst-libs/gst/video/video-converter.c

index 9433415..5feb637 100644 (file)
@@ -3953,6 +3953,7 @@ convert_v210_I420 (GstVideoConverter * convert, const GstVideoFrame * src,
   FConvertTask **tasks_p;
   gint n_threads;
   gint lines_per_thread;
+  guint8 *tmpline_8;
 
   /* I420 has half as many chroma lines, as such we have to
    * always merge two into one. For non-interlaced these are
@@ -3992,6 +3993,12 @@ convert_v210_I420 (GstVideoConverter * convert, const GstVideoFrame * src,
   if (h2 != height) {
     for (i = h2; i < height; i++) {
       UNPACK_FRAME (src, convert->tmpline[0], i, convert->in_x, width);
+
+      tmpline_8 = (guint8 *) convert->tmpline[0];
+      for (int j = 0; j < width * 4; j++) {
+        tmpline_8[j] = convert->tmpline[0][j] >> 8;
+      }
+
       PACK_FRAME (dest, convert->tmpline[0], i, width);
     }
   }