{-# LANGUAGE TypeApplications #-}


-- | Copyright  : Will Thompson and Iñaki García Etxebarria
-- License    : LGPL-2.1
-- Maintainer : Iñaki García Etxebarria
-- 
-- Meta containing Audio Level Indication: https:\/\/tools.ietf.org\/html\/rfc6464
-- 
-- /Since: 1.20/

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

module GI.GstAudio.Structs.AudioLevelMeta
    ( 

-- * Exported types
    AudioLevelMeta(..)                      ,
    newZeroAudioLevelMeta                   ,


 -- * Methods

#if defined(ENABLE_OVERLOADING)
    ResolveAudioLevelMetaMethod             ,
#endif

-- ** getInfo #method:getInfo#

    audioLevelMetaGetInfo                   ,




 -- * Properties


-- ** level #attr:level#
-- | the -dBov from 0-127 (127 is silence).

#if defined(ENABLE_OVERLOADING)
    audioLevelMeta_level                    ,
#endif
    getAudioLevelMetaLevel                  ,
    setAudioLevelMetaLevel                  ,


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

#if defined(ENABLE_OVERLOADING)
    audioLevelMeta_meta                     ,
#endif
    getAudioLevelMetaMeta                   ,


-- ** voiceActivity #attr:voiceActivity#
-- | whether the buffer contains voice activity

#if defined(ENABLE_OVERLOADING)
    audioLevelMeta_voiceActivity            ,
#endif
    getAudioLevelMetaVoiceActivity          ,
    setAudioLevelMetaVoiceActivity          ,




    ) 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.GHashTable as B.GHT
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

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

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

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


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

instance tag ~ 'AttrSet => Constructible AudioLevelMeta tag where
    new :: forall (m :: * -> *).
MonadIO m =>
(ManagedPtr AudioLevelMeta -> AudioLevelMeta)
-> [AttrOp AudioLevelMeta tag] -> m AudioLevelMeta
new ManagedPtr AudioLevelMeta -> AudioLevelMeta
_ [AttrOp AudioLevelMeta tag]
attrs = do
        AudioLevelMeta
o <- m AudioLevelMeta
forall (m :: * -> *). MonadIO m => m AudioLevelMeta
newZeroAudioLevelMeta
        AudioLevelMeta -> [AttrOp AudioLevelMeta 'AttrSet] -> m ()
forall o (m :: * -> *).
MonadIO m =>
o -> [AttrOp o 'AttrSet] -> m ()
GI.Attributes.set AudioLevelMeta
o [AttrOp AudioLevelMeta tag]
[AttrOp AudioLevelMeta 'AttrSet]
attrs
        AudioLevelMeta -> m AudioLevelMeta
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return AudioLevelMeta
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' audioLevelMeta #meta
-- @
getAudioLevelMetaMeta :: MonadIO m => AudioLevelMeta -> m Gst.Meta.Meta
getAudioLevelMetaMeta :: forall (m :: * -> *). MonadIO m => AudioLevelMeta -> m Meta
getAudioLevelMetaMeta AudioLevelMeta
s = IO Meta -> m Meta
forall a. IO a -> m a
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
$ AudioLevelMeta -> (Ptr AudioLevelMeta -> IO Meta) -> IO Meta
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr AudioLevelMeta
s ((Ptr AudioLevelMeta -> IO Meta) -> IO Meta)
-> (Ptr AudioLevelMeta -> IO Meta) -> IO Meta
forall a b. (a -> b) -> a -> b
$ \Ptr AudioLevelMeta
ptr -> do
    let val :: Ptr Meta
val = Ptr AudioLevelMeta
ptr Ptr AudioLevelMeta -> 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 a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Meta
val'

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

audioLevelMeta_meta :: AttrLabelProxy "meta"
audioLevelMeta_meta = AttrLabelProxy

#endif


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

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

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

audioLevelMeta_level :: AttrLabelProxy "level"
audioLevelMeta_level = AttrLabelProxy

#endif


-- | Get the value of the “@voice_activity@” field.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.get' audioLevelMeta #voiceActivity
-- @
getAudioLevelMetaVoiceActivity :: MonadIO m => AudioLevelMeta -> m Bool
getAudioLevelMetaVoiceActivity :: forall (m :: * -> *). MonadIO m => AudioLevelMeta -> m Bool
getAudioLevelMetaVoiceActivity AudioLevelMeta
s = IO Bool -> m Bool
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Bool -> m Bool) -> IO Bool -> m Bool
forall a b. (a -> b) -> a -> b
$ AudioLevelMeta -> (Ptr AudioLevelMeta -> IO Bool) -> IO Bool
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr AudioLevelMeta
s ((Ptr AudioLevelMeta -> IO Bool) -> IO Bool)
-> (Ptr AudioLevelMeta -> IO Bool) -> IO Bool
forall a b. (a -> b) -> a -> b
$ \Ptr AudioLevelMeta
ptr -> do
    CInt
val <- Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek (Ptr AudioLevelMeta
ptr Ptr AudioLevelMeta -> Int -> Ptr CInt
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20) :: IO CInt
    let val' :: Bool
val' = (CInt -> CInt -> Bool
forall a. Eq a => a -> a -> Bool
/= CInt
0) CInt
val
    Bool -> IO Bool
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Bool
val'

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

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

audioLevelMeta_voiceActivity :: AttrLabelProxy "voiceActivity"
audioLevelMeta_voiceActivity = AttrLabelProxy

#endif



#if defined(ENABLE_OVERLOADING)
instance O.HasAttributeList AudioLevelMeta
type instance O.AttributeList AudioLevelMeta = AudioLevelMetaAttributeList
type AudioLevelMetaAttributeList = ('[ '("meta", AudioLevelMetaMetaFieldInfo), '("level", AudioLevelMetaLevelFieldInfo), '("voiceActivity", AudioLevelMetaVoiceActivityFieldInfo)] :: [(Symbol, *)])
#endif

-- method AudioLevelMeta::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_level_meta_get_info" gst_audio_level_meta_get_info :: 
    IO (Ptr Gst.MetaInfo.MetaInfo)

-- | Return the t'GI.Gst.Structs.MetaInfo.MetaInfo' associated with t'GI.GstAudio.Structs.AudioLevelMeta.AudioLevelMeta'.
-- 
-- /Since: 1.20/
audioLevelMetaGetInfo ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    m Gst.MetaInfo.MetaInfo
    -- ^ __Returns:__ a t'GI.Gst.Structs.MetaInfo.MetaInfo'
audioLevelMetaGetInfo :: forall (m :: * -> *). (HasCallStack, MonadIO m) => m MetaInfo
audioLevelMetaGetInfo  = IO MetaInfo -> m MetaInfo
forall a. IO a -> m a
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_level_meta_get_info
    Text -> Ptr MetaInfo -> IO ()
forall a. HasCallStack => Text -> Ptr a -> IO ()
checkUnexpectedReturnNULL Text
"audioLevelMetaGetInfo" 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 a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return MetaInfo
result'

#if defined(ENABLE_OVERLOADING)
#endif

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

instance (info ~ ResolveAudioLevelMetaMethod t AudioLevelMeta, O.OverloadedMethod info AudioLevelMeta p) => OL.IsLabel t (AudioLevelMeta -> 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 ~ ResolveAudioLevelMetaMethod t AudioLevelMeta, O.OverloadedMethod info AudioLevelMeta p, R.HasField t AudioLevelMeta p) => R.HasField t AudioLevelMeta p where
    getField = O.overloadedMethod @info

#endif

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

#endif