summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--linux/Documentation/dvb/cards.txt4
-rw-r--r--linux/drivers/media/video/saa7134/saa7134-cards.c5
-rw-r--r--linux/drivers/media/video/saa7134/saa7134-input.c10
-rw-r--r--linux/drivers/media/video/tveeprom.c9
-rw-r--r--linux/include/media/tveeprom.h2
-rw-r--r--v4l2-apps/test/ioctl-test.c212
-rw-r--r--v4l2-apps/util/v4l2-ctl.cpp71
7 files changed, 265 insertions, 48 deletions
diff --git a/linux/Documentation/dvb/cards.txt b/linux/Documentation/dvb/cards.txt
index ca58e339d..cc09187a5 100644
--- a/linux/Documentation/dvb/cards.txt
+++ b/linux/Documentation/dvb/cards.txt
@@ -22,10 +22,10 @@ o Frontends drivers:
- ves1x93 : Alps BSRV2 (ves1893 demodulator) and dbox2 (ves1993)
- cx24110 : Conexant HM1221/HM1811 (cx24110 or cx24106 demod, cx24108 PLL)
- grundig_29504-491 : Grundig 29504-491 (Philips TDA8083 demodulator), tsa5522 PLL
- - mt312 : Zarlink mt312 or Mitel vp310 demodulator, sl1935 or tsa5059 PLL
+ - mt312 : Zarlink mt312 or Mitel vp310 demodulator, sl1935 or tsa5059 PLLi, Technisat Sky2Pc with bios Rev. 2.3
- stv0299 : Alps BSRU6 (tsa5059 PLL), LG TDQB-S00x (tsa5059 PLL),
LG TDQF-S001F (sl1935 PLL), Philips SU1278 (tua6100 PLL),
- Philips SU1278SH (tsa5059 PLL), Samsung TBMU24112IMB
+ Philips SU1278SH (tsa5059 PLL), Samsung TBMU24112IMB, Technisat Sky2Pc with bios Rev. 2.6
DVB-C:
- ves1820 : various (ves1820 demodulator, sp5659c or spXXXX PLL)
- at76c651 : Atmel AT76c651(B) with DAT7021 PLL
diff --git a/linux/drivers/media/video/saa7134/saa7134-cards.c b/linux/drivers/media/video/saa7134/saa7134-cards.c
index 24faf5ad3..33beca409 100644
--- a/linux/drivers/media/video/saa7134/saa7134-cards.c
+++ b/linux/drivers/media/video/saa7134/saa7134-cards.c
@@ -3012,7 +3012,7 @@ struct saa7134_board saa7134_boards[] = {
/* Petr Baudis <pasky@ucw.cz> */
.name = "AVerMedia TV Hybrid A16AR",
.audio_clock = 0x187de7,
- .tuner_type = TUNER_PHILIPS_TDA8290, /* untested */
+ .tuner_type = TUNER_PHILIPS_TD1316, /* untested */
.radio_type = TUNER_TEA5767, /* untested */
.tuner_addr = ADDR_UNSET,
.radio_addr = ADDR_UNSET,
@@ -3946,6 +3946,7 @@ int saa7134_board_init1(struct saa7134_dev *dev)
case SAA7134_BOARD_AVERMEDIA_307:
case SAA7134_BOARD_AVERMEDIA_STUDIO_507:
case SAA7134_BOARD_AVERMEDIA_GO_007_FM:
+ case SAA7134_BOARD_AVERMEDIA_777:
/* case SAA7134_BOARD_SABRENT_SBTTVFM: */ /* not finished yet */
case SAA7134_BOARD_VIDEOMATE_TV_PVR:
case SAA7134_BOARD_VIDEOMATE_GOLD_PLUS:
@@ -3963,6 +3964,7 @@ int saa7134_board_init1(struct saa7134_dev *dev)
case SAA7134_BOARD_FLYDVBT_LR301:
case SAA7134_BOARD_FLYDVBTDUO:
case SAA7134_BOARD_PROTEUS_2309:
+ case SAA7134_BOARD_AVERMEDIA_A16AR:
dev->has_remote = SAA7134_REMOTE_GPIO;
break;
case SAA7134_BOARD_FLYDVBS_LR300:
@@ -4001,7 +4003,6 @@ int saa7134_board_init1(struct saa7134_dev *dev)
saa_writeb(SAA7134_GPIO_GPMODE3, 0x08);
saa_writeb(SAA7134_GPIO_GPSTATUS3, 0x00);
break;
- case SAA7134_BOARD_AVERMEDIA_A16AR:
case SAA7134_BOARD_AVERMEDIA_CARDBUS:
/* power-up tuner chip */
saa_andorl(SAA7134_GPIO_GPMODE0 >> 2, 0xffffffff, 0xffffffff);
diff --git a/linux/drivers/media/video/saa7134/saa7134-input.c b/linux/drivers/media/video/saa7134/saa7134-input.c
index 99462db8f..c7df8d1c5 100644
--- a/linux/drivers/media/video/saa7134/saa7134-input.c
+++ b/linux/drivers/media/video/saa7134/saa7134-input.c
@@ -187,7 +187,6 @@ int saa7134_input_init1(struct saa7134_dev *dev)
case SAA7134_BOARD_AVERMEDIA_STUDIO_307:
case SAA7134_BOARD_AVERMEDIA_STUDIO_507:
case SAA7134_BOARD_AVERMEDIA_GO_007_FM:
- case SAA7134_BOARD_AVERMEDIA_A16AR:
ir_codes = ir_codes_avermedia;
mask_keycode = 0x0007C8;
mask_keydown = 0x000010;
@@ -196,6 +195,15 @@ int saa7134_input_init1(struct saa7134_dev *dev)
saa_setb(SAA7134_GPIO_GPMODE0, 0x4);
saa_setb(SAA7134_GPIO_GPSTATUS0, 0x4);
break;
+ case SAA7134_BOARD_AVERMEDIA_777:
+ case SAA7134_BOARD_AVERMEDIA_A16AR:
+ ir_codes = ir_codes_avermedia;
+ mask_keycode = 0x02F200;
+ mask_keydown = 0x000400;
+ polling = 50; // ms
+ /* Without this we won't receive key up events */
+ saa_setb(SAA7134_GPIO_GPMODE1, 0x1);
+ saa_setb(SAA7134_GPIO_GPSTATUS1, 0x1);
case SAA7134_BOARD_KWORLD_TERMINATOR:
ir_codes = ir_codes_pixelview;
mask_keycode = 0x00001f;
diff --git a/linux/drivers/media/video/tveeprom.c b/linux/drivers/media/video/tveeprom.c
index 2b290a731..dd06107a3 100644
--- a/linux/drivers/media/video/tveeprom.c
+++ b/linux/drivers/media/video/tveeprom.c
@@ -434,7 +434,7 @@ void tveeprom_hauppauge_analog(struct i2c_client *c, struct tveeprom *tvee,
tvee->has_radio = eeprom_data[i+len-1];
/* old style tag, don't know how to detect
IR presence, mark as unknown. */
- tvee->has_ir = 2;
+ tvee->has_ir = -1;
tvee->model =
eeprom_data[i+8] +
(eeprom_data[i+9] << 8);
@@ -657,13 +657,14 @@ void tveeprom_hauppauge_analog(struct i2c_client *c, struct tveeprom *tvee,
STRM(decoderIC, tvee->decoder_processor),
tvee->decoder_processor);
}
- if (tvee->has_ir == 2)
+ if (tvee->has_ir == -1)
tveeprom_info("has %sradio\n",
tvee->has_radio ? "" : "no ");
else
- tveeprom_info("has %sradio, has %sIR remote\n",
+ tveeprom_info("has %sradio, has %sIR receiver, has %sIR transmitter\n",
tvee->has_radio ? "" : "no ",
- tvee->has_ir ? "" : "no ");
+ (tvee->has_ir & 1) ? "" : "no ",
+ (tvee->has_ir & 2) ? "" : "no ");
}
EXPORT_SYMBOL(tveeprom_hauppauge_analog);
diff --git a/linux/include/media/tveeprom.h b/linux/include/media/tveeprom.h
index e9fc1a785..5660ea249 100644
--- a/linux/include/media/tveeprom.h
+++ b/linux/include/media/tveeprom.h
@@ -3,7 +3,7 @@
struct tveeprom {
u32 has_radio;
- u32 has_ir; /* 0: no IR, 1: IR present, 2: unknown */
+ u32 has_ir; /* bit 0: IR receiver present, bit 1: IR transmitter (blaster) present. -1 == unknown */
u32 has_MAC_address; /* 0: no MAC, 1: MAC present, 2: unknown */
u32 tuner_type;
diff --git a/v4l2-apps/test/ioctl-test.c b/v4l2-apps/test/ioctl-test.c
index 6d78ad0f8..335ccf102 100644
--- a/v4l2-apps/test/ioctl-test.c
+++ b/v4l2-apps/test/ioctl-test.c
@@ -51,8 +51,9 @@ typedef u_int32_t u32;
/* All possible parameters used on v4l ioctls */
union v4l_parms {
int i;
- unsigned long l;
- u32 u_32;
+ unsigned long u64;
+ u32 u32;
+ v4l2_std_id id;
#ifdef CONFIG_VIDEO_V4L1_COMPAT
/* V4L1 structs */
@@ -148,10 +149,12 @@ int ioctls[] = {
VIDIOC_ENUMAUDOUT,/* struct v4l2_audioout */
VIDIOC_ENUM_FMT,/* struct v4l2_fmtdesc */
VIDIOC_ENUMINPUT,/* struct v4l2_input */
+ VIDIOC_G_INPUT,/* int */
+ VIDIOC_S_INPUT,/* int */
VIDIOC_ENUMOUTPUT,/* struct v4l2_output */
VIDIOC_ENUMSTD,/* struct v4l2_standard */
-// VIDIOC_G_AUDIO_OLD,/* struct v4l2_audio */
-// VIDIOC_G_AUDOUT_OLD,/* struct v4l2_audioout */
+ VIDIOC_G_STD, /*v4l2_std_id */
+ VIDIOC_S_STD, /*v4l2_std_id */
VIDIOC_G_CROP,/* struct v4l2_crop */
VIDIOC_G_CTRL,/* struct v4l2_control */
VIDIOC_G_FMT,/* struct v4l2_format */
@@ -159,7 +162,6 @@ int ioctls[] = {
VIDIOC_G_MODULATOR,/* struct v4l2_modulator */
VIDIOC_G_PARM,/* struct v4l2_streamparm */
VIDIOC_G_TUNER,/* struct v4l2_tuner */
-// VIDIOC_OVERLAY_OLD,/* int */
VIDIOC_QBUF,/* struct v4l2_buffer */
VIDIOC_QUERYBUF,/* struct v4l2_buffer */
VIDIOC_QUERYCTRL,/* struct v4l2_queryctrl */
@@ -172,6 +174,12 @@ int ioctls[] = {
VIDIOC_S_PARM,/* struct v4l2_streamparm */
VIDIOC_TRY_FMT,/* struct v4l2_format */
+#if 0
+ VIDIOC_G_AUDIO_OLD,/* struct v4l2_audio */
+ VIDIOC_G_AUDOUT_OLD,/* struct v4l2_audioout */
+ VIDIOC_OVERLAY_OLD,/* int */
+#endif
+
#ifdef INTERNAL
/* V4L2 internal ioctls */
AUDC_SET_RADIO,/* no args */
@@ -201,6 +209,193 @@ int ioctls[] = {
#define S_IOCTLS sizeof(ioctls)/sizeof(ioctls[0])
/********************************************************************/
+
+int get_capabilities (int fd, union v4l_parms *p)
+{
+ int ret;
+
+ ret=ioctl(fd,VIDIOC_QUERYCAP,(void *) &p);
+ if (ret>=0) {
+ struct v4l2_capability *pq= (struct v4l2_capability *)&p;
+ printf ("driver=%s, card=%s, bus=%s, version=0x%08x, "
+ "capabilities=0x%08x\n",
+ pq->driver,pq->card,pq->bus_info,
+ pq->version,
+ pq->capabilities);
+ }
+ return ret;
+}
+
+#define ERR "*** ERROR "
+#define WARN "* Warning "
+
+int get_set_stds (int fd, union v4l_parms *p)
+{
+ struct v4l2_standard *pq=(void *)p;
+ int ok=0,ret,i;
+ v4l2_std_id id;
+
+ for (i=0; ok==0; i++) {
+ pq->index=i;
+ ok=ioctl(fd,VIDIOC_ENUMSTD,pq);
+ if (ok>=0) {
+ printf ("STANDARD: index=%d, id=%Ld, name=%s, fps=%.3f, "
+ "framelines=%d\n", pq->index,
+ (unsigned long long)pq->id, pq->name,
+ 1.*pq->frameperiod.denominator/pq->frameperiod.numerator,
+ pq->framelines);
+ } else
+ break;
+ id=pq->id;
+ p->id=id;
+ ret=ioctl(fd,VIDIOC_S_STD,p);
+ if (ret) {
+ printf (ERR "%i while trying to set STD to %08x\n",ret,
+ (unsigned int) id);
+ }
+ ret=ioctl(fd,VIDIOC_G_STD,p);
+ if (ret) {
+ printf (ERR "%i while trying to get STD id\n",ret);
+ }
+ if (id & p->id) {
+ if (id != p->id) {
+ printf (WARN "Received a std subset (%08x std) while trying to adjust to %08x\n",
+ (unsigned int) p->id,(unsigned int) id);
+ }
+ } else
+ printf (ERR "Received %08x std while trying to adjust to %08x\n",
+ (unsigned int) p->id,(unsigned int) id);
+
+ }
+ return ok;
+}
+
+int get_set_inputs (int fd, union v4l_parms *arg)
+{
+ struct v4l2_input *p=(void *)arg;
+ int ok=0,ret,i;
+ int input;
+
+ for (i=0; ok==0; i++) {
+ p->index=i;
+ ok=ioctl(fd,VIDIOC_ENUMINPUT,p);
+ if (ok>=0) {
+
+ printf ("INPUT: index=%d, name=%s, type=%d, audioset=%d, "
+ "tuner=%d, std=%08x, status=%d\n",
+ p->index,p->name,p->type,p->audioset,
+ p->tuner,
+ (unsigned int)p->std,
+ p->status);
+
+ } else
+ break;
+ input=p->index;
+ arg->i=input;
+ ret=ioctl(fd,VIDIOC_S_INPUT,arg);
+ if (ret) {
+ printf (ERR "%i while trying to set INPUT to %d\n",ret,
+ input);
+ }
+ ret=ioctl(fd,VIDIOC_G_INPUT,arg);
+ if (ret) {
+ printf (ERR "%i while trying to get INPUT id\n",ret);
+ }
+ if (input != arg->i) {
+ printf ("Input is different than expected (received %i, set %i)\n",
+ input, p->index);
+ }
+ }
+ return ok;
+}
+
+int get_set_formats (int fd, union v4l_parms *arg)
+{
+ struct v4l2_fmtdesc *p=(void *)arg;
+ int ok=0,ret,i;
+ struct v4l2_format fmt;
+ struct v4l2_streamparm parm;
+ struct v4l2_captureparm *c;
+
+
+ for (i=0; ok==0; i++) {
+ p->index=i;
+ p->type=V4L2_BUF_TYPE_VIDEO_CAPTURE;
+
+ ok=ioctl(fd,VIDIOC_ENUM_FMT,p);
+ if (ok>=0) {
+ printf ("FORMAT: index=%d, type=%d, flags=%d, description=%s\n\t"
+ "pixelformat=0x%08x\n",
+ p->index, p->type, p->flags,p->description,
+ p->pixelformat);
+ } else
+ break;
+
+ parm.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
+ if (ioctl(fd,VIDIOC_G_PARM,&parm)>=0) {
+ c=&parm.parm.capture;
+ printf ("PARM: capability=%d, capturemode=%d, frame time =%.3f ns "
+ "ext=%x, readbuf=%d\n",
+ c->capability,
+ c->capturemode,
+ 100.*c->timeperframe.numerator/c->timeperframe.denominator,
+ c->extendedmode, c->readbuffers);
+ } else
+ perror ("VIDIOC_G_PARM");
+
+#if 0
+ fmt.type=p->type;
+ fmt.pixelformat=p->pixelformat;
+
+ ret=ioctl(fd,VIDIOC_G_FMT,arg);
+ if (ret < 0) {
+ printf("VIDIOC_G_FMT failed\n");
+ continue;
+ }
+
+ switch (f->type) {
+ case V4L2_BUF_TYPE_VIDEO_CAPTURE:
+
+ err = cx8800_try_fmt(dev,fh,f);
+ if (0 != err)
+ return err;
+
+ fmt.pixelformat=p->pixelformat;
+ fmt.
+ fh->fmt = format_by_fourcc(f->fmt.pix.pixelformat);
+ fh->width = f->fmt.pix.width;
+ fh->height = f->fmt.pix.height;
+ fh->vidq.field = f->fmt.pix.field;
+ return 0;
+ case V4L2_BUF_TYPE_VBI_CAPTURE:
+ cx8800_vbi_fmt(dev, f);
+ return 0;
+ default:
+ printf(WARN "format type not implemented\n");
+ continue;
+ }
+
+
+ input=p->index;
+ arg->i=input;
+ ret=ioctl(fd,VIDIOC_S_INPUT,arg);
+ if (ret) {
+ printf (ERR "%i while trying to set INPUT to %d\n",ret,
+ input);
+ }
+ ret=ioctl(fd,VIDIOC_G_INPUT,arg);
+ if (ret) {
+ printf (ERR "%i while trying to get INPUT id\n",ret);
+ }
+ if (input != arg->i) {
+ printf ("Input is different than expected (received %i, set %i)\n",
+ input, p->index);
+ }
+#endif
+ }
+ return ok;
+}
+
int main (void)
{
int fd=0, ret=0;
@@ -213,11 +408,18 @@ int main (void)
return(-1);
}
+ get_capabilities (fd, &p);
+ get_set_stds (fd, &p);
+ get_set_inputs (fd, &p);
+ get_set_formats (fd, &p);
+
+#if 0
for (i=0;i<S_IOCTLS;i++) {
memset(&p,0,sizeof(p));
ret=ioctl(fd,ioctls[i], (void *) &p);
printf("%i: ioctl=0x%08x, return=%d\n",i, ioctls[i], ret);
}
+#endif
close (fd);
diff --git a/v4l2-apps/util/v4l2-ctl.cpp b/v4l2-apps/util/v4l2-ctl.cpp
index a90dd76eb..7dabb3969 100644
--- a/v4l2-apps/util/v4l2-ctl.cpp
+++ b/v4l2-apps/util/v4l2-ctl.cpp
@@ -51,10 +51,8 @@
In general the lower case is used to set something and the upper
case is used to retrieve a setting. */
enum Option {
- OptGetAudioInput = 'A',
- OptSetAudioInput = 'a',
- OptGetAudioOutput = 'B',
- OptSetAudioOutput = 'b',
+ OptGetSlicedVbiFormat = 'B',
+ OptSetSlicedVbiFormat = 'b',
OptGetCtrl = 'C',
OptSetCtrl = 'c',
OptSetDevice = 'd',
@@ -70,8 +68,6 @@ enum Option {
OptListInputs = 'n',
OptGetOutput = 'O',
OptSetOutput = 'o',
- OptListAudioOutputs = 'Q',
- OptListAudioInputs = 'q',
OptGetStandard = 'S',
OptSetStandard = 's',
OptGetTuner = 'T',
@@ -79,9 +75,7 @@ enum Option {
OptGetVideoFormat = 'V',
OptSetVideoFormat = 'v',
- OptGetSlicedVbiFormat = 128,
- OptSetSlicedVbiFormat,
- OptGetSlicedVbiOutFormat,
+ OptGetSlicedVbiOutFormat = 128,
OptSetSlicedVbiOutFormat,
OptGetOverlayFormat,
//OptSetOverlayFormat, TODO
@@ -102,6 +96,12 @@ enum Option {
OptGetSlicedVbiOutCap,
OptGetVideoCrop,
OptSetVideoCrop,
+ OptGetAudioInput,
+ OptSetAudioInput,
+ OptGetAudioOutput,
+ OptSetAudioOutput,
+ OptListAudioOutputs,
+ OptListAudioInputs,
OptLast = 256
};
@@ -199,15 +199,18 @@ static struct option long_options[] = {
static void usage(void)
{
printf("Usage:\n");
+ printf("Common options:\n");
printf(" --all display all information available\n");
- printf(" -A, --get-audio-input\n");
- printf(" query the audio input [VIDIOC_G_AUDIO]\n");
- printf(" -a, --set-audio-input=<num>\n");
- printf(" set the audio input to <num> [VIDIOC_S_AUDIO]\n");
- printf(" -B, --get-audio-output\n");
- printf(" query the audio output [VIDIOC_G_AUDOUT]\n");
- printf(" -b, --set-audio-output=<num>\n");
- printf(" set the audio output to <num> [VIDIOC_S_AUDOUT]\n");
+ printf(" -B, --get-fmt-sliced-vbi\n");
+ printf(" query the sliced VBI capture format [VIDIOC_G_FMT]\n");
+ printf(" -b, --set-fmt-sliced-vbi=<mode>\n");
+ printf(" set the sliced VBI capture format to <mode> [VIDIOC_S_FMT]\n");
+ printf(" <mode> is a comma separated list of:\n");
+ printf(" off: turn off sliced VBI (cannot be combined with other modes)\n");
+ printf(" teletext: teletext (PAL/SECAM)\n");
+ printf(" cc: closed caption (NTSC)\n");
+ printf(" wss: widescreen signal (PAL/SECAM)\n");
+ printf(" vps: VPS (PAL/SECAM)\n");
printf(" -C, --get-ctrl=<ctrl>[,<ctrl>...]\n");
printf(" get the value of the controls [VIDIOC_G_EXT_CTRLS]\n");
printf(" -c, --set-ctrl=<ctrl>=<val>[,<ctrl>=<val>...]\n");
@@ -252,30 +255,19 @@ static void usage(void)
printf(" query the video capture format [VIDIOC_G_FMT]\n");
printf(" -v, --set-fmt-video=width=<x>,height=<y>\n");
printf(" set the video capture format [VIDIOC_S_FMT]\n");
+ printf(" --verbose turn on verbose ioctl error reporting.\n");
+ printf("\n");
+ printf("Uncommon options:\n");
printf(" --get-fmt-video-out\n");
printf(" query the video output format [VIDIOC_G_FMT]\n");
printf(" --set-fmt-video-out=width=<x>,height=<y>\n");
printf(" set the video output format [VIDIOC_S_FMT]\n");
printf(" --get-fmt-overlay\n");
printf(" query the video overlay format [VIDIOC_G_FMT]\n");
- printf(" --get-crop-video\n");
- printf(" query the video capture crop window [VIDIOC_G_CROP]\n");
- printf(" --set-crop-video=top=<x>,left=<y>,width=<w>,height=<h>\n");
- printf(" set the video capture crop window [VIDIOC_S_CROP]\n");
printf(" --get-sliced-vbi-cap\n");
printf(" query the sliced VBI capture capabilities [VIDIOC_G_SLICED_VBI_CAP]\n");
printf(" --get-sliced-vbi-out-cap\n");
printf(" query the sliced VBI output capabilities [VIDIOC_G_SLICED_VBI_CAP]\n");
- printf(" --get-fmt-sliced-vbi\n");
- printf(" query the sliced VBI capture format [VIDIOC_G_FMT]\n");
- printf(" --set-fmt-sliced-vbi=<mode>\n");
- printf(" set the sliced VBI capture format to <mode> [VIDIOC_S_FMT]\n");
- printf(" <mode> is a comma separated list of:\n");
- printf(" off: turn off sliced VBI (cannot be combined with other modes)\n");
- printf(" teletext: teletext (PAL/SECAM)\n");
- printf(" cc: closed caption (NTSC)\n");
- printf(" wss: widescreen signal (PAL/SECAM)\n");
- printf(" vps: VPS (PAL/SECAM)\n");
printf(" --get-fmt-sliced-vbi-out\n");
printf(" query the sliced VBI output format [VIDIOC_G_FMT]\n");
printf(" --set-fmt-sliced-vbi-out=<mode>\n");
@@ -288,7 +280,20 @@ static void usage(void)
printf(" vps: VPS (PAL/SECAM)\n");
printf(" --get-fmt-vbi query the VBI capture format [VIDIOC_G_FMT]\n");
printf(" --get-fmt-vbi-out query the VBI output format [VIDIOC_G_FMT]\n");
- printf(" --verbose turn on verbose ioctl error reporting.\n");
+ printf(" --get-crop-video\n");
+ printf(" query the video capture crop window [VIDIOC_G_CROP]\n");
+ printf(" --set-crop-video=top=<x>,left=<y>,width=<w>,height=<h>\n");
+ printf(" set the video capture crop window [VIDIOC_S_CROP]\n");
+ printf(" --get-audio-input query the audio input [VIDIOC_G_AUDIO]\n");
+ printf(" --set-audio-input=<num>\n");
+ printf(" set the audio input to <num> [VIDIOC_S_AUDIO]\n");
+ printf(" --get-audio-output query the audio output [VIDIOC_G_AUDOUT]\n");
+ printf(" --set-audio-output=<num>\n");
+ printf(" set the audio output to <num> [VIDIOC_S_AUDOUT]\n");
+ printf(" --list-audio-outputs\n");
+ printf(" display audio outputs [VIDIOC_ENUMAUDOUT]\n");
+ printf(" --list-audio-inputs\n");
+ printf(" display audio inputs [VIDIOC_ENUMAUDIO]\n");
printf("\n");
printf("Expert options:\n");
printf(" --streamoff turn the stream off [VIDIOC_STREAMOFF]\n");
@@ -404,7 +409,7 @@ static std::string flags2s(unsigned val, const flag_def *def)
static void print_sliced_vbi_cap(struct v4l2_sliced_vbi_cap &cap)
{
-// printf("\tType : %s\n", buftype2s(vfmt.type).c_str());
+ printf("\tType : %s\n", buftype2s(cap.type).c_str());
printf("\tService Set : %s\n",
flags2s(cap.service_set, service_def).c_str());
for (int i = 0; i < 24; i++) {