mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-08 23:42:28 +00:00
gst/mpegstream/: Reset on ready. Fixes 160276.
Original commit message from CVS: Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net> * gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_class_init), (gst_dvd_demux_reset), (gst_dvd_demux_change_state): * gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_reset), (gst_mpeg_demux_change_state): Reset on ready. Fixes 160276.
This commit is contained in:
parent
9b8f87389a
commit
e50c59631d
3 changed files with 112 additions and 5 deletions
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
||||||
|
2004-12-16 Edward Hervey <bilboed@bilboed.com>
|
||||||
|
|
||||||
|
Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
|
||||||
|
|
||||||
|
* gst/mpegstream/gstdvddemux.c: (gst_dvd_demux_class_init),
|
||||||
|
(gst_dvd_demux_reset), (gst_dvd_demux_change_state):
|
||||||
|
* gst/mpegstream/gstmpegdemux.c: (gst_mpeg_demux_reset),
|
||||||
|
(gst_mpeg_demux_change_state):
|
||||||
|
Reset on ready. Fixes 160276.
|
||||||
|
|
||||||
2004-12-16 Sebastien Cote <sc5@hermes.usherb.ca>
|
2004-12-16 Sebastien Cote <sc5@hermes.usherb.ca>
|
||||||
|
|
||||||
Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
|
Reviewed by: Ronald S. Bultje <rbultje@ronald.bitfreak.net>
|
||||||
|
|
|
@ -159,6 +159,7 @@ static void gst_dvd_demux_set_cur_audio
|
||||||
static void gst_dvd_demux_set_cur_subpicture
|
static void gst_dvd_demux_set_cur_subpicture
|
||||||
(GstDVDDemux * dvd_demux, gint stream_nr);
|
(GstDVDDemux * dvd_demux, gint stream_nr);
|
||||||
|
|
||||||
|
static GstElementStateReturn gst_dvd_demux_change_state (GstElement * element);
|
||||||
|
|
||||||
static GstMPEGDemuxClass *parent_class = NULL;
|
static GstMPEGDemuxClass *parent_class = NULL;
|
||||||
|
|
||||||
|
@ -243,6 +244,8 @@ gst_dvd_demux_class_init (GstDVDDemuxClass * klass)
|
||||||
mpeg_parse_class = (GstMPEGParseClass *) klass;
|
mpeg_parse_class = (GstMPEGParseClass *) klass;
|
||||||
mpeg_demux_class = (GstMPEGDemuxClass *) klass;
|
mpeg_demux_class = (GstMPEGDemuxClass *) klass;
|
||||||
|
|
||||||
|
gstelement_class->change_state = gst_dvd_demux_change_state;
|
||||||
|
|
||||||
mpeg_parse_class->send_discont = gst_dvd_demux_send_discont;
|
mpeg_parse_class->send_discont = gst_dvd_demux_send_discont;
|
||||||
|
|
||||||
mpeg_demux_class->get_audio_stream = gst_dvd_demux_get_audio_stream;
|
mpeg_demux_class->get_audio_stream = gst_dvd_demux_get_audio_stream;
|
||||||
|
@ -946,6 +949,50 @@ gst_dvd_demux_set_cur_subpicture (GstDVDDemux * dvd_demux, gint stream_nr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gst_dvd_demux_reset (GstDVDDemux * dvd_demux)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
GST_INFO ("Resetting the dvd demuxer");
|
||||||
|
for (i = 0; i < GST_DVD_DEMUX_NUM_SUBPICTURE_STREAMS; i++) {
|
||||||
|
if (dvd_demux->subpicture_stream[i]) {
|
||||||
|
gst_element_remove_pad (GST_ELEMENT (dvd_demux),
|
||||||
|
dvd_demux->subpicture_stream[i]->pad);
|
||||||
|
g_free (dvd_demux->subpicture_stream[i]);
|
||||||
|
dvd_demux->subpicture_stream[i] = NULL;
|
||||||
|
}
|
||||||
|
dvd_demux->subpicture_time[i] = 0;
|
||||||
|
}
|
||||||
|
gst_pad_set_explicit_caps (dvd_demux->cur_video, NULL);
|
||||||
|
gst_pad_set_explicit_caps (dvd_demux->cur_audio, NULL);
|
||||||
|
gst_pad_set_explicit_caps (dvd_demux->cur_subpicture, NULL);
|
||||||
|
|
||||||
|
dvd_demux->cur_video_nr = 0;
|
||||||
|
dvd_demux->cur_audio_nr = 0;
|
||||||
|
dvd_demux->cur_subpicture_nr = 0;
|
||||||
|
dvd_demux->mpeg_version = 0;
|
||||||
|
dvd_demux->last_end_ptm = 0;
|
||||||
|
|
||||||
|
dvd_demux->just_flushed = FALSE;
|
||||||
|
dvd_demux->discont_time = GST_CLOCK_TIME_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static GstElementStateReturn
|
||||||
|
gst_dvd_demux_change_state (GstElement * element)
|
||||||
|
{
|
||||||
|
GstDVDDemux *dvd_demux = GST_DVD_DEMUX (element);
|
||||||
|
|
||||||
|
switch (GST_STATE_TRANSITION (element)) {
|
||||||
|
case GST_STATE_PAUSED_TO_READY:
|
||||||
|
gst_dvd_demux_reset (dvd_demux);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return GST_ELEMENT_CLASS (parent_class)->change_state (element);
|
||||||
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
gst_dvd_demux_plugin_init (GstPlugin * plugin)
|
gst_dvd_demux_plugin_init (GstPlugin * plugin)
|
||||||
|
|
|
@ -1048,17 +1048,67 @@ gst_mpeg_demux_handle_src_event (GstPad * pad, GstEvent * event)
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gst_mpeg_demux_reset (GstMPEGDemux * mpeg_demux)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/* Reset the element */
|
||||||
|
|
||||||
|
GST_INFO ("Resetting the MPEG Demuxer");
|
||||||
|
|
||||||
|
/* free the streams , remove the pads */
|
||||||
|
/* filled in init_stream */
|
||||||
|
/* check get_audio/video_stream because it can be derivated */
|
||||||
|
for (i = 0; i < GST_MPEG_DEMUX_NUM_VIDEO_STREAMS; i++)
|
||||||
|
if (mpeg_demux->video_stream[i]) {
|
||||||
|
gst_element_remove_pad (GST_ELEMENT (mpeg_demux),
|
||||||
|
mpeg_demux->video_stream[i]->pad);
|
||||||
|
g_free (mpeg_demux->video_stream[i]);
|
||||||
|
mpeg_demux->video_stream[i] = NULL;
|
||||||
|
}
|
||||||
|
for (i = 0; i < GST_MPEG_DEMUX_NUM_AUDIO_STREAMS; i++)
|
||||||
|
if (mpeg_demux->audio_stream[i]) {
|
||||||
|
gst_element_remove_pad (GST_ELEMENT (mpeg_demux),
|
||||||
|
mpeg_demux->audio_stream[i]->pad);
|
||||||
|
g_free (mpeg_demux->audio_stream[i]);
|
||||||
|
mpeg_demux->audio_stream[i] = NULL;
|
||||||
|
}
|
||||||
|
for (i = 0; i < GST_MPEG_DEMUX_NUM_PRIVATE_STREAMS; i++)
|
||||||
|
if (mpeg_demux->private_stream[i]) {
|
||||||
|
gst_element_remove_pad (GST_ELEMENT (mpeg_demux),
|
||||||
|
mpeg_demux->private_stream[i]->pad);
|
||||||
|
g_free (mpeg_demux->private_stream[i]);
|
||||||
|
mpeg_demux->private_stream[i] = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
mpeg_demux->in_flush = FALSE;
|
||||||
|
mpeg_demux->header_length = 0;
|
||||||
|
mpeg_demux->rate_bound = 0;
|
||||||
|
mpeg_demux->audio_bound = 0;
|
||||||
|
mpeg_demux->video_bound = 0;
|
||||||
|
mpeg_demux->fixed = FALSE;
|
||||||
|
mpeg_demux->constrained = FALSE;
|
||||||
|
mpeg_demux->audio_lock = FALSE;
|
||||||
|
mpeg_demux->video_lock = FALSE;
|
||||||
|
|
||||||
|
mpeg_demux->packet_rate_restriction = FALSE;
|
||||||
|
mpeg_demux->total_size_bound = 0LL;
|
||||||
|
|
||||||
|
mpeg_demux->index = NULL;
|
||||||
|
|
||||||
|
mpeg_demux->adjust = 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
static GstElementStateReturn
|
static GstElementStateReturn
|
||||||
gst_mpeg_demux_change_state (GstElement * element)
|
gst_mpeg_demux_change_state (GstElement * element)
|
||||||
{
|
{
|
||||||
/* GstMPEGDemux *mpeg_demux = GST_MPEG_DEMUX (element); */
|
GstMPEGDemux *mpeg_demux = GST_MPEG_DEMUX (element);
|
||||||
|
|
||||||
switch (GST_STATE_TRANSITION (element)) {
|
switch (GST_STATE_TRANSITION (element)) {
|
||||||
case GST_STATE_READY_TO_PAUSED:
|
|
||||||
break;
|
|
||||||
case GST_STATE_PAUSED_TO_READY:
|
case GST_STATE_PAUSED_TO_READY:
|
||||||
break;
|
gst_mpeg_demux_reset (mpeg_demux);
|
||||||
case GST_STATE_READY_TO_NULL:
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue