diff options
Diffstat (limited to 'ext/gsm')
-rw-r--r-- | ext/gsm/gstgsmdec.c | 27 | ||||
-rw-r--r-- | ext/gsm/gstgsmenc.c | 41 |
2 files changed, 37 insertions, 31 deletions
diff --git a/ext/gsm/gstgsmdec.c b/ext/gsm/gstgsmdec.c index 5ead519c..8a61453a 100644 --- a/ext/gsm/gstgsmdec.c +++ b/ext/gsm/gstgsmdec.c @@ -45,11 +45,11 @@ enum { /* FILL ME */ }; -static void gst_gsmdec_class_init (GstGSMDec *klass); -static void gst_gsmdec_init (GstGSMDec *gsmdec); +static void gst_gsmdec_class_init (GstGSMDec *klass); +static void gst_gsmdec_init (GstGSMDec *gsmdec); -static void gst_gsmdec_chain (GstPad *pad, GstBuffer *buf); -static void gst_gsmdec_newcaps (GstPad *pad, GstCaps *caps); +static void gst_gsmdec_chain (GstPad *pad, GstBuffer *buf); +static GstPadConnectReturn gst_gsmdec_sinkconnect (GstPad *pad, GstCaps *caps); static GstElementClass *parent_class = NULL; //static guint gst_gsmdec_signals[LAST_SIGNAL] = { 0 }; @@ -93,7 +93,7 @@ gst_gsmdec_init (GstGSMDec *gsmdec) gsmdec->sinkpad = gst_pad_new_from_template (gsmdec_sink_template, "sink"); gst_element_add_pad (GST_ELEMENT (gsmdec), gsmdec->sinkpad); gst_pad_set_chain_function (gsmdec->sinkpad, gst_gsmdec_chain); - gst_pad_set_newcaps_function (gsmdec->sinkpad, gst_gsmdec_newcaps); + gst_pad_set_connect_function (gsmdec->sinkpad, gst_gsmdec_sinkconnect); gsmdec->srcpad = gst_pad_new_from_template (gsmdec_src_template, "src"); gst_element_add_pad (GST_ELEMENT (gsmdec), gsmdec->srcpad); @@ -102,13 +102,18 @@ gst_gsmdec_init (GstGSMDec *gsmdec) gsmdec->bufsize = 0; } -static void -gst_gsmdec_newcaps (GstPad *pad, GstCaps *caps) +static GstPadConnectReturn +gst_gsmdec_sinkconnect (GstPad *pad, GstCaps *caps) { GstGSMDec *gsmdec; gsmdec = GST_GSMDEC (gst_pad_get_parent (pad)); - gst_pad_set_caps (gsmdec->srcpad, GST_CAPS_NEW ( + + if (!GST_CAPS_IS_FIXED (caps)) + return GST_PAD_CONNECT_DELAYED; + + if (gst_pad_try_set_caps (gsmdec->srcpad, + GST_CAPS_NEW ( "gsm_raw", "audio/raw", "format", GST_PROPS_STRING ("int"), @@ -119,7 +124,11 @@ gst_gsmdec_newcaps (GstPad *pad, GstCaps *caps) "depth", GST_PROPS_INT (16), "rate", GST_PROPS_INT (gst_caps_get_int (caps, "rate")), "channels", GST_PROPS_INT (1) - )); + ))) + { + return GST_PAD_CONNECT_OK; + } + return GST_PAD_CONNECT_REFUSED; } static void diff --git a/ext/gsm/gstgsmenc.c b/ext/gsm/gstgsmenc.c index b5ad0bce..abe4279d 100644 --- a/ext/gsm/gstgsmenc.c +++ b/ext/gsm/gstgsmenc.c @@ -46,22 +46,11 @@ enum { /* FILL ME */ }; -GST_PADTEMPLATE_FACTORY (src_factory, - "src", - GST_PAD_SRC, - GST_PAD_ALWAYS, - GST_CAPS_NEW ( - "gsm_enc", - "audio/x-gsm", - "rate", GST_PROPS_INT_RANGE (1000, 48000) - ) -); - -static void gst_gsmenc_class_init (GstGSMEnc *klass); -static void gst_gsmenc_init (GstGSMEnc *gsmenc); - -static void gst_gsmenc_chain (GstPad *pad,GstBuffer *buf); -static void gst_gsmenc_newcaps (GstPad *pad, GstCaps *caps); +static void gst_gsmenc_class_init (GstGSMEnc *klass); +static void gst_gsmenc_init (GstGSMEnc *gsmenc); + +static void gst_gsmenc_chain (GstPad *pad,GstBuffer *buf); +static GstPadConnectReturn gst_gsmenc_sinkconnect (GstPad *pad, GstCaps *caps); static GstElementClass *parent_class = NULL; static guint gst_gsmenc_signals[LAST_SIGNAL] = { 0 }; @@ -113,7 +102,7 @@ gst_gsmenc_init (GstGSMEnc *gsmenc) gsmenc->sinkpad = gst_pad_new_from_template (gsmenc_sink_template, "sink"); gst_element_add_pad (GST_ELEMENT (gsmenc), gsmenc->sinkpad); gst_pad_set_chain_function (gsmenc->sinkpad, gst_gsmenc_chain); - gst_pad_set_newcaps_function (gsmenc->sinkpad, gst_gsmenc_newcaps); + gst_pad_set_connect_function (gsmenc->sinkpad, gst_gsmenc_sinkconnect); gsmenc->srcpad = gst_pad_new_from_template (gsmenc_src_template, "src"); gst_element_add_pad (GST_ELEMENT (gsmenc), gsmenc->srcpad); @@ -124,19 +113,27 @@ gst_gsmenc_init (GstGSMEnc *gsmenc) gsmenc->rate = 8000; } -static void -gst_gsmenc_newcaps (GstPad *pad, GstCaps *caps) +static GstPadConnectReturn +gst_gsmenc_sinkconnect (GstPad *pad, GstCaps *caps) { GstGSMEnc *gsmenc; gsmenc = GST_GSMENC (gst_pad_get_parent (pad)); + if (!GST_CAPS_IS_FIXED (caps)) + return GST_PAD_CONNECT_DELAYED; + gsmenc->rate = gst_caps_get_int (caps, "rate"); - gst_pad_set_caps (gsmenc->srcpad, GST_CAPS_NEW ( + if (gst_pad_try_set_caps (gsmenc->srcpad, GST_CAPS_NEW ( "gsm_gsm", "audio/x-gsm", "rate", GST_PROPS_INT (gsmenc->rate) - )); + ))) + { + return GST_PAD_CONNECT_OK; + } + return GST_PAD_CONNECT_REFUSED; + } static void @@ -153,7 +150,7 @@ gst_gsmenc_chain (GstPad *pad, GstBuffer *buf) gsmenc = GST_GSMENC (GST_OBJECT_PARENT (pad)); if (!GST_PAD_CAPS (gsmenc->srcpad)) { - gst_pad_set_caps (gsmenc->srcpad, + gst_pad_try_set_caps (gsmenc->srcpad, GST_CAPS_NEW ( "gsm_enc", "audio/x-gsm", |