[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: kdereview/phonon/gstreamer
From: Jens Bache-Wiig <jbache () trolltech ! com>
Date: 2008-01-15 9:45:35
Message-ID: 1200390335.999903.30994.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 761634 by jbache:
Improved mime-type support
M +38 -30 backend.cpp
M +3 -4 effectmanager.cpp
--- trunk/kdereview/phonon/gstreamer/backend.cpp #761633:761634
@@ -162,42 +162,50 @@
*/
QStringList Backend::availableMimeTypes() const
{
- QStringList availableMineTypes;
+ QStringList availableMimeTypes;
- // I dont know a clean way to collect this info, so
- // we will have to check for well-known decoder factories
- if (isValid()) {
- GstElementFactory *theoraFactory = gst_element_factory_find ("theoradec");
- if (theoraFactory) {
- availableMineTypes << QLatin1String("video/x-theora");
- gst_object_unref(GST_OBJECT(theoraFactory));
- }
+ if (!isValid())
+ return availableMimeTypes;
- GstElementFactory *vorbisFactory = gst_element_factory_find ("vorbisdec");
- if (vorbisFactory) {
- availableMineTypes << QLatin1String("audio/x-vorbis");
- gst_object_unref(GST_OBJECT(vorbisFactory));
- }
+ GstElementFactory *mpegFactory;
+ // Add mp3 as a separate mime type as people are likely to look for it.
+ if ((mpegFactory = gst_element_factory_find ("ffmpeg")) ||
+ (mpegFactory = gst_element_factory_find ("mad"))) {
+ availableMimeTypes << QLatin1String("audio/x-mp3");
+ gst_object_unref(GST_OBJECT(mpegFactory));
+ }
- GstElementFactory *flacFactory = gst_element_factory_find ("flacdec");
- if (flacFactory) {
- availableMineTypes << QLatin1String("audio/x-flac");
- gst_object_unref(GST_OBJECT(flacFactory));
- }
+ // Iterate over all audio and video decoders and extract mime types from sink \
caps + GList* factoryList = gst_registry_get_feature_list(gst_registry_get_default \
(), GST_TYPE_ELEMENT_FACTORY); + for (GList* iter = g_list_first(factoryList) ; \
iter != NULL ; iter = g_list_next(iter)) { + GstPluginFeature *feature = \
GST_PLUGIN_FEATURE(iter->data); + QString klass = \
gst_element_factory_get_klass(GST_ELEMENT_FACTORY(feature));
- GstElementFactory *mpegFactory = gst_element_factory_find ("mpeg2dec");
- if (mpegFactory) {
- availableMineTypes << QLatin1String("video/x-mpeg");
- gst_object_unref(GST_OBJECT(mpegFactory));
+ if (klass == QLatin1String("Codec/Decoder/Audio") ||
+ klass == QLatin1String("Codec/Decoder/Video")) {
+
+ const GList *static_templates;
+ GstElementFactory *factory = GST_ELEMENT_FACTORY(feature);
+ static_templates = \
gst_element_factory_get_static_pad_templates(factory); +
+ for (; static_templates != NULL ; static_templates = \
static_templates->next) { + GstStaticPadTemplate *padTemplate = \
(GstStaticPadTemplate *) static_templates->data; + if (padTemplate && \
padTemplate->direction == GST_PAD_SINK) { + GstCaps *caps = \
gst_static_pad_template_get_caps (padTemplate); +
+ if (caps) {
+ const GstStructure* capsStruct = gst_caps_get_structure \
(caps, 0); + QString mime = \
QString::fromUtf8(gst_structure_get_name (capsStruct)); + if \
(!availableMimeTypes.contains(mime)) + \
availableMimeTypes.append(mime); + }
+ }
+ }
}
- if ((mpegFactory = gst_element_factory_find ("ffmpeg"))
- || (mpegFactory = gst_element_factory_find ("mad"))) {
- availableMineTypes << QLatin1String("audio/x-mpeg");
- gst_object_unref(GST_OBJECT(mpegFactory));
- }
}
-
- return availableMineTypes;
+ g_list_free(factoryList);
+ availableMimeTypes.sort();
+ return availableMimeTypes;
}
/***
--- trunk/kdereview/phonon/gstreamer/effectmanager.cpp #761633:761634
@@ -43,8 +43,8 @@
{
GList* factoryList = gst_registry_get_feature_list(gst_registry_get_default (), \
GST_TYPE_ELEMENT_FACTORY); QString name, klass, description, author;
- while (factoryList) {
- GstPluginFeature *feature = GST_PLUGIN_FEATURE(factoryList->data);
+ for (GList* iter = g_list_first(factoryList) ; iter != NULL ; iter = \
g_list_next(iter)) { + GstPluginFeature *feature = \
GST_PLUGIN_FEATURE(iter->data);
klass = gst_element_factory_get_klass(GST_ELEMENT_FACTORY(feature));
if ( klass == "Filter/Effect/Audio" ) {
name = GST_PLUGIN_FEATURE_NAME(feature);
@@ -53,9 +53,8 @@
EffectInfo *effect = new EffectInfo(name, description, author);
m_audioEffectList.append(effect);
}
- factoryList = g_list_next(factoryList);
}
- g_list_free( factoryList);
+ g_list_free(factoryList);
}
EffectManager::~EffectManager()
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic