- g_object_get (G_OBJECT (m_gst_playbin), "audio-sink", &sink, NULL);
-
- if (!sink)
- g_object_get (G_OBJECT (m_gst_playbin), "video-sink", &sink, NULL);
-
- if (!sink)
- return -1;
-
- gchar *name = gst_element_get_name(sink);
- gboolean use_get_decoder_time = strstr(name, "dvbaudiosink") || strstr(name, "dvbvideosink");
- g_free(name);
-
- if (use_get_decoder_time)
- g_signal_emit_by_name(sink, "get-decoder-time", &pos);
-
- gst_object_unref(sink);
-
- if (!use_get_decoder_time && !gst_element_query_position(m_gst_playbin, &fmt, &pos)) {
- eDebug("gst_element_query_position failed in getPlayPosition");
- return -1;
+ if (audioSink || videoSink)
+ {
+ g_signal_emit_by_name(audioSink ? audioSink : videoSink, "get-decoder-time", &pos);
+ if (!GST_CLOCK_TIME_IS_VALID(pos))
+ return -1;
+ }
+ else
+ {
+ if(!gst_element_query_position(m_gst_playbin, &fmt, &pos))
+ {
+ eDebug("gst_element_query_position failed in getPlayPosition");
+ return -1;
+ }