{- | Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte License : LGPL-2.1 Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc) -} #define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \ && !defined(__HADDOCK_VERSION__)) module GI.GstAudio.Functions ( -- * Methods -- ** audioChannelGetFallbackMask #method:audioChannelGetFallbackMask# audioChannelGetFallbackMask , -- ** audioChannelPositionsFromMask #method:audioChannelPositionsFromMask# audioChannelPositionsFromMask , -- ** audioChannelPositionsToMask #method:audioChannelPositionsToMask# audioChannelPositionsToMask , -- ** audioChannelPositionsToString #method:audioChannelPositionsToString# audioChannelPositionsToString , -- ** audioChannelPositionsToValidOrder #method:audioChannelPositionsToValidOrder# audioChannelPositionsToValidOrder , -- ** audioCheckValidChannelPositions #method:audioCheckValidChannelPositions# audioCheckValidChannelPositions , -- ** audioClippingMetaApiGetType #method:audioClippingMetaApiGetType# audioClippingMetaApiGetType , -- ** audioDownmixMetaApiGetType #method:audioDownmixMetaApiGetType# audioDownmixMetaApiGetType , -- ** audioFormatInfoGetType #method:audioFormatInfoGetType# audioFormatInfoGetType , -- ** audioGetChannelReorderMap #method:audioGetChannelReorderMap# audioGetChannelReorderMap , -- ** audioIec61937FrameSize #method:audioIec61937FrameSize# audioIec61937FrameSize , -- ** audioIec61937Payload #method:audioIec61937Payload# audioIec61937Payload , -- ** audioMetaApiGetType #method:audioMetaApiGetType# audioMetaApiGetType , -- ** audioReorderChannels #method:audioReorderChannels# audioReorderChannels , -- ** bufferAddAudioClippingMeta #method:bufferAddAudioClippingMeta# bufferAddAudioClippingMeta , -- ** bufferAddAudioDownmixMeta #method:bufferAddAudioDownmixMeta# bufferAddAudioDownmixMeta , -- ** bufferAddAudioMeta #method:bufferAddAudioMeta# bufferAddAudioMeta , -- ** bufferGetAudioDownmixMetaForChannels #method:bufferGetAudioDownmixMetaForChannels# bufferGetAudioDownmixMetaForChannels , ) 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.ManagedPtr as B.ManagedPtr 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.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 GI.Gst.Enums as Gst.Enums import qualified GI.Gst.Structs.Buffer as Gst.Buffer import {-# SOURCE #-} qualified GI.GstAudio.Enums as GstAudio.Enums import {-# SOURCE #-} qualified GI.GstAudio.Structs.AudioClippingMeta as GstAudio.AudioClippingMeta import {-# SOURCE #-} qualified GI.GstAudio.Structs.AudioDownmixMeta as GstAudio.AudioDownmixMeta import {-# SOURCE #-} qualified GI.GstAudio.Structs.AudioInfo as GstAudio.AudioInfo import {-# SOURCE #-} qualified GI.GstAudio.Structs.AudioMeta as GstAudio.AudioMeta import {-# SOURCE #-} qualified GI.GstAudio.Structs.AudioRingBufferSpec as GstAudio.AudioRingBufferSpec -- function gst_buffer_get_audio_downmix_meta_for_channels -- Args : [Arg {argCName = "buffer", argType = TInterface (Name {namespace = "Gst", name = "Buffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstBuffer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "to_position", argType = TCArray False (-1) 2 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the channel positions of\n the destination", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "to_channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels of the destination", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [Arg {argCName = "to_channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels of the destination", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- returnType : Just (TInterface (Name {namespace = "GstAudio", name = "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 -> -- buffer : TInterface (Name {namespace = "Gst", name = "Buffer"}) Ptr CInt -> -- to_position : TCArray False (-1) 2 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})) Int32 -> -- to_channels : TBasicType TInt IO (Ptr GstAudio.AudioDownmixMeta.AudioDownmixMeta) {- | Find the 'GI.GstAudio.Structs.AudioDownmixMeta.AudioDownmixMeta' on /@buffer@/ for the given destination channel positions. -} bufferGetAudioDownmixMetaForChannels :: (B.CallStack.HasCallStack, MonadIO m) => Gst.Buffer.Buffer {- ^ /@buffer@/: a 'GI.Gst.Structs.Buffer.Buffer' -} -> [GstAudio.Enums.AudioChannelPosition] {- ^ /@toPosition@/: the channel positions of the destination -} -> m GstAudio.AudioDownmixMeta.AudioDownmixMeta {- ^ __Returns:__ the 'GI.GstAudio.Structs.AudioDownmixMeta.AudioDownmixMeta' on /@buffer@/. -} bufferGetAudioDownmixMetaForChannels buffer toPosition = liftIO $ do let toChannels = fromIntegral $ length toPosition 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 "bufferGetAudioDownmixMetaForChannels" result result' <- (newPtr GstAudio.AudioDownmixMeta.AudioDownmixMeta) result touchManagedPtr buffer freeMem toPosition'' return result' -- function gst_buffer_add_audio_meta -- Args : [Arg {argCName = "buffer", argType = TInterface (Name {namespace = "Gst", name = "Buffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstBuffer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "info", argType = TInterface (Name {namespace = "GstAudio", name = "AudioInfo"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the audio properties of the buffer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "samples", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the number of valid samples in the buffer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "offsets", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "the offsets (in bytes) where each channel plane starts\n in the buffer or %NULL to calculate it (see below); must be %NULL also\n when @info->layout is %GST_AUDIO_LAYOUT_INTERLEAVED", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "GstAudio", name = "AudioMeta"})) -- throws : False -- Skip return : False foreign import ccall "gst_buffer_add_audio_meta" gst_buffer_add_audio_meta :: Ptr Gst.Buffer.Buffer -> -- buffer : TInterface (Name {namespace = "Gst", name = "Buffer"}) Ptr GstAudio.AudioInfo.AudioInfo -> -- info : TInterface (Name {namespace = "GstAudio", name = "AudioInfo"}) Word64 -> -- samples : TBasicType TUInt64 Word64 -> -- offsets : TBasicType TUInt64 IO (Ptr GstAudio.AudioMeta.AudioMeta) {- | Allocates and attaches a 'GI.GstAudio.Structs.AudioMeta.AudioMeta' on /@buffer@/, which must be writable for that purpose. The fields of the 'GI.GstAudio.Structs.AudioMeta.AudioMeta' are directly populated from the arguments of this function. When /@info@/->layout is 'GI.GstAudio.Enums.AudioLayoutNonInterleaved' and /@offsets@/ is 'Nothing', the offsets are calculated with a formula that assumes the planes are tightly packed and in sequence: offsets[channel] = channel * /@samples@/ * sample_stride It is not allowed for channels to overlap in memory, i.e. for each i in [0, channels), the range [/@offsets@/[i], /@offsets@/[i] + /@samples@/ * sample_stride) must not overlap with any other such range. This function will assert if the parameters specified cause this restriction to be violated. It is, obviously, also not allowed to specify parameters that would cause out-of-bounds memory access on /@buffer@/. This is also checked, which means that you must add enough memory on the /@buffer@/ before adding this meta. /Since: 1.16/ -} bufferAddAudioMeta :: (B.CallStack.HasCallStack, MonadIO m) => Gst.Buffer.Buffer {- ^ /@buffer@/: a 'GI.Gst.Structs.Buffer.Buffer' -} -> GstAudio.AudioInfo.AudioInfo {- ^ /@info@/: the audio properties of the buffer -} -> Word64 {- ^ /@samples@/: the number of valid samples in the buffer -} -> Word64 {- ^ /@offsets@/: the offsets (in bytes) where each channel plane starts in the buffer or 'Nothing' to calculate it (see below); must be 'Nothing' also when /@info@/->layout is 'GI.GstAudio.Enums.AudioLayoutInterleaved' -} -> m GstAudio.AudioMeta.AudioMeta {- ^ __Returns:__ the 'GI.GstAudio.Structs.AudioMeta.AudioMeta' that was attached on the /@buffer@/ -} bufferAddAudioMeta buffer info samples offsets = liftIO $ do buffer' <- unsafeManagedPtrGetPtr buffer info' <- unsafeManagedPtrGetPtr info result <- gst_buffer_add_audio_meta buffer' info' samples offsets checkUnexpectedReturnNULL "bufferAddAudioMeta" result result' <- (newPtr GstAudio.AudioMeta.AudioMeta) result touchManagedPtr buffer touchManagedPtr info return result' -- function gst_buffer_add_audio_downmix_meta -- Args : [Arg {argCName = "buffer", argType = TInterface (Name {namespace = "Gst", name = "Buffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstBuffer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "from_position", argType = TCArray False (-1) 2 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the channel positions\n of the source", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "from_channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels of the source", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "to_position", argType = TCArray False (-1) 4 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the channel positions of\n the destination", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "to_channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels of the destination", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "matrix", argType = TBasicType TFloat, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The matrix coefficients.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [Arg {argCName = "to_channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels of the destination", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "from_channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels of the source", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- returnType : Just (TInterface (Name {namespace = "GstAudio", name = "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 -> -- buffer : TInterface (Name {namespace = "Gst", name = "Buffer"}) Ptr CInt -> -- from_position : TCArray False (-1) 2 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})) Int32 -> -- from_channels : TBasicType TInt Ptr CInt -> -- to_position : TCArray False (-1) 4 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})) Int32 -> -- to_channels : TBasicType TInt CFloat -> -- matrix : TBasicType TFloat IO (Ptr GstAudio.AudioDownmixMeta.AudioDownmixMeta) {- | Attaches 'GI.GstAudio.Structs.AudioDownmixMeta.AudioDownmixMeta' metadata to /@buffer@/ with the given parameters. /@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. -} bufferAddAudioDownmixMeta :: (B.CallStack.HasCallStack, MonadIO m) => Gst.Buffer.Buffer {- ^ /@buffer@/: a 'GI.Gst.Structs.Buffer.Buffer' -} -> [GstAudio.Enums.AudioChannelPosition] {- ^ /@fromPosition@/: the channel positions of the source -} -> [GstAudio.Enums.AudioChannelPosition] {- ^ /@toPosition@/: the channel positions of the destination -} -> Float {- ^ /@matrix@/: The matrix coefficients. -} -> m GstAudio.AudioDownmixMeta.AudioDownmixMeta {- ^ __Returns:__ the 'GI.GstAudio.Structs.AudioDownmixMeta.AudioDownmixMeta' on /@buffer@/. -} bufferAddAudioDownmixMeta buffer fromPosition toPosition matrix = liftIO $ do let toChannels = fromIntegral $ length toPosition let fromChannels = fromIntegral $ length fromPosition 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 "bufferAddAudioDownmixMeta" result result' <- (newPtr GstAudio.AudioDownmixMeta.AudioDownmixMeta) result touchManagedPtr buffer freeMem fromPosition'' freeMem toPosition'' return result' -- function gst_buffer_add_audio_clipping_meta -- Args : [Arg {argCName = "buffer", argType = TInterface (Name {namespace = "Gst", name = "Buffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstBuffer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "format", argType = TInterface (Name {namespace = "Gst", name = "Format"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "GstFormat of @start and @stop, GST_FORMAT_DEFAULT is samples", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "start", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Amount of audio to clip from start of buffer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "end", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Amount of to clip from end of buffer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "GstAudio", name = "AudioClippingMeta"})) -- throws : False -- Skip return : False foreign import ccall "gst_buffer_add_audio_clipping_meta" gst_buffer_add_audio_clipping_meta :: Ptr Gst.Buffer.Buffer -> -- buffer : TInterface (Name {namespace = "Gst", name = "Buffer"}) CUInt -> -- format : TInterface (Name {namespace = "Gst", name = "Format"}) Word64 -> -- start : TBasicType TUInt64 Word64 -> -- end : TBasicType TUInt64 IO (Ptr GstAudio.AudioClippingMeta.AudioClippingMeta) {- | Attaches 'GI.GstAudio.Structs.AudioClippingMeta.AudioClippingMeta' metadata to /@buffer@/ with the given parameters. /Since: 1.8/ -} bufferAddAudioClippingMeta :: (B.CallStack.HasCallStack, MonadIO m) => Gst.Buffer.Buffer {- ^ /@buffer@/: a 'GI.Gst.Structs.Buffer.Buffer' -} -> Gst.Enums.Format {- ^ /@format@/: GstFormat of /@start@/ and /@stop@/, GST_FORMAT_DEFAULT is samples -} -> Word64 {- ^ /@start@/: Amount of audio to clip from start of buffer -} -> Word64 {- ^ /@end@/: Amount of to clip from end of buffer -} -> m GstAudio.AudioClippingMeta.AudioClippingMeta {- ^ __Returns:__ the 'GI.GstAudio.Structs.AudioClippingMeta.AudioClippingMeta' on /@buffer@/. -} bufferAddAudioClippingMeta buffer format start end = liftIO $ do buffer' <- unsafeManagedPtrGetPtr buffer let format' = (fromIntegral . fromEnum) format result <- gst_buffer_add_audio_clipping_meta buffer' format' start end checkUnexpectedReturnNULL "bufferAddAudioClippingMeta" result result' <- (newPtr GstAudio.AudioClippingMeta.AudioClippingMeta) result touchManagedPtr buffer return result' -- function gst_audio_reorder_channels -- Args : [Arg {argCName = "data", argType = TCArray False (-1) 1 (TBasicType TUInt8), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The pointer to\n the memory.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "size", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The size of the memory.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "format", argType = TInterface (Name {namespace = "GstAudio", name = "AudioFormat"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The %GstAudioFormat of the buffer.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "from", argType = TCArray False (-1) 3 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The channel positions in the buffer.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "to", argType = TCArray False (-1) 3 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The channel positions to convert to.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "size", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The size of the memory.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- returnType : Just (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 (Name {namespace = "GstAudio", name = "AudioFormat"}) Int32 -> -- channels : TBasicType TInt Ptr CInt -> -- from : TCArray False (-1) 3 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})) Ptr CInt -> -- to : TCArray False (-1) 3 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})) IO CInt {- | Reorders /@data@/ from the channel positions /@from@/ to the channel positions /@to@/. /@from@/ and /@to@/ must contain the same number of positions and the same positions, only in a different order. Note: this function assumes the audio data is in interleaved layout -} audioReorderChannels :: (B.CallStack.HasCallStack, MonadIO m) => ByteString {- ^ /@data@/: The pointer to the memory. -} -> GstAudio.Enums.AudioFormat {- ^ /@format@/: The @/GstAudioFormat/@ of the buffer. -} -> [GstAudio.Enums.AudioChannelPosition] {- ^ /@from@/: The channel positions in the buffer. -} -> [GstAudio.Enums.AudioChannelPosition] {- ^ /@to@/: The channel positions to convert to. -} -> m Bool {- ^ __Returns:__ 'True' if the reordering was possible. -} audioReorderChannels data_ format from to = liftIO $ do let channels = fromIntegral $ length to let from_expected_length_ = fromIntegral $ length from when (from_expected_length_ /= channels) $ error "GstAudio.audioReorderChannels : length of 'from' does not agree with that of 'to'." let size = fromIntegral $ B.length data_ data_' <- packByteString data_ let format' = (fromIntegral . fromEnum) format let from' = map (fromIntegral . fromEnum) from from'' <- packStorableArray from' let to' = map (fromIntegral . fromEnum) to to'' <- packStorableArray to' result <- gst_audio_reorder_channels data_' size format' channels from'' to'' let result' = (/= 0) result freeMem data_' freeMem from'' freeMem to'' return result' -- function gst_audio_meta_api_get_type -- Args : [] -- Lengths : [] -- returnType : Just (TBasicType TGType) -- throws : False -- Skip return : False foreign import ccall "gst_audio_meta_api_get_type" gst_audio_meta_api_get_type :: IO CGType {- | /No description available in the introspection data./ -} audioMetaApiGetType :: (B.CallStack.HasCallStack, MonadIO m) => m GType audioMetaApiGetType = liftIO $ do result <- gst_audio_meta_api_get_type let result' = GType result return result' -- function gst_audio_iec61937_payload -- Args : [Arg {argCName = "src", argType = TCArray False (-1) 1 (TBasicType TUInt8), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a buffer containing the data to payload", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "src_n", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "size of @src in bytes", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "dst", argType = TCArray False (-1) 3 (TBasicType TUInt8), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the destination buffer to store the\n payloaded contents in. Should not overlap with @src", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "dst_n", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "size of @dst in bytes", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "spec", argType = TInterface (Name {namespace = "GstAudio", name = "AudioRingBufferSpec"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the ringbufer spec for @src", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "endianness", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the expected byte order of the payloaded data", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [Arg {argCName = "dst_n", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "size of @dst in bytes", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "src_n", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "size of @src in bytes", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- returnType : Just (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 TUInt Ptr Word8 -> -- dst : TCArray False (-1) 3 (TBasicType TUInt8) Word32 -> -- dst_n : TBasicType TUInt Ptr GstAudio.AudioRingBufferSpec.AudioRingBufferSpec -> -- spec : TInterface (Name {namespace = "GstAudio", name = "AudioRingBufferSpec"}) Int32 -> -- endianness : TBasicType TInt IO CInt {- | Payloads /@src@/ in the form specified by IEC 61937 for the type from /@spec@/ and stores the result in /@dst@/. /@src@/ must contain exactly one frame of data and the frame is not checked for errors. -} audioIec61937Payload :: (B.CallStack.HasCallStack, MonadIO m) => ByteString {- ^ /@src@/: a buffer containing the data to payload -} -> ByteString {- ^ /@dst@/: the destination buffer to store the payloaded contents in. Should not overlap with /@src@/ -} -> GstAudio.AudioRingBufferSpec.AudioRingBufferSpec {- ^ /@spec@/: the ringbufer spec for /@src@/ -} -> Int32 {- ^ /@endianness@/: the expected byte order of the payloaded data -} -> m Bool {- ^ __Returns:__ transfer-full: 'True' if the payloading was successful, 'False' otherwise. -} 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 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 (Name {namespace = "GstAudio", name = "AudioRingBufferSpec"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the ringbufer spec", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TBasicType TUInt) -- throws : False -- Skip return : False foreign import ccall "gst_audio_iec61937_frame_size" gst_audio_iec61937_frame_size :: Ptr GstAudio.AudioRingBufferSpec.AudioRingBufferSpec -> -- spec : TInterface (Name {namespace = "GstAudio", name = "AudioRingBufferSpec"}) IO Word32 {- | Calculated the size of the buffer expected by 'GI.GstAudio.Functions.audioIec61937Payload' for payloading type from /@spec@/. -} audioIec61937FrameSize :: (B.CallStack.HasCallStack, MonadIO m) => GstAudio.AudioRingBufferSpec.AudioRingBufferSpec {- ^ /@spec@/: the ringbufer spec -} -> m Word32 {- ^ __Returns:__ the size or 0 if the given /@type@/ is not supported or cannot be payloaded. -} audioIec61937FrameSize spec = liftIO $ do 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 TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "from", argType = TCArray False (-1) 0 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The channel positions to reorder from.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "to", argType = TCArray False (-1) 0 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The channel positions to reorder to.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "reorder_map", argType = TCArray False (-1) 0 (TBasicType TInt), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Pointer to the reorder map.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- returnType : Just (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 TInt Ptr CInt -> -- from : TCArray False (-1) 0 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})) Ptr CInt -> -- to : TCArray False (-1) 0 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})) Ptr Int32 -> -- reorder_map : TCArray False (-1) 0 (TBasicType TInt) IO CInt {- | Returns a reorder map for /@from@/ to /@to@/ that can be used in custom channel reordering code, e.g. to convert from or to the GStreamer channel order. /@from@/ and /@to@/ must contain the same number of positions and the same positions, only in a different order. The resulting /@reorderMap@/ can be used for reordering by assigning channel i of the input to channel reorder_map[i] of the output. -} audioGetChannelReorderMap :: (B.CallStack.HasCallStack, MonadIO m) => [GstAudio.Enums.AudioChannelPosition] {- ^ /@from@/: The channel positions to reorder from. -} -> [GstAudio.Enums.AudioChannelPosition] {- ^ /@to@/: The channel positions to reorder to. -} -> [Int32] {- ^ /@reorderMap@/: Pointer to the reorder map. -} -> m Bool {- ^ __Returns:__ 'True' if the channel positions are valid and reordering is possible. -} audioGetChannelReorderMap from to reorderMap = liftIO $ do let channels = fromIntegral $ length reorderMap let to_expected_length_ = fromIntegral $ length to when (to_expected_length_ /= channels) $ error "GstAudio.audioGetChannelReorderMap : length of 'to' does not agree with that of 'reorderMap'." let from_expected_length_ = fromIntegral $ length from when (from_expected_length_ /= channels) $ error "GstAudio.audioGetChannelReorderMap : length of 'from' does not agree with that of 'to'." let from' = map (fromIntegral . fromEnum) from from'' <- packStorableArray from' let to' = map (fromIntegral . fromEnum) to to'' <- packStorableArray to' reorderMap' <- packStorableArray reorderMap result <- gst_audio_get_channel_reorder_map channels from'' to'' reorderMap' let result' = (/= 0) result freeMem from'' freeMem to'' freeMem reorderMap' return result' -- function gst_audio_format_info_get_type -- Args : [] -- Lengths : [] -- returnType : Just (TBasicType TGType) -- throws : False -- Skip return : False foreign import ccall "gst_audio_format_info_get_type" gst_audio_format_info_get_type :: IO CGType {- | /No description available in the introspection data./ -} audioFormatInfoGetType :: (B.CallStack.HasCallStack, MonadIO m) => m GType 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 : Just (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 {- | /No description available in the introspection data./ -} audioDownmixMetaApiGetType :: (B.CallStack.HasCallStack, MonadIO m) => m GType audioDownmixMetaApiGetType = liftIO $ do result <- gst_audio_downmix_meta_api_get_type let result' = GType result return result' -- function gst_audio_clipping_meta_api_get_type -- Args : [] -- Lengths : [] -- returnType : Just (TBasicType TGType) -- throws : False -- Skip return : False foreign import ccall "gst_audio_clipping_meta_api_get_type" gst_audio_clipping_meta_api_get_type :: IO CGType {- | /No description available in the introspection data./ -} audioClippingMetaApiGetType :: (B.CallStack.HasCallStack, MonadIO m) => m GType audioClippingMetaApiGetType = liftIO $ do result <- gst_audio_clipping_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 (Name {namespace = "GstAudio", name = "AudioChannelPosition"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The %GstAudioChannelPositions\n to check.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "force_order", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Only consider the GStreamer channel order.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- returnType : Just (TBasicType TBoolean) -- throws : False -- Skip return : False foreign import ccall "gst_audio_check_valid_channel_positions" gst_audio_check_valid_channel_positions :: Ptr CInt -> -- position : TCArray False (-1) 1 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})) Int32 -> -- channels : TBasicType TInt CInt -> -- force_order : TBasicType TBoolean IO CInt {- | Checks if /@position@/ contains valid channel positions for /@channels@/ channels. If /@forceOrder@/ is 'True' it additionally checks if the channels are in the order required by GStreamer. -} audioCheckValidChannelPositions :: (B.CallStack.HasCallStack, MonadIO m) => [GstAudio.Enums.AudioChannelPosition] {- ^ /@position@/: The @/GstAudioChannelPositions/@ to check. -} -> Bool {- ^ /@forceOrder@/: Only consider the GStreamer channel order. -} -> m Bool {- ^ __Returns:__ 'True' if the channel positions are valid. -} 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 (Name {namespace = "GstAudio", name = "AudioChannelPosition"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The channel positions to\n reorder to.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- returnType : Just (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 CInt -> -- position : TCArray False (-1) 1 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})) Int32 -> -- channels : TBasicType TInt IO CInt {- | Reorders the channel positions in /@position@/ from any order to the GStreamer channel order. -} audioChannelPositionsToValidOrder :: (B.CallStack.HasCallStack, MonadIO m) => [GstAudio.Enums.AudioChannelPosition] {- ^ /@position@/: The channel positions to reorder to. -} -> m Bool {- ^ __Returns:__ 'True' if the channel positions are valid and reordering was successful. -} 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_string -- Args : [Arg {argCName = "position", argType = TCArray False (-1) 1 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The %GstAudioChannelPositions\n to convert.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- returnType : Just (TBasicType TUTF8) -- throws : False -- Skip return : False foreign import ccall "gst_audio_channel_positions_to_string" gst_audio_channel_positions_to_string :: Ptr CInt -> -- position : TCArray False (-1) 1 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})) Int32 -> -- channels : TBasicType TInt IO CString {- | Converts /@position@/ to a human-readable string representation for debugging purposes. -} audioChannelPositionsToString :: (B.CallStack.HasCallStack, MonadIO m) => [GstAudio.Enums.AudioChannelPosition] {- ^ /@position@/: The @/GstAudioChannelPositions/@ to convert. -} -> m T.Text {- ^ __Returns:__ a newly allocated string representing /@position@/ Since 1.10 -} audioChannelPositionsToString position = liftIO $ do let channels = fromIntegral $ length position let position' = map (fromIntegral . fromEnum) position position'' <- packStorableArray position' result <- gst_audio_channel_positions_to_string position'' channels checkUnexpectedReturnNULL "audioChannelPositionsToString" result result' <- cstringToText result freeMem result freeMem position'' return result' -- function gst_audio_channel_positions_to_mask -- Args : [Arg {argCName = "position", argType = TCArray False (-1) 1 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The %GstAudioChannelPositions", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "force_order", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Only consider the GStreamer channel order.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "channel_mask", argType = TBasicType TUInt64, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the output channel mask", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}] -- Lengths : [Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- returnType : Just (TBasicType TBoolean) -- throws : False -- Skip return : False foreign import ccall "gst_audio_channel_positions_to_mask" gst_audio_channel_positions_to_mask :: Ptr CInt -> -- position : TCArray False (-1) 1 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})) Int32 -> -- channels : TBasicType TInt CInt -> -- force_order : TBasicType TBoolean Ptr Word64 -> -- channel_mask : TBasicType TUInt64 IO CInt {- | Convert the /@position@/ array of /@channels@/ channels to a bitmask. If /@forceOrder@/ is 'True' it additionally checks if the channels are in the order required by GStreamer. -} audioChannelPositionsToMask :: (B.CallStack.HasCallStack, MonadIO m) => [GstAudio.Enums.AudioChannelPosition] {- ^ /@position@/: The @/GstAudioChannelPositions/@ -} -> Bool {- ^ /@forceOrder@/: Only consider the GStreamer channel order. -} -> m ((Bool, Word64)) {- ^ __Returns:__ 'True' if the channel positions are valid and could be converted. -} audioChannelPositionsToMask position forceOrder = liftIO $ do let channels = fromIntegral $ length position let position' = map (fromIntegral . fromEnum) position position'' <- packStorableArray position' let forceOrder' = (fromIntegral . fromEnum) forceOrder channelMask <- allocMem :: IO (Ptr Word64) result <- gst_audio_channel_positions_to_mask position'' channels forceOrder' channelMask let result' = (/= 0) result channelMask' <- peek channelMask freeMem position'' freeMem channelMask return (result', channelMask') -- function gst_audio_channel_positions_from_mask -- Args : [Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "channel_mask", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The input channel_mask", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "position", argType = TCArray False (-1) 0 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The\n %GstAudioChannelPositions", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The number of channels", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- returnType : Just (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 TInt Word64 -> -- channel_mask : TBasicType TUInt64 Ptr CInt -> -- position : TCArray False (-1) 0 (TInterface (Name {namespace = "GstAudio", name = "AudioChannelPosition"})) IO CInt {- | Convert the /@channels@/ present in /@channelMask@/ to a /@position@/ array (which should have at least /@channels@/ entries ensured by caller). If /@channelMask@/ is set to 0, it is considered as \'not present\' for purpose of conversion. A partially valid /@channelMask@/ with less bits set than the number of channels is considered valid. -} audioChannelPositionsFromMask :: (B.CallStack.HasCallStack, MonadIO m) => Word64 {- ^ /@channelMask@/: The input channel_mask -} -> [GstAudio.Enums.AudioChannelPosition] {- ^ /@position@/: The @/GstAudioChannelPosition/@\s -} -> m Bool {- ^ __Returns:__ 'True' if channel and channel mask are valid and could be converted -} 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_channel_get_fallback_mask -- Args : [Arg {argCName = "channels", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the number of channels", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TBasicType TUInt64) -- throws : False -- Skip return : False foreign import ccall "gst_audio_channel_get_fallback_mask" gst_audio_channel_get_fallback_mask :: Int32 -> -- channels : TBasicType TInt IO Word64 {- | Get the fallback channel-mask for the given number of channels. This function returns a reasonable fallback channel-mask and should be called as a last resort when the specific channel map is unknown. /Since: 1.8/ -} audioChannelGetFallbackMask :: (B.CallStack.HasCallStack, MonadIO m) => Int32 {- ^ /@channels@/: the number of channels -} -> m Word64 {- ^ __Returns:__ a fallback channel-mask for /@channels@/ or 0 when there is no mask and mono. -} audioChannelGetFallbackMask channels = liftIO $ do result <- gst_audio_channel_get_fallback_mask channels return result