diff options
-rw-r--r-- | ext/ffmpeg/gstffmpegdec.c | 22 | ||||
-rw-r--r-- | ext/ffmpeg/gstffmpegenc.c | 42 | ||||
-rw-r--r-- | ext/ffmpeg/gstffmpegmux.c | 38 |
3 files changed, 46 insertions, 56 deletions
diff --git a/ext/ffmpeg/gstffmpegdec.c b/ext/ffmpeg/gstffmpegdec.c index 031ba08..45052f5 100644 --- a/ext/ffmpeg/gstffmpegdec.c +++ b/ext/ffmpeg/gstffmpegdec.c @@ -2731,20 +2731,18 @@ gst_ffmpegdec_register (GstPlugin * plugin) type_name = g_strdup_printf ("ffdec_%s", plugin_name); g_free (plugin_name); - /* if it's already registered, drop it */ - if (g_type_from_name (type_name)) { - g_free (type_name); - goto next; - } + type = g_type_from_name (type_name); - params = g_new0 (GstFFMpegDecClassParams, 1); - params->in_plugin = in_plugin; - params->srccaps = gst_caps_ref (srccaps); - params->sinkcaps = gst_caps_ref (sinkcaps); + if (!type) { + params = g_new0 (GstFFMpegDecClassParams, 1); + params->in_plugin = in_plugin; + params->srccaps = gst_caps_ref (srccaps); + params->sinkcaps = gst_caps_ref (sinkcaps); - /* create the gtype now */ - type = g_type_register_static (GST_TYPE_ELEMENT, type_name, &typeinfo, 0); - g_type_set_qdata (type, GST_FFDEC_PARAMS_QDATA, (gpointer) params); + /* create the gtype now */ + type = g_type_register_static (GST_TYPE_ELEMENT, type_name, &typeinfo, 0); + g_type_set_qdata (type, GST_FFDEC_PARAMS_QDATA, (gpointer) params); + } /* (Ronald) MPEG-4 gets a higher priority because it has been well- * tested and by far outperforms divxdec/xviddec - so we prefer it. diff --git a/ext/ffmpeg/gstffmpegenc.c b/ext/ffmpeg/gstffmpegenc.c index 767d359..538fbe6 100644 --- a/ext/ffmpeg/gstffmpegenc.c +++ b/ext/ffmpeg/gstffmpegenc.c @@ -1177,28 +1177,26 @@ gst_ffmpegenc_register (GstPlugin * plugin) /* construct the type */ type_name = g_strdup_printf ("ffenc_%s", in_plugin->name); - /* if it's already registered, drop it */ - if (g_type_from_name (type_name)) { - g_free (type_name); - goto next; - } - - params = g_new0 (GstFFMpegEncClassParams, 1); - params->in_plugin = in_plugin; - params->srccaps = gst_caps_ref (srccaps); - params->sinkcaps = gst_caps_ref (sinkcaps); - - /* create the glib type now */ - type = g_type_register_static (GST_TYPE_ELEMENT, type_name, &typeinfo, 0); - g_type_set_qdata (type, GST_FFENC_PARAMS_QDATA, (gpointer) params); - - { - static const GInterfaceInfo preset_info = { - NULL, - NULL, - NULL - }; - g_type_add_interface_static (type, GST_TYPE_PRESET, &preset_info); + type = g_type_from_name (type_name); + + if (!type) { + params = g_new0 (GstFFMpegEncClassParams, 1); + params->in_plugin = in_plugin; + params->srccaps = gst_caps_ref (srccaps); + params->sinkcaps = gst_caps_ref (sinkcaps); + + /* create the glib type now */ + type = g_type_register_static (GST_TYPE_ELEMENT, type_name, &typeinfo, 0); + g_type_set_qdata (type, GST_FFENC_PARAMS_QDATA, (gpointer) params); + + { + static const GInterfaceInfo preset_info = { + NULL, + NULL, + NULL + }; + g_type_add_interface_static (type, GST_TYPE_PRESET, &preset_info); + } } if (!gst_element_register (plugin, type_name, GST_RANK_NONE, type)) { diff --git a/ext/ffmpeg/gstffmpegmux.c b/ext/ffmpeg/gstffmpegmux.c index 15cbaf4..5f04d2b 100644 --- a/ext/ffmpeg/gstffmpegmux.c +++ b/ext/ffmpeg/gstffmpegmux.c @@ -835,17 +835,6 @@ gst_ffmpegmux_register (GstPlugin * plugin) p++; } - /* if it's already registered, drop it */ - if (g_type_from_name (type_name)) { - g_free (type_name); - gst_caps_unref (srccaps); - if (audiosinkcaps) - gst_caps_unref (audiosinkcaps); - if (videosinkcaps) - gst_caps_unref (videosinkcaps); - goto next; - } - /* fix up allowed caps for some muxers */ if (strcmp (in_plugin->name, "flv") == 0) { const gint rates[] = { 44100, 22050, 11025 }; @@ -859,17 +848,22 @@ gst_ffmpegmux_register (GstPlugin * plugin) gst_caps_from_string ("video/x-raw-rgb, bpp=(int)24, depth=(int)24"); } - /* create a cache for these properties */ - params = g_new0 (GstFFMpegMuxClassParams, 1); - params->in_plugin = in_plugin; - params->srccaps = srccaps; - params->videosinkcaps = videosinkcaps; - params->audiosinkcaps = audiosinkcaps; - - /* create the type now */ - type = g_type_register_static (GST_TYPE_ELEMENT, type_name, &typeinfo, 0); - g_type_set_qdata (type, GST_FFMUX_PARAMS_QDATA, (gpointer) params); - g_type_add_interface_static (type, GST_TYPE_TAG_SETTER, &tag_setter_info); + type = g_type_from_name (type_name); + + if (!type) { + /* create a cache for these properties */ + params = g_new0 (GstFFMpegMuxClassParams, 1); + params->in_plugin = in_plugin; + params->srccaps = srccaps; + params->videosinkcaps = videosinkcaps; + params->audiosinkcaps = audiosinkcaps; + + /* create the type now */ + type = g_type_register_static (GST_TYPE_ELEMENT, type_name, &typeinfo, 0); + g_type_set_qdata (type, GST_FFMUX_PARAMS_QDATA, (gpointer) params); + g_type_add_interface_static (type, GST_TYPE_TAG_SETTER, &tag_setter_info); + + } if (!gst_element_register (plugin, type_name, GST_RANK_NONE, type)) { g_free (type_name); |