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);