[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