summaryrefslogtreecommitdiff
path: root/gst/mpegtsmux
diff options
context:
space:
mode:
authorTim-Philipp Müller <tim@centricular.com>2015-07-29 17:29:29 +0100
committerTim-Philipp Müller <tim@centricular.com>2015-07-29 17:30:15 +0100
commitd37fcff73261b4d2d8036d535c32aef8269068ee (patch)
tree5a4d3ddb4a23dbb704b5f1702f1db055a2a20110 /gst/mpegtsmux
parentd6b637532f8b65d77a86b4ce951caa8d99b699f0 (diff)
downloadgstreamer-plugins-bad-d37fcff73261b4d2d8036d535c32aef8269068ee.tar.gz
mpegtsmux: use GQueue instead of GList prepend/reverse
Diffstat (limited to 'gst/mpegtsmux')
-rw-r--r--gst/mpegtsmux/mpegtsmux.c28
-rw-r--r--gst/mpegtsmux/mpegtsmux.h2
2 files changed, 10 insertions, 20 deletions
diff --git a/gst/mpegtsmux/mpegtsmux.c b/gst/mpegtsmux/mpegtsmux.c
index d10e18992..c3a0dbb85 100644
--- a/gst/mpegtsmux/mpegtsmux.c
+++ b/gst/mpegtsmux/mpegtsmux.c
@@ -362,6 +362,7 @@ mpegtsmux_pad_reset (MpegTsPadData * pad_data)
static void
mpegtsmux_reset (MpegTsMux * mux, gboolean alloc)
{
+ GstBuffer *buf;
GSList *walk;
mux->first = TRUE;
@@ -396,10 +397,9 @@ mpegtsmux_reset (MpegTsMux * mux, gboolean alloc)
}
mux->programs = g_hash_table_new (g_direct_hash, g_direct_equal);
- if (mux->streamheader) {
- g_list_free_full (mux->streamheader, (GDestroyNotify) (gst_buffer_unref));
- mux->streamheader = NULL;
- }
+ while ((buf = g_queue_pop_head (&mux->streamheader)))
+ gst_buffer_unref (buf);
+
gst_event_replace (&mux->force_key_unit_event, NULL);
gst_buffer_replace (&mux->out_buffer, NULL);
@@ -1378,9 +1378,9 @@ new_packet_common_init (MpegTsMux * mux, GstBuffer * buf, guint8 * data,
}
GST_LOG_OBJECT (mux,
"Collecting packet with pid 0x%04x into streamheaders", pid);
- /* Streamheader packets collected in reverse order for efficiency */
- mux->streamheader = g_list_prepend (mux->streamheader, hbuf);
- } else if (mux->streamheader) {
+
+ g_queue_push_tail (&mux->streamheader, hbuf);
+ } else if (!g_queue_is_empty (&mux->streamheader)) {
mpegtsmux_set_header_on_caps (mux);
mux->streamheader_sent = TRUE;
}
@@ -1681,7 +1681,6 @@ mpegtsmux_set_header_on_caps (MpegTsMux * mux)
GValue array = { 0 };
GValue value = { 0 };
GstCaps *caps;
- GList *sh;
caps = gst_caps_make_writable (gst_pad_get_current_caps (mux->srcpad));
structure = gst_caps_get_structure (caps, 0);
@@ -1689,24 +1688,15 @@ mpegtsmux_set_header_on_caps (MpegTsMux * mux)
g_value_init (&array, GST_TYPE_ARRAY);
GST_LOG_OBJECT (mux, "setting %u packets into streamheader",
- g_list_length (mux->streamheader));
-
- /* Stream headers were accumulated in reverse, so fix that */
- mux->streamheader = g_list_reverse (mux->streamheader);
+ g_queue_get_length (&mux->streamheader));
- sh = mux->streamheader;
- while (sh) {
- buf = sh->data;
+ while ((buf = g_queue_pop_head (&mux->streamheader))) {
g_value_init (&value, GST_TYPE_BUFFER);
gst_value_take_buffer (&value, buf);
gst_value_array_append_value (&array, &value);
g_value_unset (&value);
- sh = g_list_next (sh);
}
- g_list_free (mux->streamheader);
- mux->streamheader = NULL;
-
gst_structure_set_value (structure, "streamheader", &array);
gst_pad_set_caps (mux->srcpad, caps);
g_value_unset (&array);
diff --git a/gst/mpegtsmux/mpegtsmux.h b/gst/mpegtsmux/mpegtsmux.h
index f54342d42..169892c79 100644
--- a/gst/mpegtsmux/mpegtsmux.h
+++ b/gst/mpegtsmux/mpegtsmux.h
@@ -147,7 +147,7 @@ struct MpegTsMux {
/* write callback handling/state */
GstFlowReturn last_flow_ret;
- GList *streamheader;
+ GQueue streamheader;
gboolean streamheader_sent;
gboolean is_delta;
gboolean is_header;