media: adv7180: fix field type to V4L2_FIELD_ALTERNATE
The ADV7180 and ADV7182 transmit whole fields, bottom field followed by top (or vice-versa, depending on detected video standard). So for chips that do not have support for explicitly setting the field mode via I2P, set the field mode to V4L2_FIELD_ALTERNATE. I2P converts fields into frames using an edge adaptive algorithm. The frame rate is the same as the 'field rate': e.g. X fields per second are now X frames per second. 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+samsung@kernel.org>
This commit is contained in:
parent
ddc5c1f799
commit
6457b6263f
@ -644,6 +644,9 @@ static int adv7180_mbus_fmt(struct v4l2_subdev *sd,
|
||||
fmt->width = 720;
|
||||
fmt->height = state->curr_norm & V4L2_STD_525_60 ? 480 : 576;
|
||||
|
||||
if (state->field == V4L2_FIELD_ALTERNATE)
|
||||
fmt->height /= 2;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -711,11 +714,11 @@ static int adv7180_set_pad_format(struct v4l2_subdev *sd,
|
||||
|
||||
switch (format->format.field) {
|
||||
case V4L2_FIELD_NONE:
|
||||
if (!(state->chip_info->flags & ADV7180_FLAG_I2P))
|
||||
format->format.field = V4L2_FIELD_INTERLACED;
|
||||
break;
|
||||
if (state->chip_info->flags & ADV7180_FLAG_I2P)
|
||||
break;
|
||||
/* fall through */
|
||||
default:
|
||||
format->format.field = V4L2_FIELD_INTERLACED;
|
||||
format->format.field = V4L2_FIELD_ALTERNATE;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1291,7 +1294,7 @@ static int adv7180_probe(struct i2c_client *client,
|
||||
return -ENOMEM;
|
||||
|
||||
state->client = client;
|
||||
state->field = V4L2_FIELD_INTERLACED;
|
||||
state->field = V4L2_FIELD_ALTERNATE;
|
||||
state->chip_info = (struct adv7180_chip_info *)id->driver_data;
|
||||
|
||||
state->pwdn_gpio = devm_gpiod_get_optional(&client->dev, "powerdown",
|
||||
|
Loading…
x
Reference in New Issue
Block a user