packages feed

gi-gstaudio-0.1.6.13: GI/GstAudio/Structs/AudioInfo.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)

Information describing audio properties. This information can be filled
in from GstCaps with gst_audio_info_from_caps().

Use the provided macros to access the info in this structure.
-}

module GI.GstAudio.Structs.AudioInfo
    ( 

-- * Exported types
    AudioInfo(..)                           ,
    newZeroAudioInfo                        ,
    noAudioInfo                             ,


 -- * Methods
-- ** audioInfoConvert
    AudioInfoConvertMethodInfo              ,
    audioInfoConvert                        ,


-- ** audioInfoCopy
    AudioInfoCopyMethodInfo                 ,
    audioInfoCopy                           ,


-- ** audioInfoFree
    AudioInfoFreeMethodInfo                 ,
    audioInfoFree                           ,


-- ** audioInfoFromCaps
    AudioInfoFromCapsMethodInfo             ,
    audioInfoFromCaps                       ,


-- ** audioInfoInit
    AudioInfoInitMethodInfo                 ,
    audioInfoInit                           ,


-- ** audioInfoIsEqual
    AudioInfoIsEqualMethodInfo              ,
    audioInfoIsEqual                        ,


-- ** audioInfoNew
    audioInfoNew                            ,


-- ** audioInfoSetFormat
    AudioInfoSetFormatMethodInfo            ,
    audioInfoSetFormat                      ,


-- ** audioInfoToCaps
    AudioInfoToCapsMethodInfo               ,
    audioInfoToCaps                         ,




 -- * Properties
-- ** Bpf
    audioInfoReadBpf                        ,


-- ** Channels
    audioInfoReadChannels                   ,


-- ** Finfo
    audioInfoReadFinfo                      ,


-- ** Flags
    audioInfoReadFlags                      ,


-- ** Layout
    audioInfoReadLayout                     ,


-- ** Rate
    audioInfoReadRate                       ,




    ) 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.GstAudio.Types
import GI.GstAudio.Callbacks
import qualified GI.Gst as Gst

newtype AudioInfo = AudioInfo (ForeignPtr AudioInfo)
foreign import ccall "gst_audio_info_get_type" c_gst_audio_info_get_type :: 
    IO GType

instance BoxedObject AudioInfo where
    boxedType _ = c_gst_audio_info_get_type

-- | Construct a `AudioInfo` struct initialized to zero.
newZeroAudioInfo :: MonadIO m => m AudioInfo
newZeroAudioInfo = liftIO $ callocBoxedBytes 320 >>= wrapBoxed AudioInfo

noAudioInfo :: Maybe AudioInfo
noAudioInfo = Nothing

audioInfoReadFinfo :: AudioInfo -> IO AudioFormatInfo
audioInfoReadFinfo s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO (Ptr AudioFormatInfo)
    val' <- (newPtr 104 AudioFormatInfo) val
    return val'

audioInfoReadFlags :: AudioInfo -> IO [AudioFlags]
audioInfoReadFlags s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 8) :: IO CUInt
    let val' = wordToGFlags val
    return val'

audioInfoReadLayout :: AudioInfo -> IO AudioLayout
audioInfoReadLayout s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 12) :: IO CUInt
    let val' = (toEnum . fromIntegral) val
    return val'

audioInfoReadRate :: AudioInfo -> IO Int32
audioInfoReadRate s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 16) :: IO Int32
    return val

audioInfoReadChannels :: AudioInfo -> IO Int32
audioInfoReadChannels s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 20) :: IO Int32
    return val

audioInfoReadBpf :: AudioInfo -> IO Int32
audioInfoReadBpf s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 24) :: IO Int32
    return val

-- XXX Skipped getter for "AudioInfo:position" :: Not implemented: "Don't know how to unpack C array of type TCArray False 64 (-1) (TInterface \"GstAudio\" \"AudioChannelPosition\")"

-- method AudioInfo::new
-- method type : Constructor
-- Args : []
-- Lengths : []
-- returnType : TInterface "GstAudio" "AudioInfo"
-- throws : False
-- Skip return : False

foreign import ccall "gst_audio_info_new" gst_audio_info_new :: 
    IO (Ptr AudioInfo)


audioInfoNew ::
    (MonadIO m) =>
    m AudioInfo                             -- result
audioInfoNew  = liftIO $ do
    result <- gst_audio_info_new
    checkUnexpectedReturnNULL "gst_audio_info_new" result
    result' <- (wrapBoxed AudioInfo) result
    return result'

-- method AudioInfo::convert
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "src_fmt", argType = TInterface "Gst" "Format", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "src_val", argType = TBasicType TInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "dest_fmt", argType = TInterface "Gst" "Format", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "dest_val", argType = TBasicType TInt64, 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_audio_info_convert" gst_audio_info_convert :: 
    Ptr AudioInfo ->                        -- _obj : TInterface "GstAudio" "AudioInfo"
    CUInt ->                                -- src_fmt : TInterface "Gst" "Format"
    Int64 ->                                -- src_val : TBasicType TInt64
    CUInt ->                                -- dest_fmt : TInterface "Gst" "Format"
    Int64 ->                                -- dest_val : TBasicType TInt64
    IO CInt


audioInfoConvert ::
    (MonadIO m) =>
    AudioInfo                               -- _obj
    -> Gst.Format                           -- srcFmt
    -> Int64                                -- srcVal
    -> Gst.Format                           -- destFmt
    -> Int64                                -- destVal
    -> m Bool                               -- result
audioInfoConvert _obj srcFmt srcVal destFmt destVal = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    let srcFmt' = (fromIntegral . fromEnum) srcFmt
    let destFmt' = (fromIntegral . fromEnum) destFmt
    result <- gst_audio_info_convert _obj' srcFmt' srcVal destFmt' destVal
    let result' = (/= 0) result
    touchManagedPtr _obj
    return result'

data AudioInfoConvertMethodInfo
instance (signature ~ (Gst.Format -> Int64 -> Gst.Format -> Int64 -> m Bool), MonadIO m) => MethodInfo AudioInfoConvertMethodInfo AudioInfo signature where
    overloadedMethod _ = audioInfoConvert

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

foreign import ccall "gst_audio_info_copy" gst_audio_info_copy :: 
    Ptr AudioInfo ->                        -- _obj : TInterface "GstAudio" "AudioInfo"
    IO (Ptr AudioInfo)


audioInfoCopy ::
    (MonadIO m) =>
    AudioInfo                               -- _obj
    -> m AudioInfo                          -- result
audioInfoCopy _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    result <- gst_audio_info_copy _obj'
    checkUnexpectedReturnNULL "gst_audio_info_copy" result
    result' <- (wrapBoxed AudioInfo) result
    touchManagedPtr _obj
    return result'

data AudioInfoCopyMethodInfo
instance (signature ~ (m AudioInfo), MonadIO m) => MethodInfo AudioInfoCopyMethodInfo AudioInfo signature where
    overloadedMethod _ = audioInfoCopy

-- method AudioInfo::free
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioInfo", 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_audio_info_free" gst_audio_info_free :: 
    Ptr AudioInfo ->                        -- _obj : TInterface "GstAudio" "AudioInfo"
    IO ()


audioInfoFree ::
    (MonadIO m) =>
    AudioInfo                               -- _obj
    -> m ()                                 -- result
audioInfoFree _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    gst_audio_info_free _obj'
    touchManagedPtr _obj
    return ()

data AudioInfoFreeMethodInfo
instance (signature ~ (m ()), MonadIO m) => MethodInfo AudioInfoFreeMethodInfo AudioInfo signature where
    overloadedMethod _ = audioInfoFree

-- method AudioInfo::from_caps
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "caps", argType = TInterface "Gst" "Caps", 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_audio_info_from_caps" gst_audio_info_from_caps :: 
    Ptr AudioInfo ->                        -- _obj : TInterface "GstAudio" "AudioInfo"
    Ptr Gst.Caps ->                         -- caps : TInterface "Gst" "Caps"
    IO CInt


audioInfoFromCaps ::
    (MonadIO m) =>
    AudioInfo                               -- _obj
    -> Gst.Caps                             -- caps
    -> m Bool                               -- result
audioInfoFromCaps _obj caps = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    let caps' = unsafeManagedPtrGetPtr caps
    result <- gst_audio_info_from_caps _obj' caps'
    let result' = (/= 0) result
    touchManagedPtr _obj
    touchManagedPtr caps
    return result'

data AudioInfoFromCapsMethodInfo
instance (signature ~ (Gst.Caps -> m Bool), MonadIO m) => MethodInfo AudioInfoFromCapsMethodInfo AudioInfo signature where
    overloadedMethod _ = audioInfoFromCaps

-- method AudioInfo::init
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioInfo", 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_audio_info_init" gst_audio_info_init :: 
    Ptr AudioInfo ->                        -- _obj : TInterface "GstAudio" "AudioInfo"
    IO ()


audioInfoInit ::
    (MonadIO m) =>
    AudioInfo                               -- _obj
    -> m ()                                 -- result
audioInfoInit _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    gst_audio_info_init _obj'
    touchManagedPtr _obj
    return ()

data AudioInfoInitMethodInfo
instance (signature ~ (m ()), MonadIO m) => MethodInfo AudioInfoInitMethodInfo AudioInfo signature where
    overloadedMethod _ = audioInfoInit

-- method AudioInfo::is_equal
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "other", argType = TInterface "GstAudio" "AudioInfo", 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_audio_info_is_equal" gst_audio_info_is_equal :: 
    Ptr AudioInfo ->                        -- _obj : TInterface "GstAudio" "AudioInfo"
    Ptr AudioInfo ->                        -- other : TInterface "GstAudio" "AudioInfo"
    IO CInt


audioInfoIsEqual ::
    (MonadIO m) =>
    AudioInfo                               -- _obj
    -> AudioInfo                            -- other
    -> m Bool                               -- result
audioInfoIsEqual _obj other = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    let other' = unsafeManagedPtrGetPtr other
    result <- gst_audio_info_is_equal _obj' other'
    let result' = (/= 0) result
    touchManagedPtr _obj
    touchManagedPtr other
    return result'

data AudioInfoIsEqualMethodInfo
instance (signature ~ (AudioInfo -> m Bool), MonadIO m) => MethodInfo AudioInfoIsEqualMethodInfo AudioInfo signature where
    overloadedMethod _ = audioInfoIsEqual

-- method AudioInfo::set_format
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "format", argType = TInterface "GstAudio" "AudioFormat", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "rate", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "channels", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "position", argType = TInterface "GstAudio" "AudioChannelPosition", 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_audio_info_set_format" gst_audio_info_set_format :: 
    Ptr AudioInfo ->                        -- _obj : TInterface "GstAudio" "AudioInfo"
    CUInt ->                                -- format : TInterface "GstAudio" "AudioFormat"
    Int32 ->                                -- rate : TBasicType TInt32
    Int32 ->                                -- channels : TBasicType TInt32
    CUInt ->                                -- position : TInterface "GstAudio" "AudioChannelPosition"
    IO ()


audioInfoSetFormat ::
    (MonadIO m) =>
    AudioInfo                               -- _obj
    -> AudioFormat                          -- format
    -> Int32                                -- rate
    -> Int32                                -- channels
    -> AudioChannelPosition                 -- position
    -> m ()                                 -- result
audioInfoSetFormat _obj format rate channels position = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    let format' = (fromIntegral . fromEnum) format
    let position' = (fromIntegral . fromEnum) position
    gst_audio_info_set_format _obj' format' rate channels position'
    touchManagedPtr _obj
    return ()

data AudioInfoSetFormatMethodInfo
instance (signature ~ (AudioFormat -> Int32 -> Int32 -> AudioChannelPosition -> m ()), MonadIO m) => MethodInfo AudioInfoSetFormatMethodInfo AudioInfo signature where
    overloadedMethod _ = audioInfoSetFormat

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

foreign import ccall "gst_audio_info_to_caps" gst_audio_info_to_caps :: 
    Ptr AudioInfo ->                        -- _obj : TInterface "GstAudio" "AudioInfo"
    IO (Ptr Gst.Caps)


audioInfoToCaps ::
    (MonadIO m) =>
    AudioInfo                               -- _obj
    -> m Gst.Caps                           -- result
audioInfoToCaps _obj = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    result <- gst_audio_info_to_caps _obj'
    checkUnexpectedReturnNULL "gst_audio_info_to_caps" result
    result' <- (wrapBoxed Gst.Caps) result
    touchManagedPtr _obj
    return result'

data AudioInfoToCapsMethodInfo
instance (signature ~ (m Gst.Caps), MonadIO m) => MethodInfo AudioInfoToCapsMethodInfo AudioInfo signature where
    overloadedMethod _ = audioInfoToCaps

type family ResolveAudioInfoMethod (t :: Symbol) (o :: *) :: * where
    ResolveAudioInfoMethod "convert" o = AudioInfoConvertMethodInfo
    ResolveAudioInfoMethod "copy" o = AudioInfoCopyMethodInfo
    ResolveAudioInfoMethod "free" o = AudioInfoFreeMethodInfo
    ResolveAudioInfoMethod "fromCaps" o = AudioInfoFromCapsMethodInfo
    ResolveAudioInfoMethod "init" o = AudioInfoInitMethodInfo
    ResolveAudioInfoMethod "isEqual" o = AudioInfoIsEqualMethodInfo
    ResolveAudioInfoMethod "toCaps" o = AudioInfoToCapsMethodInfo
    ResolveAudioInfoMethod "setFormat" o = AudioInfoSetFormatMethodInfo
    ResolveAudioInfoMethod l o = MethodResolutionFailed l o

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

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