Commit eb7565b6 authored by Nicolas Dufresne's avatar Nicolas Dufresne
Browse files

video-format: Fix 10LE32 formats packing function

The source offset (soff) was not incremented for each component and then
each group of 3 components were inverted. This was causing a staircase
effect combined with some noise.

https://bugzilla.gnome.org/show_bug.cgi?id=789876
parent c8b99139
......@@ -4616,13 +4616,11 @@ pack_GRAY10_LE32 (const GstVideoFormatInfo * info, GstVideoPackFlags flags,
guint32 Y = 0;
for (c = 0; c < num_comps; c++) {
Y <<= 10;
Y |= s[soff + 1] >> 6;
Y |= s[soff + 1] >> 6 << (10 * c);
soff += 4;
}
GST_WRITE_UINT32_LE (dy + i, Y);
soff += 4;
}
}
......@@ -4745,12 +4743,9 @@ pack_NV12_10LE32 (const GstVideoFormatInfo * info, GstVideoPackFlags flags,
guint32 Y = 0;
for (c = 0; c < num_comps; c++) {
Y <<= 10;
Y |= s[soff + 1] >> 6;
if (!IS_CHROMA_LINE_420 (y, flags))
continue;
Y |= s[soff + 1] >> 6 << (10 * c);
if (IS_CHROMA_LINE_420 (y, flags)) {
switch ((pix + c) % 6) {
case 0:
UV = s[soff + 2] >> 6;
......@@ -4772,12 +4767,14 @@ pack_NV12_10LE32 (const GstVideoFormatInfo * info, GstVideoPackFlags flags,
}
}
soff += 4;
}
GST_WRITE_UINT32_LE (dy + i, Y);
if (IS_CHROMA_LINE_420 (y, flags) && num_comps < 3)
GST_WRITE_UINT32_LE (duv + i, UV);
soff += 4;
}
}
......@@ -4898,8 +4895,7 @@ pack_NV16_10LE32 (const GstVideoFormatInfo * info, GstVideoPackFlags flags,
guint32 Y = 0;
for (c = 0; c < num_comps; c++) {
Y <<= 10;
Y |= s[soff + 1] >> 6;
Y |= s[soff + 1] >> 6 << (10 * c);
switch ((pix + c) % 6) {
case 0:
......@@ -4920,14 +4916,14 @@ pack_NV16_10LE32 (const GstVideoFormatInfo * info, GstVideoPackFlags flags,
/* keep value */
break;
}
soff += 4;
}
GST_WRITE_UINT32_LE (dy + i, Y);
if (num_comps < 3)
GST_WRITE_UINT32_LE (duv + i, UV);
soff += 4;
}
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment