gst_aggregator_update_segment (GST_AGGREGATOR (qtmux), &segment);
}
+ GST_OBJECT_LOCK (qtmux);
qtmux->current_chunk_size = 0;
qtmux->current_chunk_duration = 0;
qtmux->current_chunk_offset = -1;
qtmux->current_pad = NULL;
qtmux->longest_chunk = GST_CLOCK_TIME_NONE;
- GST_OBJECT_LOCK (qtmux);
for (l = GST_ELEMENT_CAST (qtmux)->sinkpads; l; l = l->next) {
GstQTMuxPad *qtpad = (GstQTMuxPad *) l->data;
GST_DEBUG_OBJECT (element, "Releasing %s:%s", GST_DEBUG_PAD_NAME (pad));
- gst_qt_mux_pad_reset (muxpad);
+ /* Take a ref to the pad so we can clean it up after removing it from the element */
+ pad = gst_object_ref (pad);
- gst_element_remove_pad (element, pad);
+ /* Do aggregate level cleanup */
+ GST_ELEMENT_CLASS (parent_class)->release_pad (element, pad);
+ GST_OBJECT_LOCK (mux);
if (mux->current_pad && GST_PAD (mux->current_pad) == pad) {
mux->current_pad = NULL;
mux->current_chunk_size = 0;
mux->current_chunk_duration = 0;
}
- GST_OBJECT_LOCK (mux);
+ gst_qt_mux_pad_reset (muxpad);
+
if (GST_ELEMENT (mux)->sinkpads == NULL) {
/* No more outstanding request pads, reset our counters */
mux->video_pads = 0;
mux->subtitle_pads = 0;
}
GST_OBJECT_UNLOCK (mux);
+
+ gst_object_unref (pad);
}
static GstAggregatorPad *
g_free (name);
/* set up pad */
+ GST_OBJECT_LOCK (qtmux);
gst_qt_mux_pad_reset (qtpad);
qtpad->trak = atom_trak_new (qtmux->context);
+
atom_moov_add_trak (qtmux->moov, qtpad->trak);
+ GST_OBJECT_UNLOCK (qtmux);
/* set up pad functions */
qtpad->set_caps = setcaps_func;