gstreamer-0.11.0: Media/Streaming/GStreamer/Core/Registry.chs
-- GIMP Toolkit (GTK) Binding for Haskell: binding to gstreamer -*-haskell-*-
--
-- Author : Peter Gavin
-- Created: 1-Apr-2007
--
-- Copyright (c) 2007 Peter Gavin
--
-- This library is free software: you can redistribute it and/or
-- modify it under the terms of the GNU Lesser General Public License
-- as published by the Free Software Foundation, either version 3 of
-- the License, or (at your option) any later version.
--
-- This library is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-- Lesser General Public License for more details.
--
-- You should have received a copy of the GNU Lesser General Public
-- License along with this program. If not, see
-- <http://www.gnu.org/licenses/>.
--
-- GStreamer, the C library which this Haskell library depends on, is
-- available under LGPL Version 2. The documentation included with
-- this library is based on the original GStreamer documentation.
--
-- | Maintainer : gtk2hs-devel@lists.sourceforge.net
-- Stability : alpha
-- Portability : portable (depends on GHC)
module Media.Streaming.GStreamer.Core.Registry (
Registry,
RegistryClass,
castToRegistry,
gTypeRegistry,
defaultRegistry,
registryGetFeatureList,
registryGetFeatureListByPlugin,
registryGetPathList,
registryGetPluginList,
registryAddPlugin,
registryRemovePlugin,
registryPluginFilter,
registryFeatureFilter,
registryFindPlugin,
registryFindFeature,
registryLookupFeature,
registryScanPath,
registryXMLReadCache,
registryXMLWriteCache,
registryLookup,
registryRemoveFeature,
registryAddFeature,
defaultRegistryCheckFeatureVersion,
defaultRegistryGetPathList,
defaultRegistryAddPlugin,
defaultRegistryScanPath,
defaultRegistryFindPlugin,
defaultRegistryFindFeature,
defaultRegistryFeatureFilter,
onRegistryFeatureAdded,
afterRegistryFeatureAdded,
onRegistryPluginAdded,
afterRegistryPluginAdded
) where
import Control.Monad (liftM)
{#import Media.Streaming.GStreamer.Core.Types#}
{#import Media.Streaming.GStreamer.Core.Signals#}
{#import System.Glib.GType#}
import System.Glib.FFI
import System.Glib.UTFString
import System.Glib.Signals
{#import System.Glib.GList#}
{# context lib = "gstreamer" prefix = "gst" #}
defaultRegistry :: Registry
defaultRegistry =
unsafePerformIO $ {# call registry_get_default #} >>= peekObject
registryGetFeatureList :: RegistryClass registry
=> registry
-> GType
-> IO [PluginFeature]
registryGetFeatureList registry gType =
{# call registry_get_feature_list #} (toRegistry registry) gType >>=
fromGList >>= mapM takeObject
registryGetFeatureListByPlugin :: RegistryClass registry
=> registry
-> String
-> IO [PluginFeature]
registryGetFeatureListByPlugin registry name =
withUTFString name $ \cName ->
{# call registry_get_feature_list_by_plugin #} (toRegistry registry) cName >>=
fromGList >>= mapM takeObject
registryGetPathList :: RegistryClass registry
=> registry
-> IO [FilePath]
registryGetPathList registry =
{# call registry_get_path_list #} (toRegistry registry) >>=
fromGList >>= mapM peekUTFString
registryGetPluginList :: RegistryClass registry
=> registry
-> IO [Plugin]
registryGetPluginList registry =
{# call registry_get_plugin_list #} (toRegistry registry) >>=
fromGList >>= mapM takeObject
registryAddPlugin :: (RegistryClass registry, PluginClass plugin)
=> registry
-> plugin
-> IO Bool
registryAddPlugin registry plugin =
liftM toBool $ {# call registry_add_plugin #} (toRegistry registry) (toPlugin plugin)
registryRemovePlugin :: (RegistryClass registry, PluginClass plugin)
=> registry
-> plugin
-> IO ()
registryRemovePlugin registry plugin =
{# call registry_remove_plugin #} (toRegistry registry) (toPlugin plugin)
type CPluginFilter = Ptr Plugin
-> {# type gpointer #}
-> IO {# type gboolean #}
marshalPluginFilter :: PluginFilter
-> IO {# type GstPluginFilter #}
marshalPluginFilter pluginFilter =
makePluginFilter cPluginFilter
where cPluginFilter :: CPluginFilter
cPluginFilter pluginPtr _ =
liftM fromBool $ peekObject pluginPtr >>= pluginFilter
foreign import ccall "wrapper"
makePluginFilter :: CPluginFilter
-> IO {# type GstPluginFilter #}
registryPluginFilter :: RegistryClass registry
=> registry
-> PluginFilter
-> Bool
-> IO [Plugin]
registryPluginFilter registry pluginFilter first =
do cPluginFilter <- marshalPluginFilter pluginFilter
{# call registry_plugin_filter #} (toRegistry registry)
cPluginFilter
(fromBool first)
nullPtr >>=
fromGList >>= mapM takeObject
type CPluginFeatureFilter = Ptr PluginFeature
-> {# type gpointer #}
-> IO {# type gboolean #}
marshalPluginFeatureFilter :: PluginFeatureFilter
-> IO {# type GstPluginFeatureFilter #}
marshalPluginFeatureFilter pluginFeatureFilter =
makePluginFeatureFilter cPluginFeatureFilter
where cPluginFeatureFilter :: CPluginFeatureFilter
cPluginFeatureFilter pluginFeaturePtr _ =
liftM fromBool $ peekObject pluginFeaturePtr >>= pluginFeatureFilter
foreign import ccall "wrapper"
makePluginFeatureFilter :: CPluginFeatureFilter
-> IO {# type GstPluginFeatureFilter #}
registryFeatureFilter :: RegistryClass registry
=> registry
-> PluginFeatureFilter
-> Bool
-> IO [PluginFeature]
registryFeatureFilter registry featureFilter first =
do cPluginFeatureFilter <- marshalPluginFeatureFilter featureFilter
{# call registry_feature_filter #} (toRegistry registry)
cPluginFeatureFilter
(fromBool first)
nullPtr >>=
fromGList >>= mapM takeObject
registryFindPlugin :: RegistryClass registry
=> registry
-> String
-> IO (Maybe Plugin)
registryFindPlugin registry name =
(withUTFString name $ {# call registry_find_plugin #} (toRegistry registry)) >>=
maybePeek takeObject
registryFindFeature :: RegistryClass registry
=> registry
-> String
-> GType
-> IO (Maybe PluginFeature)
registryFindFeature registry name gType =
withUTFString name $ \cName ->
{# call registry_find_feature #} (toRegistry registry)
cName
gType >>=
maybePeek takeObject
registryLookupFeature :: RegistryClass registry
=> registry
-> String
-> IO (Maybe PluginFeature)
registryLookupFeature registry name =
(withUTFString name $ {# call registry_lookup_feature #} (toRegistry registry)) >>=
maybePeek takeObject
registryScanPath :: RegistryClass registry
=> registry
-> FilePath
-> IO Bool
registryScanPath registry path =
liftM toBool $
withUTFString path $
{# call registry_scan_path #} (toRegistry registry)
registryXMLReadCache :: RegistryClass registry
=> registry
-> FilePath
-> IO Bool
registryXMLReadCache registry location =
liftM toBool $
withUTFString location $
{# call registry_xml_read_cache #} (toRegistry registry)
registryXMLWriteCache :: RegistryClass registry
=> registry
-> FilePath
-> IO Bool
registryXMLWriteCache registry location =
liftM toBool $
withUTFString location $
{# call registry_xml_write_cache #} (toRegistry registry)
registryLookup :: RegistryClass registry
=> registry
-> FilePath
-> IO Plugin
registryLookup registry filename =
(withUTFString filename $
{# call registry_lookup #} (toRegistry registry)) >>=
takeObject
registryRemoveFeature :: (RegistryClass registry, PluginFeatureClass pluginFeature)
=> registry
-> pluginFeature
-> IO ()
registryRemoveFeature registry pluginFeature =
{# call registry_remove_feature #} (toRegistry registry) (toPluginFeature pluginFeature)
registryAddFeature :: (RegistryClass registry, PluginFeatureClass pluginFeature)
=> registry
-> pluginFeature
-> IO Bool
registryAddFeature registry pluginFeature =
liftM toBool $
{# call registry_add_feature #} (toRegistry registry) (toPluginFeature pluginFeature)
defaultRegistryCheckFeatureVersion :: String
-> Word
-> Word
-> Word
-> IO Bool
defaultRegistryCheckFeatureVersion feature minMajor minMinor minMicro =
liftM toBool $ withUTFString feature $ \cFeature ->
{# call default_registry_check_feature_version #} cFeature
(fromIntegral minMajor)
(fromIntegral minMinor)
(fromIntegral minMicro)
defaultRegistryGetPathList :: IO [FilePath]
defaultRegistryGetPathList =
registryGetPathList defaultRegistry
defaultRegistryAddPlugin :: PluginClass plugin
=> plugin
-> IO Bool
defaultRegistryAddPlugin =
registryAddPlugin defaultRegistry
defaultRegistryScanPath :: String
-> IO Bool
defaultRegistryScanPath =
registryScanPath defaultRegistry
defaultRegistryFindPlugin :: String
-> IO (Maybe Plugin)
defaultRegistryFindPlugin =
registryFindPlugin defaultRegistry
defaultRegistryFindFeature :: String
-> GType
-> IO (Maybe PluginFeature)
defaultRegistryFindFeature =
registryFindFeature defaultRegistry
defaultRegistryFeatureFilter :: PluginFeatureFilter
-> Bool
-> IO [PluginFeature]
defaultRegistryFeatureFilter =
registryFeatureFilter defaultRegistry
onRegistryFeatureAdded, afterRegistryFeatureAdded :: RegistryClass registry
=> registry
-> (PluginFeature -> IO ())
-> IO (ConnectId registry)
onRegistryFeatureAdded =
connect_OBJECT__NONE "feature-added" False
afterRegistryFeatureAdded =
connect_OBJECT__NONE "feature-added" False
onRegistryPluginAdded, afterRegistryPluginAdded :: RegistryClass registry
=> registry
-> (Plugin -> IO ())
-> IO (ConnectId registry)
onRegistryPluginAdded =
connect_OBJECT__NONE "plugin-added" False
afterRegistryPluginAdded =
connect_OBJECT__NONE "plugin-added" False