diff options
author | Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se> | 2016-09-02 12:45:00 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@s-opensource.com> | 2016-09-19 15:33:07 -0400 |
commit | c6b3d8fc79a93aa1139c080bbb7402db846cc9f7 (patch) | |
tree | b43d85b977b3258ab98ea335dc9b257d006d35b3 /drivers/media/platform | |
parent | d6482537f666ab024925e5a126cfaeede34a3801 (diff) |
[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: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Diffstat (limited to 'drivers/media/platform')
-rw-r--r-- | drivers/media/platform/rcar-vin/rcar-v4l2.c | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/drivers/media/platform/rcar-vin/rcar-v4l2.c b/drivers/media/platform/rcar-vin/rcar-v4l2.c index 47d8d9745747..1392514d4072 100644 --- a/drivers/media/platform/rcar-vin/rcar-v4l2.c +++ b/drivers/media/platform/rcar-vin/rcar-v4l2.c | |||
@@ -125,6 +125,8 @@ static int rvin_reset_format(struct rvin_dev *vin) | |||
125 | switch (vin->format.field) { | 125 | switch (vin->format.field) { |
126 | case V4L2_FIELD_TOP: | 126 | case V4L2_FIELD_TOP: |
127 | case V4L2_FIELD_BOTTOM: | 127 | case V4L2_FIELD_BOTTOM: |
128 | vin->format.height /= 2; | ||
129 | break; | ||
128 | case V4L2_FIELD_NONE: | 130 | case V4L2_FIELD_NONE: |
129 | case V4L2_FIELD_INTERLACED_TB: | 131 | case V4L2_FIELD_INTERLACED_TB: |
130 | case V4L2_FIELD_INTERLACED_BT: | 132 | case V4L2_FIELD_INTERLACED_BT: |
@@ -220,21 +222,13 @@ static int __rvin_try_format(struct rvin_dev *vin, | |||
220 | /* Limit to source capabilities */ | 222 | /* Limit to source capabilities */ |
221 | __rvin_try_format_source(vin, which, pix, source); | 223 | __rvin_try_format_source(vin, which, pix, source); |
222 | 224 | ||
223 | /* If source can't match format try if VIN can scale */ | ||
224 | if (source->width != rwidth || source->height != rheight) | ||
225 | rvin_scale_try(vin, pix, rwidth, rheight); | ||
226 | |||
227 | /* HW limit width to a multiple of 32 (2^5) for NV16 else 2 (2^1) */ | ||
228 | walign = vin->format.pixelformat == V4L2_PIX_FMT_NV16 ? 5 : 1; | ||
229 | |||
230 | /* Limit to VIN capabilities */ | ||
231 | v4l_bound_align_image(&pix->width, 2, RVIN_MAX_WIDTH, walign, | ||
232 | &pix->height, 4, RVIN_MAX_HEIGHT, 2, 0); | ||
233 | |||
234 | switch (pix->field) { | 225 | switch (pix->field) { |
235 | case V4L2_FIELD_NONE: | ||
236 | case V4L2_FIELD_TOP: | 226 | case V4L2_FIELD_TOP: |
237 | case V4L2_FIELD_BOTTOM: | 227 | case V4L2_FIELD_BOTTOM: |
228 | pix->height /= 2; | ||
229 | source->height /= 2; | ||
230 | break; | ||
231 | case V4L2_FIELD_NONE: | ||
238 | case V4L2_FIELD_INTERLACED_TB: | 232 | case V4L2_FIELD_INTERLACED_TB: |
239 | case V4L2_FIELD_INTERLACED_BT: | 233 | case V4L2_FIELD_INTERLACED_BT: |
240 | case V4L2_FIELD_INTERLACED: | 234 | case V4L2_FIELD_INTERLACED: |
@@ -244,6 +238,17 @@ static int __rvin_try_format(struct rvin_dev *vin, | |||
244 | break; | 238 | break; |
245 | } | 239 | } |
246 | 240 | ||
241 | /* If source can't match format try if VIN can scale */ | ||
242 | if (source->width != rwidth || source->height != rheight) | ||
243 | rvin_scale_try(vin, pix, rwidth, rheight); | ||
244 | |||
245 | /* HW limit width to a multiple of 32 (2^5) for NV16 else 2 (2^1) */ | ||
246 | walign = vin->format.pixelformat == V4L2_PIX_FMT_NV16 ? 5 : 1; | ||
247 | |||
248 | /* Limit to VIN capabilities */ | ||
249 | v4l_bound_align_image(&pix->width, 2, RVIN_MAX_WIDTH, walign, | ||
250 | &pix->height, 4, RVIN_MAX_HEIGHT, 2, 0); | ||
251 | |||
247 | pix->bytesperline = max_t(u32, pix->bytesperline, | 252 | pix->bytesperline = max_t(u32, pix->bytesperline, |
248 | rvin_format_bytesperline(pix)); | 253 | rvin_format_bytesperline(pix)); |
249 | pix->sizeimage = max_t(u32, pix->sizeimage, | 254 | pix->sizeimage = max_t(u32, pix->sizeimage, |