[Mplayer-cvslog] CVS: main/libmpdemux tvi_v4l.c,1.8,1.9
Alex Beregszaszi
alex at mplayer.dev.hu
Sun Nov 11 17:28:14 CET 2001
Update of /cvsroot/mplayer/main/libmpdemux
In directory mplayer:/var/tmp.root/cvs-serv420
Modified Files:
tvi_v4l.c
Log Message:
updated audio and tuner checking
Index: tvi_v4l.c
===================================================================
RCS file: /cvsroot/mplayer/main/libmpdemux/tvi_v4l.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- tvi_v4l.c 11 Nov 2001 15:45:23 -0000 1.8
+++ tvi_v4l.c 11 Nov 2001 16:28:12 -0000 1.9
@@ -43,6 +43,7 @@
int fd;
struct video_capability capability;
struct video_channel *channels;
+ int act_channel;
struct video_tuner tuner;
/* video */
@@ -64,19 +65,23 @@
#include "tvi_def.h"
-static const char *device_cap[] = {
+static const char *device_cap2name[] = {
"capture", "tuner", "teletext", "overlay", "chromakey", "clipping",
"frameram", "scales", "monochrome", "subcapture", "mpeg-decoder",
"mpeg-encoder", "mjpeg-decoder", "mjpeg-encoder", NULL
};
-static const char *device_pal[] = {
+static const char *device_palette2name[] = {
"-", "grey", "hi240", "rgb16", "rgb24", "rgb32", "rgb15", "yuv422",
"yuyv", "uyvy", "yuv420", "yuv411", "raw", "yuv422p", "yuv411p",
"yuv420p", "yuv410p", NULL
};
#define PALETTE(x) ((x < sizeof(device_pal)/sizeof(char*)) ? device_pal[x] : "UNKNOWN")
+static const char *audio_mode2name[] = {
+ "unknown", "mono", "stereo", "language1", "language2", NULL
+};
+
static int palette2depth(int palette)
{
switch(palette)
@@ -258,9 +263,9 @@
mp_msg(MSGT_TV, MSGL_INFO, "Selected device: %s\n", priv->capability.name);
mp_msg(MSGT_TV, MSGL_INFO, " Capabilites: ");
- for (i = 0; device_cap[i] != NULL; i++)
+ for (i = 0; device_cap2name[i] != NULL; i++)
if (priv->capability.type & (1 << i))
- mp_msg(MSGT_TV, MSGL_INFO, "%s ", device_cap[i]);
+ mp_msg(MSGT_TV, MSGL_INFO, "%s ", device_cap2name[i]);
mp_msg(MSGT_TV, MSGL_INFO, "\n");
mp_msg(MSGT_TV, MSGL_INFO, " Device type: %d\n", priv->capability.type);
mp_msg(MSGT_TV, MSGL_INFO, " Supported sizes: %dx%d => %dx%d\n",
@@ -275,7 +280,11 @@
for (i = 0; i < priv->capability.channels; i++)
{
priv->channels[i].channel = i;
- ioctl(priv->fd, VIDIOCGCHAN, &priv->channels[i]);
+ if (ioctl(priv->fd, VIDIOCGCHAN, &priv->channels[i]) == -1)
+ {
+ mp_msg(MSGT_TV, MSGL_ERR, "ioctl get channel failed: %s\n", strerror(errno));
+ break;
+ }
mp_msg(MSGT_TV, MSGL_INFO, " %d: %s: %s%s%s%s (tuner:%d, norm:%d)\n", i,
priv->channels[i].name,
(priv->channels[i].flags & VIDEO_VC_TUNER) ? "tuner " : "",
@@ -286,6 +295,30 @@
priv->channels[i].norm);
}
+ if (priv->capability.audios)
+ {
+ mp_msg(MSGT_TV, MSGL_INFO, " Audio devices: %d\n", priv->capability.audios);
+
+ for (i = 0; i < priv->capability.audios; i++)
+ {
+ priv->audio.audio = i;
+ if (ioctl(priv->fd, VIDIOCGAUDIO, &priv->audio) == -1)
+ {
+ mp_msg(MSGT_TV, MSGL_ERR, "ioctl get audio failed: %s\n", strerror(errno));
+ break;
+ }
+
+ mp_msg(MSGT_TV, MSGL_V, " %d: %s: ", priv->audio.audio,
+ priv->audio.name);
+ if (priv->audio.flags & VIDEO_AUDIO_MUTABLE)
+ mp_msg(MSGT_TV, MSGL_V, "muted=%s ",
+ (priv->audio.flags & VIDEO_AUDIO_MUTE) ? "yes" : "no");
+ mp_msg(MSGT_TV, MSGL_V, "volume=%d bass=%d treble=%d balance=%d mode=%s\n",
+ priv->audio.volume, priv->audio.bass, priv->audio.treble,
+ priv->audio.balance, audio_mode2name[priv->audio.mode]);
+ }
+ }
+
if (!(priv->capability.type & VID_TYPE_CAPTURE))
{
mp_msg(MSGT_TV, MSGL_ERR, "Only grabbing supported (for overlay use another program)\n");
@@ -316,6 +349,7 @@
/* video buffers */
priv->buf = (struct video_mmap *)malloc(priv->nbuf * sizeof(struct video_mmap));
memset(priv->buf, 0, priv->nbuf * sizeof(struct video_mmap));
+
return(1);
@@ -410,10 +444,15 @@
return(TVI_CONTROL_FALSE);
}
case TVI_CONTROL_IS_AUDIO:
- return(TVI_CONTROL_FALSE); /* IMPLEMENT CHECK! */
+#if 0 /* also disable audio for as it's not working! */
+ if (priv->channels[priv->act_channel].flags & VIDEO_VC_AUDIO)
+ return(TVI_CONTROL_TRUE);
+#endif
+ return(TVI_CONTROL_FALSE);
case TVI_CONTROL_IS_TUNER:
{
- if (priv->capability.type & VID_TYPE_TUNER)
+// if (priv->capability.type & VID_TYPE_TUNER)
+ if (priv->channels[priv->act_channel].flags & VIDEO_VC_TUNER)
return(TVI_CONTROL_TRUE);
return(TVI_CONTROL_FALSE);
}
@@ -612,6 +651,8 @@
if (priv->channels[i].channel == req_chan)
break;
}
+
+ priv->act_channel = i;
if (ioctl(priv->fd, VIDIOCGCHAN, &priv->channels[i]) == -1)
{
@@ -647,8 +688,11 @@
}
mp_msg(MSGT_TV, MSGL_INFO, "Using input '%s'\n", chan.name);
+ priv->act_channel = i;
+
/* update tuner state */
- if (priv->capability.type & VID_TYPE_TUNER)
+// if (priv->capability.type & VID_TYPE_TUNER)
+ if (priv->channels[priv->act_channel].flags & VIDEO_VC_TUNER)
control(priv, TVI_CONTROL_TUN_GET_TUNER, 0);
/* update local channel list */
More information about the MPlayer-cvslog
mailing list