gi-gstaudio-1.0.17: GI/GstAudio/Structs/AudioStreamAlign.hs
{- |
Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte
License : LGPL-2.1
Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
'GI.GstAudio.Structs.AudioStreamAlign.AudioStreamAlign' provides a helper object that helps tracking audio
stream alignment and discontinuities, and detects discontinuities if
possible.
See 'GI.GstAudio.Structs.AudioStreamAlign.audioStreamAlignNew' for a description of its parameters and
'GI.GstAudio.Structs.AudioStreamAlign.audioStreamAlignProcess' for the details of the processing.
/Since: 1.14/
-}
#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
&& !defined(__HADDOCK_VERSION__))
module GI.GstAudio.Structs.AudioStreamAlign
(
-- * Exported types
AudioStreamAlign(..) ,
noAudioStreamAlign ,
-- * Methods
-- ** copy #method:copy#
#if ENABLE_OVERLOADING
AudioStreamAlignCopyMethodInfo ,
#endif
audioStreamAlignCopy ,
-- ** free #method:free#
#if ENABLE_OVERLOADING
AudioStreamAlignFreeMethodInfo ,
#endif
audioStreamAlignFree ,
-- ** getAlignmentThreshold #method:getAlignmentThreshold#
#if ENABLE_OVERLOADING
AudioStreamAlignGetAlignmentThresholdMethodInfo,
#endif
audioStreamAlignGetAlignmentThreshold ,
-- ** getDiscontWait #method:getDiscontWait#
#if ENABLE_OVERLOADING
AudioStreamAlignGetDiscontWaitMethodInfo,
#endif
audioStreamAlignGetDiscontWait ,
-- ** getRate #method:getRate#
#if ENABLE_OVERLOADING
AudioStreamAlignGetRateMethodInfo ,
#endif
audioStreamAlignGetRate ,
-- ** getSamplesSinceDiscont #method:getSamplesSinceDiscont#
#if ENABLE_OVERLOADING
AudioStreamAlignGetSamplesSinceDiscontMethodInfo,
#endif
audioStreamAlignGetSamplesSinceDiscont ,
-- ** getTimestampAtDiscont #method:getTimestampAtDiscont#
#if ENABLE_OVERLOADING
AudioStreamAlignGetTimestampAtDiscontMethodInfo,
#endif
audioStreamAlignGetTimestampAtDiscont ,
-- ** markDiscont #method:markDiscont#
#if ENABLE_OVERLOADING
AudioStreamAlignMarkDiscontMethodInfo ,
#endif
audioStreamAlignMarkDiscont ,
-- ** new #method:new#
audioStreamAlignNew ,
-- ** process #method:process#
#if ENABLE_OVERLOADING
AudioStreamAlignProcessMethodInfo ,
#endif
audioStreamAlignProcess ,
-- ** setAlignmentThreshold #method:setAlignmentThreshold#
#if ENABLE_OVERLOADING
AudioStreamAlignSetAlignmentThresholdMethodInfo,
#endif
audioStreamAlignSetAlignmentThreshold ,
-- ** setDiscontWait #method:setDiscontWait#
#if ENABLE_OVERLOADING
AudioStreamAlignSetDiscontWaitMethodInfo,
#endif
audioStreamAlignSetDiscontWait ,
-- ** setRate #method:setRate#
#if ENABLE_OVERLOADING
AudioStreamAlignSetRateMethodInfo ,
#endif
audioStreamAlignSetRate ,
) 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
-- | Memory-managed wrapper type.
newtype AudioStreamAlign = AudioStreamAlign (ManagedPtr AudioStreamAlign)
foreign import ccall "gst_audio_stream_align_get_type" c_gst_audio_stream_align_get_type ::
IO GType
instance BoxedObject AudioStreamAlign where
boxedType _ = c_gst_audio_stream_align_get_type
-- | A convenience alias for `Nothing` :: `Maybe` `AudioStreamAlign`.
noAudioStreamAlign :: Maybe AudioStreamAlign
noAudioStreamAlign = Nothing
#if ENABLE_OVERLOADING
instance O.HasAttributeList AudioStreamAlign
type instance O.AttributeList AudioStreamAlign = AudioStreamAlignAttributeList
type AudioStreamAlignAttributeList = ('[ ] :: [(Symbol, *)])
#endif
-- method AudioStreamAlign::new
-- method type : Constructor
-- Args : [Arg {argCName = "rate", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a sample rate", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "alignment_threshold", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a alignment threshold in nanoseconds", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "discont_wait", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "discont wait in nanoseconds", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"}))
-- throws : False
-- Skip return : False
foreign import ccall "gst_audio_stream_align_new" gst_audio_stream_align_new ::
Int32 -> -- rate : TBasicType TInt
Word64 -> -- alignment_threshold : TBasicType TUInt64
Word64 -> -- discont_wait : TBasicType TUInt64
IO (Ptr AudioStreamAlign)
{- |
Allocate a new 'GI.GstAudio.Structs.AudioStreamAlign.AudioStreamAlign' with the given configuration. All
processing happens according to sample rate /@rate@/, until
'GI.GstAudio.Structs.AudioStreamAlign.audioStreamAlignSetRate' is called with a new /@rate@/.
A negative rate can be used for reverse playback.
/@alignmentThreshold@/ gives the tolerance in nanoseconds after which a
timestamp difference is considered a discontinuity. Once detected,
/@discontWait@/ nanoseconds have to pass without going below the threshold
again until the output buffer is marked as a discontinuity. These can later
be re-configured with 'GI.GstAudio.Structs.AudioStreamAlign.audioStreamAlignSetAlignmentThreshold' and
'GI.GstAudio.Structs.AudioStreamAlign.audioStreamAlignSetDiscontWait'.
/Since: 1.14/
-}
audioStreamAlignNew ::
(B.CallStack.HasCallStack, MonadIO m) =>
Int32
{- ^ /@rate@/: a sample rate -}
-> Word64
{- ^ /@alignmentThreshold@/: a alignment threshold in nanoseconds -}
-> Word64
{- ^ /@discontWait@/: discont wait in nanoseconds -}
-> m AudioStreamAlign
{- ^ __Returns:__ a new 'GI.GstAudio.Structs.AudioStreamAlign.AudioStreamAlign'. free with 'GI.GstAudio.Structs.AudioStreamAlign.audioStreamAlignFree'. -}
audioStreamAlignNew rate alignmentThreshold discontWait = liftIO $ do
result <- gst_audio_stream_align_new rate alignmentThreshold discontWait
checkUnexpectedReturnNULL "audioStreamAlignNew" result
result' <- (wrapBoxed AudioStreamAlign) result
return result'
#if ENABLE_OVERLOADING
#endif
-- method AudioStreamAlign::copy
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "align", argType = TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioStreamAlign", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"}))
-- throws : False
-- Skip return : False
foreign import ccall "gst_audio_stream_align_copy" gst_audio_stream_align_copy ::
Ptr AudioStreamAlign -> -- align : TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"})
IO (Ptr AudioStreamAlign)
{- |
Copy a GstAudioStreamAlign structure.
/Since: 1.14/
-}
audioStreamAlignCopy ::
(B.CallStack.HasCallStack, MonadIO m) =>
AudioStreamAlign
{- ^ /@align@/: a 'GI.GstAudio.Structs.AudioStreamAlign.AudioStreamAlign' -}
-> m AudioStreamAlign
{- ^ __Returns:__ a new 'GI.GstAudio.Structs.AudioStreamAlign.AudioStreamAlign'. free with gst_audio_stream_align_free. -}
audioStreamAlignCopy align = liftIO $ do
align' <- unsafeManagedPtrGetPtr align
result <- gst_audio_stream_align_copy align'
checkUnexpectedReturnNULL "audioStreamAlignCopy" result
result' <- (wrapBoxed AudioStreamAlign) result
touchManagedPtr align
return result'
#if ENABLE_OVERLOADING
data AudioStreamAlignCopyMethodInfo
instance (signature ~ (m AudioStreamAlign), MonadIO m) => O.MethodInfo AudioStreamAlignCopyMethodInfo AudioStreamAlign signature where
overloadedMethod _ = audioStreamAlignCopy
#endif
-- method AudioStreamAlign::free
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "align", argType = TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioStreamAlign", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False
foreign import ccall "gst_audio_stream_align_free" gst_audio_stream_align_free ::
Ptr AudioStreamAlign -> -- align : TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"})
IO ()
{- |
Free a GstAudioStreamAlign structure previously allocated with 'GI.GstAudio.Structs.AudioStreamAlign.audioStreamAlignNew'
or 'GI.GstAudio.Structs.AudioStreamAlign.audioStreamAlignCopy'.
/Since: 1.14/
-}
audioStreamAlignFree ::
(B.CallStack.HasCallStack, MonadIO m) =>
AudioStreamAlign
{- ^ /@align@/: a 'GI.GstAudio.Structs.AudioStreamAlign.AudioStreamAlign' -}
-> m ()
audioStreamAlignFree align = liftIO $ do
align' <- unsafeManagedPtrGetPtr align
gst_audio_stream_align_free align'
touchManagedPtr align
return ()
#if ENABLE_OVERLOADING
data AudioStreamAlignFreeMethodInfo
instance (signature ~ (m ()), MonadIO m) => O.MethodInfo AudioStreamAlignFreeMethodInfo AudioStreamAlign signature where
overloadedMethod _ = audioStreamAlignFree
#endif
-- method AudioStreamAlign::get_alignment_threshold
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "align", argType = TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioStreamAlign", 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_stream_align_get_alignment_threshold" gst_audio_stream_align_get_alignment_threshold ::
Ptr AudioStreamAlign -> -- align : TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"})
IO Word64
{- |
Gets the currently configured alignment threshold.
/Since: 1.14/
-}
audioStreamAlignGetAlignmentThreshold ::
(B.CallStack.HasCallStack, MonadIO m) =>
AudioStreamAlign
{- ^ /@align@/: a 'GI.GstAudio.Structs.AudioStreamAlign.AudioStreamAlign' -}
-> m Word64
{- ^ __Returns:__ The currently configured alignment threshold -}
audioStreamAlignGetAlignmentThreshold align = liftIO $ do
align' <- unsafeManagedPtrGetPtr align
result <- gst_audio_stream_align_get_alignment_threshold align'
touchManagedPtr align
return result
#if ENABLE_OVERLOADING
data AudioStreamAlignGetAlignmentThresholdMethodInfo
instance (signature ~ (m Word64), MonadIO m) => O.MethodInfo AudioStreamAlignGetAlignmentThresholdMethodInfo AudioStreamAlign signature where
overloadedMethod _ = audioStreamAlignGetAlignmentThreshold
#endif
-- method AudioStreamAlign::get_discont_wait
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "align", argType = TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioStreamAlign", 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_stream_align_get_discont_wait" gst_audio_stream_align_get_discont_wait ::
Ptr AudioStreamAlign -> -- align : TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"})
IO Word64
{- |
Gets the currently configured discont wait.
/Since: 1.14/
-}
audioStreamAlignGetDiscontWait ::
(B.CallStack.HasCallStack, MonadIO m) =>
AudioStreamAlign
{- ^ /@align@/: a 'GI.GstAudio.Structs.AudioStreamAlign.AudioStreamAlign' -}
-> m Word64
{- ^ __Returns:__ The currently configured discont wait -}
audioStreamAlignGetDiscontWait align = liftIO $ do
align' <- unsafeManagedPtrGetPtr align
result <- gst_audio_stream_align_get_discont_wait align'
touchManagedPtr align
return result
#if ENABLE_OVERLOADING
data AudioStreamAlignGetDiscontWaitMethodInfo
instance (signature ~ (m Word64), MonadIO m) => O.MethodInfo AudioStreamAlignGetDiscontWaitMethodInfo AudioStreamAlign signature where
overloadedMethod _ = audioStreamAlignGetDiscontWait
#endif
-- method AudioStreamAlign::get_rate
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "align", argType = TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioStreamAlign", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TInt)
-- throws : False
-- Skip return : False
foreign import ccall "gst_audio_stream_align_get_rate" gst_audio_stream_align_get_rate ::
Ptr AudioStreamAlign -> -- align : TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"})
IO Int32
{- |
Gets the currently configured sample rate.
/Since: 1.14/
-}
audioStreamAlignGetRate ::
(B.CallStack.HasCallStack, MonadIO m) =>
AudioStreamAlign
{- ^ /@align@/: a 'GI.GstAudio.Structs.AudioStreamAlign.AudioStreamAlign' -}
-> m Int32
{- ^ __Returns:__ The currently configured sample rate -}
audioStreamAlignGetRate align = liftIO $ do
align' <- unsafeManagedPtrGetPtr align
result <- gst_audio_stream_align_get_rate align'
touchManagedPtr align
return result
#if ENABLE_OVERLOADING
data AudioStreamAlignGetRateMethodInfo
instance (signature ~ (m Int32), MonadIO m) => O.MethodInfo AudioStreamAlignGetRateMethodInfo AudioStreamAlign signature where
overloadedMethod _ = audioStreamAlignGetRate
#endif
-- method AudioStreamAlign::get_samples_since_discont
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "align", argType = TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioStreamAlign", 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_stream_align_get_samples_since_discont" gst_audio_stream_align_get_samples_since_discont ::
Ptr AudioStreamAlign -> -- align : TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"})
IO Word64
{- |
Returns the number of samples that were processed since the last
discontinuity was detected.
/Since: 1.14/
-}
audioStreamAlignGetSamplesSinceDiscont ::
(B.CallStack.HasCallStack, MonadIO m) =>
AudioStreamAlign
{- ^ /@align@/: a 'GI.GstAudio.Structs.AudioStreamAlign.AudioStreamAlign' -}
-> m Word64
{- ^ __Returns:__ The number of samples processed since the last discontinuity. -}
audioStreamAlignGetSamplesSinceDiscont align = liftIO $ do
align' <- unsafeManagedPtrGetPtr align
result <- gst_audio_stream_align_get_samples_since_discont align'
touchManagedPtr align
return result
#if ENABLE_OVERLOADING
data AudioStreamAlignGetSamplesSinceDiscontMethodInfo
instance (signature ~ (m Word64), MonadIO m) => O.MethodInfo AudioStreamAlignGetSamplesSinceDiscontMethodInfo AudioStreamAlign signature where
overloadedMethod _ = audioStreamAlignGetSamplesSinceDiscont
#endif
-- method AudioStreamAlign::get_timestamp_at_discont
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "align", argType = TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioStreamAlign", 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_stream_align_get_timestamp_at_discont" gst_audio_stream_align_get_timestamp_at_discont ::
Ptr AudioStreamAlign -> -- align : TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"})
IO Word64
{- |
Timestamp that was passed when a discontinuity was detected, i.e. the first
timestamp after the discontinuity.
/Since: 1.14/
-}
audioStreamAlignGetTimestampAtDiscont ::
(B.CallStack.HasCallStack, MonadIO m) =>
AudioStreamAlign
{- ^ /@align@/: a 'GI.GstAudio.Structs.AudioStreamAlign.AudioStreamAlign' -}
-> m Word64
{- ^ __Returns:__ The last timestamp at when a discontinuity was detected -}
audioStreamAlignGetTimestampAtDiscont align = liftIO $ do
align' <- unsafeManagedPtrGetPtr align
result <- gst_audio_stream_align_get_timestamp_at_discont align'
touchManagedPtr align
return result
#if ENABLE_OVERLOADING
data AudioStreamAlignGetTimestampAtDiscontMethodInfo
instance (signature ~ (m Word64), MonadIO m) => O.MethodInfo AudioStreamAlignGetTimestampAtDiscontMethodInfo AudioStreamAlign signature where
overloadedMethod _ = audioStreamAlignGetTimestampAtDiscont
#endif
-- method AudioStreamAlign::mark_discont
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "align", argType = TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioStreamAlign", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False
foreign import ccall "gst_audio_stream_align_mark_discont" gst_audio_stream_align_mark_discont ::
Ptr AudioStreamAlign -> -- align : TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"})
IO ()
{- |
Marks the next buffer as discontinuous and resets timestamp tracking.
/Since: 1.14/
-}
audioStreamAlignMarkDiscont ::
(B.CallStack.HasCallStack, MonadIO m) =>
AudioStreamAlign
{- ^ /@align@/: a 'GI.GstAudio.Structs.AudioStreamAlign.AudioStreamAlign' -}
-> m ()
audioStreamAlignMarkDiscont align = liftIO $ do
align' <- unsafeManagedPtrGetPtr align
gst_audio_stream_align_mark_discont align'
touchManagedPtr align
return ()
#if ENABLE_OVERLOADING
data AudioStreamAlignMarkDiscontMethodInfo
instance (signature ~ (m ()), MonadIO m) => O.MethodInfo AudioStreamAlignMarkDiscontMethodInfo AudioStreamAlign signature where
overloadedMethod _ = audioStreamAlignMarkDiscont
#endif
-- method AudioStreamAlign::process
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "align", argType = TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioStreamAlign", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "discont", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "if this data is considered to be discontinuous", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "timestamp", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstClockTime of the start of the data", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "n_samples", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "number of samples to process", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "out_timestamp", argType = TBasicType TUInt64, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "output timestamp of the data", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "out_duration", argType = TBasicType TUInt64, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "output duration of the data", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "out_sample_position", argType = TBasicType TUInt64, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "output sample position of the start of the data", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False
foreign import ccall "gst_audio_stream_align_process" gst_audio_stream_align_process ::
Ptr AudioStreamAlign -> -- align : TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"})
CInt -> -- discont : TBasicType TBoolean
Word64 -> -- timestamp : TBasicType TUInt64
Word32 -> -- n_samples : TBasicType TUInt
Ptr Word64 -> -- out_timestamp : TBasicType TUInt64
Ptr Word64 -> -- out_duration : TBasicType TUInt64
Ptr Word64 -> -- out_sample_position : TBasicType TUInt64
IO CInt
{- |
Processes data with /@timestamp@/ and /@nSamples@/, and returns the output
timestamp, duration and sample position together with a boolean to signal
whether a discontinuity was detected or not. All non-discontinuous data
will have perfect timestamps and durations.
A discontinuity is detected once the difference between the actual
timestamp and the timestamp calculated from the sample count since the last
discontinuity differs by more than the alignment threshold for a duration
longer than discont wait.
Note: In reverse playback, every buffer is considered discontinuous in the
context of buffer flags because the last sample of the previous buffer is
discontinuous with the first sample of the current one. However for this
function they are only considered discontinuous in reverse playback if the
first sample of the previous buffer is discontinuous with the last sample
of the current one.
/Since: 1.14/
-}
audioStreamAlignProcess ::
(B.CallStack.HasCallStack, MonadIO m) =>
AudioStreamAlign
{- ^ /@align@/: a 'GI.GstAudio.Structs.AudioStreamAlign.AudioStreamAlign' -}
-> Bool
{- ^ /@discont@/: if this data is considered to be discontinuous -}
-> Word64
{- ^ /@timestamp@/: a @/GstClockTime/@ of the start of the data -}
-> Word32
{- ^ /@nSamples@/: number of samples to process -}
-> m ((Bool, Word64, Word64, Word64))
{- ^ __Returns:__ 'True' if a discontinuity was detected, 'False' otherwise. -}
audioStreamAlignProcess align discont timestamp nSamples = liftIO $ do
align' <- unsafeManagedPtrGetPtr align
let discont' = (fromIntegral . fromEnum) discont
outTimestamp <- allocMem :: IO (Ptr Word64)
outDuration <- allocMem :: IO (Ptr Word64)
outSamplePosition <- allocMem :: IO (Ptr Word64)
result <- gst_audio_stream_align_process align' discont' timestamp nSamples outTimestamp outDuration outSamplePosition
let result' = (/= 0) result
outTimestamp' <- peek outTimestamp
outDuration' <- peek outDuration
outSamplePosition' <- peek outSamplePosition
touchManagedPtr align
freeMem outTimestamp
freeMem outDuration
freeMem outSamplePosition
return (result', outTimestamp', outDuration', outSamplePosition')
#if ENABLE_OVERLOADING
data AudioStreamAlignProcessMethodInfo
instance (signature ~ (Bool -> Word64 -> Word32 -> m ((Bool, Word64, Word64, Word64))), MonadIO m) => O.MethodInfo AudioStreamAlignProcessMethodInfo AudioStreamAlign signature where
overloadedMethod _ = audioStreamAlignProcess
#endif
-- method AudioStreamAlign::set_alignment_threshold
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "align", argType = TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioStreamAlign", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "alignment_threshold", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a new alignment threshold", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False
foreign import ccall "gst_audio_stream_align_set_alignment_threshold" gst_audio_stream_align_set_alignment_threshold ::
Ptr AudioStreamAlign -> -- align : TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"})
Word64 -> -- alignment_threshold : TBasicType TUInt64
IO ()
{- |
Sets /@alignmentTreshold@/ as new alignment threshold for the following processing.
/Since: 1.14/
-}
audioStreamAlignSetAlignmentThreshold ::
(B.CallStack.HasCallStack, MonadIO m) =>
AudioStreamAlign
{- ^ /@align@/: a 'GI.GstAudio.Structs.AudioStreamAlign.AudioStreamAlign' -}
-> Word64
{- ^ /@alignmentThreshold@/: a new alignment threshold -}
-> m ()
audioStreamAlignSetAlignmentThreshold align alignmentThreshold = liftIO $ do
align' <- unsafeManagedPtrGetPtr align
gst_audio_stream_align_set_alignment_threshold align' alignmentThreshold
touchManagedPtr align
return ()
#if ENABLE_OVERLOADING
data AudioStreamAlignSetAlignmentThresholdMethodInfo
instance (signature ~ (Word64 -> m ()), MonadIO m) => O.MethodInfo AudioStreamAlignSetAlignmentThresholdMethodInfo AudioStreamAlign signature where
overloadedMethod _ = audioStreamAlignSetAlignmentThreshold
#endif
-- method AudioStreamAlign::set_discont_wait
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "align", argType = TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioStreamAlign", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "discont_wait", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a new discont wait", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False
foreign import ccall "gst_audio_stream_align_set_discont_wait" gst_audio_stream_align_set_discont_wait ::
Ptr AudioStreamAlign -> -- align : TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"})
Word64 -> -- discont_wait : TBasicType TUInt64
IO ()
{- |
Sets /@alignmentTreshold@/ as new discont wait for the following processing.
/Since: 1.14/
-}
audioStreamAlignSetDiscontWait ::
(B.CallStack.HasCallStack, MonadIO m) =>
AudioStreamAlign
{- ^ /@align@/: a 'GI.GstAudio.Structs.AudioStreamAlign.AudioStreamAlign' -}
-> Word64
{- ^ /@discontWait@/: a new discont wait -}
-> m ()
audioStreamAlignSetDiscontWait align discontWait = liftIO $ do
align' <- unsafeManagedPtrGetPtr align
gst_audio_stream_align_set_discont_wait align' discontWait
touchManagedPtr align
return ()
#if ENABLE_OVERLOADING
data AudioStreamAlignSetDiscontWaitMethodInfo
instance (signature ~ (Word64 -> m ()), MonadIO m) => O.MethodInfo AudioStreamAlignSetDiscontWaitMethodInfo AudioStreamAlign signature where
overloadedMethod _ = audioStreamAlignSetDiscontWait
#endif
-- method AudioStreamAlign::set_rate
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "align", argType = TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstAudioStreamAlign", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "rate", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a new sample rate", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False
foreign import ccall "gst_audio_stream_align_set_rate" gst_audio_stream_align_set_rate ::
Ptr AudioStreamAlign -> -- align : TInterface (Name {namespace = "GstAudio", name = "AudioStreamAlign"})
Int32 -> -- rate : TBasicType TInt
IO ()
{- |
Sets /@rate@/ as new sample rate for the following processing. If the sample
rate differs this implicitely marks the next data as discontinuous.
/Since: 1.14/
-}
audioStreamAlignSetRate ::
(B.CallStack.HasCallStack, MonadIO m) =>
AudioStreamAlign
{- ^ /@align@/: a 'GI.GstAudio.Structs.AudioStreamAlign.AudioStreamAlign' -}
-> Int32
{- ^ /@rate@/: a new sample rate -}
-> m ()
audioStreamAlignSetRate align rate = liftIO $ do
align' <- unsafeManagedPtrGetPtr align
gst_audio_stream_align_set_rate align' rate
touchManagedPtr align
return ()
#if ENABLE_OVERLOADING
data AudioStreamAlignSetRateMethodInfo
instance (signature ~ (Int32 -> m ()), MonadIO m) => O.MethodInfo AudioStreamAlignSetRateMethodInfo AudioStreamAlign signature where
overloadedMethod _ = audioStreamAlignSetRate
#endif
#if ENABLE_OVERLOADING
type family ResolveAudioStreamAlignMethod (t :: Symbol) (o :: *) :: * where
ResolveAudioStreamAlignMethod "copy" o = AudioStreamAlignCopyMethodInfo
ResolveAudioStreamAlignMethod "free" o = AudioStreamAlignFreeMethodInfo
ResolveAudioStreamAlignMethod "markDiscont" o = AudioStreamAlignMarkDiscontMethodInfo
ResolveAudioStreamAlignMethod "process" o = AudioStreamAlignProcessMethodInfo
ResolveAudioStreamAlignMethod "getAlignmentThreshold" o = AudioStreamAlignGetAlignmentThresholdMethodInfo
ResolveAudioStreamAlignMethod "getDiscontWait" o = AudioStreamAlignGetDiscontWaitMethodInfo
ResolveAudioStreamAlignMethod "getRate" o = AudioStreamAlignGetRateMethodInfo
ResolveAudioStreamAlignMethod "getSamplesSinceDiscont" o = AudioStreamAlignGetSamplesSinceDiscontMethodInfo
ResolveAudioStreamAlignMethod "getTimestampAtDiscont" o = AudioStreamAlignGetTimestampAtDiscontMethodInfo
ResolveAudioStreamAlignMethod "setAlignmentThreshold" o = AudioStreamAlignSetAlignmentThresholdMethodInfo
ResolveAudioStreamAlignMethod "setDiscontWait" o = AudioStreamAlignSetDiscontWaitMethodInfo
ResolveAudioStreamAlignMethod "setRate" o = AudioStreamAlignSetRateMethodInfo
ResolveAudioStreamAlignMethod l o = O.MethodResolutionFailed l o
instance (info ~ ResolveAudioStreamAlignMethod t AudioStreamAlign, O.MethodInfo info AudioStreamAlign p) => OL.IsLabel t (AudioStreamAlign -> 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