Commit 48ab45ad authored by Simon Farnsworth's avatar Simon Farnsworth Committed by Mauro Carvalho Chehab

[media] cx18: Fix bytes_per_line

Current GStreamer userspace respects the bytes_per_line from the driver. Set
it to something reasonable for the format chosen.
Signed-off-by: default avatarSimon Farnsworth <simon.farnsworth@onelan.co.uk>
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent ac0b2b30
...@@ -409,6 +409,7 @@ struct cx18_stream { ...@@ -409,6 +409,7 @@ struct cx18_stream {
/* Videobuf for YUV video */ /* Videobuf for YUV video */
u32 pixelformat; u32 pixelformat;
u32 vb_bytes_per_frame; u32 vb_bytes_per_frame;
u32 vb_bytes_per_line;
struct list_head vb_capture; /* video capture queue */ struct list_head vb_capture; /* video capture queue */
spinlock_t vb_lock; spinlock_t vb_lock;
struct timer_list vb_timeout; struct timer_list vb_timeout;
......
...@@ -159,7 +159,7 @@ static int cx18_g_fmt_vid_cap(struct file *file, void *fh, ...@@ -159,7 +159,7 @@ static int cx18_g_fmt_vid_cap(struct file *file, void *fh,
if (id->type == CX18_ENC_STREAM_TYPE_YUV) { if (id->type == CX18_ENC_STREAM_TYPE_YUV) {
pixfmt->pixelformat = s->pixelformat; pixfmt->pixelformat = s->pixelformat;
pixfmt->sizeimage = s->vb_bytes_per_frame; pixfmt->sizeimage = s->vb_bytes_per_frame;
pixfmt->bytesperline = 720; pixfmt->bytesperline = s->vb_bytes_per_line;
} else { } else {
pixfmt->pixelformat = V4L2_PIX_FMT_MPEG; pixfmt->pixelformat = V4L2_PIX_FMT_MPEG;
pixfmt->sizeimage = 128 * 1024; pixfmt->sizeimage = 128 * 1024;
...@@ -287,10 +287,13 @@ static int cx18_s_fmt_vid_cap(struct file *file, void *fh, ...@@ -287,10 +287,13 @@ static int cx18_s_fmt_vid_cap(struct file *file, void *fh,
s->pixelformat = fmt->fmt.pix.pixelformat; s->pixelformat = fmt->fmt.pix.pixelformat;
/* HM12 YUV size is (Y=(h*720) + UV=(h*(720/2))) /* HM12 YUV size is (Y=(h*720) + UV=(h*(720/2)))
UYUV YUV size is (Y=(h*720) + UV=(h*(720))) */ UYUV YUV size is (Y=(h*720) + UV=(h*(720))) */
if (s->pixelformat == V4L2_PIX_FMT_HM12) if (s->pixelformat == V4L2_PIX_FMT_HM12) {
s->vb_bytes_per_frame = h * 720 * 3 / 2; s->vb_bytes_per_frame = h * 720 * 3 / 2;
else s->vb_bytes_per_line = 720; /* First plane */
} else {
s->vb_bytes_per_frame = h * 720 * 2; s->vb_bytes_per_frame = h * 720 * 2;
s->vb_bytes_per_line = 1440; /* Packed */
}
mbus_fmt.width = cx->cxhdl.width = w; mbus_fmt.width = cx->cxhdl.width = w;
mbus_fmt.height = cx->cxhdl.height = h; mbus_fmt.height = cx->cxhdl.height = h;
......
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