packages feed

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

module GI.GstAudio.Functions
    ( 

 -- * Methods
-- ** audioBufferClip
    audioBufferClip                         ,


-- ** audioBufferReorderChannels
    audioBufferReorderChannels              ,


-- ** audioChannelPositionsFromMask
    audioChannelPositionsFromMask           ,


-- ** audioChannelPositionsToMask
    audioChannelPositionsToMask             ,


-- ** audioChannelPositionsToValidOrder
    audioChannelPositionsToValidOrder       ,


-- ** audioCheckValidChannelPositions
    audioCheckValidChannelPositions         ,


-- ** audioDownmixMetaApiGetType
    audioDownmixMetaApiGetType              ,


-- ** audioFormatInfoGetType
    audioFormatInfoGetType                  ,


-- ** audioGetChannelReorderMap
    audioGetChannelReorderMap               ,


-- ** audioIec61937FrameSize
    audioIec61937FrameSize                  ,


-- ** audioIec61937Payload
    audioIec61937Payload                    ,


-- ** audioReorderChannels
    audioReorderChannels                    ,


-- ** bufferAddAudioDownmixMeta
    bufferAddAudioDownmixMeta               ,


-- ** bufferGetAudioDownmixMetaForChannels
    bufferGetAudioDownmixMetaForChannels    ,




    ) 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

-- function gst_buffer_get_audio_downmix_meta_for_channels
-- Args : [Arg {argCName = "buffer", argType = TInterface "Gst" "Buffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "to_position", argType = TCArray False (-1) 2 (TInterface "GstAudio" "AudioChannelPosition"), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "to_channels", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : [Arg {argCName = "to_channels", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- returnType : TInterface "GstAudio" "AudioDownmixMeta"
-- throws : False
-- Skip return : False

foreign import ccall "gst_buffer_get_audio_downmix_meta_for_channels" gst_buffer_get_audio_downmix_meta_for_channels :: 
    Ptr Gst.Buffer ->                       -- buffer : TInterface "Gst" "Buffer"
    Ptr CUInt ->                            -- to_position : TCArray False (-1) 2 (TInterface "GstAudio" "AudioChannelPosition")
    Int32 ->                                -- to_channels : TBasicType TInt32
    IO (Ptr AudioDownmixMeta)


bufferGetAudioDownmixMetaForChannels ::
    (MonadIO m) =>
    Gst.Buffer                              -- buffer
    -> [AudioChannelPosition]               -- toPosition
    -> m AudioDownmixMeta                   -- result
bufferGetAudioDownmixMetaForChannels buffer toPosition = liftIO $ do
    let toChannels = fromIntegral $ length toPosition
    let buffer' = unsafeManagedPtrGetPtr buffer
    let toPosition' = map (fromIntegral . fromEnum) toPosition
    toPosition'' <- packStorableArray toPosition'
    result <- gst_buffer_get_audio_downmix_meta_for_channels buffer' toPosition'' toChannels
    checkUnexpectedReturnNULL "gst_buffer_get_audio_downmix_meta_for_channels" result
    result' <- (newPtr 48 AudioDownmixMeta) result
    touchManagedPtr buffer
    freeMem toPosition''
    return result'


-- function gst_buffer_add_audio_downmix_meta
-- Args : [Arg {argCName = "buffer", argType = TInterface "Gst" "Buffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "from_position", argType = TCArray False (-1) 2 (TInterface "GstAudio" "AudioChannelPosition"), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "from_channels", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "to_position", argType = TCArray False (-1) 4 (TInterface "GstAudio" "AudioChannelPosition"), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "to_channels", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "matrix", argType = TBasicType TFloat, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : [Arg {argCName = "to_channels", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "from_channels", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- returnType : TInterface "GstAudio" "AudioDownmixMeta"
-- throws : False
-- Skip return : False

foreign import ccall "gst_buffer_add_audio_downmix_meta" gst_buffer_add_audio_downmix_meta :: 
    Ptr Gst.Buffer ->                       -- buffer : TInterface "Gst" "Buffer"
    Ptr CUInt ->                            -- from_position : TCArray False (-1) 2 (TInterface "GstAudio" "AudioChannelPosition")
    Int32 ->                                -- from_channels : TBasicType TInt32
    Ptr CUInt ->                            -- to_position : TCArray False (-1) 4 (TInterface "GstAudio" "AudioChannelPosition")
    Int32 ->                                -- to_channels : TBasicType TInt32
    CFloat ->                               -- matrix : TBasicType TFloat
    IO (Ptr AudioDownmixMeta)


bufferAddAudioDownmixMeta ::
    (MonadIO m) =>
    Gst.Buffer                              -- buffer
    -> [AudioChannelPosition]               -- fromPosition
    -> [AudioChannelPosition]               -- toPosition
    -> Float                                -- matrix
    -> m AudioDownmixMeta                   -- result
bufferAddAudioDownmixMeta buffer fromPosition toPosition matrix = liftIO $ do
    let toChannels = fromIntegral $ length toPosition
    let fromChannels = fromIntegral $ length fromPosition
    let buffer' = unsafeManagedPtrGetPtr buffer
    let fromPosition' = map (fromIntegral . fromEnum) fromPosition
    fromPosition'' <- packStorableArray fromPosition'
    let toPosition' = map (fromIntegral . fromEnum) toPosition
    toPosition'' <- packStorableArray toPosition'
    let matrix' = realToFrac matrix
    result <- gst_buffer_add_audio_downmix_meta buffer' fromPosition'' fromChannels toPosition'' toChannels matrix'
    checkUnexpectedReturnNULL "gst_buffer_add_audio_downmix_meta" result
    result' <- (newPtr 48 AudioDownmixMeta) result
    touchManagedPtr buffer
    freeMem fromPosition''
    freeMem toPosition''
    return result'


-- function gst_audio_reorder_channels
-- Args : [Arg {argCName = "data", argType = TCArray False (-1) 1 (TBasicType TUInt8), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "size", argType = TBasicType TUInt64, 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 = "channels", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "from", argType = TCArray False (-1) (-1) (TInterface "GstAudio" "AudioChannelPosition"), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "to", argType = TCArray False (-1) (-1) (TInterface "GstAudio" "AudioChannelPosition"), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : [Arg {argCName = "size", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gst_audio_reorder_channels" gst_audio_reorder_channels :: 
    Ptr Word8 ->                            -- data : TCArray False (-1) 1 (TBasicType TUInt8)
    Word64 ->                               -- size : TBasicType TUInt64
    CUInt ->                                -- format : TInterface "GstAudio" "AudioFormat"
    Int32 ->                                -- channels : TBasicType TInt32
    Ptr CUInt ->                            -- from : TCArray False (-1) (-1) (TInterface "GstAudio" "AudioChannelPosition")
    Ptr CUInt ->                            -- to : TCArray False (-1) (-1) (TInterface "GstAudio" "AudioChannelPosition")
    IO CInt


audioReorderChannels ::
    (MonadIO m) =>
    ByteString                              -- data_
    -> AudioFormat                          -- format
    -> Int32                                -- channels
    -> Ptr CUInt                            -- from
    -> Ptr CUInt                            -- to
    -> m Bool                               -- result
audioReorderChannels data_ format channels from to = liftIO $ do
    let size = fromIntegral $ B.length data_
    data_' <- packByteString data_
    let format' = (fromIntegral . fromEnum) format
    result <- gst_audio_reorder_channels data_' size format' channels from to
    let result' = (/= 0) result
    freeMem data_'
    return result'


-- function gst_audio_iec61937_payload
-- Args : [Arg {argCName = "src", argType = TCArray False (-1) 1 (TBasicType TUInt8), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "src_n", argType = TBasicType TUInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "dst", argType = TCArray False (-1) 3 (TBasicType TUInt8), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "dst_n", argType = TBasicType TUInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "spec", argType = TInterface "GstAudio" "AudioRingBufferSpec", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "endianness", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : [Arg {argCName = "dst_n", argType = TBasicType TUInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "src_n", argType = TBasicType TUInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gst_audio_iec61937_payload" gst_audio_iec61937_payload :: 
    Ptr Word8 ->                            -- src : TCArray False (-1) 1 (TBasicType TUInt8)
    Word32 ->                               -- src_n : TBasicType TUInt32
    Ptr Word8 ->                            -- dst : TCArray False (-1) 3 (TBasicType TUInt8)
    Word32 ->                               -- dst_n : TBasicType TUInt32
    Ptr AudioRingBufferSpec ->              -- spec : TInterface "GstAudio" "AudioRingBufferSpec"
    Int32 ->                                -- endianness : TBasicType TInt32
    IO CInt


audioIec61937Payload ::
    (MonadIO m) =>
    ByteString                              -- src
    -> ByteString                           -- dst
    -> AudioRingBufferSpec                  -- spec
    -> Int32                                -- endianness
    -> m Bool                               -- result
audioIec61937Payload src dst spec endianness = liftIO $ do
    let dstN = fromIntegral $ B.length dst
    let srcN = fromIntegral $ B.length src
    src' <- packByteString src
    dst' <- packByteString dst
    let spec' = unsafeManagedPtrGetPtr spec
    result <- gst_audio_iec61937_payload src' srcN dst' dstN spec' endianness
    let result' = (/= 0) result
    touchManagedPtr spec
    freeMem src'
    freeMem dst'
    return result'


-- function gst_audio_iec61937_frame_size
-- Args : [Arg {argCName = "spec", argType = TInterface "GstAudio" "AudioRingBufferSpec", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TBasicType TUInt32
-- throws : False
-- Skip return : False

foreign import ccall "gst_audio_iec61937_frame_size" gst_audio_iec61937_frame_size :: 
    Ptr AudioRingBufferSpec ->              -- spec : TInterface "GstAudio" "AudioRingBufferSpec"
    IO Word32


audioIec61937FrameSize ::
    (MonadIO m) =>
    AudioRingBufferSpec                     -- spec
    -> m Word32                             -- result
audioIec61937FrameSize spec = liftIO $ do
    let spec' = unsafeManagedPtrGetPtr spec
    result <- gst_audio_iec61937_frame_size spec'
    touchManagedPtr spec
    return result


-- function gst_audio_get_channel_reorder_map
-- Args : [Arg {argCName = "channels", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "from", argType = TCArray False (-1) (-1) (TInterface "GstAudio" "AudioChannelPosition"), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "to", argType = TCArray False (-1) (-1) (TInterface "GstAudio" "AudioChannelPosition"), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "reorder_map", argType = TCArray False (-1) (-1) (TBasicType TInt32), 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_get_channel_reorder_map" gst_audio_get_channel_reorder_map :: 
    Int32 ->                                -- channels : TBasicType TInt32
    Ptr CUInt ->                            -- from : TCArray False (-1) (-1) (TInterface "GstAudio" "AudioChannelPosition")
    Ptr CUInt ->                            -- to : TCArray False (-1) (-1) (TInterface "GstAudio" "AudioChannelPosition")
    Ptr Int32 ->                            -- reorder_map : TCArray False (-1) (-1) (TBasicType TInt32)
    IO CInt


audioGetChannelReorderMap ::
    (MonadIO m) =>
    Int32                                   -- channels
    -> Ptr CUInt                            -- from
    -> Ptr CUInt                            -- to
    -> Ptr Int32                            -- reorderMap
    -> m Bool                               -- result
audioGetChannelReorderMap channels from to reorderMap = liftIO $ do
    result <- gst_audio_get_channel_reorder_map channels from to reorderMap
    let result' = (/= 0) result
    return result'


-- function gst_audio_format_info_get_type
-- Args : []
-- Lengths : []
-- returnType : TBasicType TGType
-- throws : False
-- Skip return : False

foreign import ccall "gst_audio_format_info_get_type" gst_audio_format_info_get_type :: 
    IO CGType


audioFormatInfoGetType ::
    (MonadIO m) =>
    m GType                                 -- result
audioFormatInfoGetType  = liftIO $ do
    result <- gst_audio_format_info_get_type
    let result' = GType result
    return result'


-- function gst_audio_downmix_meta_api_get_type
-- Args : []
-- Lengths : []
-- returnType : TBasicType TGType
-- throws : False
-- Skip return : False

foreign import ccall "gst_audio_downmix_meta_api_get_type" gst_audio_downmix_meta_api_get_type :: 
    IO CGType


audioDownmixMetaApiGetType ::
    (MonadIO m) =>
    m GType                                 -- result
audioDownmixMetaApiGetType  = liftIO $ do
    result <- gst_audio_downmix_meta_api_get_type
    let result' = GType result
    return result'


-- function gst_audio_check_valid_channel_positions
-- Args : [Arg {argCName = "position", argType = TCArray False (-1) 1 (TInterface "GstAudio" "AudioChannelPosition"), 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 = "force_order", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : [Arg {argCName = "channels", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gst_audio_check_valid_channel_positions" gst_audio_check_valid_channel_positions :: 
    Ptr CUInt ->                            -- position : TCArray False (-1) 1 (TInterface "GstAudio" "AudioChannelPosition")
    Int32 ->                                -- channels : TBasicType TInt32
    CInt ->                                 -- force_order : TBasicType TBoolean
    IO CInt


audioCheckValidChannelPositions ::
    (MonadIO m) =>
    [AudioChannelPosition]                  -- position
    -> Bool                                 -- forceOrder
    -> m Bool                               -- result
audioCheckValidChannelPositions position forceOrder = liftIO $ do
    let channels = fromIntegral $ length position
    let position' = map (fromIntegral . fromEnum) position
    position'' <- packStorableArray position'
    let forceOrder' = (fromIntegral . fromEnum) forceOrder
    result <- gst_audio_check_valid_channel_positions position'' channels forceOrder'
    let result' = (/= 0) result
    freeMem position''
    return result'


-- function gst_audio_channel_positions_to_valid_order
-- Args : [Arg {argCName = "position", argType = TCArray False (-1) 1 (TInterface "GstAudio" "AudioChannelPosition"), 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}]
-- Lengths : [Arg {argCName = "channels", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gst_audio_channel_positions_to_valid_order" gst_audio_channel_positions_to_valid_order :: 
    Ptr CUInt ->                            -- position : TCArray False (-1) 1 (TInterface "GstAudio" "AudioChannelPosition")
    Int32 ->                                -- channels : TBasicType TInt32
    IO CInt


audioChannelPositionsToValidOrder ::
    (MonadIO m) =>
    [AudioChannelPosition]                  -- position
    -> m Bool                               -- result
audioChannelPositionsToValidOrder position = liftIO $ do
    let channels = fromIntegral $ length position
    let position' = map (fromIntegral . fromEnum) position
    position'' <- packStorableArray position'
    result <- gst_audio_channel_positions_to_valid_order position'' channels
    let result' = (/= 0) result
    freeMem position''
    return result'


-- function gst_audio_channel_positions_to_mask
-- Args : [Arg {argCName = "position", argType = TCArray False (-1) 1 (TInterface "GstAudio" "AudioChannelPosition"), 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 = "force_order", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "channel_mask", argType = TCArray False (-1) (-1) (TBasicType TUInt64), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : [Arg {argCName = "channels", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gst_audio_channel_positions_to_mask" gst_audio_channel_positions_to_mask :: 
    Ptr CUInt ->                            -- position : TCArray False (-1) 1 (TInterface "GstAudio" "AudioChannelPosition")
    Int32 ->                                -- channels : TBasicType TInt32
    CInt ->                                 -- force_order : TBasicType TBoolean
    Ptr Word64 ->                           -- channel_mask : TCArray False (-1) (-1) (TBasicType TUInt64)
    IO CInt


audioChannelPositionsToMask ::
    (MonadIO m) =>
    [AudioChannelPosition]                  -- position
    -> Bool                                 -- forceOrder
    -> Ptr Word64                           -- channelMask
    -> m Bool                               -- result
audioChannelPositionsToMask position forceOrder channelMask = liftIO $ do
    let channels = fromIntegral $ length position
    let position' = map (fromIntegral . fromEnum) position
    position'' <- packStorableArray position'
    let forceOrder' = (fromIntegral . fromEnum) forceOrder
    result <- gst_audio_channel_positions_to_mask position'' channels forceOrder' channelMask
    let result' = (/= 0) result
    freeMem position''
    return result'


-- function gst_audio_channel_positions_from_mask
-- Args : [Arg {argCName = "channels", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "channel_mask", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "position", argType = TCArray False (-1) 0 (TInterface "GstAudio" "AudioChannelPosition"), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : [Arg {argCName = "channels", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "gst_audio_channel_positions_from_mask" gst_audio_channel_positions_from_mask :: 
    Int32 ->                                -- channels : TBasicType TInt32
    Word64 ->                               -- channel_mask : TBasicType TUInt64
    Ptr CUInt ->                            -- position : TCArray False (-1) 0 (TInterface "GstAudio" "AudioChannelPosition")
    IO CInt


audioChannelPositionsFromMask ::
    (MonadIO m) =>
    Word64                                  -- channelMask
    -> [AudioChannelPosition]               -- position
    -> m Bool                               -- result
audioChannelPositionsFromMask channelMask position = liftIO $ do
    let channels = fromIntegral $ length position
    let position' = map (fromIntegral . fromEnum) position
    position'' <- packStorableArray position'
    result <- gst_audio_channel_positions_from_mask channels channelMask position''
    let result' = (/= 0) result
    freeMem position''
    return result'


-- function gst_audio_buffer_reorder_channels
-- Args : [Arg {argCName = "buffer", argType = TInterface "Gst" "Buffer", 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 = "channels", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "from", argType = TCArray False (-1) (-1) (TInterface "GstAudio" "AudioChannelPosition"), direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "to", argType = TCArray False (-1) (-1) (TInterface "GstAudio" "AudioChannelPosition"), 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_buffer_reorder_channels" gst_audio_buffer_reorder_channels :: 
    Ptr Gst.Buffer ->                       -- buffer : TInterface "Gst" "Buffer"
    CUInt ->                                -- format : TInterface "GstAudio" "AudioFormat"
    Int32 ->                                -- channels : TBasicType TInt32
    Ptr CUInt ->                            -- from : TCArray False (-1) (-1) (TInterface "GstAudio" "AudioChannelPosition")
    Ptr CUInt ->                            -- to : TCArray False (-1) (-1) (TInterface "GstAudio" "AudioChannelPosition")
    IO CInt


audioBufferReorderChannels ::
    (MonadIO m) =>
    Gst.Buffer                              -- buffer
    -> AudioFormat                          -- format
    -> Int32                                -- channels
    -> Ptr CUInt                            -- from
    -> Ptr CUInt                            -- to
    -> m Bool                               -- result
audioBufferReorderChannels buffer format channels from to = liftIO $ do
    let buffer' = unsafeManagedPtrGetPtr buffer
    let format' = (fromIntegral . fromEnum) format
    result <- gst_audio_buffer_reorder_channels buffer' format' channels from to
    let result' = (/= 0) result
    touchManagedPtr buffer
    return result'


-- function gst_audio_buffer_clip
-- Args : [Arg {argCName = "buffer", argType = TInterface "Gst" "Buffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "segment", argType = TInterface "Gst" "Segment", 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 = "bpf", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TInterface "Gst" "Buffer"
-- throws : False
-- Skip return : False

foreign import ccall "gst_audio_buffer_clip" gst_audio_buffer_clip :: 
    Ptr Gst.Buffer ->                       -- buffer : TInterface "Gst" "Buffer"
    Ptr Gst.Segment ->                      -- segment : TInterface "Gst" "Segment"
    Int32 ->                                -- rate : TBasicType TInt32
    Int32 ->                                -- bpf : TBasicType TInt32
    IO (Ptr Gst.Buffer)


audioBufferClip ::
    (MonadIO m) =>
    Gst.Buffer                              -- buffer
    -> Gst.Segment                          -- segment
    -> Int32                                -- rate
    -> Int32                                -- bpf
    -> m Gst.Buffer                         -- result
audioBufferClip buffer segment rate bpf = liftIO $ do
    buffer' <- copyBoxed buffer
    let segment' = unsafeManagedPtrGetPtr segment
    result <- gst_audio_buffer_clip buffer' segment' rate bpf
    checkUnexpectedReturnNULL "gst_audio_buffer_clip" result
    result' <- (wrapBoxed Gst.Buffer) result
    touchManagedPtr buffer
    touchManagedPtr segment
    return result'