mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-03-02 18:01:31 +00:00
oggdemux: activate_chain must not be called with a NULL chain
It will crash later and shouldn't really happen anyway unless something is really wrong.
This commit is contained in:
parent
9c570dbced
commit
9a971980b7
1 changed files with 31 additions and 32 deletions
|
@ -1743,6 +1743,9 @@ gst_ogg_demux_activate_chain (GstOggDemux * ogg, GstOggChain * chain,
|
||||||
GstEvent * event)
|
GstEvent * event)
|
||||||
{
|
{
|
||||||
gint i;
|
gint i;
|
||||||
|
gint bitrate, idx_bitrate;
|
||||||
|
|
||||||
|
g_return_val_if_fail (chain != NULL, FALSE);
|
||||||
|
|
||||||
if (chain == ogg->current_chain) {
|
if (chain == ogg->current_chain) {
|
||||||
if (event)
|
if (event)
|
||||||
|
@ -1750,51 +1753,47 @@ gst_ogg_demux_activate_chain (GstOggDemux * ogg, GstOggChain * chain,
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* FIXME, should not be called with NULL */
|
|
||||||
if (chain != NULL) {
|
|
||||||
gint bitrate, idx_bitrate;
|
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (ogg, "activating chain %p", chain);
|
GST_DEBUG_OBJECT (ogg, "activating chain %p", chain);
|
||||||
|
|
||||||
bitrate = idx_bitrate = 0;
|
bitrate = idx_bitrate = 0;
|
||||||
|
|
||||||
/* first add the pads */
|
/* first add the pads */
|
||||||
for (i = 0; i < chain->streams->len; i++) {
|
for (i = 0; i < chain->streams->len; i++) {
|
||||||
GstOggPad *pad;
|
GstOggPad *pad;
|
||||||
GstStructure *structure;
|
GstStructure *structure;
|
||||||
|
|
||||||
pad = g_array_index (chain->streams, GstOggPad *, i);
|
pad = g_array_index (chain->streams, GstOggPad *, i);
|
||||||
|
|
||||||
if (pad->map.idx_bitrate)
|
if (pad->map.idx_bitrate)
|
||||||
idx_bitrate = MAX (idx_bitrate, pad->map.idx_bitrate);
|
idx_bitrate = MAX (idx_bitrate, pad->map.idx_bitrate);
|
||||||
|
|
||||||
bitrate += pad->map.bitrate;
|
bitrate += pad->map.bitrate;
|
||||||
|
|
||||||
/* mark discont */
|
/* mark discont */
|
||||||
gst_ogg_pad_mark_discont (pad);
|
gst_ogg_pad_mark_discont (pad);
|
||||||
pad->last_ret = GST_FLOW_OK;
|
pad->last_ret = GST_FLOW_OK;
|
||||||
|
|
||||||
if (pad->map.is_skeleton || pad->added || GST_PAD_CAPS (pad) == NULL)
|
if (pad->map.is_skeleton || pad->added || GST_PAD_CAPS (pad) == NULL)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (ogg, "adding pad %" GST_PTR_FORMAT, pad);
|
GST_DEBUG_OBJECT (ogg, "adding pad %" GST_PTR_FORMAT, pad);
|
||||||
|
|
||||||
structure = gst_caps_get_structure (GST_PAD_CAPS (pad), 0);
|
structure = gst_caps_get_structure (GST_PAD_CAPS (pad), 0);
|
||||||
pad->is_sparse =
|
pad->is_sparse =
|
||||||
gst_structure_has_name (structure, "application/x-ogm-text") ||
|
gst_structure_has_name (structure, "application/x-ogm-text") ||
|
||||||
gst_structure_has_name (structure, "text/x-cmml") ||
|
gst_structure_has_name (structure, "text/x-cmml") ||
|
||||||
gst_structure_has_name (structure, "subtitle/x-kate") ||
|
gst_structure_has_name (structure, "subtitle/x-kate") ||
|
||||||
gst_structure_has_name (structure, "application/x-kate");
|
gst_structure_has_name (structure, "application/x-kate");
|
||||||
|
|
||||||
/* activate first */
|
/* activate first */
|
||||||
gst_pad_set_active (GST_PAD_CAST (pad), TRUE);
|
gst_pad_set_active (GST_PAD_CAST (pad), TRUE);
|
||||||
|
|
||||||
gst_element_add_pad (GST_ELEMENT (ogg), GST_PAD_CAST (pad));
|
gst_element_add_pad (GST_ELEMENT (ogg), GST_PAD_CAST (pad));
|
||||||
pad->added = TRUE;
|
pad->added = TRUE;
|
||||||
}
|
|
||||||
/* prefer the index bitrate over the ones encoded in the streams */
|
|
||||||
ogg->bitrate = (idx_bitrate ? idx_bitrate : bitrate);
|
|
||||||
}
|
}
|
||||||
|
/* prefer the index bitrate over the ones encoded in the streams */
|
||||||
|
ogg->bitrate = (idx_bitrate ? idx_bitrate : bitrate);
|
||||||
|
|
||||||
/* after adding the new pads, remove the old pads */
|
/* after adding the new pads, remove the old pads */
|
||||||
gst_ogg_demux_deactivate_current_chain (ogg);
|
gst_ogg_demux_deactivate_current_chain (ogg);
|
||||||
|
|
Loading…
Reference in a new issue