diff options
-rw-r--r-- | ext/arts/gst_arts.c | 6 | ||||
-rw-r--r-- | ext/arts/gst_artsio_impl.cc | 17 |
2 files changed, 20 insertions, 3 deletions
diff --git a/ext/arts/gst_arts.c b/ext/arts/gst_arts.c index cbeaf323..9037513b 100644 --- a/ext/arts/gst_arts.c +++ b/ext/arts/gst_arts.c @@ -44,13 +44,13 @@ GST_PAD_TEMPLATE_FACTORY ( sink_temp, GST_CAPS_NEW ( "arts_sample", "audio/raw", - "format", GST_PROPS_INT ("int"), + "format", GST_PROPS_STRING ("int"), "law", GST_PROPS_INT (0), "depth", GST_PROPS_INT (16), "width", GST_PROPS_INT (16), "signed", GST_PROPS_BOOLEAN (TRUE), "channels", GST_PROPS_INT (2), - "endianness", GST_PROPS_INT (G_LITTLE_ENDIAN) + "endianness", GST_PROPS_INT (G_BYTE_ORDER) ) ) @@ -61,7 +61,7 @@ GST_PAD_TEMPLATE_FACTORY ( src_temp, GST_CAPS_NEW ( "arts_sample", "audio/raw", - "format", GST_PROPS_INT ("int"), + "format", GST_PROPS_STRING ("int"), "law", GST_PROPS_INT (0), "depth", GST_PROPS_INT (16), "width", GST_PROPS_INT (16), diff --git a/ext/arts/gst_artsio_impl.cc b/ext/arts/gst_artsio_impl.cc index 1570555a..876e2b5b 100644 --- a/ext/arts/gst_artsio_impl.cc +++ b/ext/arts/gst_artsio_impl.cc @@ -17,6 +17,7 @@ class ArtsStereoSink_impl : virtual public ArtsStereoSink_skel, { GstPad *sinkpad; + GstPad *srcpad; unsigned long remainingsamples; GstBuffer *inbuf; unsigned char *dataptr; @@ -46,6 +47,17 @@ public: // start by pulling a buffer from GStreamer inbuf = gst_pad_pull (sinkpad); + while (GST_IS_EVENT (inbuf)) { + switch (GST_EVENT_TYPE (inbuf)) { + case GST_EVENT_EOS: + gst_element_set_eos (GST_PAD_PARENT (sinkpad)); + default: + break; + } + gst_pad_event_default (srcpad, (GstEvent*)inbuf); + inbuf = gst_pad_pull (sinkpad); + } + dataptr = GST_BUFFER_DATA(inbuf); remainingsamples = GST_BUFFER_SIZE(inbuf) / 4; //fprintf(stderr,"got a buffer with %d samples\n",remainingsamples); @@ -67,6 +79,10 @@ public: { sinkpad = pad; } + void setSrcPad(GstPad *pad) + { + srcpad = pad; + } }; @@ -114,6 +130,7 @@ public: ArtsStereoSink_impl *sink_impl = new ArtsStereoSink_impl(); ArtsStereoSrc_impl *source_impl = new ArtsStereoSrc_impl(); sink_impl->setPad(sinkpad); + sink_impl->setSrcPad(sourcepad); source_impl->setPad(sourcepad); sink = ArtsStereoSink::_from_base(sink_impl); source = ArtsStereoSrc::_from_base(source_impl); |