summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/ffmpeg/gstffmpegdec.c22
-rw-r--r--ext/ffmpeg/gstffmpegenc.c42
-rw-r--r--ext/ffmpeg/gstffmpegmux.c38
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);