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:
Benjamin Otte 2004-03-14 13:11:14 +00:00
parent 94f1403b7b
commit bcddae04d6
3 changed files with 31 additions and 17 deletions

View file

@ -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>
* gst/modplug/gstmodplug.cc:

View file

@ -530,7 +530,7 @@ gst_modplug_loop (GstElement *element)
/* GstBuffer *buf;*/
modplug->seek_at = -1;
modplug->need_discont = FALSE;
modplug->need_discont = TRUE;
modplug->eos = FALSE;
/*
buf = gst_pad_pull (modplug->sinkpad);
@ -621,29 +621,36 @@ gst_modplug_loop (GstElement *element)
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)
{
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 ();
GST_BUFFER_DATA (buffer_out) = (guchar *) g_memdup (modplug->audiobuffer, 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))
gst_pad_push (modplug->srcpad, GST_DATA (buffer_out));

View file

@ -70,6 +70,7 @@ struct _GstModPlug {
gboolean eos;
gint64 seek_at;
guint64 song_size;
guint64 timestamp;
CSoundFile *mSoundFile;
gboolean opened; /* set to TRUE when mSoundFile is created */