summaryrefslogtreecommitdiff
path: root/ext/ffmpeg/gstffmpegenc.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/ffmpeg/gstffmpegenc.c')
-rw-r--r--ext/ffmpeg/gstffmpegenc.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/ext/ffmpeg/gstffmpegenc.c b/ext/ffmpeg/gstffmpegenc.c
index deab9cb..8e752c3 100644
--- a/ext/ffmpeg/gstffmpegenc.c
+++ b/ext/ffmpeg/gstffmpegenc.c
@@ -174,12 +174,15 @@ gst_ffmpegenc_class_init (GstFFMpegEncClass *klass)
gobject_class->get_property = gst_ffmpegenc_get_property;
}
-static void
-gst_ffmpegenc_newcaps (GstPad *pad, GstCaps *caps)
+static GstPadConnectReturn
+gst_ffmpegenc_sinkconnect (GstPad *pad, GstCaps *caps)
{
GstFFMpegEnc *ffmpegenc = (GstFFMpegEnc *) gst_pad_get_parent (pad);
GstFFMpegEncClass *oclass = (GstFFMpegEncClass*)(G_OBJECT_GET_CLASS(ffmpegenc));
+ if (!GST_CAPS_IS_FIXED (caps))
+ return GST_PAD_CONNECT_DELAYED;
+
if (strstr (gst_caps_get_mime (caps), "audio/raw")) {
ffmpegenc->context->sample_rate = gst_caps_get_int (caps, "rate");
ffmpegenc->context->channels = gst_caps_get_int (caps, "channels");
@@ -207,10 +210,12 @@ gst_ffmpegenc_newcaps (GstPad *pad, GstCaps *caps)
}
else {
g_warning ("ffmpegenc: invalid caps %s\n", gst_caps_get_mime (caps));
+ return GST_PAD_CONNECT_REFUSED;
}
if (avcodec_open (ffmpegenc->context, oclass->in_plugin) < 0) {
g_warning ("ffmpegenc: could not open codec\n");
+ return GST_PAD_CONNECT_REFUSED;
}
if (oclass->in_plugin->type == CODEC_TYPE_AUDIO) {
@@ -218,6 +223,7 @@ gst_ffmpegenc_newcaps (GstPad *pad, GstCaps *caps)
ffmpegenc->context->channels);
ffmpegenc->buffer_pos = 0;
}
+ return GST_PAD_CONNECT_OK;
}
static void
@@ -245,7 +251,7 @@ gst_ffmpegenc_init(GstFFMpegEnc *ffmpegenc)
ffmpegenc->context->sample_rate = -1;
}
- gst_pad_set_newcaps_function (ffmpegenc->sinkpad, gst_ffmpegenc_newcaps);
+ gst_pad_set_connect_function (ffmpegenc->sinkpad, gst_ffmpegenc_sinkconnect);
gst_element_add_pad (GST_ELEMENT (ffmpegenc), ffmpegenc->sinkpad);
ffmpegenc->srcpad = gst_pad_new_from_template (