Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5ea3bf28 authored by Tony K Nadackal's avatar Tony K Nadackal Committed by Mauro Carvalho Chehab
Browse files

media: s5p-jpeg: Call jpeg_bound_align_image after qbuf



When queuing an OUTPUT buffer for decoder, s5p_jpeg_parse_hdr()
function parses the input jpeg file and takes the width and height
parameters from its header. These new width/height values will be used
for the calculation of stride. HX_JPEG Hardware needs the width and
height values aligned on a 16 bits boundary. This width/height alignment
is handled in the s5p_jpeg_s_fmt_vid_cap() function during the S_FMT
ioctl call.

But if user space calls the QBUF of OUTPUT buffer after the S_FMT of
CAPTURE buffer, these aligned values will be replaced by the values in
jpeg header. If the width/height values of jpeg are not aligned, the
decoder output will be corrupted. So in this patch we call
jpeg_bound_align_image() to align the width/height values of Capture
buffer in s5p_jpeg_buf_queue().

Signed-off-by: default avatarTony K Nadackal <tony.kn@samsung.com>
Signed-off-by: default avatarThierry Escande <thierry.escande@collabora.com>
Acked-by: default avatarAndrzej Pietrasiewicz <andrzej.p@samsung.com>
Acked-by: default avatarJacek Anaszewski <jacek.anaszewski@gmail.com>
Signed-off-by: default avatarSylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent 59ae0e8a
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -2523,6 +2523,25 @@ static void s5p_jpeg_buf_queue(struct vb2_buffer *vb)
		q_data = &ctx->cap_q;
		q_data->w = tmp.w;
		q_data->h = tmp.h;

		/*
		 * This call to jpeg_bound_align_image() takes care of width and
		 * height values alignment when user space calls the QBUF of
		 * OUTPUT buffer after the S_FMT of CAPTURE buffer.
		 * Please note that on Exynos4x12 SoCs, resigning from executing
		 * S_FMT on capture buffer for each JPEG image can result in a
		 * hardware hangup if subsampling is lower than the one of input
		 * JPEG.
		 */
		jpeg_bound_align_image(ctx,
				       &q_data->w,
				       S5P_JPEG_MIN_WIDTH, S5P_JPEG_MAX_WIDTH,
				       q_data->fmt->h_align,
				       &q_data->h,
				       S5P_JPEG_MIN_HEIGHT, S5P_JPEG_MAX_HEIGHT,
				       q_data->fmt->v_align);

		q_data->size = q_data->w * q_data->h * q_data->fmt->depth >> 3;
	}

	v4l2_m2m_buf_queue(ctx->fh.m2m_ctx, vbuf);