#define SPLITMUX_PART_TYPE_LOCK(p) g_mutex_lock(&(p)->type_lock)
#define SPLITMUX_PART_TYPE_UNLOCK(p) g_mutex_unlock(&(p)->type_lock)
-enum
-{
- SIGNAL_PREPARED,
- LAST_SIGNAL
-};
-
-static guint part_reader_signals[LAST_SIGNAL] = { 0 };
-
typedef struct _GstSplitMuxPartPad
{
GstPad parent;
gobject_klass->dispose = splitmux_part_reader_dispose;
gobject_klass->finalize = splitmux_part_reader_finalize;
- part_reader_signals[SIGNAL_PREPARED] =
- g_signal_new ("prepared", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (GstSplitMuxPartReaderClass,
- prepared), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
gstelement_class->change_state = gst_splitmux_part_reader_change_state;
gstelement_class->send_event = gst_splitmux_part_reader_send_event;
if (reader->prep_state == PART_STATE_PREPARING_RESET_FOR_READY) {
/* Fire the prepared signal and go to READY state */
GST_DEBUG_OBJECT (reader,
- "Stream measuring complete. File %s is now ready. Firing prepared signal",
- reader->path);
+ "Stream measuring complete. File %s is now ready", reader->path);
reader->prep_state = PART_STATE_READY;
SPLITMUX_PART_UNLOCK (reader);
- g_signal_emit (reader, part_reader_signals[SIGNAL_PREPARED], 0, NULL);
do_async_done (reader);
} else {
SPLITMUX_PART_UNLOCK (reader);
static GstPad *gst_splitmux_find_output_pad (GstSplitMuxPartReader * part,
GstPad * pad, GstSplitMuxSrc * splitmux);
-static void gst_splitmux_part_prepared (GstSplitMuxPartReader * reader,
- GstSplitMuxSrc * splitmux);
static gboolean gst_splitmux_end_of_part (GstSplitMuxSrc * splitmux,
SplitMuxSrcPad * pad);
static gboolean gst_splitmux_check_new_caps (SplitMuxSrcPad * splitpad,
return ret;
}
-static gboolean gst_splitmux_src_prepare_next_part (GstSplitMuxSrc * splitmux);
-static gboolean gst_splitmux_src_activate_part (GstSplitMuxSrc * splitmux,
- guint part, GstSeekFlags extra_flags);
-
static void
gst_splitmux_src_activate_first_part (GstSplitMuxSrc * splitmux)
{
switch (GST_MESSAGE_TYPE (msg)) {
case GST_MESSAGE_ASYNC_DONE:{
guint idx = splitmux->num_prepared_parts;
+ gboolean need_no_more_pads;
if (idx >= splitmux->num_parts) {
/* Shouldn't really happen! */
GST_DEBUG_OBJECT (splitmux, "Prepared file part %s (%u)",
splitmux->parts[idx]->path, idx);
+ /* signal no-more-pads as we have all pads at this point now */
+ SPLITMUX_SRC_LOCK (splitmux);
+ need_no_more_pads = !splitmux->pads_complete;
+ splitmux->pads_complete = TRUE;
+ SPLITMUX_SRC_UNLOCK (splitmux);
+
+ if (need_no_more_pads) {
+ GST_DEBUG_OBJECT (splitmux, "Signalling no-more-pads");
+ gst_element_no_more_pads (GST_ELEMENT_CAST (splitmux));
+ }
+
/* Extend our total duration to cover this part */
GST_OBJECT_LOCK (splitmux);
splitmux->total_duration +=
GST_DEBUG_OBJECT (splitmux,
"Duration %" GST_TIME_FORMAT ", total duration now: %" GST_TIME_FORMAT
" and end offset %" GST_TIME_FORMAT,
- gst_splitmux_part_reader_get_duration (splitmux->parts[idx]),
- splitmux->total_duration, splitmux->end_offset);
+ GST_TIME_ARGS (gst_splitmux_part_reader_get_duration (splitmux->parts
+ [idx])), GST_TIME_ARGS (splitmux->total_duration),
+ GST_TIME_ARGS (splitmux->end_offset));
splitmux->num_prepared_parts++;
r = g_object_new (GST_TYPE_SPLITMUX_PART_READER, NULL);
- g_signal_connect (r, "prepared", (GCallback) gst_splitmux_part_prepared,
- splitmux);
-
gst_splitmux_part_reader_set_callbacks (r, splitmux,
(GstSplitMuxPartReaderPadCb) gst_splitmux_find_output_pad);
gst_splitmux_part_reader_set_location (r, filename);
}
static void
-gst_splitmux_part_prepared (GstSplitMuxPartReader * reader,
- GstSplitMuxSrc * splitmux)
-{
- gboolean need_no_more_pads;
-
- GST_LOG_OBJECT (splitmux, "Part %" GST_PTR_FORMAT " prepared", reader);
- SPLITMUX_SRC_LOCK (splitmux);
- need_no_more_pads = !splitmux->pads_complete;
- splitmux->pads_complete = TRUE;
- SPLITMUX_SRC_UNLOCK (splitmux);
-
- if (need_no_more_pads) {
- GST_DEBUG_OBJECT (splitmux, "Signalling no-more-pads");
- gst_element_no_more_pads (GST_ELEMENT_CAST (splitmux));
- }
-}
-
-static void
gst_splitmux_push_event (GstSplitMuxSrc * splitmux, GstEvent * e,
guint32 seqnum)
{