mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-26 00:58:12 +00:00
gst/modplug/gstmodplug.*: set correct timestamps on outgoing buffers
Original commit message from CVS: * gst/modplug/gstmodplug.cc: * gst/modplug/gstmodplug.h: set correct timestamps on outgoing buffers
This commit is contained in:
parent
94f1403b7b
commit
bcddae04d6
3 changed files with 31 additions and 17 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
2004-03-14 Benjamin Otte <otte@gnome.org>
|
||||||
|
|
||||||
|
* gst/modplug/gstmodplug.cc:
|
||||||
|
* gst/modplug/gstmodplug.h:
|
||||||
|
set correct timestamps on outgoing buffers
|
||||||
|
|
||||||
2004-03-14 Benjamin Otte <otte@gnome.org>
|
2004-03-14 Benjamin Otte <otte@gnome.org>
|
||||||
|
|
||||||
* gst/modplug/gstmodplug.cc:
|
* gst/modplug/gstmodplug.cc:
|
||||||
|
|
|
@ -530,7 +530,7 @@ gst_modplug_loop (GstElement *element)
|
||||||
/* GstBuffer *buf;*/
|
/* GstBuffer *buf;*/
|
||||||
|
|
||||||
modplug->seek_at = -1;
|
modplug->seek_at = -1;
|
||||||
modplug->need_discont = FALSE;
|
modplug->need_discont = TRUE;
|
||||||
modplug->eos = FALSE;
|
modplug->eos = FALSE;
|
||||||
/*
|
/*
|
||||||
buf = gst_pad_pull (modplug->sinkpad);
|
buf = gst_pad_pull (modplug->sinkpad);
|
||||||
|
@ -621,29 +621,36 @@ gst_modplug_loop (GstElement *element)
|
||||||
modplug->seek_at = -1;
|
modplug->seek_at = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (modplug->need_discont && GST_PAD_IS_USABLE (modplug->srcpad))
|
||||||
|
{
|
||||||
|
GstEvent *discont;
|
||||||
|
gint64 value;
|
||||||
|
GstFormat format = GST_FORMAT_TIME;
|
||||||
|
|
||||||
|
if (gst_modplug_src_query (modplug->srcpad, GST_QUERY_POSITION, &format, &value)) {
|
||||||
|
discont = gst_event_new_discontinuous (FALSE, GST_FORMAT_TIME, value, GST_FORMAT_UNDEFINED);
|
||||||
|
modplug->timestamp = value;
|
||||||
|
} else {
|
||||||
|
modplug->timestamp = GST_CLOCK_TIME_NONE;
|
||||||
|
discont = gst_event_new_discontinuous (FALSE, GST_FORMAT_UNDEFINED);
|
||||||
|
}
|
||||||
|
gst_pad_push (modplug->srcpad, GST_DATA (discont));
|
||||||
|
modplug->need_discont= FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
if (modplug->mSoundFile->Read (modplug->audiobuffer, modplug->length) != 0)
|
if (modplug->mSoundFile->Read (modplug->audiobuffer, modplug->length) != 0)
|
||||||
{
|
{
|
||||||
GstBuffer *buffer_out;
|
GstBuffer *buffer_out;
|
||||||
GstFormat format;
|
|
||||||
gint64 value;
|
|
||||||
|
|
||||||
format = GST_FORMAT_TIME;
|
|
||||||
gst_modplug_src_query (modplug->srcpad, GST_QUERY_POSITION, &format, &value);
|
|
||||||
|
|
||||||
if (modplug->need_discont && GST_PAD_IS_USABLE (modplug->srcpad))
|
|
||||||
{
|
|
||||||
GstEvent *discont;
|
|
||||||
|
|
||||||
discont = gst_event_new_discontinuous (FALSE, GST_FORMAT_TIME, value, NULL);
|
|
||||||
gst_pad_push (modplug->srcpad, GST_DATA (discont));
|
|
||||||
|
|
||||||
modplug->need_discont= FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
buffer_out = gst_buffer_new ();
|
buffer_out = gst_buffer_new ();
|
||||||
GST_BUFFER_DATA (buffer_out) = (guchar *) g_memdup (modplug->audiobuffer, modplug->length);
|
GST_BUFFER_DATA (buffer_out) = (guchar *) g_memdup (modplug->audiobuffer, modplug->length);
|
||||||
GST_BUFFER_SIZE (buffer_out) = modplug->length;
|
GST_BUFFER_SIZE (buffer_out) = modplug->length;
|
||||||
GST_BUFFER_TIMESTAMP (buffer_out) = value;
|
GST_BUFFER_TIMESTAMP (buffer_out) = modplug->timestamp;
|
||||||
|
|
||||||
|
if (GST_CLOCK_TIME_IS_VALID (modplug->timestamp)) {
|
||||||
|
GST_BUFFER_DURATION (buffer_out) = modplug->length * GST_SECOND / modplug->frequency / modplug->channel / (modplug->_16bit ? 2 : 1) ;
|
||||||
|
modplug->timestamp += GST_BUFFER_DURATION (buffer_out);
|
||||||
|
}
|
||||||
|
|
||||||
if (GST_PAD_IS_USABLE (modplug->srcpad))
|
if (GST_PAD_IS_USABLE (modplug->srcpad))
|
||||||
gst_pad_push (modplug->srcpad, GST_DATA (buffer_out));
|
gst_pad_push (modplug->srcpad, GST_DATA (buffer_out));
|
||||||
|
|
|
@ -70,6 +70,7 @@ struct _GstModPlug {
|
||||||
gboolean eos;
|
gboolean eos;
|
||||||
gint64 seek_at;
|
gint64 seek_at;
|
||||||
guint64 song_size;
|
guint64 song_size;
|
||||||
|
guint64 timestamp;
|
||||||
|
|
||||||
CSoundFile *mSoundFile;
|
CSoundFile *mSoundFile;
|
||||||
gboolean opened; /* set to TRUE when mSoundFile is created */
|
gboolean opened; /* set to TRUE when mSoundFile is created */
|
||||||
|
|
Loading…
Reference in a new issue