Commit fb6f8c02 authored by Andrzej Pietrasiewicz's avatar Andrzej Pietrasiewicz Committed by Mauro Carvalho Chehab

[media] s5p-jpeg: Adapt to new controls

Adapt to new controls (subsampling).

For encoding, the destination format now needs to be set to V4L2_PIX_FMT_JPEG
and the subsampling (4:2:2 or 4:2:0) needs to be set using the respective
control (V4L2_CID_JPEG_CHROMA_SUBSAMPLING). Required buffer size for
destination image during encoding is no longer deduced from the format (which
generally implied overestimation), but needs to be given from userspace in
sizeimage.

Not strictly related to the added controls, this patch also fixes setting the
subsampling of the destination image for decoding, depending on the destination
format.
Signed-off-by: default avatarAndrzej Pietrasiewicz <andrzej.p@samsung.com>
Signed-off-by: default avatarKyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: default avatarSylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 27dda973
...@@ -32,10 +32,9 @@ ...@@ -32,10 +32,9 @@
static struct s5p_jpeg_fmt formats_enc[] = { static struct s5p_jpeg_fmt formats_enc[] = {
{ {
.name = "YUV 4:2:0 planar, YCbCr", .name = "JPEG JFIF",
.fourcc = V4L2_PIX_FMT_YUV420, .fourcc = V4L2_PIX_FMT_JPEG,
.depth = 12, .colplanes = 1,
.colplanes = 3,
.types = MEM2MEM_CAPTURE, .types = MEM2MEM_CAPTURE,
}, },
{ {
...@@ -43,7 +42,7 @@ static struct s5p_jpeg_fmt formats_enc[] = { ...@@ -43,7 +42,7 @@ static struct s5p_jpeg_fmt formats_enc[] = {
.fourcc = V4L2_PIX_FMT_YUYV, .fourcc = V4L2_PIX_FMT_YUYV,
.depth = 16, .depth = 16,
.colplanes = 1, .colplanes = 1,
.types = MEM2MEM_CAPTURE | MEM2MEM_OUTPUT, .types = MEM2MEM_OUTPUT,
}, },
{ {
.name = "RGB565", .name = "RGB565",
...@@ -1025,11 +1024,14 @@ static void s5p_jpeg_device_run(void *priv) ...@@ -1025,11 +1024,14 @@ static void s5p_jpeg_device_run(void *priv)
jpeg_htbl_dc(jpeg->regs, 2); jpeg_htbl_dc(jpeg->regs, 2);
jpeg_htbl_ac(jpeg->regs, 3); jpeg_htbl_ac(jpeg->regs, 3);
jpeg_htbl_dc(jpeg->regs, 3); jpeg_htbl_dc(jpeg->regs, 3);
} else { } else { /* S5P_JPEG_DECODE */
jpeg_rst_int_enable(jpeg->regs, true); jpeg_rst_int_enable(jpeg->regs, true);
jpeg_data_num_int_enable(jpeg->regs, true); jpeg_data_num_int_enable(jpeg->regs, true);
jpeg_final_mcu_num_int_enable(jpeg->regs, true); jpeg_final_mcu_num_int_enable(jpeg->regs, true);
jpeg_outform_raw(jpeg->regs, S5P_JPEG_RAW_OUT_422); if (ctx->cap_q.fmt->fourcc == V4L2_PIX_FMT_YUYV)
jpeg_outform_raw(jpeg->regs, S5P_JPEG_RAW_OUT_422);
else
jpeg_outform_raw(jpeg->regs, S5P_JPEG_RAW_OUT_420);
jpeg_jpgadr(jpeg->regs, src_addr); jpeg_jpgadr(jpeg->regs, src_addr);
jpeg_imgadr(jpeg->regs, dst_addr); jpeg_imgadr(jpeg->regs, dst_addr);
} }
...@@ -1269,6 +1271,7 @@ static irqreturn_t s5p_jpeg_irq(int irq, void *dev_id) ...@@ -1269,6 +1271,7 @@ static irqreturn_t s5p_jpeg_irq(int irq, void *dev_id)
curr_ctx->subsampling = jpeg_get_subsampling_mode(jpeg->regs); curr_ctx->subsampling = jpeg_get_subsampling_mode(jpeg->regs);
spin_unlock(&jpeg->slock); spin_unlock(&jpeg->slock);
jpeg_clear_int(jpeg->regs); jpeg_clear_int(jpeg->regs);
return IRQ_HANDLED; return IRQ_HANDLED;
......
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