mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 06:54:49 +00:00
dshowdecwrapper: Fix element registration using data in the type instead of a global
This commit is contained in:
parent
732828e31c
commit
378a8d94dc
3 changed files with 42 additions and 23 deletions
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* GStreamer DirectShow codecs wrapper
|
* GStreamer DirectShow codecs wrapper
|
||||||
* Copyright <2006, 2007, 2008> Fluendo <gstreamer@fluendo.com>
|
* Copyright <2006, 2007, 2008, 2009, 2010> Fluendo <support@fluendo.com>
|
||||||
* Copyright <2006, 2007, 2008> Pioneers of the Inevitable <songbird@songbirdnest.com>
|
* Copyright <2006, 2007, 2008> Pioneers of the Inevitable <songbird@songbirdnest.com>
|
||||||
* Copyright <2007,2008> Sebastien Moutte <sebastien@moutte.net>
|
* Copyright <2007,2008> Sebastien Moutte <sebastien@moutte.net>
|
||||||
*
|
*
|
||||||
|
@ -58,8 +58,6 @@ GST_DEBUG_CATEGORY_STATIC (dshowaudiodec_debug);
|
||||||
GST_BOILERPLATE (GstDshowAudioDec, gst_dshowaudiodec, GstElement,
|
GST_BOILERPLATE (GstDshowAudioDec, gst_dshowaudiodec, GstElement,
|
||||||
GST_TYPE_ELEMENT);
|
GST_TYPE_ELEMENT);
|
||||||
|
|
||||||
static const AudioCodecEntry *tmp;
|
|
||||||
|
|
||||||
static void gst_dshowaudiodec_dispose (GObject * object);
|
static void gst_dshowaudiodec_dispose (GObject * object);
|
||||||
static GstStateChangeReturn gst_dshowaudiodec_change_state
|
static GstStateChangeReturn gst_dshowaudiodec_change_state
|
||||||
(GstElement * element, GstStateChange transition);
|
(GstElement * element, GstStateChange transition);
|
||||||
|
@ -314,15 +312,25 @@ gst_dshowaudiodec_base_init (gpointer klass)
|
||||||
GstPadTemplate *src, *sink;
|
GstPadTemplate *src, *sink;
|
||||||
GstCaps *srccaps, *sinkcaps;
|
GstCaps *srccaps, *sinkcaps;
|
||||||
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
|
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
|
||||||
char *description;
|
GstElementDetails details;
|
||||||
|
const AudioCodecEntry *tmp;
|
||||||
|
gpointer qdata;
|
||||||
|
|
||||||
audiodec_class->entry = tmp;
|
qdata = g_type_get_qdata (G_OBJECT_CLASS_TYPE (klass), DSHOW_CODEC_QDATA);
|
||||||
description = g_strdup_printf ("DirectShow %s Decoder Wrapper",
|
|
||||||
|
/* element details */
|
||||||
|
tmp = audiodec_class->entry = (AudioCodecEntry *) qdata;
|
||||||
|
|
||||||
|
details.longname = g_strdup_printf ("DirectShow %s Decoder Wrapper",
|
||||||
tmp->element_longname);
|
tmp->element_longname);
|
||||||
gst_element_class_set_details_simple (element_class, description,
|
details.klass = g_strdup ("Codec/Decoder/Audio");
|
||||||
"Codec/Decoder/Audio", description,
|
details.description = g_strdup_printf ("DirectShow %s Decoder Wrapper",
|
||||||
"Sebastien Moutte <sebastien@moutte.net>");
|
tmp->element_longname);
|
||||||
g_free (description);
|
details.author = "Sebastien Moutte <sebastien@moutte.net>";
|
||||||
|
gst_element_class_set_details (element_class, &details);
|
||||||
|
g_free (details.longname);
|
||||||
|
g_free (details.klass);
|
||||||
|
g_free (details.description);
|
||||||
|
|
||||||
sinkcaps = gst_caps_from_string (tmp->sinkcaps);
|
sinkcaps = gst_caps_from_string (tmp->sinkcaps);
|
||||||
|
|
||||||
|
@ -1103,9 +1111,9 @@ dshow_adec_register (GstPlugin * plugin)
|
||||||
{
|
{
|
||||||
GST_DEBUG ("Registering %s", audio_dec_codecs[i].element_name);
|
GST_DEBUG ("Registering %s", audio_dec_codecs[i].element_name);
|
||||||
|
|
||||||
tmp = &audio_dec_codecs[i];
|
|
||||||
type = g_type_register_static (GST_TYPE_ELEMENT,
|
type = g_type_register_static (GST_TYPE_ELEMENT,
|
||||||
audio_dec_codecs[i].element_name, &info, (GTypeFlags)0);
|
audio_dec_codecs[i].element_name, &info, (GTypeFlags)0);
|
||||||
|
g_type_set_qdata (type, DSHOW_CODEC_QDATA, (gpointer) (audio_dec_codecs + i));
|
||||||
if (!gst_element_register (plugin, audio_dec_codecs[i].element_name,
|
if (!gst_element_register (plugin, audio_dec_codecs[i].element_name,
|
||||||
GST_RANK_SECONDARY, type)) {
|
GST_RANK_SECONDARY, type)) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
/* GStreamer
|
/* GStreamer
|
||||||
|
* Copyright <2006, 2007, 2008, 2009, 2010> Fluendo <support@fluendo.com>
|
||||||
* Copyright (C) 2007 Sebastien Moutte <sebastien@moutte.net>
|
* Copyright (C) 2007 Sebastien Moutte <sebastien@moutte.net>
|
||||||
*
|
*
|
||||||
* gstdshow.h:
|
* gstdshow.h:
|
||||||
|
@ -45,4 +46,7 @@ IBaseFilter *
|
||||||
gst_dshow_find_filter(CLSID input_majortype, CLSID input_subtype,
|
gst_dshow_find_filter(CLSID input_majortype, CLSID input_subtype,
|
||||||
CLSID output_majortype, CLSID output_subtype,
|
CLSID output_majortype, CLSID output_subtype,
|
||||||
PreferredFilter *preferred_filters);
|
PreferredFilter *preferred_filters);
|
||||||
|
|
||||||
|
#define DSHOW_CODEC_QDATA g_quark_from_string ("dshow-codec")
|
||||||
|
|
||||||
#endif /* _GST_DSHOW_UTIL_H_ */
|
#endif /* _GST_DSHOW_UTIL_H_ */
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* GStreamer DirectShow codecs wrapper
|
* GStreamer DirectShow codecs wrapper
|
||||||
* Copyright <2006, 2007, 2008> Fluendo <gstreamer@fluendo.com>
|
* Copyright <2006, 2007, 2008, 2009, 2010> Fluendo <support@fluendo.com>
|
||||||
* Copyright <2006, 2007, 2008> Pioneers of the Inevitable <songbird@songbirdnest.com>
|
* Copyright <2006, 2007, 2008> Pioneers of the Inevitable <songbird@songbirdnest.com>
|
||||||
* Copyright <2007,2008> Sebastien Moutte <sebastien@moutte.net>
|
* Copyright <2007,2008> Sebastien Moutte <sebastien@moutte.net>
|
||||||
*
|
*
|
||||||
|
@ -58,7 +58,6 @@ GST_DEBUG_CATEGORY_STATIC (dshowvideodec_debug);
|
||||||
|
|
||||||
GST_BOILERPLATE (GstDshowVideoDec, gst_dshowvideodec, GstElement,
|
GST_BOILERPLATE (GstDshowVideoDec, gst_dshowvideodec, GstElement,
|
||||||
GST_TYPE_ELEMENT);
|
GST_TYPE_ELEMENT);
|
||||||
static const VideoCodecEntry *tmp;
|
|
||||||
|
|
||||||
static void gst_dshowvideodec_dispose (GObject * object);
|
static void gst_dshowvideodec_dispose (GObject * object);
|
||||||
static GstStateChangeReturn gst_dshowvideodec_change_state
|
static GstStateChangeReturn gst_dshowvideodec_change_state
|
||||||
|
@ -369,16 +368,25 @@ gst_dshowvideodec_base_init (gpointer klass)
|
||||||
GstPadTemplate *src, *sink;
|
GstPadTemplate *src, *sink;
|
||||||
GstCaps *srccaps, *sinkcaps;
|
GstCaps *srccaps, *sinkcaps;
|
||||||
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
|
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
|
||||||
char *description;
|
GstElementDetails details;
|
||||||
|
const VideoCodecEntry *tmp;
|
||||||
|
gpointer qdata;
|
||||||
|
|
||||||
videodec_class->entry = tmp;
|
qdata = g_type_get_qdata (G_OBJECT_CLASS_TYPE (klass), DSHOW_CODEC_QDATA);
|
||||||
|
|
||||||
description = g_strdup_printf ("DirectShow %s Decoder Wrapper",
|
/* element details */
|
||||||
|
tmp = videodec_class->entry = (VideoCodecEntry *) qdata;
|
||||||
|
|
||||||
|
details.longname = g_strdup_printf ("DirectShow %s Decoder Wrapper",
|
||||||
tmp->element_longname);
|
tmp->element_longname);
|
||||||
gst_element_class_set_details_simple (element_class, description,
|
details.klass = g_strdup ("Codec/Decoder/Video");
|
||||||
"Codec/Decoder/Video", description,
|
details.description = g_strdup_printf ("DirectShow %s Decoder Wrapper",
|
||||||
"Sebastien Moutte <sebastien@moutte.net>");
|
tmp->element_longname);
|
||||||
g_free (description);
|
details.author = "Sebastien Moutte <sebastien@moutte.net>";
|
||||||
|
gst_element_class_set_details (element_class, &details);
|
||||||
|
g_free (details.longname);
|
||||||
|
g_free (details.klass);
|
||||||
|
g_free (details.description);
|
||||||
|
|
||||||
sinkcaps = gst_caps_from_string (tmp->sinkcaps);
|
sinkcaps = gst_caps_from_string (tmp->sinkcaps);
|
||||||
gst_caps_set_simple (sinkcaps,
|
gst_caps_set_simple (sinkcaps,
|
||||||
|
@ -1193,10 +1201,9 @@ dshow_vdec_register (GstPlugin * plugin)
|
||||||
|
|
||||||
GST_DEBUG ("Registering %s", video_dec_codecs[i].element_name);
|
GST_DEBUG ("Registering %s", video_dec_codecs[i].element_name);
|
||||||
|
|
||||||
tmp = &video_dec_codecs[i];
|
type = g_type_register_static (GST_TYPE_ELEMENT,
|
||||||
type =
|
|
||||||
g_type_register_static (GST_TYPE_ELEMENT,
|
|
||||||
video_dec_codecs[i].element_name, &info, (GTypeFlags)0);
|
video_dec_codecs[i].element_name, &info, (GTypeFlags)0);
|
||||||
|
g_type_set_qdata (type, DSHOW_CODEC_QDATA, (gpointer) (video_dec_codecs + i));
|
||||||
if (!gst_element_register (plugin, video_dec_codecs[i].element_name,
|
if (!gst_element_register (plugin, video_dec_codecs[i].element_name,
|
||||||
GST_RANK_PRIMARY, type)) {
|
GST_RANK_PRIMARY, type)) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
Loading…
Reference in a new issue