V4L/DVB (5183): Fix CC handling in VIDIOC_INT_G_VBI_DATA
When capturing a 60 Hz input the internal field ID is inverted. The VIDIOC_INT_G_VBI_DATA didn't take that into account and so returned XDS instead of CC and vice versa. Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
This commit is contained in:
parent
2675f7a88f
commit
faeb4ab38f
|
@ -1388,6 +1388,9 @@ static int saa711x_command(struct i2c_client *client, unsigned int cmd, void *ar
|
|||
{
|
||||
struct v4l2_sliced_vbi_data *data = arg;
|
||||
|
||||
/* Note: the internal field ID is inverted for NTSC,
|
||||
so data->field 0 maps to the saa7115 even field,
|
||||
whereas for PAL it maps to the saa7115 odd field. */
|
||||
switch (data->id) {
|
||||
case V4L2_SLICED_WSS_625:
|
||||
if (saa711x_read(client, 0x6b) & 0xc0)
|
||||
|
@ -1398,17 +1401,17 @@ static int saa711x_command(struct i2c_client *client, unsigned int cmd, void *ar
|
|||
case V4L2_SLICED_CAPTION_525:
|
||||
if (data->field == 0) {
|
||||
/* CC */
|
||||
if (saa711x_read(client, 0x66) & 0xc0)
|
||||
if (saa711x_read(client, 0x66) & 0x30)
|
||||
return -EIO;
|
||||
data->data[0] = saa711x_read(client, 0x67);
|
||||
data->data[1] = saa711x_read(client, 0x68);
|
||||
data->data[0] = saa711x_read(client, 0x69);
|
||||
data->data[1] = saa711x_read(client, 0x6a);
|
||||
return 0;
|
||||
}
|
||||
/* XDS */
|
||||
if (saa711x_read(client, 0x66) & 0x30)
|
||||
if (saa711x_read(client, 0x66) & 0xc0)
|
||||
return -EIO;
|
||||
data->data[0] = saa711x_read(client, 0x69);
|
||||
data->data[1] = saa711x_read(client, 0x6a);
|
||||
data->data[0] = saa711x_read(client, 0x67);
|
||||
data->data[1] = saa711x_read(client, 0x68);
|
||||
return 0;
|
||||
default:
|
||||
return -EINVAL;
|
||||
|
|
Loading…
Reference in New Issue