diff options
author | Sergio Aguirre <saaguirre@ti.com> | 2011-03-07 19:49:48 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2011-03-22 18:41:55 -0400 |
commit | 0e4c180d3e2cc11e248f29d4c604b6194739d05a (patch) | |
tree | cb505788e38273b39a190fdd7080ea8e9c1e2af5 /drivers/media/video | |
parent | 4be22b6a7f2f2b7eb6f7aab8902068a367cda8ba (diff) |
[media] v4l: soc-camera: Store negotiated buffer settings
This fixes the problem in which a host driver
sets a personalized sizeimage or bytesperline field,
and gets ignored when doing G_FMT.
Signed-off-by: Sergio Aguirre <saaguirre@ti.com>
Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video')
-rw-r--r-- | drivers/media/video/soc_camera.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/drivers/media/video/soc_camera.c b/drivers/media/video/soc_camera.c index fa80a4a914d4..07525e74c4b4 100644 --- a/drivers/media/video/soc_camera.c +++ b/drivers/media/video/soc_camera.c | |||
@@ -389,6 +389,8 @@ static int soc_camera_set_fmt(struct soc_camera_device *icd, | |||
389 | 389 | ||
390 | icd->user_width = pix->width; | 390 | icd->user_width = pix->width; |
391 | icd->user_height = pix->height; | 391 | icd->user_height = pix->height; |
392 | icd->bytesperline = pix->bytesperline; | ||
393 | icd->sizeimage = pix->sizeimage; | ||
392 | icd->colorspace = pix->colorspace; | 394 | icd->colorspace = pix->colorspace; |
393 | icd->field = pix->field; | 395 | icd->field = pix->field; |
394 | if (ici->ops->init_videobuf) | 396 | if (ici->ops->init_videobuf) |
@@ -661,14 +663,11 @@ static int soc_camera_g_fmt_vid_cap(struct file *file, void *priv, | |||
661 | 663 | ||
662 | pix->width = icd->user_width; | 664 | pix->width = icd->user_width; |
663 | pix->height = icd->user_height; | 665 | pix->height = icd->user_height; |
666 | pix->bytesperline = icd->bytesperline; | ||
667 | pix->sizeimage = icd->sizeimage; | ||
664 | pix->field = icd->field; | 668 | pix->field = icd->field; |
665 | pix->pixelformat = icd->current_fmt->host_fmt->fourcc; | 669 | pix->pixelformat = icd->current_fmt->host_fmt->fourcc; |
666 | pix->bytesperline = soc_mbus_bytes_per_line(pix->width, | ||
667 | icd->current_fmt->host_fmt); | ||
668 | pix->colorspace = icd->colorspace; | 670 | pix->colorspace = icd->colorspace; |
669 | if (pix->bytesperline < 0) | ||
670 | return pix->bytesperline; | ||
671 | pix->sizeimage = pix->height * pix->bytesperline; | ||
672 | dev_dbg(&icd->dev, "current_fmt->fourcc: 0x%08x\n", | 671 | dev_dbg(&icd->dev, "current_fmt->fourcc: 0x%08x\n", |
673 | icd->current_fmt->host_fmt->fourcc); | 672 | icd->current_fmt->host_fmt->fourcc); |
674 | return 0; | 673 | return 0; |