mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-03-28 03:45:39 +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);
|
||||
if (G_LIKELY (lines > 0)) {
|
||||
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);
|
||||
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) {
|
||||
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) {
|
||||
if (G_LIKELY (base[0] <= last[0])) {
|
||||
memcpy (base[0], y_rows[j + 1], I420_Y_ROWSTRIDE (width));
|
||||
base[0] += I420_Y_ROWSTRIDE (width);
|
||||
}
|
||||
}
|
||||
if (G_LIKELY (base[1] <= last[1] && base[2] <= last[2])) {
|
||||
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 (G_LIKELY (base[1] < last[1] && base[2] < last[2])) {
|
||||
base[1] += I420_U_ROWSTRIDE (width);
|
||||
base[2] += I420_V_ROWSTRIDE (width);
|
||||
}
|
||||
base[1] += I420_U_ROWSTRIDE (width);
|
||||
base[2] += I420_V_ROWSTRIDE (width);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
|
Loading…
Reference in a new issue