ext/a52dec/gsta52dec.*: Fix #334550: failure to play raw AC3 files due to segment problems.

Original commit message from CVS:
* ext/a52dec/gsta52dec.c: (gst_a52dec_sink_event),
(gst_a52dec_chain_raw), (gst_a52dec_change_state):
* ext/a52dec/gsta52dec.h:
Fix #334550: failure to play raw AC3 files due to segment problems.
This commit is contained in:
Michael Smith 2006-03-15 22:01:40 +00:00
parent f3fd9afefd
commit c2a98834b6
3 changed files with 26 additions and 0 deletions

View file

@ -1,3 +1,10 @@
2006-03-15 Michael Smith <msmith@fluendo.com>
* ext/a52dec/gsta52dec.c: (gst_a52dec_sink_event),
(gst_a52dec_chain_raw), (gst_a52dec_change_state):
* ext/a52dec/gsta52dec.h:
Fix #334550: failure to play raw AC3 files due to segment problems.
2006-03-15 Tim-Philipp Müller <tim at centricular dot net>
Patch by: Christophe Fergeau <teuf gnome org>

View file

@ -369,6 +369,7 @@ gst_a52dec_sink_event (GstPad * pad, GstEvent * event)
GST_WARNING ("No time in newsegment event %p", event);
} else {
a52dec->time = val;
a52dec->sent_segment = TRUE;
}
if (a52dec->cache) {
@ -579,6 +580,22 @@ gst_a52dec_chain_raw (GstPad * pad, GstBuffer * buf)
gint length = 0, flags, sample_rate, bit_rate;
GstFlowReturn result = GST_FLOW_OK;
if (!a52dec->sent_segment) {
GstSegment segment;
/* Create a basic segment. Usually, we'll get a new-segment sent by
* another element that will know more information (a demuxer). If we're
* just looking at a raw AC3 stream, we won't - so we need to send one
* here, but we don't know much info, so just send a minimal TIME
* new-segment event
*/
gst_segment_init (&segment, GST_FORMAT_TIME);
gst_pad_push_event (a52dec->srcpad, gst_event_new_new_segment (FALSE,
segment.rate, segment.format, segment.start,
segment.duration, segment.start));
a52dec->sent_segment = TRUE;
}
/* merge with cache, if any. Also make sure timestamps match */
if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
a52dec->time = GST_BUFFER_TIMESTAMP (buf);
@ -662,6 +679,7 @@ gst_a52dec_change_state (GstElement * element, GstStateChange transition)
a52dec->level = 1;
a52dec->bias = 0;
a52dec->time = 0;
a52dec->sent_segment = FALSE;
break;
case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
break;

View file

@ -47,6 +47,7 @@ struct _GstA52Dec {
*srcpad;
gboolean dvdmode;
gboolean sent_segment;
int bit_rate;
int sample_rate;