packages feed

gi-gst-0.1.6.13: GI/Gst/Objects/DeviceProvider.hs


{- |
Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
License    : LGPL-2.1
Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
-}

module GI.Gst.Objects.DeviceProvider
    ( 

-- * Exported types
    DeviceProvider(..)                      ,
    DeviceProviderK                         ,
    toDeviceProvider                        ,
    noDeviceProvider                        ,


 -- * Methods
-- ** deviceProviderCanMonitor
    DeviceProviderCanMonitorMethodInfo      ,
    deviceProviderCanMonitor                ,


-- ** deviceProviderDeviceAdd
    DeviceProviderDeviceAddMethodInfo       ,
    deviceProviderDeviceAdd                 ,


-- ** deviceProviderDeviceRemove
    DeviceProviderDeviceRemoveMethodInfo    ,
    deviceProviderDeviceRemove              ,


-- ** deviceProviderGetBus
    DeviceProviderGetBusMethodInfo          ,
    deviceProviderGetBus                    ,


-- ** deviceProviderGetDevices
    DeviceProviderGetDevicesMethodInfo      ,
    deviceProviderGetDevices                ,


-- ** deviceProviderGetFactory
    DeviceProviderGetFactoryMethodInfo      ,
    deviceProviderGetFactory                ,


-- ** deviceProviderGetHiddenProviders
    DeviceProviderGetHiddenProvidersMethodInfo,
    deviceProviderGetHiddenProviders        ,


-- ** deviceProviderHideProvider
    DeviceProviderHideProviderMethodInfo    ,
    deviceProviderHideProvider              ,


-- ** deviceProviderRegister
    deviceProviderRegister                  ,


-- ** deviceProviderStart
    DeviceProviderStartMethodInfo           ,
    deviceProviderStart                     ,


-- ** deviceProviderStop
    DeviceProviderStopMethodInfo            ,
    deviceProviderStop                      ,


-- ** deviceProviderUnhideProvider
    DeviceProviderUnhideProviderMethodInfo  ,
    deviceProviderUnhideProvider            ,




 -- * Signals
-- ** ProviderHidden
    DeviceProviderProviderHiddenCallback    ,
    DeviceProviderProviderHiddenCallbackC   ,
    DeviceProviderProviderHiddenSignalInfo  ,
    afterDeviceProviderProviderHidden       ,
    deviceProviderProviderHiddenCallbackWrapper,
    deviceProviderProviderHiddenClosure     ,
    mkDeviceProviderProviderHiddenCallback  ,
    noDeviceProviderProviderHiddenCallback  ,
    onDeviceProviderProviderHidden          ,


-- ** ProviderUnhidden
    DeviceProviderProviderUnhiddenCallback  ,
    DeviceProviderProviderUnhiddenCallbackC ,
    DeviceProviderProviderUnhiddenSignalInfo,
    afterDeviceProviderProviderUnhidden     ,
    deviceProviderProviderUnhiddenCallbackWrapper,
    deviceProviderProviderUnhiddenClosure   ,
    mkDeviceProviderProviderUnhiddenCallback,
    noDeviceProviderProviderUnhiddenCallback,
    onDeviceProviderProviderUnhidden        ,




    ) where

import Prelude ()
import Data.GI.Base.ShortPrelude

import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map

import GI.Gst.Types
import GI.Gst.Callbacks
import qualified GI.GObject as GObject

newtype DeviceProvider = DeviceProvider (ForeignPtr DeviceProvider)
foreign import ccall "gst_device_provider_get_type"
    c_gst_device_provider_get_type :: IO GType

type instance ParentTypes DeviceProvider = DeviceProviderParentTypes
type DeviceProviderParentTypes = '[Object, GObject.Object]

instance GObject DeviceProvider where
    gobjectIsInitiallyUnowned _ = True
    gobjectType _ = c_gst_device_provider_get_type
    

class GObject o => DeviceProviderK o
instance (GObject o, IsDescendantOf DeviceProvider o) => DeviceProviderK o

toDeviceProvider :: DeviceProviderK o => o -> IO DeviceProvider
toDeviceProvider = unsafeCastTo DeviceProvider

noDeviceProvider :: Maybe DeviceProvider
noDeviceProvider = Nothing

type family ResolveDeviceProviderMethod (t :: Symbol) (o :: *) :: * where
    ResolveDeviceProviderMethod "addControlBinding" o = ObjectAddControlBindingMethodInfo
    ResolveDeviceProviderMethod "bindProperty" o = GObject.ObjectBindPropertyMethodInfo
    ResolveDeviceProviderMethod "bindPropertyFull" o = GObject.ObjectBindPropertyFullMethodInfo
    ResolveDeviceProviderMethod "canMonitor" o = DeviceProviderCanMonitorMethodInfo
    ResolveDeviceProviderMethod "defaultError" o = ObjectDefaultErrorMethodInfo
    ResolveDeviceProviderMethod "deviceAdd" o = DeviceProviderDeviceAddMethodInfo
    ResolveDeviceProviderMethod "deviceRemove" o = DeviceProviderDeviceRemoveMethodInfo
    ResolveDeviceProviderMethod "forceFloating" o = GObject.ObjectForceFloatingMethodInfo
    ResolveDeviceProviderMethod "freezeNotify" o = GObject.ObjectFreezeNotifyMethodInfo
    ResolveDeviceProviderMethod "hasActiveControlBindings" o = ObjectHasActiveControlBindingsMethodInfo
    ResolveDeviceProviderMethod "hasAncestor" o = ObjectHasAncestorMethodInfo
    ResolveDeviceProviderMethod "hasAsAncestor" o = ObjectHasAsAncestorMethodInfo
    ResolveDeviceProviderMethod "hasAsParent" o = ObjectHasAsParentMethodInfo
    ResolveDeviceProviderMethod "hideProvider" o = DeviceProviderHideProviderMethodInfo
    ResolveDeviceProviderMethod "isFloating" o = GObject.ObjectIsFloatingMethodInfo
    ResolveDeviceProviderMethod "notify" o = GObject.ObjectNotifyMethodInfo
    ResolveDeviceProviderMethod "notifyByPspec" o = GObject.ObjectNotifyByPspecMethodInfo
    ResolveDeviceProviderMethod "refSink" o = GObject.ObjectRefSinkMethodInfo
    ResolveDeviceProviderMethod "removeControlBinding" o = ObjectRemoveControlBindingMethodInfo
    ResolveDeviceProviderMethod "replaceData" o = GObject.ObjectReplaceDataMethodInfo
    ResolveDeviceProviderMethod "replaceQdata" o = GObject.ObjectReplaceQdataMethodInfo
    ResolveDeviceProviderMethod "runDispose" o = GObject.ObjectRunDisposeMethodInfo
    ResolveDeviceProviderMethod "start" o = DeviceProviderStartMethodInfo
    ResolveDeviceProviderMethod "stealData" o = GObject.ObjectStealDataMethodInfo
    ResolveDeviceProviderMethod "stealQdata" o = GObject.ObjectStealQdataMethodInfo
    ResolveDeviceProviderMethod "stop" o = DeviceProviderStopMethodInfo
    ResolveDeviceProviderMethod "suggestNextSync" o = ObjectSuggestNextSyncMethodInfo
    ResolveDeviceProviderMethod "syncValues" o = ObjectSyncValuesMethodInfo
    ResolveDeviceProviderMethod "thawNotify" o = GObject.ObjectThawNotifyMethodInfo
    ResolveDeviceProviderMethod "unhideProvider" o = DeviceProviderUnhideProviderMethodInfo
    ResolveDeviceProviderMethod "unparent" o = ObjectUnparentMethodInfo
    ResolveDeviceProviderMethod "watchClosure" o = GObject.ObjectWatchClosureMethodInfo
    ResolveDeviceProviderMethod "getBus" o = DeviceProviderGetBusMethodInfo
    ResolveDeviceProviderMethod "getControlBinding" o = ObjectGetControlBindingMethodInfo
    ResolveDeviceProviderMethod "getControlRate" o = ObjectGetControlRateMethodInfo
    ResolveDeviceProviderMethod "getData" o = GObject.ObjectGetDataMethodInfo
    ResolveDeviceProviderMethod "getDevices" o = DeviceProviderGetDevicesMethodInfo
    ResolveDeviceProviderMethod "getFactory" o = DeviceProviderGetFactoryMethodInfo
    ResolveDeviceProviderMethod "getGValueArray" o = ObjectGetGValueArrayMethodInfo
    ResolveDeviceProviderMethod "getHiddenProviders" o = DeviceProviderGetHiddenProvidersMethodInfo
    ResolveDeviceProviderMethod "getName" o = ObjectGetNameMethodInfo
    ResolveDeviceProviderMethod "getParent" o = ObjectGetParentMethodInfo
    ResolveDeviceProviderMethod "getPathString" o = ObjectGetPathStringMethodInfo
    ResolveDeviceProviderMethod "getProperty" o = GObject.ObjectGetPropertyMethodInfo
    ResolveDeviceProviderMethod "getQdata" o = GObject.ObjectGetQdataMethodInfo
    ResolveDeviceProviderMethod "getValue" o = ObjectGetValueMethodInfo
    ResolveDeviceProviderMethod "getValueArray" o = ObjectGetValueArrayMethodInfo
    ResolveDeviceProviderMethod "setControlBindingDisabled" o = ObjectSetControlBindingDisabledMethodInfo
    ResolveDeviceProviderMethod "setControlBindingsDisabled" o = ObjectSetControlBindingsDisabledMethodInfo
    ResolveDeviceProviderMethod "setControlRate" o = ObjectSetControlRateMethodInfo
    ResolveDeviceProviderMethod "setData" o = GObject.ObjectSetDataMethodInfo
    ResolveDeviceProviderMethod "setName" o = ObjectSetNameMethodInfo
    ResolveDeviceProviderMethod "setParent" o = ObjectSetParentMethodInfo
    ResolveDeviceProviderMethod "setProperty" o = GObject.ObjectSetPropertyMethodInfo
    ResolveDeviceProviderMethod l o = MethodResolutionFailed l o

instance (info ~ ResolveDeviceProviderMethod t DeviceProvider, MethodInfo info DeviceProvider p) => IsLabelProxy t (DeviceProvider -> p) where
    fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info)

#if MIN_VERSION_base(4,9,0)
instance (info ~ ResolveDeviceProviderMethod t DeviceProvider, MethodInfo info DeviceProvider p) => IsLabel t (DeviceProvider -> p) where
    fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info)
#endif

-- signal DeviceProvider::provider-hidden
type DeviceProviderProviderHiddenCallback =
    T.Text ->
    IO ()

noDeviceProviderProviderHiddenCallback :: Maybe DeviceProviderProviderHiddenCallback
noDeviceProviderProviderHiddenCallback = Nothing

type DeviceProviderProviderHiddenCallbackC =
    Ptr () ->                               -- object
    CString ->
    Ptr () ->                               -- user_data
    IO ()

foreign import ccall "wrapper"
    mkDeviceProviderProviderHiddenCallback :: DeviceProviderProviderHiddenCallbackC -> IO (FunPtr DeviceProviderProviderHiddenCallbackC)

deviceProviderProviderHiddenClosure :: DeviceProviderProviderHiddenCallback -> IO Closure
deviceProviderProviderHiddenClosure cb = newCClosure =<< mkDeviceProviderProviderHiddenCallback wrapped
    where wrapped = deviceProviderProviderHiddenCallbackWrapper cb

deviceProviderProviderHiddenCallbackWrapper ::
    DeviceProviderProviderHiddenCallback ->
    Ptr () ->
    CString ->
    Ptr () ->
    IO ()
deviceProviderProviderHiddenCallbackWrapper _cb _ object _ = do
    object' <- cstringToText object
    _cb  object'

onDeviceProviderProviderHidden :: (GObject a, MonadIO m) => a -> DeviceProviderProviderHiddenCallback -> m SignalHandlerId
onDeviceProviderProviderHidden obj cb = liftIO $ connectDeviceProviderProviderHidden obj cb SignalConnectBefore
afterDeviceProviderProviderHidden :: (GObject a, MonadIO m) => a -> DeviceProviderProviderHiddenCallback -> m SignalHandlerId
afterDeviceProviderProviderHidden obj cb = connectDeviceProviderProviderHidden obj cb SignalConnectAfter

connectDeviceProviderProviderHidden :: (GObject a, MonadIO m) =>
                                       a -> DeviceProviderProviderHiddenCallback -> SignalConnectMode -> m SignalHandlerId
connectDeviceProviderProviderHidden obj cb after = liftIO $ do
    cb' <- mkDeviceProviderProviderHiddenCallback (deviceProviderProviderHiddenCallbackWrapper cb)
    connectSignalFunPtr obj "provider-hidden" cb' after

-- signal DeviceProvider::provider-unhidden
type DeviceProviderProviderUnhiddenCallback =
    T.Text ->
    IO ()

noDeviceProviderProviderUnhiddenCallback :: Maybe DeviceProviderProviderUnhiddenCallback
noDeviceProviderProviderUnhiddenCallback = Nothing

type DeviceProviderProviderUnhiddenCallbackC =
    Ptr () ->                               -- object
    CString ->
    Ptr () ->                               -- user_data
    IO ()

foreign import ccall "wrapper"
    mkDeviceProviderProviderUnhiddenCallback :: DeviceProviderProviderUnhiddenCallbackC -> IO (FunPtr DeviceProviderProviderUnhiddenCallbackC)

deviceProviderProviderUnhiddenClosure :: DeviceProviderProviderUnhiddenCallback -> IO Closure
deviceProviderProviderUnhiddenClosure cb = newCClosure =<< mkDeviceProviderProviderUnhiddenCallback wrapped
    where wrapped = deviceProviderProviderUnhiddenCallbackWrapper cb

deviceProviderProviderUnhiddenCallbackWrapper ::
    DeviceProviderProviderUnhiddenCallback ->
    Ptr () ->
    CString ->
    Ptr () ->
    IO ()
deviceProviderProviderUnhiddenCallbackWrapper _cb _ object _ = do
    object' <- cstringToText object
    _cb  object'

onDeviceProviderProviderUnhidden :: (GObject a, MonadIO m) => a -> DeviceProviderProviderUnhiddenCallback -> m SignalHandlerId
onDeviceProviderProviderUnhidden obj cb = liftIO $ connectDeviceProviderProviderUnhidden obj cb SignalConnectBefore
afterDeviceProviderProviderUnhidden :: (GObject a, MonadIO m) => a -> DeviceProviderProviderUnhiddenCallback -> m SignalHandlerId
afterDeviceProviderProviderUnhidden obj cb = connectDeviceProviderProviderUnhidden obj cb SignalConnectAfter

connectDeviceProviderProviderUnhidden :: (GObject a, MonadIO m) =>
                                         a -> DeviceProviderProviderUnhiddenCallback -> SignalConnectMode -> m SignalHandlerId
connectDeviceProviderProviderUnhidden obj cb after = liftIO $ do
    cb' <- mkDeviceProviderProviderUnhiddenCallback (deviceProviderProviderUnhiddenCallbackWrapper cb)
    connectSignalFunPtr obj "provider-unhidden" cb' after

type instance AttributeList DeviceProvider = DeviceProviderAttributeList
type DeviceProviderAttributeList = ('[ '("name", ObjectNamePropertyInfo), '("parent", ObjectParentPropertyInfo)] :: [(Symbol, *)])

data DeviceProviderProviderHiddenSignalInfo
instance SignalInfo DeviceProviderProviderHiddenSignalInfo where
    type HaskellCallbackType DeviceProviderProviderHiddenSignalInfo = DeviceProviderProviderHiddenCallback
    connectSignal _ = connectDeviceProviderProviderHidden

data DeviceProviderProviderUnhiddenSignalInfo
instance SignalInfo DeviceProviderProviderUnhiddenSignalInfo where
    type HaskellCallbackType DeviceProviderProviderUnhiddenSignalInfo = DeviceProviderProviderUnhiddenCallback
    connectSignal _ = connectDeviceProviderProviderUnhidden

type instance SignalList DeviceProvider = DeviceProviderSignalList
type DeviceProviderSignalList = ('[ '("deepNotify", ObjectDeepNotifySignalInfo), '("notify", GObject.ObjectNotifySignalInfo), '("providerHidden", DeviceProviderProviderHiddenSignalInfo), '("providerUnhidden", DeviceProviderProviderUnhiddenSignalInfo)] :: [(Symbol, *)])

-- method DeviceProvider::can_monitor
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "DeviceProvider", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gst_device_provider_can_monitor" gst_device_provider_can_monitor :: 
    Ptr DeviceProvider ->                   -- _obj : TInterface "Gst" "DeviceProvider"
    IO CInt


deviceProviderCanMonitor ::
    (MonadIO m, DeviceProviderK a) =>
    a                                       -- _obj
    -> m Bool                               -- result
deviceProviderCanMonitor _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gst_device_provider_can_monitor _obj'
    let result' = (/= 0) result
    touchManagedPtr _obj
    return result'

data DeviceProviderCanMonitorMethodInfo
instance (signature ~ (m Bool), MonadIO m, DeviceProviderK a) => MethodInfo DeviceProviderCanMonitorMethodInfo a signature where
    overloadedMethod _ = deviceProviderCanMonitor

-- method DeviceProvider::device_add
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "DeviceProvider", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "device", argType = TInterface "Gst" "Device", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gst_device_provider_device_add" gst_device_provider_device_add :: 
    Ptr DeviceProvider ->                   -- _obj : TInterface "Gst" "DeviceProvider"
    Ptr Device ->                           -- device : TInterface "Gst" "Device"
    IO ()


deviceProviderDeviceAdd ::
    (MonadIO m, DeviceProviderK a, DeviceK b) =>
    a                                       -- _obj
    -> b                                    -- device
    -> m ()                                 -- result
deviceProviderDeviceAdd _obj device = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    device' <- refObject device
    gst_device_provider_device_add _obj' device'
    touchManagedPtr _obj
    touchManagedPtr device
    return ()

data DeviceProviderDeviceAddMethodInfo
instance (signature ~ (b -> m ()), MonadIO m, DeviceProviderK a, DeviceK b) => MethodInfo DeviceProviderDeviceAddMethodInfo a signature where
    overloadedMethod _ = deviceProviderDeviceAdd

-- method DeviceProvider::device_remove
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "DeviceProvider", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "device", argType = TInterface "Gst" "Device", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gst_device_provider_device_remove" gst_device_provider_device_remove :: 
    Ptr DeviceProvider ->                   -- _obj : TInterface "Gst" "DeviceProvider"
    Ptr Device ->                           -- device : TInterface "Gst" "Device"
    IO ()


deviceProviderDeviceRemove ::
    (MonadIO m, DeviceProviderK a, DeviceK b) =>
    a                                       -- _obj
    -> b                                    -- device
    -> m ()                                 -- result
deviceProviderDeviceRemove _obj device = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let device' = unsafeManagedPtrCastPtr device
    gst_device_provider_device_remove _obj' device'
    touchManagedPtr _obj
    touchManagedPtr device
    return ()

data DeviceProviderDeviceRemoveMethodInfo
instance (signature ~ (b -> m ()), MonadIO m, DeviceProviderK a, DeviceK b) => MethodInfo DeviceProviderDeviceRemoveMethodInfo a signature where
    overloadedMethod _ = deviceProviderDeviceRemove

-- method DeviceProvider::get_bus
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "DeviceProvider", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TInterface "Gst" "Bus"
-- throws : False
-- Skip return : False

foreign import ccall "gst_device_provider_get_bus" gst_device_provider_get_bus :: 
    Ptr DeviceProvider ->                   -- _obj : TInterface "Gst" "DeviceProvider"
    IO (Ptr Bus)


deviceProviderGetBus ::
    (MonadIO m, DeviceProviderK a) =>
    a                                       -- _obj
    -> m Bus                                -- result
deviceProviderGetBus _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gst_device_provider_get_bus _obj'
    checkUnexpectedReturnNULL "gst_device_provider_get_bus" result
    result' <- (wrapObject Bus) result
    touchManagedPtr _obj
    return result'

data DeviceProviderGetBusMethodInfo
instance (signature ~ (m Bus), MonadIO m, DeviceProviderK a) => MethodInfo DeviceProviderGetBusMethodInfo a signature where
    overloadedMethod _ = deviceProviderGetBus

-- method DeviceProvider::get_devices
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "DeviceProvider", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TGList (TInterface "Gst" "Device")
-- throws : False
-- Skip return : False

foreign import ccall "gst_device_provider_get_devices" gst_device_provider_get_devices :: 
    Ptr DeviceProvider ->                   -- _obj : TInterface "Gst" "DeviceProvider"
    IO (Ptr (GList (Ptr Device)))


deviceProviderGetDevices ::
    (MonadIO m, DeviceProviderK a) =>
    a                                       -- _obj
    -> m [Device]                           -- result
deviceProviderGetDevices _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gst_device_provider_get_devices _obj'
    checkUnexpectedReturnNULL "gst_device_provider_get_devices" result
    result' <- unpackGList result
    result'' <- mapM (wrapObject Device) result'
    g_list_free result
    touchManagedPtr _obj
    return result''

data DeviceProviderGetDevicesMethodInfo
instance (signature ~ (m [Device]), MonadIO m, DeviceProviderK a) => MethodInfo DeviceProviderGetDevicesMethodInfo a signature where
    overloadedMethod _ = deviceProviderGetDevices

-- method DeviceProvider::get_factory
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "DeviceProvider", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TInterface "Gst" "DeviceProviderFactory"
-- throws : False
-- Skip return : False

foreign import ccall "gst_device_provider_get_factory" gst_device_provider_get_factory :: 
    Ptr DeviceProvider ->                   -- _obj : TInterface "Gst" "DeviceProvider"
    IO (Ptr DeviceProviderFactory)


deviceProviderGetFactory ::
    (MonadIO m, DeviceProviderK a) =>
    a                                       -- _obj
    -> m DeviceProviderFactory              -- result
deviceProviderGetFactory _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gst_device_provider_get_factory _obj'
    checkUnexpectedReturnNULL "gst_device_provider_get_factory" result
    result' <- (newObject DeviceProviderFactory) result
    touchManagedPtr _obj
    return result'

data DeviceProviderGetFactoryMethodInfo
instance (signature ~ (m DeviceProviderFactory), MonadIO m, DeviceProviderK a) => MethodInfo DeviceProviderGetFactoryMethodInfo a signature where
    overloadedMethod _ = deviceProviderGetFactory

-- method DeviceProvider::get_hidden_providers
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "DeviceProvider", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TCArray True (-1) (-1) (TBasicType TUTF8)
-- throws : False
-- Skip return : False

foreign import ccall "gst_device_provider_get_hidden_providers" gst_device_provider_get_hidden_providers :: 
    Ptr DeviceProvider ->                   -- _obj : TInterface "Gst" "DeviceProvider"
    IO (Ptr CString)


deviceProviderGetHiddenProviders ::
    (MonadIO m, DeviceProviderK a) =>
    a                                       -- _obj
    -> m [T.Text]                           -- result
deviceProviderGetHiddenProviders _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gst_device_provider_get_hidden_providers _obj'
    checkUnexpectedReturnNULL "gst_device_provider_get_hidden_providers" result
    result' <- unpackZeroTerminatedUTF8CArray result
    mapZeroTerminatedCArray freeMem result
    freeMem result
    touchManagedPtr _obj
    return result'

data DeviceProviderGetHiddenProvidersMethodInfo
instance (signature ~ (m [T.Text]), MonadIO m, DeviceProviderK a) => MethodInfo DeviceProviderGetHiddenProvidersMethodInfo a signature where
    overloadedMethod _ = deviceProviderGetHiddenProviders

-- method DeviceProvider::hide_provider
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "DeviceProvider", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gst_device_provider_hide_provider" gst_device_provider_hide_provider :: 
    Ptr DeviceProvider ->                   -- _obj : TInterface "Gst" "DeviceProvider"
    CString ->                              -- name : TBasicType TUTF8
    IO ()


deviceProviderHideProvider ::
    (MonadIO m, DeviceProviderK a) =>
    a                                       -- _obj
    -> T.Text                               -- name
    -> m ()                                 -- result
deviceProviderHideProvider _obj name = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    name' <- textToCString name
    gst_device_provider_hide_provider _obj' name'
    touchManagedPtr _obj
    freeMem name'
    return ()

data DeviceProviderHideProviderMethodInfo
instance (signature ~ (T.Text -> m ()), MonadIO m, DeviceProviderK a) => MethodInfo DeviceProviderHideProviderMethodInfo a signature where
    overloadedMethod _ = deviceProviderHideProvider

-- method DeviceProvider::start
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "DeviceProvider", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gst_device_provider_start" gst_device_provider_start :: 
    Ptr DeviceProvider ->                   -- _obj : TInterface "Gst" "DeviceProvider"
    IO CInt


deviceProviderStart ::
    (MonadIO m, DeviceProviderK a) =>
    a                                       -- _obj
    -> m Bool                               -- result
deviceProviderStart _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- gst_device_provider_start _obj'
    let result' = (/= 0) result
    touchManagedPtr _obj
    return result'

data DeviceProviderStartMethodInfo
instance (signature ~ (m Bool), MonadIO m, DeviceProviderK a) => MethodInfo DeviceProviderStartMethodInfo a signature where
    overloadedMethod _ = deviceProviderStart

-- method DeviceProvider::stop
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "DeviceProvider", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gst_device_provider_stop" gst_device_provider_stop :: 
    Ptr DeviceProvider ->                   -- _obj : TInterface "Gst" "DeviceProvider"
    IO ()


deviceProviderStop ::
    (MonadIO m, DeviceProviderK a) =>
    a                                       -- _obj
    -> m ()                                 -- result
deviceProviderStop _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gst_device_provider_stop _obj'
    touchManagedPtr _obj
    return ()

data DeviceProviderStopMethodInfo
instance (signature ~ (m ()), MonadIO m, DeviceProviderK a) => MethodInfo DeviceProviderStopMethodInfo a signature where
    overloadedMethod _ = deviceProviderStop

-- method DeviceProvider::unhide_provider
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "DeviceProvider", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "gst_device_provider_unhide_provider" gst_device_provider_unhide_provider :: 
    Ptr DeviceProvider ->                   -- _obj : TInterface "Gst" "DeviceProvider"
    CString ->                              -- name : TBasicType TUTF8
    IO ()


deviceProviderUnhideProvider ::
    (MonadIO m, DeviceProviderK a) =>
    a                                       -- _obj
    -> T.Text                               -- name
    -> m ()                                 -- result
deviceProviderUnhideProvider _obj name = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    name' <- textToCString name
    gst_device_provider_unhide_provider _obj' name'
    touchManagedPtr _obj
    freeMem name'
    return ()

data DeviceProviderUnhideProviderMethodInfo
instance (signature ~ (T.Text -> m ()), MonadIO m, DeviceProviderK a) => MethodInfo DeviceProviderUnhideProviderMethodInfo a signature where
    overloadedMethod _ = deviceProviderUnhideProvider

-- method DeviceProvider::register
-- method type : MemberFunction
-- Args : [Arg {argCName = "plugin", argType = TInterface "Gst" "Plugin", direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "rank", argType = TBasicType TUInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "type", argType = TBasicType TGType, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gst_device_provider_register" gst_device_provider_register :: 
    Ptr Plugin ->                           -- plugin : TInterface "Gst" "Plugin"
    CString ->                              -- name : TBasicType TUTF8
    Word32 ->                               -- rank : TBasicType TUInt32
    CGType ->                               -- type : TBasicType TGType
    IO CInt


deviceProviderRegister ::
    (MonadIO m, PluginK a) =>
    Maybe (a)                               -- plugin
    -> T.Text                               -- name
    -> Word32                               -- rank
    -> GType                                -- type_
    -> m Bool                               -- result
deviceProviderRegister plugin name rank type_ = liftIO $ do
    maybePlugin <- case plugin of
        Nothing -> return nullPtr
        Just jPlugin -> do
            let jPlugin' = unsafeManagedPtrCastPtr jPlugin
            return jPlugin'
    name' <- textToCString name
    let type_' = gtypeToCGType type_
    result <- gst_device_provider_register maybePlugin name' rank type_'
    let result' = (/= 0) result
    whenJust plugin touchManagedPtr
    freeMem name'
    return result'