{- | Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte License : LGPL-2.1 Maintainer : Iñaki García Etxebarria (garetxe@gmail.com) 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 @to_channels times @from_channels 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. -} module GI.GstAudio.Structs.AudioDownmixMeta ( -- * Exported types AudioDownmixMeta(..) , newZeroAudioDownmixMeta , noAudioDownmixMeta , -- * Methods -- ** audioDownmixMetaGetInfo audioDownmixMetaGetInfo , -- * Properties -- ** FromChannels audioDownmixMetaReadFromChannels , -- ** FromPosition audioDownmixMetaReadFromPosition , -- ** Matrix audioDownmixMetaReadMatrix , -- ** Meta audioDownmixMetaReadMeta , -- ** ToChannels audioDownmixMetaReadToChannels , -- ** ToPosition audioDownmixMetaReadToPosition , ) 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 AudioDownmixMeta = AudioDownmixMeta (ForeignPtr AudioDownmixMeta) -- | Construct a `AudioDownmixMeta` struct initialized to zero. newZeroAudioDownmixMeta :: MonadIO m => m AudioDownmixMeta newZeroAudioDownmixMeta = liftIO $ callocBytes 48 >>= wrapPtr AudioDownmixMeta noAudioDownmixMeta :: Maybe AudioDownmixMeta noAudioDownmixMeta = Nothing audioDownmixMetaReadMeta :: AudioDownmixMeta -> IO Gst.Meta audioDownmixMetaReadMeta s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 0) :: IO (Ptr Gst.Meta) val' <- (newPtr 16 Gst.Meta) val return val' audioDownmixMetaReadFromPosition :: AudioDownmixMeta -> IO AudioChannelPosition audioDownmixMetaReadFromPosition s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 16) :: IO CUInt let val' = (toEnum . fromIntegral) val return val' audioDownmixMetaReadToPosition :: AudioDownmixMeta -> IO AudioChannelPosition audioDownmixMetaReadToPosition s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 24) :: IO CUInt let val' = (toEnum . fromIntegral) val return val' audioDownmixMetaReadFromChannels :: AudioDownmixMeta -> IO Int32 audioDownmixMetaReadFromChannels s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 32) :: IO Int32 return val audioDownmixMetaReadToChannels :: AudioDownmixMeta -> IO Int32 audioDownmixMetaReadToChannels s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 36) :: IO Int32 return val audioDownmixMetaReadMatrix :: AudioDownmixMeta -> IO Float audioDownmixMetaReadMatrix s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 40) :: IO CFloat let val' = realToFrac val return val' -- method AudioDownmixMeta::get_info -- method type : MemberFunction -- Args : [] -- Lengths : [] -- returnType : TInterface "Gst" "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) audioDownmixMetaGetInfo :: (MonadIO m) => m Gst.MetaInfo -- result audioDownmixMetaGetInfo = liftIO $ do result <- gst_audio_downmix_meta_get_info checkUnexpectedReturnNULL "gst_audio_downmix_meta_get_info" result result' <- (newPtr 80 Gst.MetaInfo) result return result' type family ResolveAudioDownmixMetaMethod (t :: Symbol) (o :: *) :: * where ResolveAudioDownmixMetaMethod l o = MethodResolutionFailed l o instance (info ~ ResolveAudioDownmixMetaMethod t AudioDownmixMeta, MethodInfo info AudioDownmixMeta p) => IsLabelProxy t (AudioDownmixMeta -> p) where fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info) #if MIN_VERSION_base(4,9,0) instance (info ~ ResolveAudioDownmixMetaMethod t AudioDownmixMeta, MethodInfo info AudioDownmixMeta p) => IsLabel t (AudioDownmixMeta -> p) where fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info) #endif