{- | Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte License : LGPL-2.1 Maintainer : Iñaki García Etxebarria (garetxe@gmail.com) The structure containing the format specification of the ringbuffer. -} module GI.GstAudio.Structs.AudioRingBufferSpec ( -- * Exported types AudioRingBufferSpec(..) , newZeroAudioRingBufferSpec , noAudioRingBufferSpec , -- * Properties -- ** BufferTime audioRingBufferSpecReadBufferTime , -- ** Caps audioRingBufferSpecReadCaps , -- ** Info audioRingBufferSpecReadInfo , -- ** LatencyTime audioRingBufferSpecReadLatencyTime , -- ** Seglatency audioRingBufferSpecReadSeglatency , -- ** Segsize audioRingBufferSpecReadSegsize , -- ** Segtotal audioRingBufferSpecReadSegtotal , -- ** Type audioRingBufferSpecReadType , ) 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 AudioRingBufferSpec = AudioRingBufferSpec (ForeignPtr AudioRingBufferSpec) -- | Construct a `AudioRingBufferSpec` struct initialized to zero. newZeroAudioRingBufferSpec :: MonadIO m => m AudioRingBufferSpec newZeroAudioRingBufferSpec = liftIO $ callocBytes 400 >>= wrapPtr AudioRingBufferSpec noAudioRingBufferSpec :: Maybe AudioRingBufferSpec noAudioRingBufferSpec = Nothing audioRingBufferSpecReadCaps :: AudioRingBufferSpec -> IO Gst.Caps audioRingBufferSpecReadCaps s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 0) :: IO (Ptr Gst.Caps) val' <- (newBoxed Gst.Caps) val return val' audioRingBufferSpecReadType :: AudioRingBufferSpec -> IO AudioRingBufferFormatType audioRingBufferSpecReadType s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 8) :: IO CUInt let val' = (toEnum . fromIntegral) val return val' audioRingBufferSpecReadInfo :: AudioRingBufferSpec -> IO AudioInfo audioRingBufferSpecReadInfo s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 16) :: IO (Ptr AudioInfo) val' <- (newBoxed AudioInfo) val return val' audioRingBufferSpecReadLatencyTime :: AudioRingBufferSpec -> IO Word64 audioRingBufferSpecReadLatencyTime s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 336) :: IO Word64 return val audioRingBufferSpecReadBufferTime :: AudioRingBufferSpec -> IO Word64 audioRingBufferSpecReadBufferTime s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 344) :: IO Word64 return val audioRingBufferSpecReadSegsize :: AudioRingBufferSpec -> IO Int32 audioRingBufferSpecReadSegsize s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 352) :: IO Int32 return val audioRingBufferSpecReadSegtotal :: AudioRingBufferSpec -> IO Int32 audioRingBufferSpecReadSegtotal s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 356) :: IO Int32 return val audioRingBufferSpecReadSeglatency :: AudioRingBufferSpec -> IO Int32 audioRingBufferSpecReadSeglatency s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 360) :: IO Int32 return val type family ResolveAudioRingBufferSpecMethod (t :: Symbol) (o :: *) :: * where ResolveAudioRingBufferSpecMethod l o = MethodResolutionFailed l o instance (info ~ ResolveAudioRingBufferSpecMethod t AudioRingBufferSpec, MethodInfo info AudioRingBufferSpec p) => IsLabelProxy t (AudioRingBufferSpec -> p) where fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info) #if MIN_VERSION_base(4,9,0) instance (info ~ ResolveAudioRingBufferSpecMethod t AudioRingBufferSpec, MethodInfo info AudioRingBufferSpec p) => IsLabel t (AudioRingBufferSpec -> p) where fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info) #endif