packages feed

gi-gst-0.1.6.13: GI/Gst/Structs/Context.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)

#GstContext is a container object used to store contexts like a device
context, a display server connection and similar concepts that should
be shared between multiple elements.

Applications can set a context on a complete pipeline by using
gst_element_set_context(), which will then be propagated to all
child elements. Elements can handle these in #GstElementClass.set_context()
and merge them with the context information they already have.

When an element needs a context it will do the following actions in this
order until one step succeeds:
1. Check if the element already has a context
2. Query downstream with GST_QUERY_CONTEXT for the context
3. Query upstream with GST_QUERY_CONTEXT for the context
4. Post a GST_MESSAGE_NEED_CONTEXT message on the bus with the required
   context types and afterwards check if a usable context was set now
5. Create a context by itself and post a GST_MESSAGE_HAVE_CONTEXT message
   on the bus.

Bins will catch GST_MESSAGE_NEED_CONTEXT messages and will set any previously
known context on the element that asks for it if possible. Otherwise the
application should provide one if it can.
-}

module GI.Gst.Structs.Context
    ( 

-- * Exported types
    Context(..)                             ,
    noContext                               ,


 -- * Methods
-- ** contextGetContextType
    ContextGetContextTypeMethodInfo         ,
    contextGetContextType                   ,


-- ** contextGetStructure
    ContextGetStructureMethodInfo           ,
    contextGetStructure                     ,


-- ** contextHasContextType
    ContextHasContextTypeMethodInfo         ,
    contextHasContextType                   ,


-- ** contextIsPersistent
    ContextIsPersistentMethodInfo           ,
    contextIsPersistent                     ,


-- ** contextNew
    contextNew                              ,


-- ** contextWritableStructure
    ContextWritableStructureMethodInfo      ,
    contextWritableStructure                ,




    ) 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

newtype Context = Context (ForeignPtr Context)
foreign import ccall "gst_context_get_type" c_gst_context_get_type :: 
    IO GType

instance BoxedObject Context where
    boxedType _ = c_gst_context_get_type

noContext :: Maybe Context
noContext = Nothing

-- method Context::new
-- method type : Constructor
-- Args : [Arg {argCName = "context_type", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "persistent", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TInterface "Gst" "Context"
-- throws : False
-- Skip return : False

foreign import ccall "gst_context_new" gst_context_new :: 
    CString ->                              -- context_type : TBasicType TUTF8
    CInt ->                                 -- persistent : TBasicType TBoolean
    IO (Ptr Context)


contextNew ::
    (MonadIO m) =>
    T.Text                                  -- contextType
    -> Bool                                 -- persistent
    -> m Context                            -- result
contextNew contextType persistent = liftIO $ do
    contextType' <- textToCString contextType
    let persistent' = (fromIntegral . fromEnum) persistent
    result <- gst_context_new contextType' persistent'
    checkUnexpectedReturnNULL "gst_context_new" result
    result' <- (wrapBoxed Context) result
    freeMem contextType'
    return result'

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

foreign import ccall "gst_context_get_context_type" gst_context_get_context_type :: 
    Ptr Context ->                          -- _obj : TInterface "Gst" "Context"
    IO CString


contextGetContextType ::
    (MonadIO m) =>
    Context                                 -- _obj
    -> m T.Text                             -- result
contextGetContextType _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    result <- gst_context_get_context_type _obj'
    checkUnexpectedReturnNULL "gst_context_get_context_type" result
    result' <- cstringToText result
    touchManagedPtr _obj
    return result'

data ContextGetContextTypeMethodInfo
instance (signature ~ (m T.Text), MonadIO m) => MethodInfo ContextGetContextTypeMethodInfo Context signature where
    overloadedMethod _ = contextGetContextType

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

foreign import ccall "gst_context_get_structure" gst_context_get_structure :: 
    Ptr Context ->                          -- _obj : TInterface "Gst" "Context"
    IO (Ptr Structure)


contextGetStructure ::
    (MonadIO m) =>
    Context                                 -- _obj
    -> m Structure                          -- result
contextGetStructure _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    result <- gst_context_get_structure _obj'
    checkUnexpectedReturnNULL "gst_context_get_structure" result
    result' <- (newBoxed Structure) result
    touchManagedPtr _obj
    return result'

data ContextGetStructureMethodInfo
instance (signature ~ (m Structure), MonadIO m) => MethodInfo ContextGetStructureMethodInfo Context signature where
    overloadedMethod _ = contextGetStructure

-- method Context::has_context_type
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Context", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "context_type", argType = TBasicType TUTF8, 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_context_has_context_type" gst_context_has_context_type :: 
    Ptr Context ->                          -- _obj : TInterface "Gst" "Context"
    CString ->                              -- context_type : TBasicType TUTF8
    IO CInt


contextHasContextType ::
    (MonadIO m) =>
    Context                                 -- _obj
    -> T.Text                               -- contextType
    -> m Bool                               -- result
contextHasContextType _obj contextType = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    contextType' <- textToCString contextType
    result <- gst_context_has_context_type _obj' contextType'
    let result' = (/= 0) result
    touchManagedPtr _obj
    freeMem contextType'
    return result'

data ContextHasContextTypeMethodInfo
instance (signature ~ (T.Text -> m Bool), MonadIO m) => MethodInfo ContextHasContextTypeMethodInfo Context signature where
    overloadedMethod _ = contextHasContextType

-- method Context::is_persistent
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gst" "Context", 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_context_is_persistent" gst_context_is_persistent :: 
    Ptr Context ->                          -- _obj : TInterface "Gst" "Context"
    IO CInt


contextIsPersistent ::
    (MonadIO m) =>
    Context                                 -- _obj
    -> m Bool                               -- result
contextIsPersistent _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    result <- gst_context_is_persistent _obj'
    let result' = (/= 0) result
    touchManagedPtr _obj
    return result'

data ContextIsPersistentMethodInfo
instance (signature ~ (m Bool), MonadIO m) => MethodInfo ContextIsPersistentMethodInfo Context signature where
    overloadedMethod _ = contextIsPersistent

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

foreign import ccall "gst_context_writable_structure" gst_context_writable_structure :: 
    Ptr Context ->                          -- _obj : TInterface "Gst" "Context"
    IO (Ptr Structure)


contextWritableStructure ::
    (MonadIO m) =>
    Context                                 -- _obj
    -> m Structure                          -- result
contextWritableStructure _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    result <- gst_context_writable_structure _obj'
    checkUnexpectedReturnNULL "gst_context_writable_structure" result
    result' <- (wrapBoxed Structure) result
    touchManagedPtr _obj
    return result'

data ContextWritableStructureMethodInfo
instance (signature ~ (m Structure), MonadIO m) => MethodInfo ContextWritableStructureMethodInfo Context signature where
    overloadedMethod _ = contextWritableStructure

type family ResolveContextMethod (t :: Symbol) (o :: *) :: * where
    ResolveContextMethod "hasContextType" o = ContextHasContextTypeMethodInfo
    ResolveContextMethod "isPersistent" o = ContextIsPersistentMethodInfo
    ResolveContextMethod "writableStructure" o = ContextWritableStructureMethodInfo
    ResolveContextMethod "getContextType" o = ContextGetContextTypeMethodInfo
    ResolveContextMethod "getStructure" o = ContextGetStructureMethodInfo
    ResolveContextMethod l o = MethodResolutionFailed l o

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

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