mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-04-03 12:05:13 +02:00
media: tegra-video: Use zero crop settings if subdev has no get_selection
Currently try format implementation doesn't check if subdevice has get_selection ops implemented and returns -EINVAL on error from direct v4l2_subdev_call of get_selection. Selection API's are not mandatory for all V4L2 subdevices. This patch fixes it by adding v4l2_subdev_has_ops check prior to calling get_selection ops and continues with try or set format with zero crop settings for subdevices that don't have get_selection and returns -EINVAL only for subdevices that has get_selection ops. Signed-off-by: Sowjanya Komatineni <skomatineni@nvidia.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
This commit is contained in:
committed by
Mauro Carvalho Chehab
parent
2ad100f359
commit
56f64b8235
@@ -533,11 +533,18 @@ static int __tegra_channel_try_format(struct tegra_vi_channel *chan,
|
||||
fse.code = fmtinfo->code;
|
||||
ret = v4l2_subdev_call(subdev, pad, enum_frame_size, pad_cfg, &fse);
|
||||
if (ret) {
|
||||
ret = v4l2_subdev_call(subdev, pad, get_selection, NULL, &sdsel);
|
||||
if (ret)
|
||||
return -EINVAL;
|
||||
pad_cfg->try_crop.width = sdsel.r.width;
|
||||
pad_cfg->try_crop.height = sdsel.r.height;
|
||||
if (!v4l2_subdev_has_op(subdev, pad, get_selection)) {
|
||||
pad_cfg->try_crop.width = 0;
|
||||
pad_cfg->try_crop.height = 0;
|
||||
} else {
|
||||
ret = v4l2_subdev_call(subdev, pad, get_selection,
|
||||
NULL, &sdsel);
|
||||
if (ret)
|
||||
return -EINVAL;
|
||||
|
||||
pad_cfg->try_crop.width = sdsel.r.width;
|
||||
pad_cfg->try_crop.height = sdsel.r.height;
|
||||
}
|
||||
} else {
|
||||
pad_cfg->try_crop.width = fse.max_width;
|
||||
pad_cfg->try_crop.height = fse.max_height;
|
||||
|
||||
Reference in New Issue
Block a user