static GstM3U8 *gst_hls_demux_stream_get_m3u8 (GstHLSDemuxStream * hls_stream);
static void gst_hls_demux_set_current_variant (GstHLSDemux * hlsdemux,
GstHLSVariantStream * variant);
-#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
-static void gst_hls_demux_push_fragment_finished_event (GstAdaptiveDemux * demux,
- GstAdaptiveDemuxStream * stream);
-#endif
#define gst_hls_demux_parent_class parent_class
G_DEFINE_TYPE (GstHLSDemux, gst_hls_demux, GST_TYPE_ADAPTIVE_DEMUX);
gst_hls_demux_stream_decrypt_end (hls_stream);
#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
- gst_hls_demux_push_fragment_finished_event (demux, stream);
+ gst_adaptive_demux_push_fragment_finished_event (demux, stream);
#endif
if (stream->last_ret == GST_FLOW_OK) {
if (hls_stream->pending_decrypted_buffer) {
return ret;
}
-
-#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
-static void
-gst_hls_demux_push_fragment_finished_event (GstAdaptiveDemux * demux,
- GstAdaptiveDemuxStream * stream)
-{
- GstPad *pad = stream->pad;
- GstEvent *event;
-
- event = gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM,
- gst_structure_new_empty ("fragment_finished"));
-
- GST_DEBUG_OBJECT(demux, "push fragment_finished event");
- gst_pad_push_event (pad, event);
-}
-#endif
g_free (stream_id);
g_free (name);
}
+
+void
+gst_adaptive_demux_push_fragment_finished_event (GstAdaptiveDemux * demux,
+ GstAdaptiveDemuxStream * stream)
+{
+ GstPad *pad = stream->pad;
+ GstEvent *event;
+
+ /* to avoid deadlock during reconfiguration,
+ manifest_lock have to be unlocked before pushing serialized event */
+ GST_MANIFEST_UNLOCK (demux);
+ event = gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM,
+ gst_structure_new_empty ("fragment_finished"));
+
+ GST_DEBUG_OBJECT(demux, "push fragment_finished event");
+ gst_pad_push_event (pad, event);
+ GST_MANIFEST_LOCK (demux);
+}
#endif
/* must be called with manifest_lock taken */
#ifdef TIZEN_FEATURE_AVOID_PAD_SWITCHING
gboolean gst_adaptive_demux_stream_check_switch_pad (GstAdaptiveDemuxStream * stream,
GstCaps * caps, GstAdaptiveDemuxStreamCreatePadFunc create_pad_func);
+
+void gst_adaptive_demux_push_fragment_finished_event (GstAdaptiveDemux * demux,
+ GstAdaptiveDemuxStream * stream);
#endif
G_END_DECLS