mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-22 00:06:36 +00:00
gst/mpegstream/: Fix some caps leaks. Fixes bug #564885.
Original commit message from CVS: Patch by: Yves Lefebvre <ivanohe at abacom dot com> * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_get_video_stream), (gst_dvd_demux_get_audio_stream), (gst_dvd_demux_get_subpicture_stream), (gst_dvd_demux_reset): * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_init_stream), (gst_mpeg_demux_get_video_stream), (gst_mpeg_demux_get_audio_stream), (gst_mpeg_demux_reset): * gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_chain): Fix some caps leaks. Fixes bug #564885.
This commit is contained in:
parent
488fb36616
commit
f4567b2c7c
4 changed files with 47 additions and 10 deletions
13
ChangeLog
13
ChangeLog
|
@ -1,3 +1,16 @@
|
||||||
|
2009-01-08 Sebastian Dröge <sebastian.droege@collabora.co.uk>
|
||||||
|
|
||||||
|
Patch by: Yves Lefebvre <ivanohe at abacom dot com>
|
||||||
|
|
||||||
|
* gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_get_video_stream),
|
||||||
|
(gst_dvd_demux_get_audio_stream),
|
||||||
|
(gst_dvd_demux_get_subpicture_stream), (gst_dvd_demux_reset):
|
||||||
|
* gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_init_stream),
|
||||||
|
(gst_mpeg_demux_get_video_stream),
|
||||||
|
(gst_mpeg_demux_get_audio_stream), (gst_mpeg_demux_reset):
|
||||||
|
* gst/mpegstream/gstmpegparse.c: (gst_mpeg_parse_chain):
|
||||||
|
Fix some caps leaks. Fixes bug #564885.
|
||||||
|
|
||||||
2009-01-02 Alessandro Decina <alessandro.d@gmail.com>
|
2009-01-02 Alessandro Decina <alessandro.d@gmail.com>
|
||||||
|
|
||||||
* ext/cdio/gstcdio.c:
|
* ext/cdio/gstcdio.c:
|
||||||
|
|
|
@ -474,6 +474,8 @@ gst_dvd_demux_get_video_stream (GstMPEGDemux * mpeg_demux,
|
||||||
gint mpeg_version = *((gint *) info);
|
gint mpeg_version = *((gint *) info);
|
||||||
|
|
||||||
if (dvd_demux->mpeg_version != mpeg_version) {
|
if (dvd_demux->mpeg_version != mpeg_version) {
|
||||||
|
if (str->caps)
|
||||||
|
gst_caps_unref (str->caps);
|
||||||
str->caps = gst_caps_new_simple ("video/mpeg",
|
str->caps = gst_caps_new_simple ("video/mpeg",
|
||||||
"mpegversion", G_TYPE_INT, mpeg_version,
|
"mpegversion", G_TYPE_INT, mpeg_version,
|
||||||
"systemstream", G_TYPE_BOOLEAN, FALSE, NULL);
|
"systemstream", G_TYPE_BOOLEAN, FALSE, NULL);
|
||||||
|
@ -593,6 +595,8 @@ gst_dvd_demux_get_audio_stream (GstMPEGDemux * mpeg_demux,
|
||||||
/* Determine the number of channels. */
|
/* Determine the number of channels. */
|
||||||
channels = ((sample_info >> 8) & 0x7) + 1;
|
channels = ((sample_info >> 8) & 0x7) + 1;
|
||||||
|
|
||||||
|
if (str->caps)
|
||||||
|
gst_caps_unref (str->caps);
|
||||||
str->caps = gst_caps_new_simple ("audio/x-lpcm",
|
str->caps = gst_caps_new_simple ("audio/x-lpcm",
|
||||||
"width", G_TYPE_INT, width,
|
"width", G_TYPE_INT, width,
|
||||||
"rate", G_TYPE_INT, rate,
|
"rate", G_TYPE_INT, rate,
|
||||||
|
@ -612,11 +616,15 @@ gst_dvd_demux_get_audio_stream (GstMPEGDemux * mpeg_demux,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GST_DVD_DEMUX_AUDIO_AC3:
|
case GST_DVD_DEMUX_AUDIO_AC3:
|
||||||
|
if (str->caps)
|
||||||
|
gst_caps_unref (str->caps);
|
||||||
str->caps = gst_caps_new_simple ("audio/x-ac3", NULL);
|
str->caps = gst_caps_new_simple ("audio/x-ac3", NULL);
|
||||||
codec = "AC-3 audio";
|
codec = "AC-3 audio";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GST_DVD_DEMUX_AUDIO_DTS:
|
case GST_DVD_DEMUX_AUDIO_DTS:
|
||||||
|
if (str->caps)
|
||||||
|
gst_caps_unref (str->caps);
|
||||||
str->caps = gst_caps_new_simple ("audio/x-dts", NULL);
|
str->caps = gst_caps_new_simple ("audio/x-dts", NULL);
|
||||||
codec = "DTS audio";
|
codec = "DTS audio";
|
||||||
break;
|
break;
|
||||||
|
@ -650,8 +658,8 @@ gst_dvd_demux_get_audio_stream (GstMPEGDemux * mpeg_demux,
|
||||||
|
|
||||||
t = g_strdup_printf ("audio-%d-language", stream_nr);
|
t = g_strdup_printf ("audio-%d-language", stream_nr);
|
||||||
lang_code =
|
lang_code =
|
||||||
gst_structure_get_string (gst_event_get_structure (dvd_demux->
|
gst_structure_get_string (gst_event_get_structure
|
||||||
langcodes), t);
|
(dvd_demux->langcodes), t);
|
||||||
g_free (t);
|
g_free (t);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -720,6 +728,8 @@ gst_dvd_demux_get_subpicture_stream (GstMPEGDemux * mpeg_demux,
|
||||||
|
|
||||||
if (str->type != GST_DVD_DEMUX_SUBP_DVD) {
|
if (str->type != GST_DVD_DEMUX_SUBP_DVD) {
|
||||||
/* We need to set new caps for this pad. */
|
/* We need to set new caps for this pad. */
|
||||||
|
if (str->caps)
|
||||||
|
gst_caps_unref (str->caps);
|
||||||
str->caps = gst_caps_new_simple ("video/x-dvd-subpicture", NULL);
|
str->caps = gst_caps_new_simple ("video/x-dvd-subpicture", NULL);
|
||||||
|
|
||||||
if (!gst_pad_set_caps (str->pad, str->caps)) {
|
if (!gst_pad_set_caps (str->pad, str->caps)) {
|
||||||
|
@ -746,8 +756,8 @@ gst_dvd_demux_get_subpicture_stream (GstMPEGDemux * mpeg_demux,
|
||||||
|
|
||||||
t = g_strdup_printf ("subtitle-%d-language", stream_nr);
|
t = g_strdup_printf ("subtitle-%d-language", stream_nr);
|
||||||
lang_code =
|
lang_code =
|
||||||
gst_structure_get_string (gst_event_get_structure (dvd_demux->
|
gst_structure_get_string (gst_event_get_structure
|
||||||
langcodes), t);
|
(dvd_demux->langcodes), t);
|
||||||
g_free (t);
|
g_free (t);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1164,6 +1174,8 @@ gst_dvd_demux_reset (GstDVDDemux * dvd_demux)
|
||||||
|
|
||||||
gst_element_remove_pad (GST_ELEMENT (dvd_demux),
|
gst_element_remove_pad (GST_ELEMENT (dvd_demux),
|
||||||
dvd_demux->subpicture_stream[i]->pad);
|
dvd_demux->subpicture_stream[i]->pad);
|
||||||
|
if (dvd_demux->subpicture_stream[i]->caps)
|
||||||
|
gst_caps_unref (dvd_demux->subpicture_stream[i]->caps);
|
||||||
if (dvd_demux->subpicture_stream[i]->tags)
|
if (dvd_demux->subpicture_stream[i]->tags)
|
||||||
gst_tag_list_free (dvd_demux->subpicture_stream[i]->tags);
|
gst_tag_list_free (dvd_demux->subpicture_stream[i]->tags);
|
||||||
g_free (dvd_demux->subpicture_stream[i]);
|
g_free (dvd_demux->subpicture_stream[i]);
|
||||||
|
|
|
@ -331,6 +331,7 @@ gst_mpeg_demux_init_stream (GstMPEGDemux * mpeg_demux,
|
||||||
str->last_flow = GST_FLOW_OK;
|
str->last_flow = GST_FLOW_OK;
|
||||||
str->buffers_sent = 0;
|
str->buffers_sent = 0;
|
||||||
str->tags = NULL;
|
str->tags = NULL;
|
||||||
|
str->caps = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static GstMPEGStream *
|
static GstMPEGStream *
|
||||||
|
@ -373,6 +374,8 @@ gst_mpeg_demux_get_video_stream (GstMPEGDemux * mpeg_demux,
|
||||||
GstTagList *list;
|
GstTagList *list;
|
||||||
|
|
||||||
/* We need to set new caps for this pad. */
|
/* We need to set new caps for this pad. */
|
||||||
|
if (str->caps)
|
||||||
|
gst_caps_unref (str->caps);
|
||||||
str->caps = gst_caps_new_simple ("video/mpeg",
|
str->caps = gst_caps_new_simple ("video/mpeg",
|
||||||
"mpegversion", G_TYPE_INT, mpeg_version,
|
"mpegversion", G_TYPE_INT, mpeg_version,
|
||||||
"systemstream", G_TYPE_BOOLEAN, FALSE, NULL);
|
"systemstream", G_TYPE_BOOLEAN, FALSE, NULL);
|
||||||
|
@ -445,6 +448,8 @@ gst_mpeg_demux_get_audio_stream (GstMPEGDemux * mpeg_demux,
|
||||||
GstTagList *list;
|
GstTagList *list;
|
||||||
|
|
||||||
/* We need to set new caps for this pad. */
|
/* We need to set new caps for this pad. */
|
||||||
|
if (str->caps)
|
||||||
|
gst_caps_unref (str->caps);
|
||||||
str->caps = gst_caps_new_simple ("audio/mpeg",
|
str->caps = gst_caps_new_simple ("audio/mpeg",
|
||||||
"mpegversion", G_TYPE_INT, 1, NULL);
|
"mpegversion", G_TYPE_INT, 1, NULL);
|
||||||
if (!gst_pad_set_caps (str->pad, str->caps)) {
|
if (!gst_pad_set_caps (str->pad, str->caps)) {
|
||||||
|
@ -1334,6 +1339,8 @@ gst_mpeg_demux_reset (GstMPEGDemux * mpeg_demux)
|
||||||
gst_event_new_eos ());
|
gst_event_new_eos ());
|
||||||
gst_element_remove_pad (GST_ELEMENT (mpeg_demux),
|
gst_element_remove_pad (GST_ELEMENT (mpeg_demux),
|
||||||
mpeg_demux->video_stream[i]->pad);
|
mpeg_demux->video_stream[i]->pad);
|
||||||
|
if (mpeg_demux->video_stream[i]->caps)
|
||||||
|
gst_caps_unref (mpeg_demux->video_stream[i]->caps);
|
||||||
g_free (mpeg_demux->video_stream[i]);
|
g_free (mpeg_demux->video_stream[i]);
|
||||||
mpeg_demux->video_stream[i] = NULL;
|
mpeg_demux->video_stream[i] = NULL;
|
||||||
}
|
}
|
||||||
|
@ -1345,6 +1352,8 @@ gst_mpeg_demux_reset (GstMPEGDemux * mpeg_demux)
|
||||||
mpeg_demux->audio_stream[i]->pad);
|
mpeg_demux->audio_stream[i]->pad);
|
||||||
if (mpeg_demux->audio_stream[i]->tags)
|
if (mpeg_demux->audio_stream[i]->tags)
|
||||||
gst_tag_list_free (mpeg_demux->audio_stream[i]->tags);
|
gst_tag_list_free (mpeg_demux->audio_stream[i]->tags);
|
||||||
|
if (mpeg_demux->audio_stream[i]->caps)
|
||||||
|
gst_caps_unref (mpeg_demux->audio_stream[i]->caps);
|
||||||
g_free (mpeg_demux->audio_stream[i]);
|
g_free (mpeg_demux->audio_stream[i]);
|
||||||
mpeg_demux->audio_stream[i] = NULL;
|
mpeg_demux->audio_stream[i] = NULL;
|
||||||
}
|
}
|
||||||
|
@ -1354,6 +1363,8 @@ gst_mpeg_demux_reset (GstMPEGDemux * mpeg_demux)
|
||||||
gst_event_new_eos ());
|
gst_event_new_eos ());
|
||||||
gst_element_remove_pad (GST_ELEMENT (mpeg_demux),
|
gst_element_remove_pad (GST_ELEMENT (mpeg_demux),
|
||||||
mpeg_demux->private_stream[i]->pad);
|
mpeg_demux->private_stream[i]->pad);
|
||||||
|
if (mpeg_demux->private_stream[i]->caps)
|
||||||
|
gst_caps_unref (mpeg_demux->private_stream[i]->caps);
|
||||||
g_free (mpeg_demux->private_stream[i]);
|
g_free (mpeg_demux->private_stream[i]);
|
||||||
mpeg_demux->private_stream[i] = NULL;
|
mpeg_demux->private_stream[i] = NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -782,17 +782,18 @@ gst_mpeg_parse_chain (GstPad * pad, GstBuffer * buffer)
|
||||||
/* Make sure the output pad has proper capabilities. */
|
/* Make sure the output pad has proper capabilities. */
|
||||||
if (!GST_PAD_CAPS (mpeg_parse->sinkpad)) {
|
if (!GST_PAD_CAPS (mpeg_parse->sinkpad)) {
|
||||||
gboolean mpeg2 = GST_MPEG_PACKETIZE_IS_MPEG2 (mpeg_parse->packetize);
|
gboolean mpeg2 = GST_MPEG_PACKETIZE_IS_MPEG2 (mpeg_parse->packetize);
|
||||||
|
GstCaps *caps = gst_caps_new_simple ("video/mpeg",
|
||||||
if (!gst_pad_set_caps (mpeg_parse->sinkpad,
|
"mpegversion", G_TYPE_INT, (mpeg2 ? 2 : 1),
|
||||||
gst_caps_new_simple ("video/mpeg",
|
"systemstream", G_TYPE_BOOLEAN, TRUE,
|
||||||
"mpegversion", G_TYPE_INT, (mpeg2 ? 2 : 1),
|
"parsed", G_TYPE_BOOLEAN, TRUE, NULL);
|
||||||
"systemstream", G_TYPE_BOOLEAN, TRUE,
|
if (!gst_pad_set_caps (mpeg_parse->sinkpad, caps) < 0) {
|
||||||
"parsed", G_TYPE_BOOLEAN, TRUE, NULL)) < 0) {
|
|
||||||
GST_ELEMENT_ERROR (mpeg_parse, CORE, NEGOTIATION, (NULL), (NULL));
|
GST_ELEMENT_ERROR (mpeg_parse, CORE, NEGOTIATION, (NULL), (NULL));
|
||||||
gst_buffer_unref (buffer);
|
gst_buffer_unref (buffer);
|
||||||
result = GST_FLOW_ERROR;
|
result = GST_FLOW_ERROR;
|
||||||
|
gst_caps_unref (caps);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
gst_caps_unref (caps);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Send the buffer. */
|
/* Send the buffer. */
|
||||||
|
|
Loading…
Reference in a new issue