{-# LANGUAGE TypeApplications #-}


-- | Copyright  : Will Thompson and Iñaki García Etxebarria
-- License    : LGPL-2.1
-- Maintainer : Iñaki García Etxebarria
-- 
-- Extra buffer metadata describing audio downmixing matrix. This metadata is
-- attached to audio buffers and contains a matrix to downmix the buffer number
-- of channels to /@channels@/.
-- 
-- /@matrix@/ is an two-dimensional array of /@toChannels@/ times /@fromChannels@/
-- coefficients, i.e. the i-th output channels is constructed by multiplicating
-- the input channels with the coefficients in /@matrix@/[i] and taking the sum
-- of the results.

#if (MIN_VERSION_haskell_gi_overloading(1,0,0) && !defined(__HADDOCK_VERSION__))
#define ENABLE_OVERLOADING
#endif

module GI.GstAudio.Structs.AudioDownmixMeta
    ( 

-- * Exported types
    AudioDownmixMeta(..)                    ,
    newZeroAudioDownmixMeta                 ,


 -- * Methods

#if defined(ENABLE_OVERLOADING)
    ResolveAudioDownmixMetaMethod           ,
#endif

-- ** getInfo #method:getInfo#

    audioDownmixMetaGetInfo                 ,




 -- * Properties


-- ** fromChannels #attr:fromChannels#
-- | the number of channels of the source

#if defined(ENABLE_OVERLOADING)
    audioDownmixMeta_fromChannels           ,
#endif
    getAudioDownmixMetaFromChannels         ,
    setAudioDownmixMetaFromChannels         ,


-- ** fromPosition #attr:fromPosition#
-- | the channel positions of the source

#if defined(ENABLE_OVERLOADING)
    audioDownmixMeta_fromPosition           ,
#endif
    getAudioDownmixMetaFromPosition         ,
    setAudioDownmixMetaFromPosition         ,


-- ** matrix #attr:matrix#
-- | the matrix coefficients.

#if defined(ENABLE_OVERLOADING)
    audioDownmixMeta_matrix                 ,
#endif
    getAudioDownmixMetaMatrix               ,
    setAudioDownmixMetaMatrix               ,


-- ** meta #attr:meta#
-- | parent t'GI.Gst.Structs.Meta.Meta'

#if defined(ENABLE_OVERLOADING)
    audioDownmixMeta_meta                   ,
#endif
    getAudioDownmixMetaMeta                 ,


-- ** toChannels #attr:toChannels#
-- | the number of channels of the destination

#if defined(ENABLE_OVERLOADING)
    audioDownmixMeta_toChannels             ,
#endif
    getAudioDownmixMetaToChannels           ,
    setAudioDownmixMetaToChannels           ,


-- ** toPosition #attr:toPosition#
-- | the channel positions of the destination

#if defined(ENABLE_OVERLOADING)
    audioDownmixMeta_toPosition             ,
#endif
    getAudioDownmixMetaToPosition           ,
    setAudioDownmixMetaToPosition           ,




    ) where

import Data.GI.Base.ShortPrelude
import qualified Data.GI.Base.ShortPrelude as SP
import qualified Data.GI.Base.Overloading as O
import qualified Prelude as P

import qualified Data.GI.Base.Attributes as GI.Attributes
import qualified Data.GI.Base.BasicTypes as B.Types
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GArray as B.GArray
import qualified Data.GI.Base.GClosure as B.GClosure
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GValue as B.GValue
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
import qualified Data.GI.Base.Properties as B.Properties
import qualified Data.GI.Base.Signals as B.Signals
import qualified Control.Monad.IO.Class as MIO
import qualified Data.Coerce as Coerce
import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map
import qualified Foreign.Ptr as FP
import qualified GHC.OverloadedLabels as OL
import qualified GHC.Records as R

import qualified GI.Gst.Structs.Meta as Gst.Meta
import qualified GI.Gst.Structs.MetaInfo as Gst.MetaInfo
import {-# SOURCE #-} qualified GI.GstAudio.Enums as GstAudio.Enums

-- | Memory-managed wrapper type.
newtype AudioDownmixMeta = AudioDownmixMeta (SP.ManagedPtr AudioDownmixMeta)
    deriving (AudioDownmixMeta -> AudioDownmixMeta -> Bool
(AudioDownmixMeta -> AudioDownmixMeta -> Bool)
-> (AudioDownmixMeta -> AudioDownmixMeta -> Bool)
-> Eq AudioDownmixMeta
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AudioDownmixMeta -> AudioDownmixMeta -> Bool
$c/= :: AudioDownmixMeta -> AudioDownmixMeta -> Bool
== :: AudioDownmixMeta -> AudioDownmixMeta -> Bool
$c== :: AudioDownmixMeta -> AudioDownmixMeta -> Bool
Eq)

instance SP.ManagedPtrNewtype AudioDownmixMeta where
    toManagedPtr :: AudioDownmixMeta -> ManagedPtr AudioDownmixMeta
toManagedPtr (AudioDownmixMeta ManagedPtr AudioDownmixMeta
p) = ManagedPtr AudioDownmixMeta
p

instance BoxedPtr AudioDownmixMeta where
    boxedPtrCopy :: AudioDownmixMeta -> IO AudioDownmixMeta
boxedPtrCopy = \AudioDownmixMeta
p -> AudioDownmixMeta
-> (Ptr AudioDownmixMeta -> IO AudioDownmixMeta)
-> IO AudioDownmixMeta
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
B.ManagedPtr.withManagedPtr AudioDownmixMeta
p (Int -> Ptr AudioDownmixMeta -> IO (Ptr AudioDownmixMeta)
forall a. (HasCallStack, CallocPtr a) => Int -> Ptr a -> IO (Ptr a)
copyBytes Int
48 (Ptr AudioDownmixMeta -> IO (Ptr AudioDownmixMeta))
-> (Ptr AudioDownmixMeta -> IO AudioDownmixMeta)
-> Ptr AudioDownmixMeta
-> IO AudioDownmixMeta
forall (m :: * -> *) a b c.
Monad m =>
(a -> m b) -> (b -> m c) -> a -> m c
>=> (ManagedPtr AudioDownmixMeta -> AudioDownmixMeta)
-> Ptr AudioDownmixMeta -> IO AudioDownmixMeta
forall a.
(HasCallStack, BoxedPtr a) =>
(ManagedPtr a -> a) -> Ptr a -> IO a
B.ManagedPtr.wrapPtr ManagedPtr AudioDownmixMeta -> AudioDownmixMeta
AudioDownmixMeta)
    boxedPtrFree :: AudioDownmixMeta -> IO ()
boxedPtrFree = \AudioDownmixMeta
x -> AudioDownmixMeta -> (Ptr AudioDownmixMeta -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
SP.withManagedPtr AudioDownmixMeta
x Ptr AudioDownmixMeta -> IO ()
forall a. Ptr a -> IO ()
SP.freeMem
instance CallocPtr AudioDownmixMeta where
    boxedPtrCalloc :: IO (Ptr AudioDownmixMeta)
boxedPtrCalloc = Int -> IO (Ptr AudioDownmixMeta)
forall a. Int -> IO (Ptr a)
callocBytes Int
48


-- | Construct a `AudioDownmixMeta` struct initialized to zero.
newZeroAudioDownmixMeta :: MonadIO m => m AudioDownmixMeta
newZeroAudioDownmixMeta :: forall (m :: * -> *). MonadIO m => m AudioDownmixMeta
newZeroAudioDownmixMeta = IO AudioDownmixMeta -> m AudioDownmixMeta
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO AudioDownmixMeta -> m AudioDownmixMeta)
-> IO AudioDownmixMeta -> m AudioDownmixMeta
forall a b. (a -> b) -> a -> b
$ IO (Ptr AudioDownmixMeta)
forall a. CallocPtr a => IO (Ptr a)
boxedPtrCalloc IO (Ptr AudioDownmixMeta)
-> (Ptr AudioDownmixMeta -> IO AudioDownmixMeta)
-> IO AudioDownmixMeta
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ManagedPtr AudioDownmixMeta -> AudioDownmixMeta)
-> Ptr AudioDownmixMeta -> IO AudioDownmixMeta
forall a.
(HasCallStack, BoxedPtr a) =>
(ManagedPtr a -> a) -> Ptr a -> IO a
wrapPtr ManagedPtr AudioDownmixMeta -> AudioDownmixMeta
AudioDownmixMeta

instance tag ~ 'AttrSet => Constructible AudioDownmixMeta tag where
    new :: forall (m :: * -> *).
MonadIO m =>
(ManagedPtr AudioDownmixMeta -> AudioDownmixMeta)
-> [AttrOp AudioDownmixMeta tag] -> m AudioDownmixMeta
new ManagedPtr AudioDownmixMeta -> AudioDownmixMeta
_ [AttrOp AudioDownmixMeta tag]
attrs = do
        AudioDownmixMeta
o <- m AudioDownmixMeta
forall (m :: * -> *). MonadIO m => m AudioDownmixMeta
newZeroAudioDownmixMeta
        AudioDownmixMeta -> [AttrOp AudioDownmixMeta 'AttrSet] -> m ()
forall o (m :: * -> *).
MonadIO m =>
o -> [AttrOp o 'AttrSet] -> m ()
GI.Attributes.set AudioDownmixMeta
o [AttrOp AudioDownmixMeta tag]
[AttrOp AudioDownmixMeta 'AttrSet]
attrs
        AudioDownmixMeta -> m AudioDownmixMeta
forall (m :: * -> *) a. Monad m => a -> m a
return AudioDownmixMeta
o


-- | Get the value of the “@meta@” field.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.get' audioDownmixMeta #meta
-- @
getAudioDownmixMetaMeta :: MonadIO m => AudioDownmixMeta -> m Gst.Meta.Meta
getAudioDownmixMetaMeta :: forall (m :: * -> *). MonadIO m => AudioDownmixMeta -> m Meta
getAudioDownmixMetaMeta AudioDownmixMeta
s = IO Meta -> m Meta
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Meta -> m Meta) -> IO Meta -> m Meta
forall a b. (a -> b) -> a -> b
$ AudioDownmixMeta -> (Ptr AudioDownmixMeta -> IO Meta) -> IO Meta
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr AudioDownmixMeta
s ((Ptr AudioDownmixMeta -> IO Meta) -> IO Meta)
-> (Ptr AudioDownmixMeta -> IO Meta) -> IO Meta
forall a b. (a -> b) -> a -> b
$ \Ptr AudioDownmixMeta
ptr -> do
    let val :: Ptr Meta
val = Ptr AudioDownmixMeta
ptr Ptr AudioDownmixMeta -> Int -> Ptr Meta
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: (Ptr Gst.Meta.Meta)
    Meta
val' <- ((ManagedPtr Meta -> Meta) -> Ptr Meta -> IO Meta
forall a.
(HasCallStack, BoxedPtr a) =>
(ManagedPtr a -> a) -> Ptr a -> IO a
newPtr ManagedPtr Meta -> Meta
Gst.Meta.Meta) Ptr Meta
val
    Meta -> IO Meta
forall (m :: * -> *) a. Monad m => a -> m a
return Meta
val'

#if defined(ENABLE_OVERLOADING)
data AudioDownmixMetaMetaFieldInfo
instance AttrInfo AudioDownmixMetaMetaFieldInfo where
    type AttrBaseTypeConstraint AudioDownmixMetaMetaFieldInfo = (~) AudioDownmixMeta
    type AttrAllowedOps AudioDownmixMetaMetaFieldInfo = '[ 'AttrGet]
    type AttrSetTypeConstraint AudioDownmixMetaMetaFieldInfo = (~) (Ptr Gst.Meta.Meta)
    type AttrTransferTypeConstraint AudioDownmixMetaMetaFieldInfo = (~)(Ptr Gst.Meta.Meta)
    type AttrTransferType AudioDownmixMetaMetaFieldInfo = (Ptr Gst.Meta.Meta)
    type AttrGetType AudioDownmixMetaMetaFieldInfo = Gst.Meta.Meta
    type AttrLabel AudioDownmixMetaMetaFieldInfo = "meta"
    type AttrOrigin AudioDownmixMetaMetaFieldInfo = AudioDownmixMeta
    attrGet = getAudioDownmixMetaMeta
    attrSet = undefined
    attrConstruct = undefined
    attrClear = undefined
    attrTransfer = undefined
    dbgAttrInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.GstAudio.Structs.AudioDownmixMeta.meta"
        , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gstaudio-1.0.24/docs/GI-GstAudio-Structs-AudioDownmixMeta.html#g:attr:meta"
        })

audioDownmixMeta_meta :: AttrLabelProxy "meta"
audioDownmixMeta_meta = AttrLabelProxy

#endif


-- | Get the value of the “@from_position@” field.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.get' audioDownmixMeta #fromPosition
-- @
getAudioDownmixMetaFromPosition :: MonadIO m => AudioDownmixMeta -> m GstAudio.Enums.AudioChannelPosition
getAudioDownmixMetaFromPosition :: forall (m :: * -> *).
MonadIO m =>
AudioDownmixMeta -> m AudioChannelPosition
getAudioDownmixMetaFromPosition AudioDownmixMeta
s = IO AudioChannelPosition -> m AudioChannelPosition
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO AudioChannelPosition -> m AudioChannelPosition)
-> IO AudioChannelPosition -> m AudioChannelPosition
forall a b. (a -> b) -> a -> b
$ AudioDownmixMeta
-> (Ptr AudioDownmixMeta -> IO AudioChannelPosition)
-> IO AudioChannelPosition
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr AudioDownmixMeta
s ((Ptr AudioDownmixMeta -> IO AudioChannelPosition)
 -> IO AudioChannelPosition)
-> (Ptr AudioDownmixMeta -> IO AudioChannelPosition)
-> IO AudioChannelPosition
forall a b. (a -> b) -> a -> b
$ \Ptr AudioDownmixMeta
ptr -> do
    CInt
val <- Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek (Ptr AudioDownmixMeta
ptr Ptr AudioDownmixMeta -> Int -> Ptr CInt
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16) :: IO CInt
    let val' :: AudioChannelPosition
val' = (Int -> AudioChannelPosition
forall a. Enum a => Int -> a
toEnum (Int -> AudioChannelPosition)
-> (CInt -> Int) -> CInt -> AudioChannelPosition
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral) CInt
val
    AudioChannelPosition -> IO AudioChannelPosition
forall (m :: * -> *) a. Monad m => a -> m a
return AudioChannelPosition
val'

-- | Set the value of the “@from_position@” field.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.set' audioDownmixMeta [ #fromPosition 'Data.GI.Base.Attributes.:=' value ]
-- @
setAudioDownmixMetaFromPosition :: MonadIO m => AudioDownmixMeta -> GstAudio.Enums.AudioChannelPosition -> m ()
setAudioDownmixMetaFromPosition :: forall (m :: * -> *).
MonadIO m =>
AudioDownmixMeta -> AudioChannelPosition -> m ()
setAudioDownmixMetaFromPosition AudioDownmixMeta
s AudioChannelPosition
val = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ AudioDownmixMeta -> (Ptr AudioDownmixMeta -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr AudioDownmixMeta
s ((Ptr AudioDownmixMeta -> IO ()) -> IO ())
-> (Ptr AudioDownmixMeta -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr AudioDownmixMeta
ptr -> do
    let val' :: CInt
val' = (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CInt)
-> (AudioChannelPosition -> Int) -> AudioChannelPosition -> CInt
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AudioChannelPosition -> Int
forall a. Enum a => a -> Int
fromEnum) AudioChannelPosition
val
    Ptr CInt -> CInt -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr AudioDownmixMeta
ptr Ptr AudioDownmixMeta -> Int -> Ptr CInt
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16) (CInt
val' :: CInt)

#if defined(ENABLE_OVERLOADING)
data AudioDownmixMetaFromPositionFieldInfo
instance AttrInfo AudioDownmixMetaFromPositionFieldInfo where
    type AttrBaseTypeConstraint AudioDownmixMetaFromPositionFieldInfo = (~) AudioDownmixMeta
    type AttrAllowedOps AudioDownmixMetaFromPositionFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint AudioDownmixMetaFromPositionFieldInfo = (~) GstAudio.Enums.AudioChannelPosition
    type AttrTransferTypeConstraint AudioDownmixMetaFromPositionFieldInfo = (~)GstAudio.Enums.AudioChannelPosition
    type AttrTransferType AudioDownmixMetaFromPositionFieldInfo = GstAudio.Enums.AudioChannelPosition
    type AttrGetType AudioDownmixMetaFromPositionFieldInfo = GstAudio.Enums.AudioChannelPosition
    type AttrLabel AudioDownmixMetaFromPositionFieldInfo = "from_position"
    type AttrOrigin AudioDownmixMetaFromPositionFieldInfo = AudioDownmixMeta
    attrGet = getAudioDownmixMetaFromPosition
    attrSet = setAudioDownmixMetaFromPosition
    attrConstruct = undefined
    attrClear = undefined
    attrTransfer _ v = do
        return v
    dbgAttrInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.GstAudio.Structs.AudioDownmixMeta.fromPosition"
        , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gstaudio-1.0.24/docs/GI-GstAudio-Structs-AudioDownmixMeta.html#g:attr:fromPosition"
        })

audioDownmixMeta_fromPosition :: AttrLabelProxy "fromPosition"
audioDownmixMeta_fromPosition = AttrLabelProxy

#endif


-- | Get the value of the “@to_position@” field.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.get' audioDownmixMeta #toPosition
-- @
getAudioDownmixMetaToPosition :: MonadIO m => AudioDownmixMeta -> m GstAudio.Enums.AudioChannelPosition
getAudioDownmixMetaToPosition :: forall (m :: * -> *).
MonadIO m =>
AudioDownmixMeta -> m AudioChannelPosition
getAudioDownmixMetaToPosition AudioDownmixMeta
s = IO AudioChannelPosition -> m AudioChannelPosition
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO AudioChannelPosition -> m AudioChannelPosition)
-> IO AudioChannelPosition -> m AudioChannelPosition
forall a b. (a -> b) -> a -> b
$ AudioDownmixMeta
-> (Ptr AudioDownmixMeta -> IO AudioChannelPosition)
-> IO AudioChannelPosition
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr AudioDownmixMeta
s ((Ptr AudioDownmixMeta -> IO AudioChannelPosition)
 -> IO AudioChannelPosition)
-> (Ptr AudioDownmixMeta -> IO AudioChannelPosition)
-> IO AudioChannelPosition
forall a b. (a -> b) -> a -> b
$ \Ptr AudioDownmixMeta
ptr -> do
    CInt
val <- Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek (Ptr AudioDownmixMeta
ptr Ptr AudioDownmixMeta -> Int -> Ptr CInt
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24) :: IO CInt
    let val' :: AudioChannelPosition
val' = (Int -> AudioChannelPosition
forall a. Enum a => Int -> a
toEnum (Int -> AudioChannelPosition)
-> (CInt -> Int) -> CInt -> AudioChannelPosition
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral) CInt
val
    AudioChannelPosition -> IO AudioChannelPosition
forall (m :: * -> *) a. Monad m => a -> m a
return AudioChannelPosition
val'

-- | Set the value of the “@to_position@” field.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.set' audioDownmixMeta [ #toPosition 'Data.GI.Base.Attributes.:=' value ]
-- @
setAudioDownmixMetaToPosition :: MonadIO m => AudioDownmixMeta -> GstAudio.Enums.AudioChannelPosition -> m ()
setAudioDownmixMetaToPosition :: forall (m :: * -> *).
MonadIO m =>
AudioDownmixMeta -> AudioChannelPosition -> m ()
setAudioDownmixMetaToPosition AudioDownmixMeta
s AudioChannelPosition
val = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ AudioDownmixMeta -> (Ptr AudioDownmixMeta -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr AudioDownmixMeta
s ((Ptr AudioDownmixMeta -> IO ()) -> IO ())
-> (Ptr AudioDownmixMeta -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr AudioDownmixMeta
ptr -> do
    let val' :: CInt
val' = (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CInt)
-> (AudioChannelPosition -> Int) -> AudioChannelPosition -> CInt
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AudioChannelPosition -> Int
forall a. Enum a => a -> Int
fromEnum) AudioChannelPosition
val
    Ptr CInt -> CInt -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr AudioDownmixMeta
ptr Ptr AudioDownmixMeta -> Int -> Ptr CInt
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24) (CInt
val' :: CInt)

#if defined(ENABLE_OVERLOADING)
data AudioDownmixMetaToPositionFieldInfo
instance AttrInfo AudioDownmixMetaToPositionFieldInfo where
    type AttrBaseTypeConstraint AudioDownmixMetaToPositionFieldInfo = (~) AudioDownmixMeta
    type AttrAllowedOps AudioDownmixMetaToPositionFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint AudioDownmixMetaToPositionFieldInfo = (~) GstAudio.Enums.AudioChannelPosition
    type AttrTransferTypeConstraint AudioDownmixMetaToPositionFieldInfo = (~)GstAudio.Enums.AudioChannelPosition
    type AttrTransferType AudioDownmixMetaToPositionFieldInfo = GstAudio.Enums.AudioChannelPosition
    type AttrGetType AudioDownmixMetaToPositionFieldInfo = GstAudio.Enums.AudioChannelPosition
    type AttrLabel AudioDownmixMetaToPositionFieldInfo = "to_position"
    type AttrOrigin AudioDownmixMetaToPositionFieldInfo = AudioDownmixMeta
    attrGet = getAudioDownmixMetaToPosition
    attrSet = setAudioDownmixMetaToPosition
    attrConstruct = undefined
    attrClear = undefined
    attrTransfer _ v = do
        return v
    dbgAttrInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.GstAudio.Structs.AudioDownmixMeta.toPosition"
        , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gstaudio-1.0.24/docs/GI-GstAudio-Structs-AudioDownmixMeta.html#g:attr:toPosition"
        })

audioDownmixMeta_toPosition :: AttrLabelProxy "toPosition"
audioDownmixMeta_toPosition = AttrLabelProxy

#endif


-- | Get the value of the “@from_channels@” field.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.get' audioDownmixMeta #fromChannels
-- @
getAudioDownmixMetaFromChannels :: MonadIO m => AudioDownmixMeta -> m Int32
getAudioDownmixMetaFromChannels :: forall (m :: * -> *). MonadIO m => AudioDownmixMeta -> m Int32
getAudioDownmixMetaFromChannels AudioDownmixMeta
s = IO Int32 -> m Int32
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int32 -> m Int32) -> IO Int32 -> m Int32
forall a b. (a -> b) -> a -> b
$ AudioDownmixMeta -> (Ptr AudioDownmixMeta -> IO Int32) -> IO Int32
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr AudioDownmixMeta
s ((Ptr AudioDownmixMeta -> IO Int32) -> IO Int32)
-> (Ptr AudioDownmixMeta -> IO Int32) -> IO Int32
forall a b. (a -> b) -> a -> b
$ \Ptr AudioDownmixMeta
ptr -> do
    Int32
val <- Ptr Int32 -> IO Int32
forall a. Storable a => Ptr a -> IO a
peek (Ptr AudioDownmixMeta
ptr Ptr AudioDownmixMeta -> Int -> Ptr Int32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32) :: IO Int32
    Int32 -> IO Int32
forall (m :: * -> *) a. Monad m => a -> m a
return Int32
val

-- | Set the value of the “@from_channels@” field.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.set' audioDownmixMeta [ #fromChannels 'Data.GI.Base.Attributes.:=' value ]
-- @
setAudioDownmixMetaFromChannels :: MonadIO m => AudioDownmixMeta -> Int32 -> m ()
setAudioDownmixMetaFromChannels :: forall (m :: * -> *).
MonadIO m =>
AudioDownmixMeta -> Int32 -> m ()
setAudioDownmixMetaFromChannels AudioDownmixMeta
s Int32
val = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ AudioDownmixMeta -> (Ptr AudioDownmixMeta -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr AudioDownmixMeta
s ((Ptr AudioDownmixMeta -> IO ()) -> IO ())
-> (Ptr AudioDownmixMeta -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr AudioDownmixMeta
ptr -> do
    Ptr Int32 -> Int32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr AudioDownmixMeta
ptr Ptr AudioDownmixMeta -> Int -> Ptr Int32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32) (Int32
val :: Int32)

#if defined(ENABLE_OVERLOADING)
data AudioDownmixMetaFromChannelsFieldInfo
instance AttrInfo AudioDownmixMetaFromChannelsFieldInfo where
    type AttrBaseTypeConstraint AudioDownmixMetaFromChannelsFieldInfo = (~) AudioDownmixMeta
    type AttrAllowedOps AudioDownmixMetaFromChannelsFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint AudioDownmixMetaFromChannelsFieldInfo = (~) Int32
    type AttrTransferTypeConstraint AudioDownmixMetaFromChannelsFieldInfo = (~)Int32
    type AttrTransferType AudioDownmixMetaFromChannelsFieldInfo = Int32
    type AttrGetType AudioDownmixMetaFromChannelsFieldInfo = Int32
    type AttrLabel AudioDownmixMetaFromChannelsFieldInfo = "from_channels"
    type AttrOrigin AudioDownmixMetaFromChannelsFieldInfo = AudioDownmixMeta
    attrGet = getAudioDownmixMetaFromChannels
    attrSet = setAudioDownmixMetaFromChannels
    attrConstruct = undefined
    attrClear = undefined
    attrTransfer _ v = do
        return v
    dbgAttrInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.GstAudio.Structs.AudioDownmixMeta.fromChannels"
        , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gstaudio-1.0.24/docs/GI-GstAudio-Structs-AudioDownmixMeta.html#g:attr:fromChannels"
        })

audioDownmixMeta_fromChannels :: AttrLabelProxy "fromChannels"
audioDownmixMeta_fromChannels = AttrLabelProxy

#endif


-- | Get the value of the “@to_channels@” field.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.get' audioDownmixMeta #toChannels
-- @
getAudioDownmixMetaToChannels :: MonadIO m => AudioDownmixMeta -> m Int32
getAudioDownmixMetaToChannels :: forall (m :: * -> *). MonadIO m => AudioDownmixMeta -> m Int32
getAudioDownmixMetaToChannels AudioDownmixMeta
s = IO Int32 -> m Int32
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int32 -> m Int32) -> IO Int32 -> m Int32
forall a b. (a -> b) -> a -> b
$ AudioDownmixMeta -> (Ptr AudioDownmixMeta -> IO Int32) -> IO Int32
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr AudioDownmixMeta
s ((Ptr AudioDownmixMeta -> IO Int32) -> IO Int32)
-> (Ptr AudioDownmixMeta -> IO Int32) -> IO Int32
forall a b. (a -> b) -> a -> b
$ \Ptr AudioDownmixMeta
ptr -> do
    Int32
val <- Ptr Int32 -> IO Int32
forall a. Storable a => Ptr a -> IO a
peek (Ptr AudioDownmixMeta
ptr Ptr AudioDownmixMeta -> Int -> Ptr Int32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
36) :: IO Int32
    Int32 -> IO Int32
forall (m :: * -> *) a. Monad m => a -> m a
return Int32
val

-- | Set the value of the “@to_channels@” field.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.set' audioDownmixMeta [ #toChannels 'Data.GI.Base.Attributes.:=' value ]
-- @
setAudioDownmixMetaToChannels :: MonadIO m => AudioDownmixMeta -> Int32 -> m ()
setAudioDownmixMetaToChannels :: forall (m :: * -> *).
MonadIO m =>
AudioDownmixMeta -> Int32 -> m ()
setAudioDownmixMetaToChannels AudioDownmixMeta
s Int32
val = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ AudioDownmixMeta -> (Ptr AudioDownmixMeta -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr AudioDownmixMeta
s ((Ptr AudioDownmixMeta -> IO ()) -> IO ())
-> (Ptr AudioDownmixMeta -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr AudioDownmixMeta
ptr -> do
    Ptr Int32 -> Int32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr AudioDownmixMeta
ptr Ptr AudioDownmixMeta -> Int -> Ptr Int32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
36) (Int32
val :: Int32)

#if defined(ENABLE_OVERLOADING)
data AudioDownmixMetaToChannelsFieldInfo
instance AttrInfo AudioDownmixMetaToChannelsFieldInfo where
    type AttrBaseTypeConstraint AudioDownmixMetaToChannelsFieldInfo = (~) AudioDownmixMeta
    type AttrAllowedOps AudioDownmixMetaToChannelsFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint AudioDownmixMetaToChannelsFieldInfo = (~) Int32
    type AttrTransferTypeConstraint AudioDownmixMetaToChannelsFieldInfo = (~)Int32
    type AttrTransferType AudioDownmixMetaToChannelsFieldInfo = Int32
    type AttrGetType AudioDownmixMetaToChannelsFieldInfo = Int32
    type AttrLabel AudioDownmixMetaToChannelsFieldInfo = "to_channels"
    type AttrOrigin AudioDownmixMetaToChannelsFieldInfo = AudioDownmixMeta
    attrGet = getAudioDownmixMetaToChannels
    attrSet = setAudioDownmixMetaToChannels
    attrConstruct = undefined
    attrClear = undefined
    attrTransfer _ v = do
        return v
    dbgAttrInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.GstAudio.Structs.AudioDownmixMeta.toChannels"
        , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gstaudio-1.0.24/docs/GI-GstAudio-Structs-AudioDownmixMeta.html#g:attr:toChannels"
        })

audioDownmixMeta_toChannels :: AttrLabelProxy "toChannels"
audioDownmixMeta_toChannels = AttrLabelProxy

#endif


-- | Get the value of the “@matrix@” field.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.get' audioDownmixMeta #matrix
-- @
getAudioDownmixMetaMatrix :: MonadIO m => AudioDownmixMeta -> m Float
getAudioDownmixMetaMatrix :: forall (m :: * -> *). MonadIO m => AudioDownmixMeta -> m Float
getAudioDownmixMetaMatrix AudioDownmixMeta
s = IO Float -> m Float
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Float -> m Float) -> IO Float -> m Float
forall a b. (a -> b) -> a -> b
$ AudioDownmixMeta -> (Ptr AudioDownmixMeta -> IO Float) -> IO Float
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr AudioDownmixMeta
s ((Ptr AudioDownmixMeta -> IO Float) -> IO Float)
-> (Ptr AudioDownmixMeta -> IO Float) -> IO Float
forall a b. (a -> b) -> a -> b
$ \Ptr AudioDownmixMeta
ptr -> do
    CFloat
val <- Ptr CFloat -> IO CFloat
forall a. Storable a => Ptr a -> IO a
peek (Ptr AudioDownmixMeta
ptr Ptr AudioDownmixMeta -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40) :: IO CFloat
    let val' :: Float
val' = CFloat -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac CFloat
val
    Float -> IO Float
forall (m :: * -> *) a. Monad m => a -> m a
return Float
val'

-- | Set the value of the “@matrix@” field.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.set' audioDownmixMeta [ #matrix 'Data.GI.Base.Attributes.:=' value ]
-- @
setAudioDownmixMetaMatrix :: MonadIO m => AudioDownmixMeta -> Float -> m ()
setAudioDownmixMetaMatrix :: forall (m :: * -> *).
MonadIO m =>
AudioDownmixMeta -> Float -> m ()
setAudioDownmixMetaMatrix AudioDownmixMeta
s Float
val = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ AudioDownmixMeta -> (Ptr AudioDownmixMeta -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr AudioDownmixMeta
s ((Ptr AudioDownmixMeta -> IO ()) -> IO ())
-> (Ptr AudioDownmixMeta -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr AudioDownmixMeta
ptr -> do
    let val' :: CFloat
val' = Float -> CFloat
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
val
    Ptr CFloat -> CFloat -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr AudioDownmixMeta
ptr Ptr AudioDownmixMeta -> Int -> Ptr CFloat
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
40) (CFloat
val' :: CFloat)

#if defined(ENABLE_OVERLOADING)
data AudioDownmixMetaMatrixFieldInfo
instance AttrInfo AudioDownmixMetaMatrixFieldInfo where
    type AttrBaseTypeConstraint AudioDownmixMetaMatrixFieldInfo = (~) AudioDownmixMeta
    type AttrAllowedOps AudioDownmixMetaMatrixFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint AudioDownmixMetaMatrixFieldInfo = (~) Float
    type AttrTransferTypeConstraint AudioDownmixMetaMatrixFieldInfo = (~)Float
    type AttrTransferType AudioDownmixMetaMatrixFieldInfo = Float
    type AttrGetType AudioDownmixMetaMatrixFieldInfo = Float
    type AttrLabel AudioDownmixMetaMatrixFieldInfo = "matrix"
    type AttrOrigin AudioDownmixMetaMatrixFieldInfo = AudioDownmixMeta
    attrGet = getAudioDownmixMetaMatrix
    attrSet = setAudioDownmixMetaMatrix
    attrConstruct = undefined
    attrClear = undefined
    attrTransfer _ v = do
        return v
    dbgAttrInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.GstAudio.Structs.AudioDownmixMeta.matrix"
        , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gstaudio-1.0.24/docs/GI-GstAudio-Structs-AudioDownmixMeta.html#g:attr:matrix"
        })

audioDownmixMeta_matrix :: AttrLabelProxy "matrix"
audioDownmixMeta_matrix = AttrLabelProxy

#endif



#if defined(ENABLE_OVERLOADING)
instance O.HasAttributeList AudioDownmixMeta
type instance O.AttributeList AudioDownmixMeta = AudioDownmixMetaAttributeList
type AudioDownmixMetaAttributeList = ('[ '("meta", AudioDownmixMetaMetaFieldInfo), '("fromPosition", AudioDownmixMetaFromPositionFieldInfo), '("toPosition", AudioDownmixMetaToPositionFieldInfo), '("fromChannels", AudioDownmixMetaFromChannelsFieldInfo), '("toChannels", AudioDownmixMetaToChannelsFieldInfo), '("matrix", AudioDownmixMetaMatrixFieldInfo)] :: [(Symbol, *)])
#endif

-- method AudioDownmixMeta::get_info
-- method type : MemberFunction
-- Args: []
-- Lengths: []
-- returnType: Just (TInterface Name { namespace = "Gst" , name = "MetaInfo" })
-- throws : False
-- Skip return : False

foreign import ccall "gst_audio_downmix_meta_get_info" gst_audio_downmix_meta_get_info :: 
    IO (Ptr Gst.MetaInfo.MetaInfo)

-- | /No description available in the introspection data./
audioDownmixMetaGetInfo ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    m Gst.MetaInfo.MetaInfo
audioDownmixMetaGetInfo :: forall (m :: * -> *). (HasCallStack, MonadIO m) => m MetaInfo
audioDownmixMetaGetInfo  = IO MetaInfo -> m MetaInfo
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO MetaInfo -> m MetaInfo) -> IO MetaInfo -> m MetaInfo
forall a b. (a -> b) -> a -> b
$ do
    Ptr MetaInfo
result <- IO (Ptr MetaInfo)
gst_audio_downmix_meta_get_info
    Text -> Ptr MetaInfo -> IO ()
forall a. HasCallStack => Text -> Ptr a -> IO ()
checkUnexpectedReturnNULL Text
"audioDownmixMetaGetInfo" Ptr MetaInfo
result
    MetaInfo
result' <- ((ManagedPtr MetaInfo -> MetaInfo) -> Ptr MetaInfo -> IO MetaInfo
forall a.
(HasCallStack, BoxedPtr a) =>
(ManagedPtr a -> a) -> Ptr a -> IO a
newPtr ManagedPtr MetaInfo -> MetaInfo
Gst.MetaInfo.MetaInfo) Ptr MetaInfo
result
    MetaInfo -> IO MetaInfo
forall (m :: * -> *) a. Monad m => a -> m a
return MetaInfo
result'

#if defined(ENABLE_OVERLOADING)
#endif

#if defined(ENABLE_OVERLOADING)
type family ResolveAudioDownmixMetaMethod (t :: Symbol) (o :: *) :: * where
    ResolveAudioDownmixMetaMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveAudioDownmixMetaMethod t AudioDownmixMeta, O.OverloadedMethod info AudioDownmixMeta p) => OL.IsLabel t (AudioDownmixMeta -> p) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.overloadedMethod @info
#else
    fromLabel _ = O.overloadedMethod @info
#endif

#if MIN_VERSION_base(4,13,0)
instance (info ~ ResolveAudioDownmixMetaMethod t AudioDownmixMeta, O.OverloadedMethod info AudioDownmixMeta p, R.HasField t AudioDownmixMeta p) => R.HasField t AudioDownmixMeta p where
    getField = O.overloadedMethod @info

#endif

instance (info ~ ResolveAudioDownmixMetaMethod t AudioDownmixMeta, O.OverloadedMethodInfo info AudioDownmixMeta) => OL.IsLabel t (O.MethodProxy info AudioDownmixMeta) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.MethodProxy
#else
    fromLabel _ = O.MethodProxy
#endif

#endif