summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ext/arts/gst_arts.c6
-rw-r--r--ext/arts/gst_artsio_impl.cc17
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);