Enlightenment CVS committal

Author  : doursse
Project : e17
Module  : libs/emotion

Dir     : e17/libs/emotion/src/modules


Modified Files:
        emotion_gstreamer.c 


Log Message:
some cleaning when a file can not be read. Add a function to get the tracks 
count of a CD

===================================================================
RCS file: /cvs/e/e17/libs/emotion/src/modules/emotion_gstreamer.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -3 -r1.10 -r1.11
--- emotion_gstreamer.c 22 Apr 2006 10:12:03 -0000      1.10
+++ emotion_gstreamer.c 6 May 2006 13:17:50 -0000       1.11
@@ -66,6 +66,8 @@
 static int _cdda_pipeline_build (void *video, const char * device, unsigned 
int track);
 static int _file_pipeline_build (void *video, const char *file);
 
+static int _cdda_track_count_get(void *video);
+
 /* Interface */
 
 static unsigned char  em_init                     (Evas_Object     *obj,
@@ -1165,7 +1167,7 @@
    ev = (Emotion_Gstreamer_Video *)video;
    if (!ev) return NULL;
 
-   done = 0;
+   done = FALSE;
    bus = gst_element_get_bus (ev->pipeline);
    if (!bus) return NULL;
 
@@ -1190,38 +1192,23 @@
          switch (meta) {
          case META_TRACK_TITLE:
             gst_tag_list_get_string (new_tags, GST_TAG_TITLE, &str);
-            if (str) {
-              gst_message_unref (message);
-              goto success;
-            }
+            if (str) done = TRUE;
             break;
          case META_TRACK_ARTIST:
             gst_tag_list_get_string (new_tags, GST_TAG_ARTIST, &str);
-            if (str) {
-              gst_message_unref (message);
-              goto success;
-            }
+            if (str) done = TRUE;
             break;
          case META_TRACK_GENRE:
             gst_tag_list_get_string (new_tags, GST_TAG_GENRE, &str);
-            if (str) {
-              gst_message_unref (message);
-              goto success;
-            }
+            if (str) done = TRUE;
             break;
          case META_TRACK_COMMENT:
             gst_tag_list_get_string (new_tags, GST_TAG_COMMENT, &str);
-            if (str) {
-              gst_message_unref (message);
-              goto success;
-            }
+            if (str) done = TRUE;
             break;
          case META_TRACK_ALBUM:
             gst_tag_list_get_string (new_tags, GST_TAG_ALBUM, &str);
-            if (str) {
-              gst_message_unref (message);
-              goto success;
-            }
+            if (str) done = TRUE;
             break;
          case META_TRACK_YEAR: {
             const GValue *date;
@@ -1229,22 +1216,17 @@
             date = gst_tag_list_get_value_index (new_tags, GST_TAG_DATE, 0);
             if (date)
                str = g_strdup_value_contents (date);
-            if (str) {
-              gst_message_unref (message);
-              goto success;
-            }
+            if (str) done = TRUE;
             break;
          }
          case META_TRACK_DISCID:
 #ifdef GST_TAG_CDDA_CDDB_DISCID
             gst_tag_list_get_string (new_tags, GST_TAG_CDDA_CDDB_DISCID, &str);
 #endif
-            if (str) {
-              gst_message_unref (message);
-              goto success;
-            }
+            if (str) done = TRUE;
             break;
          }
+         break;
       }
       default:
          break;
@@ -1252,7 +1234,6 @@
       gst_message_unref (message);
    }
 
- success:
    gst_object_unref (GST_OBJECT (bus));
 
    return str;
@@ -1680,11 +1661,6 @@
    if (device)
       g_object_set (G_OBJECT (cdiocddasrc), "device", device, NULL);
 
-/*    format = gst_format_get_by_nick ("track"); */
-/*    gst_element_query_duration (cdiocddasrc, &format, &tracks_count); */
-/*    g_print ("tracks count %lld\n", tracks_count); */
-/*    if (track > tracks_count) */
-/*      track = tracks_count; */
    g_object_set (G_OBJECT (cdiocddasrc), "track", track, NULL);
 
    asink = _emotion_audio_sink_new (ev);
@@ -1707,6 +1683,12 @@
      goto failure_gstreamer_pause;
 
    {
+     gint tracks_count;
+     tracks_count = _cdda_track_count_get(ev);
+     g_print ("Tracks count : %d\n", tracks_count);
+   }
+
+   {
       GstQuery *query;
       GstPad   *pad;
       GstCaps  *caps;
@@ -1915,6 +1897,7 @@
 
  failure_gstreamer_pause:
  failure_link:
+   gst_element_set_state (ev->pipeline, GST_STATE_NULL);
    gst_bin_remove (GST_BIN (ev->pipeline), filesrc);
    gst_bin_remove (GST_BIN (ev->pipeline), decodebin);
  failure_decodebin:
@@ -1961,4 +1944,49 @@
      gst_message_unref (msg);
    }
    return 1;
+}
+
+static int
+_cdda_track_count_get(void *video)
+{
+   Emotion_Gstreamer_Video *ev;
+   GstBus                  *bus;
+   guint                    tracks_count = 0;
+   gboolean                 done;
+
+   ev = (Emotion_Gstreamer_Video *)video;
+   if (!ev) return tracks_count;
+
+   done = FALSE;
+   bus = gst_element_get_bus (ev->pipeline);
+   if (!bus) return tracks_count;
+
+   while (!done) {
+      GstMessage *message;
+
+      message = gst_bus_pop (bus);
+      if (message == NULL)
+        /* All messages read, we're done */
+         break;
+
+      switch (GST_MESSAGE_TYPE (message)) {
+      case GST_MESSAGE_TAG: {
+         GstTagList *tags;
+
+         gst_message_parse_tag (message, &tags);
+
+         gst_tag_list_get_uint (tags, GST_TAG_TRACK_COUNT, &tracks_count);
+         if (tracks_count) done = TRUE;
+         break;
+      }
+      case GST_MESSAGE_ERROR:
+      default:
+         break;
+      }
+      gst_message_unref (message);
+   }
+
+   gst_object_unref (GST_OBJECT (bus));
+
+   return tracks_count;
 }




-------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to