mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 06:54:49 +00:00
jpegdec: disregard superfluous lines when indirect decoding
This commit is contained in:
parent
78a2b22ed5
commit
761b883f2c
1 changed files with 20 additions and 18 deletions
|
@ -793,29 +793,31 @@ gst_jpeg_dec_decode_indirect (GstJpegDec * dec, guchar * base[3],
|
||||||
lines = jpeg_read_raw_data (&dec->cinfo, scanarray, r_v * DCTSIZE);
|
lines = jpeg_read_raw_data (&dec->cinfo, scanarray, r_v * DCTSIZE);
|
||||||
if (G_LIKELY (lines > 0)) {
|
if (G_LIKELY (lines > 0)) {
|
||||||
for (j = 0, k = 0; j < (r_v * DCTSIZE); j += r_v, k++) {
|
for (j = 0, k = 0; j < (r_v * DCTSIZE); j += r_v, k++) {
|
||||||
memcpy (base[0], y_rows[j], I420_Y_ROWSTRIDE (width));
|
if (G_LIKELY (base[0] <= last[0])) {
|
||||||
if (G_LIKELY (base[0] < last[0]))
|
memcpy (base[0], y_rows[j], I420_Y_ROWSTRIDE (width));
|
||||||
base[0] += I420_Y_ROWSTRIDE (width);
|
base[0] += I420_Y_ROWSTRIDE (width);
|
||||||
if (r_v == 2) {
|
|
||||||
memcpy (base[0], y_rows[j + 1], I420_Y_ROWSTRIDE (width));
|
|
||||||
if (G_LIKELY (base[0] < last[0]))
|
|
||||||
base[0] += I420_Y_ROWSTRIDE (width);
|
|
||||||
}
|
}
|
||||||
if (r_h == 2) {
|
if (r_v == 2) {
|
||||||
memcpy (base[1], u_rows[k], I420_U_ROWSTRIDE (width));
|
if (G_LIKELY (base[0] <= last[0])) {
|
||||||
memcpy (base[2], v_rows[k], I420_V_ROWSTRIDE (width));
|
memcpy (base[0], y_rows[j + 1], I420_Y_ROWSTRIDE (width));
|
||||||
} else if (r_h == 1) {
|
base[0] += I420_Y_ROWSTRIDE (width);
|
||||||
hresamplecpy1 (base[1], u_rows[k], I420_U_ROWSTRIDE (width));
|
}
|
||||||
hresamplecpy1 (base[2], v_rows[k], I420_V_ROWSTRIDE (width));
|
}
|
||||||
} else {
|
if (G_LIKELY (base[1] <= last[1] && base[2] <= last[2])) {
|
||||||
/* FIXME: implement (at least we avoid crashing by doing nothing) */
|
if (r_h == 2) {
|
||||||
|
memcpy (base[1], u_rows[k], I420_U_ROWSTRIDE (width));
|
||||||
|
memcpy (base[2], v_rows[k], I420_V_ROWSTRIDE (width));
|
||||||
|
} else if (r_h == 1) {
|
||||||
|
hresamplecpy1 (base[1], u_rows[k], I420_U_ROWSTRIDE (width));
|
||||||
|
hresamplecpy1 (base[2], v_rows[k], I420_V_ROWSTRIDE (width));
|
||||||
|
} else {
|
||||||
|
/* FIXME: implement (at least we avoid crashing by doing nothing) */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (r_v == 2 || (k & 1) != 0) {
|
if (r_v == 2 || (k & 1) != 0) {
|
||||||
if (G_LIKELY (base[1] < last[1] && base[2] < last[2])) {
|
base[1] += I420_U_ROWSTRIDE (width);
|
||||||
base[1] += I420_U_ROWSTRIDE (width);
|
base[2] += I420_V_ROWSTRIDE (width);
|
||||||
base[2] += I420_V_ROWSTRIDE (width);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in a new issue