slomo pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=1ba3426405b3744b6f1fdb5d92ab39019dde9160

commit 1ba3426405b3744b6f1fdb5d92ab39019dde9160
Author: Sebastian Dröge <[email protected]>
Date:   Thu Jan 16 22:43:23 2014 +0100

    emotion gstreamer1: Call _emotion_frame_new() for audio-only streams 
without visualisations too
    
    Without this applications are not notified of any progress.
    
    https://phab.enlightenment.org/T767
---
 src/modules/emotion/gstreamer1/emotion_gstreamer.c | 50 ++++++++++++++++++++++
 src/modules/emotion/gstreamer1/emotion_gstreamer.h |  4 ++
 2 files changed, 54 insertions(+)

diff --git a/src/modules/emotion/gstreamer1/emotion_gstreamer.c 
b/src/modules/emotion/gstreamer1/emotion_gstreamer.c
index 8e86220..3e9dd3a 100644
--- a/src/modules/emotion/gstreamer1/emotion_gstreamer.c
+++ b/src/modules/emotion/gstreamer1/emotion_gstreamer.c
@@ -141,6 +141,14 @@ em_file_close(void *video)
 
    if (ev->pipeline)
      {
+       if (ev->audio_buffer_probe)
+         {
+            gst_pad_remove_probe(ev->audio_buffer_probe_pad, 
ev->audio_buffer_probe);
+            gst_object_unref(ev->audio_buffer_probe_pad);
+            ev->audio_buffer_probe_pad = NULL;
+            ev->audio_buffer_probe = 0;
+         }
+
        gst_element_set_state(ev->pipeline, GST_STATE_NULL);
        g_object_set(G_OBJECT(ev->vsink), "emotion-object", NULL, NULL);
        gst_object_unref(ev->pipeline);
@@ -1311,6 +1319,35 @@ _free_metadata(Emotion_Gstreamer_Metadata *m)
 }
 
 static void
+audio_buffer_probe_main(void *data)
+{
+   Emotion_Gstreamer *ev = data;
+
+   if (!ev->shutdown)
+     _emotion_frame_new(ev->obj);
+
+   g_atomic_int_set(&ev->audio_buffer_probe_pending, 0);
+
+   emotion_gstreamer_unref(ev);
+   _emotion_pending_ecore_end();
+}
+
+static GstPadProbeReturn
+audio_buffer_probe(GstPad *pad EINA_UNUSED, GstPadProbeInfo *info EINA_UNUSED, 
gpointer user_data)
+{
+   Emotion_Gstreamer *ev = user_data;
+
+   /* Don't call too many of these */
+   if (!g_atomic_int_compare_and_exchange(&ev->audio_buffer_probe_pending, 0, 
1))
+     return GST_PAD_PROBE_OK;
+
+   _emotion_pending_ecore_begin();
+   ecore_main_loop_thread_safe_call_async(audio_buffer_probe_main, 
emotion_gstreamer_ref(ev));
+
+   return GST_PAD_PROBE_OK;
+}
+
+static void
 _bus_main_handler(void *data)
 {
    Emotion_Gstreamer_Message *send;
@@ -1390,6 +1427,19 @@ _bus_main_handler(void *data)
                           flags |= GST_PLAY_FLAG_VIS;
                           g_object_set(G_OBJECT(ev->pipeline), "flags", flags, 
NULL);
                        }
+                     else
+                       {
+                          GstElement *audio_sink;
+
+                          g_object_get(ev->pipeline, "audio-sink", 
&audio_sink, NULL);
+                          ev->audio_buffer_probe_pad = 
gst_element_get_static_pad(audio_sink, "sink");
+                          ev->audio_buffer_probe = 
gst_pad_add_probe(ev->audio_buffer_probe_pad,
+                                                                     
GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_BUFFER_LIST,
+                                                                     
audio_buffer_probe,
+                                                                     ev,
+                                                                     NULL);
+                          gst_object_unref(audio_sink);
+                       }
                   }
 
                 if (n_audio > 0 || n_video > 0)
diff --git a/src/modules/emotion/gstreamer1/emotion_gstreamer.h 
b/src/modules/emotion/gstreamer1/emotion_gstreamer.h
index 7fa1c2d..d1d49ef 100644
--- a/src/modules/emotion/gstreamer1/emotion_gstreamer.h
+++ b/src/modules/emotion/gstreamer1/emotion_gstreamer.h
@@ -60,6 +60,10 @@ struct _Emotion_Gstreamer
    /* Evas object */
    Evas_Object      *obj;
 
+   gulong            audio_buffer_probe;
+   GstPad           *audio_buffer_probe_pad;
+   gint              audio_buffer_probe_pending;
+
    /* Characteristics of stream */
    double            position;
    double            volume;

-- 


Reply via email to