[media] cx18: fix VIDIOC_ENUMINPUT: wrong std value
The std field of v4l2_input is always V4L2_STD_ALL. For tuner inputs this should be cx->tuner_std. This fixes a v4l2-compliance failure. Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Cc: Andy Walls <awalls@md.metrocast.net> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
This commit is contained in:

committed by
Mauro Carvalho Chehab

parent
eaa80c44d6
commit
3a29a4f177
@@ -514,6 +514,9 @@ int cx18_s_input(struct file *file, void *fh, unsigned int inp)
|
|||||||
{
|
{
|
||||||
struct cx18_open_id *id = fh2id(fh);
|
struct cx18_open_id *id = fh2id(fh);
|
||||||
struct cx18 *cx = id->cx;
|
struct cx18 *cx = id->cx;
|
||||||
|
v4l2_std_id std = V4L2_STD_ALL;
|
||||||
|
const struct cx18_card_video_input *card_input =
|
||||||
|
cx->card->video_inputs + inp;
|
||||||
|
|
||||||
if (inp >= cx->nof_inputs)
|
if (inp >= cx->nof_inputs)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
@@ -529,6 +532,11 @@ int cx18_s_input(struct file *file, void *fh, unsigned int inp)
|
|||||||
cx->active_input = inp;
|
cx->active_input = inp;
|
||||||
/* Set the audio input to whatever is appropriate for the input type. */
|
/* Set the audio input to whatever is appropriate for the input type. */
|
||||||
cx->audio_input = cx->card->video_inputs[inp].audio_index;
|
cx->audio_input = cx->card->video_inputs[inp].audio_index;
|
||||||
|
if (card_input->video_type == V4L2_INPUT_TYPE_TUNER)
|
||||||
|
std = cx->tuner_std;
|
||||||
|
cx->streams[CX18_ENC_STREAM_TYPE_MPG].video_dev.tvnorms = std;
|
||||||
|
cx->streams[CX18_ENC_STREAM_TYPE_YUV].video_dev.tvnorms = std;
|
||||||
|
cx->streams[CX18_ENC_STREAM_TYPE_VBI].video_dev.tvnorms = std;
|
||||||
|
|
||||||
/* prevent others from messing with the streams until
|
/* prevent others from messing with the streams until
|
||||||
we're finished changing inputs. */
|
we're finished changing inputs. */
|
||||||
|
@@ -304,6 +304,7 @@ static void cx18_stream_init(struct cx18 *cx, int type)
|
|||||||
/* Assume the previous pixel default */
|
/* Assume the previous pixel default */
|
||||||
s->pixelformat = V4L2_PIX_FMT_HM12;
|
s->pixelformat = V4L2_PIX_FMT_HM12;
|
||||||
s->vb_bytes_per_frame = cx->cxhdl.height * 720 * 3 / 2;
|
s->vb_bytes_per_frame = cx->cxhdl.height * 720 * 3 / 2;
|
||||||
|
s->vb_bytes_per_line = 720;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -372,6 +373,9 @@ static int cx18_prep_dev(struct cx18 *cx, int type)
|
|||||||
s->video_dev.v4l2_dev = &cx->v4l2_dev;
|
s->video_dev.v4l2_dev = &cx->v4l2_dev;
|
||||||
s->video_dev.fops = &cx18_v4l2_enc_fops;
|
s->video_dev.fops = &cx18_v4l2_enc_fops;
|
||||||
s->video_dev.release = video_device_release_empty;
|
s->video_dev.release = video_device_release_empty;
|
||||||
|
if (cx->card->video_inputs->video_type == CX18_CARD_INPUT_VID_TUNER)
|
||||||
|
s->video_dev.tvnorms = cx->tuner_std;
|
||||||
|
else
|
||||||
s->video_dev.tvnorms = V4L2_STD_ALL;
|
s->video_dev.tvnorms = V4L2_STD_ALL;
|
||||||
s->video_dev.lock = &cx->serialize_lock;
|
s->video_dev.lock = &cx->serialize_lock;
|
||||||
cx18_set_funcs(&s->video_dev);
|
cx18_set_funcs(&s->video_dev);
|
||||||
|
Reference in New Issue
Block a user