mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-10-02 08:42:32 +00:00
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:
parent
f3fd9afefd
commit
c2a98834b6
3 changed files with 26 additions and 0 deletions
|
@ -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>
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -47,6 +47,7 @@ struct _GstA52Dec {
|
|||
*srcpad;
|
||||
|
||||
gboolean dvdmode;
|
||||
gboolean sent_segment;
|
||||
|
||||
int bit_rate;
|
||||
int sample_rate;
|
||||
|
|
Loading…
Reference in a new issue