mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 12:11:13 +00:00
gst/mve/gstmvedemux.c: Fix audio discontinuity that happens when silent chunks are followed by real data again. Fixes...
Original commit message from CVS: Patch by: Jens Granseuer <jensgr at gmx dot net> * gst/mve/gstmvedemux.c: (gst_mve_audio_data), (gst_mve_demux_get_type): Fix audio discontinuity that happens when silent chunks are followed by real data again. Fixes bug #519905.
This commit is contained in:
parent
8be7f45f67
commit
3f4628dd47
2 changed files with 22 additions and 17 deletions
|
@ -1,3 +1,12 @@
|
||||||
|
2008-03-03 Sebastian Dröge <slomo@circular-chaos.org>
|
||||||
|
|
||||||
|
Patch by: Jens Granseuer <jensgr at gmx dot net>
|
||||||
|
|
||||||
|
* gst/mve/gstmvedemux.c: (gst_mve_audio_data),
|
||||||
|
(gst_mve_demux_get_type):
|
||||||
|
Fix audio discontinuity that happens when silent chunks are
|
||||||
|
followed by real data again. Fixes bug #519905.
|
||||||
|
|
||||||
2008-03-01 Zaheer Abbas Merali <zaheerabbas at merali dot org>
|
2008-03-01 Zaheer Abbas Merali <zaheerabbas at merali dot org>
|
||||||
|
|
||||||
* sys/dvb/gstdvbsrc.c:
|
* sys/dvb/gstdvbsrc.c:
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* GStreamer demultiplexer plugin for Interplay MVE movie files
|
/* GStreamer demultiplexer plugin for Interplay MVE movie files
|
||||||
*
|
*
|
||||||
* Copyright (C) 2006 Jens Granseuer <jensgr@gmx.net>
|
* Copyright (C) 2006-2008 Jens Granseuer <jensgr@gmx.net>
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Library General Public
|
* modify it under the terms of the GNU Library General Public
|
||||||
* License as published by the Free Software Foundation; either
|
* License as published by the Free Software Foundation; either
|
||||||
|
@ -759,7 +759,7 @@ gst_mve_audio_data (GstMveDemux * mve, guint8 type, const guint8 * data,
|
||||||
guint16 n_samples = size / s->n_channels / (s->sample_size / 8);
|
guint16 n_samples = size / s->n_channels / (s->sample_size / 8);
|
||||||
GstClockTime duration = (GST_SECOND / s->sample_rate) * n_samples;
|
GstClockTime duration = (GST_SECOND / s->sample_rate) * n_samples;
|
||||||
|
|
||||||
if (type == 8) {
|
if (type == MVE_OC_AUDIO_DATA) {
|
||||||
guint16 required = (s->compression ? size / 2 + s->n_channels : size);
|
guint16 required = (s->compression ? size / 2 + s->n_channels : size);
|
||||||
|
|
||||||
if (len < required)
|
if (len < required)
|
||||||
|
@ -776,29 +776,25 @@ gst_mve_audio_data (GstMveDemux * mve, guint8 type, const guint8 * data,
|
||||||
else
|
else
|
||||||
memcpy (GST_BUFFER_DATA (buf), data, size);
|
memcpy (GST_BUFFER_DATA (buf), data, size);
|
||||||
|
|
||||||
GST_BUFFER_DURATION (buf) = duration;
|
|
||||||
GST_BUFFER_OFFSET_END (buf) = s->offset + n_samples;
|
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (mve, "created audio buffer, size:%u, stream_mask:%x",
|
GST_DEBUG_OBJECT (mve, "created audio buffer, size:%u, stream_mask:%x",
|
||||||
size, stream_mask);
|
size, stream_mask);
|
||||||
|
|
||||||
*output = buf;
|
|
||||||
} else {
|
} else {
|
||||||
/* silence -
|
/* silence - create a minimal buffer with no sound */
|
||||||
don't return a buffer but notify downstream there won't be
|
size = s->n_channels * (s->sample_size / 8);
|
||||||
any data in this chunk */
|
ret = gst_mve_buffer_alloc_for_pad (s, size, &buf);
|
||||||
if (mve->audio_stream->pad)
|
memset (GST_BUFFER_DATA (buf), 0, size);
|
||||||
gst_pad_push_event (mve->audio_stream->pad,
|
|
||||||
gst_event_new_new_segment (TRUE, 1.0, GST_FORMAT_TIME,
|
|
||||||
s->last_ts + duration, GST_CLOCK_TIME_NONE, 0));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GST_BUFFER_DURATION (buf) = duration;
|
||||||
|
GST_BUFFER_OFFSET_END (buf) = s->offset + n_samples;
|
||||||
|
*output = buf;
|
||||||
|
|
||||||
s->offset += n_samples;
|
s->offset += n_samples;
|
||||||
s->last_ts += duration;
|
s->last_ts += duration;
|
||||||
} else {
|
} else {
|
||||||
/* alternate audio streams not supported.
|
/* alternate audio streams not supported.
|
||||||
are there any movies which use them? */
|
are there any movies which use them? */
|
||||||
if (type == 8)
|
if (type == MVE_OC_AUDIO_DATA)
|
||||||
GST_WARNING_OBJECT (mve, "found non-empty alternate audio stream");
|
GST_WARNING_OBJECT (mve, "found non-empty alternate audio stream");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1141,7 +1137,7 @@ gst_mve_demux_get_type (void)
|
||||||
static GType plugin_type = 0;
|
static GType plugin_type = 0;
|
||||||
|
|
||||||
if (!plugin_type) {
|
if (!plugin_type) {
|
||||||
static const GTypeInfo plugin_info = {
|
const GTypeInfo plugin_info = {
|
||||||
sizeof (GstMveDemuxClass),
|
sizeof (GstMveDemuxClass),
|
||||||
(GBaseInitFunc) gst_mve_demux_base_init,
|
(GBaseInitFunc) gst_mve_demux_base_init,
|
||||||
NULL,
|
NULL,
|
||||||
|
|
Loading…
Reference in a new issue