summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Boulton <richard@tartarus.org>2002-03-02 15:52:46 +0000
committerRichard Boulton <richard@tartarus.org>2002-03-02 15:52:46 +0000
commit58d346c0c40b7d2a89f17ee9ff78dbe11cab584c (patch)
tree90a82da2f34a025dce71e6136c6feb235dfb9dbf
parente13d88d991674e3b8614e0d132eba3fb62f3f6b9 (diff)
downloadgstreamer-plugins-good-58d346c0c40b7d2a89f17ee9ff78dbe11cab584c.tar.gz
Add timestamps to osssrc.
Original commit message from CVS: Add timestamps to osssrc. Remove unused member "seq".
-rw-r--r--sys/oss/gstosssrc.c17
-rw-r--r--sys/oss/gstosssrc.h4
2 files changed, 16 insertions, 5 deletions
diff --git a/sys/oss/gstosssrc.c b/sys/oss/gstosssrc.c
index dbc6668ef..920e427e0 100644
--- a/sys/oss/gstosssrc.c
+++ b/sys/oss/gstosssrc.c
@@ -174,7 +174,8 @@ gst_osssrc_init (GstOssSrc *osssrc)
osssrc->bytes_per_read = 4096;
osssrc->curoffset = 0;
- osssrc->seq = 0;
+ osssrc->basetime = 0;
+ osssrc->samples_since_basetime = 0;
}
static GstBuffer *
@@ -183,6 +184,7 @@ gst_osssrc_get (GstPad *pad)
GstOssSrc *src;
GstBuffer *buf;
glong readbytes;
+ glong readsamples;
g_return_val_if_fail (pad != NULL, NULL);
src = GST_OSSSRC(gst_pad_get_parent (pad));
@@ -224,10 +226,15 @@ gst_osssrc_get (GstPad *pad)
GST_BUFFER_SIZE (buf) = readbytes;
GST_BUFFER_OFFSET (buf) = src->curoffset;
-
+ GST_BUFFER_TIMESTAMP (buf) = src->basetime +
+ src->samples_since_basetime * 1000000LL / src->frequency;
+
src->curoffset += readbytes;
+ readsamples = readbytes / src->channels;
+ if (src->format == 16) readsamples /= 2;
+ src->samples_since_basetime += readsamples;
- GST_DEBUG (GST_CAT_PLUGIN_INFO, "pushed buffer from soundcard of %ld bytes\n", readbytes);
+ GST_DEBUG (GST_CAT_PLUGIN_INFO, "pushed buffer from soundcard of %ld bytes, timestamp %lld\n", readbytes, GST_BUFFER_TIMESTAMP (buf));
return buf;
}
@@ -252,6 +259,10 @@ gst_osssrc_set_property (GObject *object, guint prop_id, const GValue *value, GP
src->channels = g_value_get_int (value);
break;
case ARG_FREQUENCY:
+ /* Preserve the timestamps */
+ src->basetime = src->samples_since_basetime * 1000000LL / src->frequency;
+ src->samples_since_basetime = 0;
+
src->frequency = g_value_get_int (value);
break;
case ARG_CUROFFSET:
diff --git a/sys/oss/gstosssrc.h b/sys/oss/gstosssrc.h
index 211811004..1ba2a0429 100644
--- a/sys/oss/gstosssrc.h
+++ b/sys/oss/gstosssrc.h
@@ -72,10 +72,10 @@ struct _GstOssSrc {
gint frequency;
/* blocking */
+ guint64 basetime;
+ guint64 samples_since_basetime;
gulong curoffset;
gulong bytes_per_read;
-
- gulong seq;
};
struct _GstOssSrcClass {