summaryrefslogtreecommitdiffstats
path: root/gst
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2002-05-30 04:43:38 +0000
committerAndy Wingo <wingo@pobox.com>2002-05-30 04:43:38 +0000
commit22c7be80df659f645786d8fca5483329e26456ae (patch)
tree56337d9ade9eb5628cf4477f0cef4102e00bde83 /gst
parentb1bb03e1a885c56336e593084ab159599b7dbe80 (diff)
wavparse fixups
Original commit message from CVS: wavparse fixups
Diffstat (limited to 'gst')
-rw-r--r--gst/wavparse/gstwavparse.c15
-rw-r--r--gst/wavparse/gstwavparse.h4
2 files changed, 18 insertions, 1 deletions
diff --git a/gst/wavparse/gstwavparse.c b/gst/wavparse/gstwavparse.c
index 534ffcbd..913c4118 100644
--- a/gst/wavparse/gstwavparse.c
+++ b/gst/wavparse/gstwavparse.c
@@ -192,6 +192,10 @@ gst_wavparse_chain (GstPad *pad, GstBuffer *buf)
/* I suppose we could signal an EOF at this point, but that may be
premature. We've stopped data flow, that's the main thing. */
}
+
+ GST_BUFFER_TIMESTAMP (buf) = wavparse->offset * GST_SECOND / wavparse->rate;
+ wavparse->offset += GST_BUFFER_SIZE (buf) * 8 / wavparse->width / wavparse->channels;
+
gst_pad_push (wavparse->srcpad, buf);
return;
}
@@ -271,9 +275,16 @@ gst_wavparse_chain (GstPad *pad, GstBuffer *buf)
"channels", GST_PROPS_INT (format->wChannels)
);
- gst_pad_try_set_caps (wavparse->srcpad, caps);
+ if (!gst_pad_try_set_caps (wavparse->srcpad, caps)) {
+ gst_element_error (GST_ELEMENT (wavparse), "Could not set caps");
+ return;
+ }
wavparse->bps = format->wBlockAlign;
+ wavparse->rate = format->dwSamplesPerSec;
+ wavparse->channels = format->wChannels;
+ wavparse->width = format->wBitsPerSample;
+
GST_DEBUG (0, "frequency %d, channels %d",
format->dwSamplesPerSec, format->wChannels);
@@ -316,6 +327,8 @@ gst_wavparse_chain (GstPad *pad, GstBuffer *buf)
newbuf = gst_buffer_new ();
GST_BUFFER_DATA (newbuf) = g_malloc (subsize);
GST_BUFFER_SIZE (newbuf) = subsize;
+ GST_BUFFER_TIMESTAMP (newbuf) = wavparse->offset * GST_SECOND / wavparse->rate;
+ wavparse->offset += subsize * 8 / wavparse->width / wavparse->channels;
memcpy (GST_BUFFER_DATA (newbuf), GST_BUFFER_DATA (buf) + datachunk->offset, subsize);
diff --git a/gst/wavparse/gstwavparse.h b/gst/wavparse/gstwavparse.h
index aff5224f..59769973 100644
--- a/gst/wavparse/gstwavparse.h
+++ b/gst/wavparse/gstwavparse.h
@@ -71,7 +71,11 @@ struct _GstWavParse {
/* useful audio data */
gint bps;
+ gint rate;
+ gint channels;
+ gint width;
+ gint64 offset;
};
struct _GstWavParseClass {