summaryrefslogtreecommitdiff
path: root/gst/mpegtsmux/mpegtsmux.c
diff options
context:
space:
mode:
authorYanko Kaneti <yaneti@declera.com>2015-03-25 19:27:42 +0200
committerJan Schmidt <jan@centricular.com>2015-06-12 00:09:54 +1000
commitfa9fa5d460d2553c8cac431e71471c12f30d7139 (patch)
tree7a499f41785d9d3f55d818e162f767f2f930aff3 /gst/mpegtsmux/mpegtsmux.c
parente8a97877b44bba7b7c8e8d0222ddcf8ad0a91615 (diff)
mpegtsmux: Remove arbitrary constraint on prog-map program ids
https://bugzilla.gnome.org/show_bug.cgi?id=746765
Diffstat (limited to 'gst/mpegtsmux/mpegtsmux.c')
-rw-r--r--gst/mpegtsmux/mpegtsmux.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/gst/mpegtsmux/mpegtsmux.c b/gst/mpegtsmux/mpegtsmux.c
index 7c65cb4688..89750a7ea3 100644
--- a/gst/mpegtsmux/mpegtsmux.c
+++ b/gst/mpegtsmux/mpegtsmux.c
@@ -390,7 +390,10 @@ mpegtsmux_reset (MpegTsMux * mux, gboolean alloc)
mux->tsmux = NULL;
}
- memset (mux->programs, 0, sizeof (mux->programs));
+ if (mux->programs) {
+ g_hash_table_destroy (mux->programs);
+ }
+ mux->programs = g_hash_table_new (g_direct_hash, g_direct_equal);
if (mux->streamheader) {
GstBuffer *buf;
@@ -445,6 +448,10 @@ mpegtsmux_dispose (GObject * object)
gst_structure_free (mux->prog_map);
mux->prog_map = NULL;
}
+ if (mux->programs) {
+ g_hash_table_destroy (mux->programs);
+ mux->programs = NULL;
+ }
GST_CALL_PARENT (G_OBJECT_CLASS, dispose, (object));
}
@@ -750,10 +757,10 @@ mpegtsmux_create_streams (MpegTsMux * mux)
("Reading program map failed. Assuming default"), (NULL));
idx = DEFAULT_PROG_ID;
}
- if (idx < 0 || idx >= MAX_PROG_NUMBER) {
- GST_DEBUG_OBJECT (mux, "Program number %d associate with pad %s out "
- "of range (max = %d); DEFAULT_PROGRAM = %d is used instead",
- idx, name, MAX_PROG_NUMBER, DEFAULT_PROG_ID);
+ if (idx < 0) {
+ GST_DEBUG_OBJECT (mux, "Program number %d associate with pad %s less "
+ "than zero; DEFAULT_PROGRAM = %d is used instead",
+ idx, name, DEFAULT_PROG_ID);
idx = DEFAULT_PROG_ID;
}
ts_data->prog_id = idx;
@@ -762,13 +769,15 @@ mpegtsmux_create_streams (MpegTsMux * mux)
}
}
- ts_data->prog = mux->programs[ts_data->prog_id];
+ ts_data->prog =
+ g_hash_table_lookup (mux->programs, GINT_TO_POINTER (ts_data->prog_id));
if (ts_data->prog == NULL) {
ts_data->prog = tsmux_program_new (mux->tsmux, ts_data->prog_id);
if (ts_data->prog == NULL)
goto no_program;
tsmux_set_pmt_interval (ts_data->prog, mux->pmt_interval);
- mux->programs[ts_data->prog_id] = ts_data->prog;
+ g_hash_table_insert (mux->programs,
+ GINT_TO_POINTER (ts_data->prog_id), ts_data->prog);
}
if (ts_data->stream == NULL) {