module Media.Streaming.GStreamer.Core.Init (
init,
initCheck,
deinit,
version,
versionString,
segtrapIsEnabled,
segtrapSetEnabled,
registryForkIsEnabled,
registryForkSetEnabled,
updateRegistry
) where
import Control.Exception ( assert )
import Control.Monad ( liftM )
import Prelude hiding ( init )
import System.Glib.FFI
import System.Glib.GError
import System.Glib.UTFString ( peekUTFString, withUTFString )
import Control.Applicative
import System.Environment
init :: IO ()
init = do
allArgs <- (:) <$> getProgName <*> getArgs
withMany withUTFString allArgs $ \addrs ->
withArrayLen addrs $ \argc argv ->
with argv $ \argvp ->
with argc $ \argcp -> do
gst_init (castPtr argcp) (castPtr argvp)
initCheck :: IO ()
initCheck =
propagateGError $ \gErrorPtr ->
do succeeded <- liftM toBool $
gst_init_check nullPtr nullPtr gErrorPtr
assert (if succeeded
then gErrorPtr == nullPtr
else gErrorPtr /= nullPtr) $ return ()
deinit :: IO ()
deinit =
gst_deinit
version :: (Word, Word, Word, Word)
version =
unsafePerformIO $
alloca $ \majorPtr ->
alloca $ \minorPtr ->
alloca $ \microPtr ->
alloca $ \nanoPtr ->
do gst_version majorPtr minorPtr microPtr nanoPtr
major <- peek majorPtr
minor <- peek minorPtr
micro <- peek microPtr
nano <- peek nanoPtr
return (fromIntegral major,
fromIntegral minor,
fromIntegral micro,
fromIntegral nano)
versionString :: String
versionString =
unsafePerformIO $
gst_version_string >>= peekUTFString
segtrapIsEnabled :: IO Bool
segtrapIsEnabled =
liftM toBool gst_segtrap_is_enabled
segtrapSetEnabled :: Bool
-> IO ()
segtrapSetEnabled enabled =
gst_segtrap_set_enabled $ fromBool enabled
registryForkIsEnabled :: IO Bool
registryForkIsEnabled =
liftM toBool gst_registry_fork_is_enabled
registryForkSetEnabled :: Bool
-> IO ()
registryForkSetEnabled enabled =
gst_registry_fork_set_enabled $ fromBool enabled
updateRegistry :: IO Bool
updateRegistry =
liftM toBool gst_update_registry
foreign import ccall safe "gst_init"
gst_init :: ((Ptr CInt) -> ((Ptr (Ptr (Ptr CChar))) -> (IO ())))
foreign import ccall safe "gst_init_check"
gst_init_check :: ((Ptr CInt) -> ((Ptr (Ptr (Ptr CChar))) -> ((Ptr (Ptr ())) -> (IO CInt))))
foreign import ccall safe "gst_deinit"
gst_deinit :: (IO ())
foreign import ccall safe "gst_version"
gst_version :: ((Ptr CUInt) -> ((Ptr CUInt) -> ((Ptr CUInt) -> ((Ptr CUInt) -> (IO ())))))
foreign import ccall safe "gst_version_string"
gst_version_string :: (IO (Ptr CChar))
foreign import ccall safe "gst_segtrap_is_enabled"
gst_segtrap_is_enabled :: (IO CInt)
foreign import ccall safe "gst_segtrap_set_enabled"
gst_segtrap_set_enabled :: (CInt -> (IO ()))
foreign import ccall safe "gst_registry_fork_is_enabled"
gst_registry_fork_is_enabled :: (IO CInt)
foreign import ccall safe "gst_registry_fork_set_enabled"
gst_registry_fork_set_enabled :: (CInt -> (IO ()))
foreign import ccall safe "gst_update_registry"
gst_update_registry :: (IO CInt)