sourceinfo.containertype = ctVCD;
sourceinfo.is_video = TRUE;
}
- if ( (strncmp(filename, "http://", 7)) == 0 || (strncmp(filename, "udp://", 6)) == 0 || (strncmp(filename, "rtsp://", 7)) == 0 )
+ if ( (strncmp(filename, "http://", 7)) == 0 || (strncmp(filename, "udp://", 6)) == 0 || (strncmp(filename, "rtp://", 6)) == 0 || (strncmp(filename, "https://", 8)) == 0 || (strncmp(filename, "mms://", 6)) == 0 || (strncmp(filename, "rtsp://", 7)) == 0 )
sourceinfo.is_streaming = TRUE;
gchar *uri;
else
eDebug("eServiceMP3::gst_message from %s: %s (without structure)", sourceName, GST_MESSAGE_TYPE_NAME(msg));
#endif
- if ( GST_MESSAGE_TYPE (msg) == GST_MESSAGE_STATE_CHANGED )
- return;
switch (GST_MESSAGE_TYPE (msg))
{
case GST_MESSAGE_EOS:
m_event((iPlayableService*)this, evEOF);
break;
+ case GST_MESSAGE_STATE_CHANGED:
+ {
+ if(GST_MESSAGE_SRC(msg) != GST_OBJECT(m_gst_playbin))
+ return;
+
+ GstState old_state, new_state;
+ gst_message_parse_state_changed(msg, &old_state, &new_state, NULL);
+
+ if(old_state == new_state)
+ return;
+
+ eDebug("eServiceMP3::state transition %s -> %s", gst_element_state_get_name(old_state), gst_element_state_get_name(new_state));
+
+ GstStateChange transition = (GstStateChange)GST_STATE_TRANSITION(old_state, new_state);
+
+ switch(transition)
+ {
+ case GST_STATE_CHANGE_NULL_TO_READY:
+ {
+ } break;
+ case GST_STATE_CHANGE_READY_TO_PAUSED:
+ {
+ } break;
+ case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+ {
+ } break;
+ case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+ {
+ } break;
+ case GST_STATE_CHANGE_PAUSED_TO_READY:
+ {
+ } break;
+ case GST_STATE_CHANGE_READY_TO_NULL:
+ {
+ } break;
+ }
+ break;
+ }
case GST_MESSAGE_ERROR:
{
gchar *debug;
eDebug("eServiceMP3::/tmp/.id3coverart %d bytes written ", ret);
m_event((iPlayableService*)this, evUser+13);
}
-
gst_tag_list_free(tags);
m_event((iPlayableService*)this, evUpdatedInfo);
break;
GstPad* pad = 0;
g_signal_emit_by_name (m_gst_playbin, "get-audio-pad", i, &pad);
GstCaps* caps = gst_pad_get_negotiated_caps(pad);
+ if (!caps)
+ continue;
GstStructure* str = gst_caps_get_structure(caps, 0);
gchar *g_type;
g_type = gst_structure_get_name(str);
{
gst_tag_list_get_string(tags, GST_TAG_AUDIO_CODEC, &g_codec);
gst_tag_list_get_string(tags, GST_TAG_LANGUAGE_CODE, &g_lang);
+ gst_tag_list_free(tags);
}
audio.language_code = std::string(g_lang);
audio.codec = std::string(g_codec);
m_audioStreams.push_back(audio);
g_free (g_lang);
g_free (g_codec);
+ gst_caps_unref(caps);
}
for (i = 0; i < n_text; i++)
if (strstr(eventname, "Changed"))
m_event((iPlayableService*)this, evVideoProgressiveChanged);
}
+ g_free(eventname);
}
}
}
ePangoSubtitlePage page;
GstClockTime base_time;
pts_t running_pts;
- GstElement *appsink = gst_bin_get_by_name(GST_BIN(m_gst_playbin),"subtitle_sink");
+ GstElement *syncsink;
+ g_object_get (G_OBJECT (m_gst_playbin), "audio-sink", &syncsink, NULL);
GstClock *clock;
- clock = gst_element_get_clock (appsink);
+ clock = gst_element_get_clock (syncsink);
while ( !m_subtitle_pages.empty() )
{
page = m_subtitle_pages.front();
- base_time = gst_element_get_base_time (appsink);
- running_pts = ( gst_clock_get_time (clock) - base_time ) / 11111L;
+ base_time = gst_element_get_base_time (syncsink);
+ running_pts = gst_clock_get_time (clock) / 11111L;
gint64 diff_ms = ( page.show_pts - running_pts ) / 90;
-// eDebug("eServiceMP3::pushSubtitles show_pts = %lld running_pts = %lld diff = %lld", page.show_pts, running_pts, diff_ms);
+// eDebug("eServiceMP3::pushSubtitles show_pts = %lld running_pts = %lld diff = %lld", page.show_pts, running_pts, diff_ms);
if ( diff_ms > 20 )
{
-// eDebug("m_subtitle_sync_timer->start(%lld,1)", diff_ms);
+// eDebug("m_subtitle_sync_timer->start(%lld,1)", diff_ms);
m_subtitle_sync_timer->start(diff_ms, 1);
break;
}
m_subtitle_widget->setPage(page);
m_subtitle_pages.pop_front();
}
- } ;
-
+ }
gst_object_unref (clock);
+ gst_object_unref (syncsink);
}
RESULT eServiceMP3::enableSubtitles(eWidget *parent, ePyObject tuple)
PyObject *eServiceMP3::getCachedSubtitle()
{
- eDebug("eServiceMP3::getCachedSubtitle");
Py_RETURN_NONE;
}