{- | Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte License : LGPL-2.1 Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc) The structure containing the format specification of the ringbuffer. -} #define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \ && !defined(__HADDOCK_VERSION__)) module GI.GstAudio.Structs.AudioRingBufferSpec ( -- * Exported types AudioRingBufferSpec(..) , newZeroAudioRingBufferSpec , noAudioRingBufferSpec , -- * Properties -- ** bufferTime #attr:bufferTime# {- | the total buffer size in microseconds -} #if ENABLE_OVERLOADING audioRingBufferSpec_bufferTime , #endif getAudioRingBufferSpecBufferTime , setAudioRingBufferSpecBufferTime , -- ** caps #attr:caps# {- | The caps that generated the Spec. -} #if ENABLE_OVERLOADING audioRingBufferSpec_caps , #endif clearAudioRingBufferSpecCaps , getAudioRingBufferSpecCaps , setAudioRingBufferSpecCaps , -- ** info #attr:info# {- | the 'GI.GstAudio.Structs.AudioInfo.AudioInfo' -} #if ENABLE_OVERLOADING audioRingBufferSpec_info , #endif getAudioRingBufferSpecInfo , -- ** latencyTime #attr:latencyTime# {- | the latency in microseconds -} #if ENABLE_OVERLOADING audioRingBufferSpec_latencyTime , #endif getAudioRingBufferSpecLatencyTime , setAudioRingBufferSpecLatencyTime , -- ** seglatency #attr:seglatency# {- | number of segments queued in the lower level device, defaults to segtotal -} #if ENABLE_OVERLOADING audioRingBufferSpec_seglatency , #endif getAudioRingBufferSpecSeglatency , setAudioRingBufferSpecSeglatency , -- ** segsize #attr:segsize# {- | the size of one segment in bytes -} #if ENABLE_OVERLOADING audioRingBufferSpec_segsize , #endif getAudioRingBufferSpecSegsize , setAudioRingBufferSpecSegsize , -- ** segtotal #attr:segtotal# {- | the total number of segments -} #if ENABLE_OVERLOADING audioRingBufferSpec_segtotal , #endif getAudioRingBufferSpecSegtotal , setAudioRingBufferSpecSegtotal , -- ** type #attr:type# {- | the sample type -} #if ENABLE_OVERLOADING audioRingBufferSpec_type , #endif getAudioRingBufferSpecType , setAudioRingBufferSpecType , ) 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.Structs.Caps as Gst.Caps import {-# SOURCE #-} qualified GI.GstAudio.Enums as GstAudio.Enums import {-# SOURCE #-} qualified GI.GstAudio.Structs.AudioInfo as GstAudio.AudioInfo -- | Memory-managed wrapper type. newtype AudioRingBufferSpec = AudioRingBufferSpec (ManagedPtr AudioRingBufferSpec) instance WrappedPtr AudioRingBufferSpec where wrappedPtrCalloc = callocBytes 400 wrappedPtrCopy = \p -> withManagedPtr p (copyBytes 400 >=> wrapPtr AudioRingBufferSpec) wrappedPtrFree = Just ptr_to_g_free -- | Construct a `AudioRingBufferSpec` struct initialized to zero. newZeroAudioRingBufferSpec :: MonadIO m => m AudioRingBufferSpec newZeroAudioRingBufferSpec = liftIO $ wrappedPtrCalloc >>= wrapPtr AudioRingBufferSpec instance tag ~ 'AttrSet => Constructible AudioRingBufferSpec tag where new _ attrs = do o <- newZeroAudioRingBufferSpec GI.Attributes.set o attrs return o -- | A convenience alias for `Nothing` :: `Maybe` `AudioRingBufferSpec`. noAudioRingBufferSpec :: Maybe AudioRingBufferSpec noAudioRingBufferSpec = Nothing {- | Get the value of the “@caps@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' audioRingBufferSpec #caps @ -} getAudioRingBufferSpecCaps :: MonadIO m => AudioRingBufferSpec -> m (Maybe Gst.Caps.Caps) getAudioRingBufferSpecCaps s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 0) :: IO (Ptr Gst.Caps.Caps) result <- SP.convertIfNonNull val $ \val' -> do val'' <- (newBoxed Gst.Caps.Caps) val' return val'' return result {- | Set the value of the “@caps@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.set' audioRingBufferSpec [ #caps 'Data.GI.Base.Attributes.:=' value ] @ -} setAudioRingBufferSpecCaps :: MonadIO m => AudioRingBufferSpec -> Ptr Gst.Caps.Caps -> m () setAudioRingBufferSpecCaps s val = liftIO $ withManagedPtr s $ \ptr -> do poke (ptr `plusPtr` 0) (val :: Ptr Gst.Caps.Caps) {- | Set the value of the “@caps@” field to `Nothing`. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.clear' #caps @ -} clearAudioRingBufferSpecCaps :: MonadIO m => AudioRingBufferSpec -> m () clearAudioRingBufferSpecCaps s = liftIO $ withManagedPtr s $ \ptr -> do poke (ptr `plusPtr` 0) (FP.nullPtr :: Ptr Gst.Caps.Caps) #if ENABLE_OVERLOADING data AudioRingBufferSpecCapsFieldInfo instance AttrInfo AudioRingBufferSpecCapsFieldInfo where type AttrAllowedOps AudioRingBufferSpecCapsFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear] type AttrSetTypeConstraint AudioRingBufferSpecCapsFieldInfo = (~) (Ptr Gst.Caps.Caps) type AttrBaseTypeConstraint AudioRingBufferSpecCapsFieldInfo = (~) AudioRingBufferSpec type AttrGetType AudioRingBufferSpecCapsFieldInfo = Maybe Gst.Caps.Caps type AttrLabel AudioRingBufferSpecCapsFieldInfo = "caps" type AttrOrigin AudioRingBufferSpecCapsFieldInfo = AudioRingBufferSpec attrGet _ = getAudioRingBufferSpecCaps attrSet _ = setAudioRingBufferSpecCaps attrConstruct = undefined attrClear _ = clearAudioRingBufferSpecCaps audioRingBufferSpec_caps :: AttrLabelProxy "caps" audioRingBufferSpec_caps = AttrLabelProxy #endif {- | Get the value of the “@type@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' audioRingBufferSpec #type @ -} getAudioRingBufferSpecType :: MonadIO m => AudioRingBufferSpec -> m GstAudio.Enums.AudioRingBufferFormatType getAudioRingBufferSpecType s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 8) :: IO CUInt let val' = (toEnum . fromIntegral) val return val' {- | Set the value of the “@type@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.set' audioRingBufferSpec [ #type 'Data.GI.Base.Attributes.:=' value ] @ -} setAudioRingBufferSpecType :: MonadIO m => AudioRingBufferSpec -> GstAudio.Enums.AudioRingBufferFormatType -> m () setAudioRingBufferSpecType s val = liftIO $ withManagedPtr s $ \ptr -> do let val' = (fromIntegral . fromEnum) val poke (ptr `plusPtr` 8) (val' :: CUInt) #if ENABLE_OVERLOADING data AudioRingBufferSpecTypeFieldInfo instance AttrInfo AudioRingBufferSpecTypeFieldInfo where type AttrAllowedOps AudioRingBufferSpecTypeFieldInfo = '[ 'AttrSet, 'AttrGet] type AttrSetTypeConstraint AudioRingBufferSpecTypeFieldInfo = (~) GstAudio.Enums.AudioRingBufferFormatType type AttrBaseTypeConstraint AudioRingBufferSpecTypeFieldInfo = (~) AudioRingBufferSpec type AttrGetType AudioRingBufferSpecTypeFieldInfo = GstAudio.Enums.AudioRingBufferFormatType type AttrLabel AudioRingBufferSpecTypeFieldInfo = "type" type AttrOrigin AudioRingBufferSpecTypeFieldInfo = AudioRingBufferSpec attrGet _ = getAudioRingBufferSpecType attrSet _ = setAudioRingBufferSpecType attrConstruct = undefined attrClear _ = undefined audioRingBufferSpec_type :: AttrLabelProxy "type" audioRingBufferSpec_type = AttrLabelProxy #endif {- | Get the value of the “@info@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' audioRingBufferSpec #info @ -} getAudioRingBufferSpecInfo :: MonadIO m => AudioRingBufferSpec -> m GstAudio.AudioInfo.AudioInfo getAudioRingBufferSpecInfo s = liftIO $ withManagedPtr s $ \ptr -> do let val = ptr `plusPtr` 16 :: (Ptr GstAudio.AudioInfo.AudioInfo) val' <- (newBoxed GstAudio.AudioInfo.AudioInfo) val return val' #if ENABLE_OVERLOADING data AudioRingBufferSpecInfoFieldInfo instance AttrInfo AudioRingBufferSpecInfoFieldInfo where type AttrAllowedOps AudioRingBufferSpecInfoFieldInfo = '[ 'AttrGet] type AttrSetTypeConstraint AudioRingBufferSpecInfoFieldInfo = (~) (Ptr GstAudio.AudioInfo.AudioInfo) type AttrBaseTypeConstraint AudioRingBufferSpecInfoFieldInfo = (~) AudioRingBufferSpec type AttrGetType AudioRingBufferSpecInfoFieldInfo = GstAudio.AudioInfo.AudioInfo type AttrLabel AudioRingBufferSpecInfoFieldInfo = "info" type AttrOrigin AudioRingBufferSpecInfoFieldInfo = AudioRingBufferSpec attrGet _ = getAudioRingBufferSpecInfo attrSet _ = undefined attrConstruct = undefined attrClear _ = undefined audioRingBufferSpec_info :: AttrLabelProxy "info" audioRingBufferSpec_info = AttrLabelProxy #endif {- | Get the value of the “@latency_time@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' audioRingBufferSpec #latencyTime @ -} getAudioRingBufferSpecLatencyTime :: MonadIO m => AudioRingBufferSpec -> m Word64 getAudioRingBufferSpecLatencyTime s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 336) :: IO Word64 return val {- | Set the value of the “@latency_time@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.set' audioRingBufferSpec [ #latencyTime 'Data.GI.Base.Attributes.:=' value ] @ -} setAudioRingBufferSpecLatencyTime :: MonadIO m => AudioRingBufferSpec -> Word64 -> m () setAudioRingBufferSpecLatencyTime s val = liftIO $ withManagedPtr s $ \ptr -> do poke (ptr `plusPtr` 336) (val :: Word64) #if ENABLE_OVERLOADING data AudioRingBufferSpecLatencyTimeFieldInfo instance AttrInfo AudioRingBufferSpecLatencyTimeFieldInfo where type AttrAllowedOps AudioRingBufferSpecLatencyTimeFieldInfo = '[ 'AttrSet, 'AttrGet] type AttrSetTypeConstraint AudioRingBufferSpecLatencyTimeFieldInfo = (~) Word64 type AttrBaseTypeConstraint AudioRingBufferSpecLatencyTimeFieldInfo = (~) AudioRingBufferSpec type AttrGetType AudioRingBufferSpecLatencyTimeFieldInfo = Word64 type AttrLabel AudioRingBufferSpecLatencyTimeFieldInfo = "latency_time" type AttrOrigin AudioRingBufferSpecLatencyTimeFieldInfo = AudioRingBufferSpec attrGet _ = getAudioRingBufferSpecLatencyTime attrSet _ = setAudioRingBufferSpecLatencyTime attrConstruct = undefined attrClear _ = undefined audioRingBufferSpec_latencyTime :: AttrLabelProxy "latencyTime" audioRingBufferSpec_latencyTime = AttrLabelProxy #endif {- | Get the value of the “@buffer_time@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' audioRingBufferSpec #bufferTime @ -} getAudioRingBufferSpecBufferTime :: MonadIO m => AudioRingBufferSpec -> m Word64 getAudioRingBufferSpecBufferTime s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 344) :: IO Word64 return val {- | Set the value of the “@buffer_time@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.set' audioRingBufferSpec [ #bufferTime 'Data.GI.Base.Attributes.:=' value ] @ -} setAudioRingBufferSpecBufferTime :: MonadIO m => AudioRingBufferSpec -> Word64 -> m () setAudioRingBufferSpecBufferTime s val = liftIO $ withManagedPtr s $ \ptr -> do poke (ptr `plusPtr` 344) (val :: Word64) #if ENABLE_OVERLOADING data AudioRingBufferSpecBufferTimeFieldInfo instance AttrInfo AudioRingBufferSpecBufferTimeFieldInfo where type AttrAllowedOps AudioRingBufferSpecBufferTimeFieldInfo = '[ 'AttrSet, 'AttrGet] type AttrSetTypeConstraint AudioRingBufferSpecBufferTimeFieldInfo = (~) Word64 type AttrBaseTypeConstraint AudioRingBufferSpecBufferTimeFieldInfo = (~) AudioRingBufferSpec type AttrGetType AudioRingBufferSpecBufferTimeFieldInfo = Word64 type AttrLabel AudioRingBufferSpecBufferTimeFieldInfo = "buffer_time" type AttrOrigin AudioRingBufferSpecBufferTimeFieldInfo = AudioRingBufferSpec attrGet _ = getAudioRingBufferSpecBufferTime attrSet _ = setAudioRingBufferSpecBufferTime attrConstruct = undefined attrClear _ = undefined audioRingBufferSpec_bufferTime :: AttrLabelProxy "bufferTime" audioRingBufferSpec_bufferTime = AttrLabelProxy #endif {- | Get the value of the “@segsize@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' audioRingBufferSpec #segsize @ -} getAudioRingBufferSpecSegsize :: MonadIO m => AudioRingBufferSpec -> m Int32 getAudioRingBufferSpecSegsize s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 352) :: IO Int32 return val {- | Set the value of the “@segsize@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.set' audioRingBufferSpec [ #segsize 'Data.GI.Base.Attributes.:=' value ] @ -} setAudioRingBufferSpecSegsize :: MonadIO m => AudioRingBufferSpec -> Int32 -> m () setAudioRingBufferSpecSegsize s val = liftIO $ withManagedPtr s $ \ptr -> do poke (ptr `plusPtr` 352) (val :: Int32) #if ENABLE_OVERLOADING data AudioRingBufferSpecSegsizeFieldInfo instance AttrInfo AudioRingBufferSpecSegsizeFieldInfo where type AttrAllowedOps AudioRingBufferSpecSegsizeFieldInfo = '[ 'AttrSet, 'AttrGet] type AttrSetTypeConstraint AudioRingBufferSpecSegsizeFieldInfo = (~) Int32 type AttrBaseTypeConstraint AudioRingBufferSpecSegsizeFieldInfo = (~) AudioRingBufferSpec type AttrGetType AudioRingBufferSpecSegsizeFieldInfo = Int32 type AttrLabel AudioRingBufferSpecSegsizeFieldInfo = "segsize" type AttrOrigin AudioRingBufferSpecSegsizeFieldInfo = AudioRingBufferSpec attrGet _ = getAudioRingBufferSpecSegsize attrSet _ = setAudioRingBufferSpecSegsize attrConstruct = undefined attrClear _ = undefined audioRingBufferSpec_segsize :: AttrLabelProxy "segsize" audioRingBufferSpec_segsize = AttrLabelProxy #endif {- | Get the value of the “@segtotal@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' audioRingBufferSpec #segtotal @ -} getAudioRingBufferSpecSegtotal :: MonadIO m => AudioRingBufferSpec -> m Int32 getAudioRingBufferSpecSegtotal s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 356) :: IO Int32 return val {- | Set the value of the “@segtotal@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.set' audioRingBufferSpec [ #segtotal 'Data.GI.Base.Attributes.:=' value ] @ -} setAudioRingBufferSpecSegtotal :: MonadIO m => AudioRingBufferSpec -> Int32 -> m () setAudioRingBufferSpecSegtotal s val = liftIO $ withManagedPtr s $ \ptr -> do poke (ptr `plusPtr` 356) (val :: Int32) #if ENABLE_OVERLOADING data AudioRingBufferSpecSegtotalFieldInfo instance AttrInfo AudioRingBufferSpecSegtotalFieldInfo where type AttrAllowedOps AudioRingBufferSpecSegtotalFieldInfo = '[ 'AttrSet, 'AttrGet] type AttrSetTypeConstraint AudioRingBufferSpecSegtotalFieldInfo = (~) Int32 type AttrBaseTypeConstraint AudioRingBufferSpecSegtotalFieldInfo = (~) AudioRingBufferSpec type AttrGetType AudioRingBufferSpecSegtotalFieldInfo = Int32 type AttrLabel AudioRingBufferSpecSegtotalFieldInfo = "segtotal" type AttrOrigin AudioRingBufferSpecSegtotalFieldInfo = AudioRingBufferSpec attrGet _ = getAudioRingBufferSpecSegtotal attrSet _ = setAudioRingBufferSpecSegtotal attrConstruct = undefined attrClear _ = undefined audioRingBufferSpec_segtotal :: AttrLabelProxy "segtotal" audioRingBufferSpec_segtotal = AttrLabelProxy #endif {- | Get the value of the “@seglatency@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.get' audioRingBufferSpec #seglatency @ -} getAudioRingBufferSpecSeglatency :: MonadIO m => AudioRingBufferSpec -> m Int32 getAudioRingBufferSpecSeglatency s = liftIO $ withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 360) :: IO Int32 return val {- | Set the value of the “@seglatency@” field. When is enabled, this is equivalent to @ 'Data.GI.Base.Attributes.set' audioRingBufferSpec [ #seglatency 'Data.GI.Base.Attributes.:=' value ] @ -} setAudioRingBufferSpecSeglatency :: MonadIO m => AudioRingBufferSpec -> Int32 -> m () setAudioRingBufferSpecSeglatency s val = liftIO $ withManagedPtr s $ \ptr -> do poke (ptr `plusPtr` 360) (val :: Int32) #if ENABLE_OVERLOADING data AudioRingBufferSpecSeglatencyFieldInfo instance AttrInfo AudioRingBufferSpecSeglatencyFieldInfo where type AttrAllowedOps AudioRingBufferSpecSeglatencyFieldInfo = '[ 'AttrSet, 'AttrGet] type AttrSetTypeConstraint AudioRingBufferSpecSeglatencyFieldInfo = (~) Int32 type AttrBaseTypeConstraint AudioRingBufferSpecSeglatencyFieldInfo = (~) AudioRingBufferSpec type AttrGetType AudioRingBufferSpecSeglatencyFieldInfo = Int32 type AttrLabel AudioRingBufferSpecSeglatencyFieldInfo = "seglatency" type AttrOrigin AudioRingBufferSpecSeglatencyFieldInfo = AudioRingBufferSpec attrGet _ = getAudioRingBufferSpecSeglatency attrSet _ = setAudioRingBufferSpecSeglatency attrConstruct = undefined attrClear _ = undefined audioRingBufferSpec_seglatency :: AttrLabelProxy "seglatency" audioRingBufferSpec_seglatency = AttrLabelProxy #endif #if ENABLE_OVERLOADING instance O.HasAttributeList AudioRingBufferSpec type instance O.AttributeList AudioRingBufferSpec = AudioRingBufferSpecAttributeList type AudioRingBufferSpecAttributeList = ('[ '("caps", AudioRingBufferSpecCapsFieldInfo), '("type", AudioRingBufferSpecTypeFieldInfo), '("info", AudioRingBufferSpecInfoFieldInfo), '("latencyTime", AudioRingBufferSpecLatencyTimeFieldInfo), '("bufferTime", AudioRingBufferSpecBufferTimeFieldInfo), '("segsize", AudioRingBufferSpecSegsizeFieldInfo), '("segtotal", AudioRingBufferSpecSegtotalFieldInfo), '("seglatency", AudioRingBufferSpecSeglatencyFieldInfo)] :: [(Symbol, *)]) #endif #if ENABLE_OVERLOADING type family ResolveAudioRingBufferSpecMethod (t :: Symbol) (o :: *) :: * where ResolveAudioRingBufferSpecMethod l o = O.MethodResolutionFailed l o instance (info ~ ResolveAudioRingBufferSpecMethod t AudioRingBufferSpec, O.MethodInfo info AudioRingBufferSpec p) => OL.IsLabel t (AudioRingBufferSpec -> p) where #if MIN_VERSION_base(4,10,0) fromLabel = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #else fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #endif #endif