[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: Simon Farnsworth <simon.farnsworth@onelan.co.uk> Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
This commit is contained in:

committed by
Mauro Carvalho Chehab

parent
ac0b2b3072
commit
48ab45adcc
@@ -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,
|
|||||||
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,
|
|||||||
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;
|
||||||
|
Reference in New Issue
Block a user