{- | Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte License : LGPL-2.1 Maintainer : Iñaki García Etxebarria (garetxe@gmail.com) Information describing audio properties. This information can be filled in from GstCaps with gst_audio_info_from_caps(). Use the provided macros to access the info in this structure. -} module GI.GstAudio.Structs.AudioInfo ( -- * Exported types AudioInfo(..) , newZeroAudioInfo , noAudioInfo , -- * Methods -- ** audioInfoConvert AudioInfoConvertMethodInfo , audioInfoConvert , -- ** audioInfoCopy AudioInfoCopyMethodInfo , audioInfoCopy , -- ** audioInfoFree AudioInfoFreeMethodInfo , audioInfoFree , -- ** audioInfoFromCaps AudioInfoFromCapsMethodInfo , audioInfoFromCaps , -- ** audioInfoInit AudioInfoInitMethodInfo , audioInfoInit , -- ** audioInfoIsEqual AudioInfoIsEqualMethodInfo , audioInfoIsEqual , -- ** audioInfoNew audioInfoNew , -- ** audioInfoSetFormat AudioInfoSetFormatMethodInfo , audioInfoSetFormat , -- ** audioInfoToCaps AudioInfoToCapsMethodInfo , audioInfoToCaps , -- * Properties -- ** Bpf audioInfoReadBpf , -- ** Channels audioInfoReadChannels , -- ** Finfo audioInfoReadFinfo , -- ** Flags audioInfoReadFlags , -- ** Layout audioInfoReadLayout , -- ** Rate audioInfoReadRate , ) 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 AudioInfo = AudioInfo (ForeignPtr AudioInfo) foreign import ccall "gst_audio_info_get_type" c_gst_audio_info_get_type :: IO GType instance BoxedObject AudioInfo where boxedType _ = c_gst_audio_info_get_type -- | Construct a `AudioInfo` struct initialized to zero. newZeroAudioInfo :: MonadIO m => m AudioInfo newZeroAudioInfo = liftIO $ callocBoxedBytes 320 >>= wrapBoxed AudioInfo noAudioInfo :: Maybe AudioInfo noAudioInfo = Nothing audioInfoReadFinfo :: AudioInfo -> IO AudioFormatInfo audioInfoReadFinfo s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 0) :: IO (Ptr AudioFormatInfo) val' <- (newPtr 104 AudioFormatInfo) val return val' audioInfoReadFlags :: AudioInfo -> IO [AudioFlags] audioInfoReadFlags s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 8) :: IO CUInt let val' = wordToGFlags val return val' audioInfoReadLayout :: AudioInfo -> IO AudioLayout audioInfoReadLayout s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 12) :: IO CUInt let val' = (toEnum . fromIntegral) val return val' audioInfoReadRate :: AudioInfo -> IO Int32 audioInfoReadRate s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 16) :: IO Int32 return val audioInfoReadChannels :: AudioInfo -> IO Int32 audioInfoReadChannels s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 20) :: IO Int32 return val audioInfoReadBpf :: AudioInfo -> IO Int32 audioInfoReadBpf s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 24) :: IO Int32 return val -- XXX Skipped getter for "AudioInfo:position" :: Not implemented: "Don't know how to unpack C array of type TCArray False 64 (-1) (TInterface \"GstAudio\" \"AudioChannelPosition\")" -- method AudioInfo::new -- method type : Constructor -- Args : [] -- Lengths : [] -- returnType : TInterface "GstAudio" "AudioInfo" -- throws : False -- Skip return : False foreign import ccall "gst_audio_info_new" gst_audio_info_new :: IO (Ptr AudioInfo) audioInfoNew :: (MonadIO m) => m AudioInfo -- result audioInfoNew = liftIO $ do result <- gst_audio_info_new checkUnexpectedReturnNULL "gst_audio_info_new" result result' <- (wrapBoxed AudioInfo) result return result' -- method AudioInfo::convert -- method type : OrdinaryMethod -- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "src_fmt", argType = TInterface "Gst" "Format", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "src_val", argType = TBasicType TInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "dest_fmt", argType = TInterface "Gst" "Format", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "dest_val", argType = TBasicType TInt64, 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_info_convert" gst_audio_info_convert :: Ptr AudioInfo -> -- _obj : TInterface "GstAudio" "AudioInfo" CUInt -> -- src_fmt : TInterface "Gst" "Format" Int64 -> -- src_val : TBasicType TInt64 CUInt -> -- dest_fmt : TInterface "Gst" "Format" Int64 -> -- dest_val : TBasicType TInt64 IO CInt audioInfoConvert :: (MonadIO m) => AudioInfo -- _obj -> Gst.Format -- srcFmt -> Int64 -- srcVal -> Gst.Format -- destFmt -> Int64 -- destVal -> m Bool -- result audioInfoConvert _obj srcFmt srcVal destFmt destVal = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj let srcFmt' = (fromIntegral . fromEnum) srcFmt let destFmt' = (fromIntegral . fromEnum) destFmt result <- gst_audio_info_convert _obj' srcFmt' srcVal destFmt' destVal let result' = (/= 0) result touchManagedPtr _obj return result' data AudioInfoConvertMethodInfo instance (signature ~ (Gst.Format -> Int64 -> Gst.Format -> Int64 -> m Bool), MonadIO m) => MethodInfo AudioInfoConvertMethodInfo AudioInfo signature where overloadedMethod _ = audioInfoConvert -- method AudioInfo::copy -- method type : OrdinaryMethod -- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : TInterface "GstAudio" "AudioInfo" -- throws : False -- Skip return : False foreign import ccall "gst_audio_info_copy" gst_audio_info_copy :: Ptr AudioInfo -> -- _obj : TInterface "GstAudio" "AudioInfo" IO (Ptr AudioInfo) audioInfoCopy :: (MonadIO m) => AudioInfo -- _obj -> m AudioInfo -- result audioInfoCopy _obj = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj result <- gst_audio_info_copy _obj' checkUnexpectedReturnNULL "gst_audio_info_copy" result result' <- (wrapBoxed AudioInfo) result touchManagedPtr _obj return result' data AudioInfoCopyMethodInfo instance (signature ~ (m AudioInfo), MonadIO m) => MethodInfo AudioInfoCopyMethodInfo AudioInfo signature where overloadedMethod _ = audioInfoCopy -- method AudioInfo::free -- method type : OrdinaryMethod -- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : TBasicType TVoid -- throws : False -- Skip return : False foreign import ccall "gst_audio_info_free" gst_audio_info_free :: Ptr AudioInfo -> -- _obj : TInterface "GstAudio" "AudioInfo" IO () audioInfoFree :: (MonadIO m) => AudioInfo -- _obj -> m () -- result audioInfoFree _obj = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj gst_audio_info_free _obj' touchManagedPtr _obj return () data AudioInfoFreeMethodInfo instance (signature ~ (m ()), MonadIO m) => MethodInfo AudioInfoFreeMethodInfo AudioInfo signature where overloadedMethod _ = audioInfoFree -- method AudioInfo::from_caps -- method type : OrdinaryMethod -- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "caps", argType = TInterface "Gst" "Caps", 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_info_from_caps" gst_audio_info_from_caps :: Ptr AudioInfo -> -- _obj : TInterface "GstAudio" "AudioInfo" Ptr Gst.Caps -> -- caps : TInterface "Gst" "Caps" IO CInt audioInfoFromCaps :: (MonadIO m) => AudioInfo -- _obj -> Gst.Caps -- caps -> m Bool -- result audioInfoFromCaps _obj caps = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj let caps' = unsafeManagedPtrGetPtr caps result <- gst_audio_info_from_caps _obj' caps' let result' = (/= 0) result touchManagedPtr _obj touchManagedPtr caps return result' data AudioInfoFromCapsMethodInfo instance (signature ~ (Gst.Caps -> m Bool), MonadIO m) => MethodInfo AudioInfoFromCapsMethodInfo AudioInfo signature where overloadedMethod _ = audioInfoFromCaps -- method AudioInfo::init -- method type : OrdinaryMethod -- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : TBasicType TVoid -- throws : False -- Skip return : False foreign import ccall "gst_audio_info_init" gst_audio_info_init :: Ptr AudioInfo -> -- _obj : TInterface "GstAudio" "AudioInfo" IO () audioInfoInit :: (MonadIO m) => AudioInfo -- _obj -> m () -- result audioInfoInit _obj = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj gst_audio_info_init _obj' touchManagedPtr _obj return () data AudioInfoInitMethodInfo instance (signature ~ (m ()), MonadIO m) => MethodInfo AudioInfoInitMethodInfo AudioInfo signature where overloadedMethod _ = audioInfoInit -- method AudioInfo::is_equal -- method type : OrdinaryMethod -- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "other", argType = TInterface "GstAudio" "AudioInfo", 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_info_is_equal" gst_audio_info_is_equal :: Ptr AudioInfo -> -- _obj : TInterface "GstAudio" "AudioInfo" Ptr AudioInfo -> -- other : TInterface "GstAudio" "AudioInfo" IO CInt audioInfoIsEqual :: (MonadIO m) => AudioInfo -- _obj -> AudioInfo -- other -> m Bool -- result audioInfoIsEqual _obj other = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj let other' = unsafeManagedPtrGetPtr other result <- gst_audio_info_is_equal _obj' other' let result' = (/= 0) result touchManagedPtr _obj touchManagedPtr other return result' data AudioInfoIsEqualMethodInfo instance (signature ~ (AudioInfo -> m Bool), MonadIO m) => MethodInfo AudioInfoIsEqualMethodInfo AudioInfo signature where overloadedMethod _ = audioInfoIsEqual -- method AudioInfo::set_format -- method type : OrdinaryMethod -- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioInfo", 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 = "rate", argType = TBasicType TInt32, 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 = "position", argType = TInterface "GstAudio" "AudioChannelPosition", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : TBasicType TVoid -- throws : False -- Skip return : False foreign import ccall "gst_audio_info_set_format" gst_audio_info_set_format :: Ptr AudioInfo -> -- _obj : TInterface "GstAudio" "AudioInfo" CUInt -> -- format : TInterface "GstAudio" "AudioFormat" Int32 -> -- rate : TBasicType TInt32 Int32 -> -- channels : TBasicType TInt32 CUInt -> -- position : TInterface "GstAudio" "AudioChannelPosition" IO () audioInfoSetFormat :: (MonadIO m) => AudioInfo -- _obj -> AudioFormat -- format -> Int32 -- rate -> Int32 -- channels -> AudioChannelPosition -- position -> m () -- result audioInfoSetFormat _obj format rate channels position = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj let format' = (fromIntegral . fromEnum) format let position' = (fromIntegral . fromEnum) position gst_audio_info_set_format _obj' format' rate channels position' touchManagedPtr _obj return () data AudioInfoSetFormatMethodInfo instance (signature ~ (AudioFormat -> Int32 -> Int32 -> AudioChannelPosition -> m ()), MonadIO m) => MethodInfo AudioInfoSetFormatMethodInfo AudioInfo signature where overloadedMethod _ = audioInfoSetFormat -- method AudioInfo::to_caps -- method type : OrdinaryMethod -- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : TInterface "Gst" "Caps" -- throws : False -- Skip return : False foreign import ccall "gst_audio_info_to_caps" gst_audio_info_to_caps :: Ptr AudioInfo -> -- _obj : TInterface "GstAudio" "AudioInfo" IO (Ptr Gst.Caps) audioInfoToCaps :: (MonadIO m) => AudioInfo -- _obj -> m Gst.Caps -- result audioInfoToCaps _obj = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj result <- gst_audio_info_to_caps _obj' checkUnexpectedReturnNULL "gst_audio_info_to_caps" result result' <- (wrapBoxed Gst.Caps) result touchManagedPtr _obj return result' data AudioInfoToCapsMethodInfo instance (signature ~ (m Gst.Caps), MonadIO m) => MethodInfo AudioInfoToCapsMethodInfo AudioInfo signature where overloadedMethod _ = audioInfoToCaps type family ResolveAudioInfoMethod (t :: Symbol) (o :: *) :: * where ResolveAudioInfoMethod "convert" o = AudioInfoConvertMethodInfo ResolveAudioInfoMethod "copy" o = AudioInfoCopyMethodInfo ResolveAudioInfoMethod "free" o = AudioInfoFreeMethodInfo ResolveAudioInfoMethod "fromCaps" o = AudioInfoFromCapsMethodInfo ResolveAudioInfoMethod "init" o = AudioInfoInitMethodInfo ResolveAudioInfoMethod "isEqual" o = AudioInfoIsEqualMethodInfo ResolveAudioInfoMethod "toCaps" o = AudioInfoToCapsMethodInfo ResolveAudioInfoMethod "setFormat" o = AudioInfoSetFormatMethodInfo ResolveAudioInfoMethod l o = MethodResolutionFailed l o instance (info ~ ResolveAudioInfoMethod t AudioInfo, MethodInfo info AudioInfo p) => IsLabelProxy t (AudioInfo -> p) where fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info) #if MIN_VERSION_base(4,9,0) instance (info ~ ResolveAudioInfoMethod t AudioInfo, MethodInfo info AudioInfo p) => IsLabel t (AudioInfo -> p) where fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info) #endif