mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-26 02:00:33 +00:00
videotestsrc: Fix image for odd widths in some formats
videotestsrc rounds chroma down. This causes it to omit the last chroma value completely for odd widths when the chroma is downsampled. This patch special cases the last pixel to not be rounded down.
This commit is contained in:
parent
ce51263142
commit
35fdfcc625
1 changed files with 16 additions and 11 deletions
|
@ -1471,13 +1471,15 @@ static void
|
||||||
paint_hline_I420 (paintinfo * p, int x, int y, int w)
|
paint_hline_I420 (paintinfo * p, int x, int y, int w)
|
||||||
{
|
{
|
||||||
int x1 = x / 2;
|
int x1 = x / 2;
|
||||||
int x2 = (x + w) / 2;
|
int w1 = (x + w) / 2 - x1;
|
||||||
int offset = y * p->ystride;
|
int offset = y * p->ystride;
|
||||||
int offset1 = (y / 2) * p->ustride;
|
int offset1 = (y / 2) * p->ustride;
|
||||||
|
|
||||||
|
if (x + w == p->width)
|
||||||
|
w1++;
|
||||||
oil_splat_u8_ns (p->yp + offset + x, &p->yuv_color->Y, w);
|
oil_splat_u8_ns (p->yp + offset + x, &p->yuv_color->Y, w);
|
||||||
oil_splat_u8_ns (p->up + offset1 + x1, &p->yuv_color->U, x2 - x1);
|
oil_splat_u8_ns (p->up + offset1 + x1, &p->yuv_color->U, w1);
|
||||||
oil_splat_u8_ns (p->vp + offset1 + x1, &p->yuv_color->V, x2 - x1);
|
oil_splat_u8_ns (p->vp + offset1 + x1, &p->yuv_color->V, w1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1688,13 +1690,14 @@ static void
|
||||||
paint_hline_YUY2 (paintinfo * p, int x, int y, int w)
|
paint_hline_YUY2 (paintinfo * p, int x, int y, int w)
|
||||||
{
|
{
|
||||||
int x1 = x / 2;
|
int x1 = x / 2;
|
||||||
int x2 = (x + w) / 2;
|
int w1 = (x + w) / 2 - x1;
|
||||||
int offset;
|
int offset = y * p->ystride;
|
||||||
|
|
||||||
offset = y * p->ystride;
|
if (x + w == p->width)
|
||||||
|
w1++;
|
||||||
oil_splat_u8 (p->yp + offset + x * 2, 2, &p->yuv_color->Y, w);
|
oil_splat_u8 (p->yp + offset + x * 2, 2, &p->yuv_color->Y, w);
|
||||||
oil_splat_u8 (p->up + offset + x1 * 4, 4, &p->yuv_color->U, x2 - x1);
|
oil_splat_u8 (p->up + offset + x1 * 4, 4, &p->yuv_color->U, w1);
|
||||||
oil_splat_u8 (p->vp + offset + x1 * 4, 4, &p->yuv_color->V, x2 - x1);
|
oil_splat_u8 (p->vp + offset + x1 * 4, 4, &p->yuv_color->V, w1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1760,13 +1763,15 @@ static void
|
||||||
paint_hline_Y42B (paintinfo * p, int x, int y, int w)
|
paint_hline_Y42B (paintinfo * p, int x, int y, int w)
|
||||||
{
|
{
|
||||||
int x1 = x / 2;
|
int x1 = x / 2;
|
||||||
int x2 = (x + w) / 2;
|
int w1 = (x + w) / 2 - x1;
|
||||||
int offset = y * p->ystride;
|
int offset = y * p->ystride;
|
||||||
int offset1 = y * p->ustride;
|
int offset1 = y * p->ustride;
|
||||||
|
|
||||||
|
if (x + w == p->width)
|
||||||
|
w1++;
|
||||||
oil_splat_u8_ns (p->yp + offset + x, &p->yuv_color->Y, w);
|
oil_splat_u8_ns (p->yp + offset + x, &p->yuv_color->Y, w);
|
||||||
oil_splat_u8_ns (p->up + offset1 + x1, &p->yuv_color->U, x2 - x1);
|
oil_splat_u8_ns (p->up + offset1 + x1, &p->yuv_color->U, w1);
|
||||||
oil_splat_u8_ns (p->vp + offset1 + x1, &p->yuv_color->V, x2 - x1);
|
oil_splat_u8_ns (p->vp + offset1 + x1, &p->yuv_color->V, w1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Reference in a new issue