mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 17:20:36 +00:00
Revert "splitmuxsink: Mask async-start/done while switching files."
This reverts commit d61e5393f1
.
Causes failures muxing larger GOP sizes for some reason. Reverting
while I figure it out
This commit is contained in:
parent
600bab0056
commit
b26bbae695
2 changed files with 4 additions and 48 deletions
|
@ -63,9 +63,6 @@ GST_DEBUG_CATEGORY_STATIC (splitmux_debug);
|
||||||
#define GST_SPLITMUX_WAIT(s) g_cond_wait (&(s)->data_cond, &(s)->lock)
|
#define GST_SPLITMUX_WAIT(s) g_cond_wait (&(s)->data_cond, &(s)->lock)
|
||||||
#define GST_SPLITMUX_BROADCAST(s) g_cond_broadcast (&(s)->data_cond)
|
#define GST_SPLITMUX_BROADCAST(s) g_cond_broadcast (&(s)->data_cond)
|
||||||
|
|
||||||
#define GST_SPLITMUX_WAIT_ASYNC_DONE(s) g_cond_wait (&(s)->async_cond, &(s)->lock)
|
|
||||||
#define GST_SPLITMUX_BROADCAST_ASYNC_DONE(s) g_cond_broadcast (&(s)->async_cond)
|
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
PROP_0,
|
PROP_0,
|
||||||
|
@ -212,7 +209,6 @@ gst_splitmux_sink_init (GstSplitMuxSink * splitmux)
|
||||||
{
|
{
|
||||||
g_mutex_init (&splitmux->lock);
|
g_mutex_init (&splitmux->lock);
|
||||||
g_cond_init (&splitmux->data_cond);
|
g_cond_init (&splitmux->data_cond);
|
||||||
g_cond_init (&splitmux->async_cond);
|
|
||||||
|
|
||||||
splitmux->mux_overhead = DEFAULT_MUXER_OVERHEAD;
|
splitmux->mux_overhead = DEFAULT_MUXER_OVERHEAD;
|
||||||
splitmux->threshold_time = DEFAULT_MAX_SIZE_TIME;
|
splitmux->threshold_time = DEFAULT_MAX_SIZE_TIME;
|
||||||
|
@ -252,7 +248,6 @@ gst_splitmux_sink_finalize (GObject * object)
|
||||||
{
|
{
|
||||||
GstSplitMuxSink *splitmux = GST_SPLITMUX_SINK (object);
|
GstSplitMuxSink *splitmux = GST_SPLITMUX_SINK (object);
|
||||||
g_cond_clear (&splitmux->data_cond);
|
g_cond_clear (&splitmux->data_cond);
|
||||||
g_cond_clear (&splitmux->async_cond);
|
|
||||||
g_mutex_clear (&splitmux->lock);
|
g_mutex_clear (&splitmux->lock);
|
||||||
if (splitmux->provided_sink)
|
if (splitmux->provided_sink)
|
||||||
gst_object_unref (splitmux->provided_sink);
|
gst_object_unref (splitmux->provided_sink);
|
||||||
|
@ -672,17 +667,7 @@ restart_context (MqStreamCtx * ctx, GstSplitMuxSink * splitmux)
|
||||||
static void
|
static void
|
||||||
start_next_fragment (GstSplitMuxSink * splitmux)
|
start_next_fragment (GstSplitMuxSink * splitmux)
|
||||||
{
|
{
|
||||||
if (splitmux->is_async) {
|
|
||||||
/* Wait for async done on the sink */
|
|
||||||
GST_SPLITMUX_WAIT_ASYNC_DONE (splitmux);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 1 change to new file */
|
/* 1 change to new file */
|
||||||
splitmux->restarting = TRUE;
|
|
||||||
|
|
||||||
GST_SPLITMUX_UNLOCK (splitmux);
|
|
||||||
GST_STATE_LOCK (splitmux);
|
|
||||||
|
|
||||||
gst_element_set_state (splitmux->muxer, GST_STATE_NULL);
|
gst_element_set_state (splitmux->muxer, GST_STATE_NULL);
|
||||||
gst_element_set_state (splitmux->active_sink, GST_STATE_NULL);
|
gst_element_set_state (splitmux->active_sink, GST_STATE_NULL);
|
||||||
|
|
||||||
|
@ -691,12 +676,6 @@ start_next_fragment (GstSplitMuxSink * splitmux)
|
||||||
gst_element_sync_state_with_parent (splitmux->active_sink);
|
gst_element_sync_state_with_parent (splitmux->active_sink);
|
||||||
gst_element_sync_state_with_parent (splitmux->muxer);
|
gst_element_sync_state_with_parent (splitmux->muxer);
|
||||||
|
|
||||||
GST_STATE_UNLOCK (splitmux);
|
|
||||||
GST_SPLITMUX_LOCK (splitmux);
|
|
||||||
|
|
||||||
splitmux->restarting = FALSE;
|
|
||||||
|
|
||||||
GST_LOG_OBJECT (splitmux, "Restarting contexts to push more data");
|
|
||||||
g_list_foreach (splitmux->contexts, (GFunc) restart_context, splitmux);
|
g_list_foreach (splitmux->contexts, (GFunc) restart_context, splitmux);
|
||||||
|
|
||||||
/* Switch state and go back to processing */
|
/* Switch state and go back to processing */
|
||||||
|
@ -736,38 +715,18 @@ bus_handler (GstBin * bin, GstMessage * message)
|
||||||
GST_DEBUG_OBJECT (splitmux, "Caught EOS at end of fragment, dropping");
|
GST_DEBUG_OBJECT (splitmux, "Caught EOS at end of fragment, dropping");
|
||||||
splitmux->state = SPLITMUX_STATE_START_NEXT_FRAGMENT;
|
splitmux->state = SPLITMUX_STATE_START_NEXT_FRAGMENT;
|
||||||
GST_SPLITMUX_BROADCAST (splitmux);
|
GST_SPLITMUX_BROADCAST (splitmux);
|
||||||
goto drop;
|
|
||||||
|
gst_message_unref (message);
|
||||||
|
GST_SPLITMUX_UNLOCK (splitmux);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
GST_SPLITMUX_UNLOCK (splitmux);
|
GST_SPLITMUX_UNLOCK (splitmux);
|
||||||
GST_INFO_OBJECT (splitmux, "Passing EOS message");
|
|
||||||
break;
|
|
||||||
case GST_MESSAGE_ASYNC_START:
|
|
||||||
GST_SPLITMUX_LOCK (splitmux);
|
|
||||||
if (splitmux->restarting)
|
|
||||||
goto drop;
|
|
||||||
splitmux->is_async = TRUE;
|
|
||||||
GST_SPLITMUX_UNLOCK (splitmux);
|
|
||||||
break;
|
|
||||||
case GST_MESSAGE_ASYNC_DONE:
|
|
||||||
GST_SPLITMUX_LOCK (splitmux);
|
|
||||||
if (splitmux->is_async) {
|
|
||||||
GST_SPLITMUX_BROADCAST_ASYNC_DONE (splitmux);
|
|
||||||
splitmux->is_async = FALSE;
|
|
||||||
}
|
|
||||||
if (splitmux->restarting)
|
|
||||||
goto drop;
|
|
||||||
GST_SPLITMUX_UNLOCK (splitmux);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_BIN_CLASS (parent_class)->handle_message (bin, message);
|
GST_BIN_CLASS (parent_class)->handle_message (bin, message);
|
||||||
return;
|
|
||||||
|
|
||||||
drop:
|
|
||||||
gst_message_unref (message);
|
|
||||||
GST_SPLITMUX_UNLOCK (splitmux);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Called with splitmux lock held */
|
/* Called with splitmux lock held */
|
||||||
|
|
|
@ -88,9 +88,6 @@ struct _GstSplitMuxSink {
|
||||||
|
|
||||||
GMutex lock;
|
GMutex lock;
|
||||||
GCond data_cond;
|
GCond data_cond;
|
||||||
GCond async_cond;
|
|
||||||
gboolean is_async;
|
|
||||||
gboolean restarting;
|
|
||||||
|
|
||||||
SplitMuxState state;
|
SplitMuxState state;
|
||||||
gdouble mux_overhead;
|
gdouble mux_overhead;
|
||||||
|
|
Loading…
Reference in a new issue