summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
Diffstat (limited to 'sys')
-rw-r--r--sys/oss/gstosssink.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/sys/oss/gstosssink.c b/sys/oss/gstosssink.c
index a225d203..433d5527 100644
--- a/sys/oss/gstosssink.c
+++ b/sys/oss/gstosssink.c
@@ -269,7 +269,8 @@ gst_osssink_sinkconnect (GstPad *pad, GstCaps *caps)
if (width != depth)
return GST_PAD_CONNECT_REFUSED;
- osssink->bps = 0;
+ /* laws 1 and 2 are 1 bps anyway */
+ osssink->bps = 1;
law = gst_caps_get_int (caps, "law");
endianness = gst_caps_get_int (caps, "endianness");
@@ -300,6 +301,13 @@ gst_osssink_sinkconnect (GstPad *pad, GstCaps *caps)
}
osssink->bps = 1;
}
+ } else if (law == 1) {
+ format = AFMT_MU_LAW;
+ } else if (law == 2) {
+ format = AFMT_A_LAW;
+ } else {
+ g_critical ("unknown law");
+ return GST_PAD_CONNECT_REFUSED;
}
if (format == -1)
@@ -416,6 +424,11 @@ gst_osssink_chain (GstPad *pad, GstBuffer *buf)
buftime = GST_BUFFER_TIMESTAMP (buf);
+ if (!osssink->bps) {
+ gst_buffer_unref (buf);
+ gst_element_error (GST_ELEMENT (osssink), "capsnego was never performed, unknown data type");
+ }
+
if (osssink->fd >= 0) {
if (!osssink->mute) {
guchar *data = GST_BUFFER_DATA (buf);