module Media.Streaming.GStreamer.Core.ElementFactory (
ElementFactory,
ElementFactoryClass,
castToElementFactory,
gTypeElementFactory,
elementFactoryFind,
elementFactoryGetElementType,
elementFactoryGetLongname,
elementFactoryGetKlass,
elementFactoryGetDescription,
elementFactoryGetAuthor,
elementFactoryGetNumPadTemplates,
elementFactoryGetURIType,
elementFactoryGetURIProtocols,
elementFactoryHasInterface,
elementFactoryCreate,
elementFactoryMake,
elementFactoryCanSinkCaps,
elementFactoryCanSrcCaps,
elementFactoryGetPadTemplates
) where
import Control.Monad ( liftM )
import Data.Maybe ( fromMaybe )
import System.Glib.FFI
import System.Glib.UTFString ( withUTFString
, peekUTFString
, peekUTFStringArray0 )
import System.Glib.GType ( GType )
import System.Glib.GList ( readGList )
import Media.Streaming.GStreamer.Core.Types
elementFactoryFind :: String
-> IO (Maybe ElementFactory)
elementFactoryFind name =
withUTFString name gst_element_factory_find >>= maybePeek takeObject
elementFactoryGetElementType :: (ElementFactoryClass elementFactory)
=> elementFactory
-> IO (Maybe GType)
elementFactoryGetElementType factory =
do gtype <- (\(ElementFactory arg1) -> withForeignPtr arg1 $ \argPtr1 ->gst_element_factory_get_element_type argPtr1) (toElementFactory factory)
if gtype == 0
then return $ Just $ fromIntegral gtype
else return Nothing
elementFactoryGetLongname :: (ElementFactoryClass elementFactory)
=> elementFactory
-> IO String
elementFactoryGetLongname factory =
(\(ElementFactory arg1) -> withForeignPtr arg1 $ \argPtr1 ->gst_element_factory_get_longname argPtr1) (toElementFactory factory) >>=
peekUTFString
elementFactoryGetKlass :: (ElementFactoryClass elementFactory)
=> elementFactory
-> IO String
elementFactoryGetKlass factory =
(\(ElementFactory arg1) -> withForeignPtr arg1 $ \argPtr1 ->gst_element_factory_get_klass argPtr1) (toElementFactory factory) >>=
peekUTFString
elementFactoryGetDescription :: (ElementFactoryClass elementFactory)
=> elementFactory
-> IO String
elementFactoryGetDescription factory =
(\(ElementFactory arg1) -> withForeignPtr arg1 $ \argPtr1 ->gst_element_factory_get_description argPtr1) (toElementFactory factory) >>=
peekUTFString
elementFactoryGetAuthor :: (ElementFactoryClass elementFactory)
=> elementFactory
-> IO String
elementFactoryGetAuthor factory =
(\(ElementFactory arg1) -> withForeignPtr arg1 $ \argPtr1 ->gst_element_factory_get_author argPtr1) (toElementFactory factory) >>=
peekUTFString
elementFactoryGetNumPadTemplates :: (ElementFactoryClass elementFactory)
=> elementFactory
-> IO Word
elementFactoryGetNumPadTemplates factory =
liftM fromIntegral $
(\(ElementFactory arg1) -> withForeignPtr arg1 $ \argPtr1 ->gst_element_factory_get_num_pad_templates argPtr1) $ toElementFactory factory
elementFactoryGetURIType :: (ElementFactoryClass elementFactory)
=> elementFactory
-> IO Int
elementFactoryGetURIType factory =
liftM fromIntegral $
(\(ElementFactory arg1) -> withForeignPtr arg1 $ \argPtr1 ->gst_element_factory_get_uri_type argPtr1) $ toElementFactory factory
elementFactoryGetURIProtocols :: (ElementFactoryClass elementFactory)
=> elementFactory
-> IO [String]
elementFactoryGetURIProtocols factory =
(\(ElementFactory arg1) -> withForeignPtr arg1 $ \argPtr1 ->gst_element_factory_get_uri_protocols argPtr1) (toElementFactory factory) >>=
liftM (fromMaybe []) . maybePeek peekUTFStringArray0
elementFactoryHasInterface :: (ElementFactoryClass elementFactory)
=> elementFactory
-> String
-> IO Bool
elementFactoryHasInterface factory name =
liftM toBool .
withUTFString name .
(\(ElementFactory arg1) arg2 -> withForeignPtr arg1 $ \argPtr1 ->gst_element_factory_has_interface argPtr1 arg2) .
toElementFactory $
factory
elementFactoryCreate :: (ElementFactoryClass elementFactory)
=> elementFactory
-> String
-> IO (Maybe Element)
elementFactoryCreate factory name =
withUTFString name $ \cName ->
(\(ElementFactory arg1) arg2 -> withForeignPtr arg1 $ \argPtr1 ->gst_element_factory_create argPtr1 arg2) (toElementFactory factory) cName >>=
maybePeek takeObject
elementFactoryMake :: String
-> Maybe String
-> IO (Maybe Element)
elementFactoryMake factoryName name =
withUTFString factoryName $ \cFactoryName ->
maybeWith withUTFString name $ \cName ->
gst_element_factory_make cFactoryName cName >>=
maybePeek takeObject
elementFactoryCanSinkCaps :: (ElementFactoryClass elementFactory)
=> elementFactory
-> Caps
-> IO Bool
elementFactoryCanSinkCaps factory caps =
liftM toBool $ (\(ElementFactory arg1) (Caps arg2) -> withForeignPtr arg1 $ \argPtr1 ->withForeignPtr arg2 $ \argPtr2 ->gst_element_factory_can_sink_caps argPtr1 argPtr2) (toElementFactory factory) caps
elementFactoryCanSrcCaps :: (ElementFactoryClass elementFactory)
=> elementFactory
-> Caps
-> IO Bool
elementFactoryCanSrcCaps factory caps =
liftM toBool $ (\(ElementFactory arg1) (Caps arg2) -> withForeignPtr arg1 $ \argPtr1 ->withForeignPtr arg2 $ \argPtr2 ->gst_element_factory_can_src_caps argPtr1 argPtr2) (toElementFactory factory) caps
elementFactoryGetPadTemplates :: (ElementFactoryClass elementFactory)
=> elementFactory
-> IO [PadTemplate]
elementFactoryGetPadTemplates =
(\(ElementFactory arg1) -> withForeignPtr arg1 $ \argPtr1 ->gst_element_factory_get_static_pad_templates argPtr1) . toElementFactory >=>
readGList >=> mapM staticPadTemplateGet
where infixr 8 >=>
a >=> b = \x -> a x >>= b
foreign import ccall safe "gst_element_factory_find"
gst_element_factory_find :: ((Ptr CChar) -> (IO (Ptr ElementFactory)))
foreign import ccall safe "gst_element_factory_get_element_type"
gst_element_factory_get_element_type :: ((Ptr ElementFactory) -> (IO CULong))
foreign import ccall safe "gst_element_factory_get_longname"
gst_element_factory_get_longname :: ((Ptr ElementFactory) -> (IO (Ptr CChar)))
foreign import ccall safe "gst_element_factory_get_klass"
gst_element_factory_get_klass :: ((Ptr ElementFactory) -> (IO (Ptr CChar)))
foreign import ccall safe "gst_element_factory_get_description"
gst_element_factory_get_description :: ((Ptr ElementFactory) -> (IO (Ptr CChar)))
foreign import ccall safe "gst_element_factory_get_author"
gst_element_factory_get_author :: ((Ptr ElementFactory) -> (IO (Ptr CChar)))
foreign import ccall safe "gst_element_factory_get_num_pad_templates"
gst_element_factory_get_num_pad_templates :: ((Ptr ElementFactory) -> (IO CUInt))
foreign import ccall safe "gst_element_factory_get_uri_type"
gst_element_factory_get_uri_type :: ((Ptr ElementFactory) -> (IO CInt))
foreign import ccall safe "gst_element_factory_get_uri_protocols"
gst_element_factory_get_uri_protocols :: ((Ptr ElementFactory) -> (IO (Ptr (Ptr CChar))))
foreign import ccall safe "gst_element_factory_has_interface"
gst_element_factory_has_interface :: ((Ptr ElementFactory) -> ((Ptr CChar) -> (IO CInt)))
foreign import ccall safe "gst_element_factory_create"
gst_element_factory_create :: ((Ptr ElementFactory) -> ((Ptr CChar) -> (IO (Ptr Element))))
foreign import ccall safe "gst_element_factory_make"
gst_element_factory_make :: ((Ptr CChar) -> ((Ptr CChar) -> (IO (Ptr Element))))
foreign import ccall safe "gst_element_factory_can_sink_caps"
gst_element_factory_can_sink_caps :: ((Ptr ElementFactory) -> ((Ptr Caps) -> (IO CInt)))
foreign import ccall safe "gst_element_factory_can_src_caps"
gst_element_factory_can_src_caps :: ((Ptr ElementFactory) -> ((Ptr Caps) -> (IO CInt)))
foreign import ccall safe "gst_element_factory_get_static_pad_templates"
gst_element_factory_get_static_pad_templates :: ((Ptr ElementFactory) -> (IO (Ptr ())))