diff options
author | Richard Boulton <richard@tartarus.org> | 2002-03-02 15:51:47 +0000 |
---|---|---|
committer | Richard Boulton <richard@tartarus.org> | 2002-03-02 15:51:47 +0000 |
commit | e13d88d991674e3b8614e0d132eba3fb62f3f6b9 (patch) | |
tree | 1d92302ae469a6d5160597be805dc8d669cd3040 /ext/esd/esdmon.c | |
parent | b6c08a233af79f05c12696f3b2648bf716ad543f (diff) |
Fix up esdmon timestamps, so that they don't go completely wrong if someone changes the frequency, depth or mono/ster...
Original commit message from CVS:
Fix up esdmon timestamps, so that they don't go completely wrong if
someone changes the frequency, depth or mono/stereo parameters.
Diffstat (limited to 'ext/esd/esdmon.c')
-rw-r--r-- | ext/esd/esdmon.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/ext/esd/esdmon.c b/ext/esd/esdmon.c index 488a6a81..9e4ed641 100644 --- a/ext/esd/esdmon.c +++ b/ext/esd/esdmon.c @@ -56,6 +56,7 @@ struct _GstEsdmon { gint frequency; guint64 basetime; + guint64 samples_since_basetime; guint64 curoffset; guint64 bytes_per_read; }; @@ -249,6 +250,7 @@ gst_esdmon_init(GstEsdmon *esdmon) esdmon->bytes_per_read = 4096; esdmon->curoffset = 0; esdmon->basetime = 0; + esdmon->samples_since_basetime = 0; } static gboolean @@ -314,11 +316,12 @@ gst_esdmon_get (GstPad *pad) GST_BUFFER_SIZE (buf) = readbytes; GST_BUFFER_OFFSET (buf) = esdmon->curoffset; GST_BUFFER_TIMESTAMP (buf) = esdmon->basetime + - esdmon->curoffset * 1000000LL / esdmon->frequency; + esdmon->samples_since_basetime * 1000000LL / esdmon->frequency; + esdmon->curoffset += readbytes; readsamples = readbytes / esdmon->channels; if (esdmon->depth == 16) readsamples /= 2; - esdmon->curoffset += readsamples; + esdmon->samples_since_basetime += readsamples; GST_DEBUG (GST_CAT_PLUGIN_INFO, "pushed buffer from esdmon of %ld bytes, timestamp %lld\n", readbytes, GST_BUFFER_TIMESTAMP (buf)); return buf; @@ -348,8 +351,8 @@ gst_esdmon_set_property (GObject *object, guint prop_id, const GValue *value, GP break; case ARG_RATE: /* Preserve the timestamps */ - esdmon->basetime = esdmon->curoffset * 1000000LL / esdmon->frequency; - esdmon->curoffset = 0; + esdmon->basetime = esdmon->samples_since_basetime * 1000000LL / esdmon->frequency; + esdmon->samples_since_basetime = 0; /* Set the new frequency */ esdmon->frequency = g_value_get_int (value); |