Commit c6b3d8fc authored by Niklas Söderlund's avatar Niklas Söderlund Committed by Mauro Carvalho Chehab

[media] media: rcar-vin: fix height for TOP and BOTTOM fields

The height used for V4L2_FIELD_TOP and V4L2_FIELD_BOTTOM where wrong.
The frames only contain one field so the height should be half of the
frame.
Signed-off-by: default avatarNiklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent d6482537
...@@ -125,6 +125,8 @@ static int rvin_reset_format(struct rvin_dev *vin) ...@@ -125,6 +125,8 @@ static int rvin_reset_format(struct rvin_dev *vin)
switch (vin->format.field) { switch (vin->format.field) {
case V4L2_FIELD_TOP: case V4L2_FIELD_TOP:
case V4L2_FIELD_BOTTOM: case V4L2_FIELD_BOTTOM:
vin->format.height /= 2;
break;
case V4L2_FIELD_NONE: case V4L2_FIELD_NONE:
case V4L2_FIELD_INTERLACED_TB: case V4L2_FIELD_INTERLACED_TB:
case V4L2_FIELD_INTERLACED_BT: case V4L2_FIELD_INTERLACED_BT:
...@@ -220,21 +222,13 @@ static int __rvin_try_format(struct rvin_dev *vin, ...@@ -220,21 +222,13 @@ static int __rvin_try_format(struct rvin_dev *vin,
/* Limit to source capabilities */ /* Limit to source capabilities */
__rvin_try_format_source(vin, which, pix, source); __rvin_try_format_source(vin, which, pix, source);
/* If source can't match format try if VIN can scale */
if (source->width != rwidth || source->height != rheight)
rvin_scale_try(vin, pix, rwidth, rheight);
/* HW limit width to a multiple of 32 (2^5) for NV16 else 2 (2^1) */
walign = vin->format.pixelformat == V4L2_PIX_FMT_NV16 ? 5 : 1;
/* Limit to VIN capabilities */
v4l_bound_align_image(&pix->width, 2, RVIN_MAX_WIDTH, walign,
&pix->height, 4, RVIN_MAX_HEIGHT, 2, 0);
switch (pix->field) { switch (pix->field) {
case V4L2_FIELD_NONE:
case V4L2_FIELD_TOP: case V4L2_FIELD_TOP:
case V4L2_FIELD_BOTTOM: case V4L2_FIELD_BOTTOM:
pix->height /= 2;
source->height /= 2;
break;
case V4L2_FIELD_NONE:
case V4L2_FIELD_INTERLACED_TB: case V4L2_FIELD_INTERLACED_TB:
case V4L2_FIELD_INTERLACED_BT: case V4L2_FIELD_INTERLACED_BT:
case V4L2_FIELD_INTERLACED: case V4L2_FIELD_INTERLACED:
...@@ -244,6 +238,17 @@ static int __rvin_try_format(struct rvin_dev *vin, ...@@ -244,6 +238,17 @@ static int __rvin_try_format(struct rvin_dev *vin,
break; break;
} }
/* If source can't match format try if VIN can scale */
if (source->width != rwidth || source->height != rheight)
rvin_scale_try(vin, pix, rwidth, rheight);
/* HW limit width to a multiple of 32 (2^5) for NV16 else 2 (2^1) */
walign = vin->format.pixelformat == V4L2_PIX_FMT_NV16 ? 5 : 1;
/* Limit to VIN capabilities */
v4l_bound_align_image(&pix->width, 2, RVIN_MAX_WIDTH, walign,
&pix->height, 4, RVIN_MAX_HEIGHT, 2, 0);
pix->bytesperline = max_t(u32, pix->bytesperline, pix->bytesperline = max_t(u32, pix->bytesperline,
rvin_format_bytesperline(pix)); rvin_format_bytesperline(pix));
pix->sizeimage = max_t(u32, pix->sizeimage, pix->sizeimage = max_t(u32, pix->sizeimage,
......
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