I'm too lazy to comment this
authorSjoerd Simons <sjoerd@luon.net>
Sat, 1 Mar 2003 13:12:41 +0000 (13:12 +0000)
committerRonald S. Bultje <rbultje@ronald.bitfreak.net>
Sat, 1 Mar 2003 13:12:41 +0000 (13:12 +0000)
Original commit message from CVS:
close device if opening fails, and don't use audio if nothing was set (patch by sjoerd@luon.net)

sys/v4l/gstv4lelement.c
sys/v4l/gstv4lelement.h

index a5b635b..47afea6 100644 (file)
@@ -244,7 +244,7 @@ gst_v4lelement_init (GstV4lElement *v4lelement)
 
   v4lelement->frequency = 0;
 
-  v4lelement->mute = FALSE;
+  v4lelement->mute = -1;
   v4lelement->volume = -1;
   v4lelement->mode = -1;
 
@@ -555,22 +555,23 @@ gst_v4lelement_change_state (GstElement *element)
       if (!gst_v4l_open(v4lelement))
         return GST_STATE_FAILURE;
 
-      g_signal_emit(G_OBJECT(v4lelement),
-                    gst_v4lelement_signals[SIGNAL_OPEN], 0,
-                    v4lelement->videodev);
-
       /* now, sync options */
       if (v4lelement->norm >= VIDEO_MODE_PAL &&
           v4lelement->norm < VIDEO_MODE_AUTO &&
           v4lelement->channel >= 0)
       {
-        if (!gst_v4l_set_chan_norm(v4lelement, v4lelement->channel, v4lelement->norm))
+        if (!gst_v4l_set_chan_norm(v4lelement, v4lelement->channel,
+                                               v4lelement->norm)) {
+          gst_v4l_close(v4lelement);
           return GST_STATE_FAILURE;
+        }
       }
       if (v4lelement->frequency > 0 && gst_v4l_has_tuner(v4lelement))
       {
-        if (!gst_v4l_set_frequency(v4lelement, v4lelement->frequency))
+        if (!gst_v4l_set_frequency(v4lelement, v4lelement->frequency)) {
+          gst_v4l_close(v4lelement);
           return GST_STATE_FAILURE;
+        }
       }
       for (n=V4L_AUDIO_VOLUME;n<=V4L_AUDIO_MODE;n++)
       {
@@ -583,8 +584,10 @@ gst_v4lelement_change_state (GstElement *element)
         }
         if (temp >= 0 && gst_v4l_has_audio(v4lelement))
         {
-          if (!gst_v4l_set_audio(v4lelement, n, temp))
+          if (!gst_v4l_set_audio(v4lelement, n, temp)) {
+            gst_v4l_close(v4lelement);
             return GST_STATE_FAILURE;
+          }
         }
       }
       for (n=V4L_PICTURE_HUE;n<=V4L_PICTURE_SATURATION;n++)
@@ -599,10 +602,16 @@ gst_v4lelement_change_state (GstElement *element)
         }
         if (temp >= 0)
         {
-          if (!gst_v4l_set_picture(v4lelement, n, temp))
+          if (!gst_v4l_set_picture(v4lelement, n, temp)) {
+            gst_v4l_close(v4lelement);
             return GST_STATE_FAILURE;
+          }
         }
       }
+
+      g_signal_emit(G_OBJECT(v4lelement),
+                    gst_v4lelement_signals[SIGNAL_OPEN], 0,
+                    v4lelement->videodev);
     }
       break;
     case GST_STATE_READY_TO_NULL:
index 97cccc0..185afed 100644 (file)
@@ -69,7 +69,7 @@ struct _GstV4lElement {
   gint channel;
   gint norm;
   gulong frequency;
-  gboolean mute;
+  gint8 mute;
   gint volume;
   gint mode;
   gint brightness;