Mercurial > mplayer.hg
diff stream/tvi_v4l.c @ 23422:e7b4c913dc31
New "automute" tv:// option.
Will switch off sound and show blue screen instead of video with noise
when signal level (in 0-255 scale) is less than specified value.
author | voroshil |
---|---|
date | Thu, 31 May 2007 17:49:51 +0000 |
parents | 09f0cb23d9c9 |
children | a124f3abc1ec |
line wrap: on
line diff
--- a/stream/tvi_v4l.c Thu May 31 17:30:49 2007 +0000 +++ b/stream/tvi_v4l.c Thu May 31 17:49:51 2007 +0000 @@ -1381,6 +1381,21 @@ return(TVI_CONTROL_UNKNOWN); } +static int set_mute(priv_t* priv,int value) +{ + if (!priv->capability.audios) { + return 0; + + if(value) + priv->audio[priv->audio_id].flags |=VIDEO_AUDIO_MUTE; + else + priv->audio[priv->audio_id].flags &= ~VIDEO_AUDIO_MUTE; + } + if(ioctl(priv->video_fd, VIDIOCSAUDIO, &priv->audio[priv->audio_id])<0) + return 0; + return 1; +} + // copies a video frame // for RGB (i.e. BGR in mplayer) flips the image upside down // for YV12 swaps the 2nd and 3rd plane @@ -1389,6 +1404,16 @@ int i; unsigned char *sptr; + if(tv_param_automute>0){ + if (ioctl(priv->video_fd, VIDIOCGTUNER, &priv->tuner) >= 0) { + if(tv_param_automute<<8>priv->tuner.signal){ + fill_blank_frame(dest,priv->bytesperline * priv->height,priv->format); + set_mute(priv,1); + return; + } + } + set_mute(priv,0); + } // YV12 uses VIDEO_PALETTE_YUV420P, but the planes are swapped if (priv->format == IMGFMT_YV12) { memcpy(dest, source, priv->width * priv->height);