packages feed

gi-gstaudio-0.1.6.13: GI/GstAudio/Objects/AudioClock.hs


{- |
Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
License    : LGPL-2.1
Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)
-}

module GI.GstAudio.Objects.AudioClock
    ( 

-- * Exported types
    AudioClock(..)                          ,
    AudioClockK                             ,
    toAudioClock                            ,
    noAudioClock                            ,


 -- * Methods
-- ** audioClockAdjust
    audioClockAdjust                        ,


-- ** audioClockGetTime
    audioClockGetTime                       ,


-- ** audioClockInvalidate
    audioClockInvalidate                    ,


-- ** audioClockNew
    audioClockNew                           ,


-- ** audioClockReset
    AudioClockResetMethodInfo               ,
    audioClockReset                         ,




    ) 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.GLib as GLib
import qualified GI.GObject as GObject
import qualified GI.Gst as Gst

newtype AudioClock = AudioClock (ForeignPtr AudioClock)
foreign import ccall "gst_audio_clock_get_type"
    c_gst_audio_clock_get_type :: IO GType

type instance ParentTypes AudioClock = AudioClockParentTypes
type AudioClockParentTypes = '[Gst.SystemClock, Gst.Clock, Gst.Object, GObject.Object]

instance GObject AudioClock where
    gobjectIsInitiallyUnowned _ = True
    gobjectType _ = c_gst_audio_clock_get_type
    

class GObject o => AudioClockK o
instance (GObject o, IsDescendantOf AudioClock o) => AudioClockK o

toAudioClock :: AudioClockK o => o -> IO AudioClock
toAudioClock = unsafeCastTo AudioClock

noAudioClock :: Maybe AudioClock
noAudioClock = Nothing

type family ResolveAudioClockMethod (t :: Symbol) (o :: *) :: * where
    ResolveAudioClockMethod "addControlBinding" o = Gst.ObjectAddControlBindingMethodInfo
    ResolveAudioClockMethod "addObservation" o = Gst.ClockAddObservationMethodInfo
    ResolveAudioClockMethod "addObservationUnapplied" o = Gst.ClockAddObservationUnappliedMethodInfo
    ResolveAudioClockMethod "adjustUnlocked" o = Gst.ClockAdjustUnlockedMethodInfo
    ResolveAudioClockMethod "adjustWithCalibration" o = Gst.ClockAdjustWithCalibrationMethodInfo
    ResolveAudioClockMethod "bindProperty" o = GObject.ObjectBindPropertyMethodInfo
    ResolveAudioClockMethod "bindPropertyFull" o = GObject.ObjectBindPropertyFullMethodInfo
    ResolveAudioClockMethod "defaultError" o = Gst.ObjectDefaultErrorMethodInfo
    ResolveAudioClockMethod "forceFloating" o = GObject.ObjectForceFloatingMethodInfo
    ResolveAudioClockMethod "freezeNotify" o = GObject.ObjectFreezeNotifyMethodInfo
    ResolveAudioClockMethod "hasActiveControlBindings" o = Gst.ObjectHasActiveControlBindingsMethodInfo
    ResolveAudioClockMethod "hasAncestor" o = Gst.ObjectHasAncestorMethodInfo
    ResolveAudioClockMethod "hasAsAncestor" o = Gst.ObjectHasAsAncestorMethodInfo
    ResolveAudioClockMethod "hasAsParent" o = Gst.ObjectHasAsParentMethodInfo
    ResolveAudioClockMethod "isFloating" o = GObject.ObjectIsFloatingMethodInfo
    ResolveAudioClockMethod "isSynced" o = Gst.ClockIsSyncedMethodInfo
    ResolveAudioClockMethod "newPeriodicId" o = Gst.ClockNewPeriodicIdMethodInfo
    ResolveAudioClockMethod "newSingleShotId" o = Gst.ClockNewSingleShotIdMethodInfo
    ResolveAudioClockMethod "notify" o = GObject.ObjectNotifyMethodInfo
    ResolveAudioClockMethod "notifyByPspec" o = GObject.ObjectNotifyByPspecMethodInfo
    ResolveAudioClockMethod "periodicIdReinit" o = Gst.ClockPeriodicIdReinitMethodInfo
    ResolveAudioClockMethod "refSink" o = GObject.ObjectRefSinkMethodInfo
    ResolveAudioClockMethod "removeControlBinding" o = Gst.ObjectRemoveControlBindingMethodInfo
    ResolveAudioClockMethod "replaceData" o = GObject.ObjectReplaceDataMethodInfo
    ResolveAudioClockMethod "replaceQdata" o = GObject.ObjectReplaceQdataMethodInfo
    ResolveAudioClockMethod "reset" o = AudioClockResetMethodInfo
    ResolveAudioClockMethod "runDispose" o = GObject.ObjectRunDisposeMethodInfo
    ResolveAudioClockMethod "singleShotIdReinit" o = Gst.ClockSingleShotIdReinitMethodInfo
    ResolveAudioClockMethod "stealData" o = GObject.ObjectStealDataMethodInfo
    ResolveAudioClockMethod "stealQdata" o = GObject.ObjectStealQdataMethodInfo
    ResolveAudioClockMethod "suggestNextSync" o = Gst.ObjectSuggestNextSyncMethodInfo
    ResolveAudioClockMethod "syncValues" o = Gst.ObjectSyncValuesMethodInfo
    ResolveAudioClockMethod "thawNotify" o = GObject.ObjectThawNotifyMethodInfo
    ResolveAudioClockMethod "unadjustUnlocked" o = Gst.ClockUnadjustUnlockedMethodInfo
    ResolveAudioClockMethod "unparent" o = Gst.ObjectUnparentMethodInfo
    ResolveAudioClockMethod "waitForSync" o = Gst.ClockWaitForSyncMethodInfo
    ResolveAudioClockMethod "watchClosure" o = GObject.ObjectWatchClosureMethodInfo
    ResolveAudioClockMethod "getCalibration" o = Gst.ClockGetCalibrationMethodInfo
    ResolveAudioClockMethod "getControlBinding" o = Gst.ObjectGetControlBindingMethodInfo
    ResolveAudioClockMethod "getControlRate" o = Gst.ObjectGetControlRateMethodInfo
    ResolveAudioClockMethod "getData" o = GObject.ObjectGetDataMethodInfo
    ResolveAudioClockMethod "getGValueArray" o = Gst.ObjectGetGValueArrayMethodInfo
    ResolveAudioClockMethod "getInternalTime" o = Gst.ClockGetInternalTimeMethodInfo
    ResolveAudioClockMethod "getMaster" o = Gst.ClockGetMasterMethodInfo
    ResolveAudioClockMethod "getName" o = Gst.ObjectGetNameMethodInfo
    ResolveAudioClockMethod "getParent" o = Gst.ObjectGetParentMethodInfo
    ResolveAudioClockMethod "getPathString" o = Gst.ObjectGetPathStringMethodInfo
    ResolveAudioClockMethod "getProperty" o = GObject.ObjectGetPropertyMethodInfo
    ResolveAudioClockMethod "getQdata" o = GObject.ObjectGetQdataMethodInfo
    ResolveAudioClockMethod "getResolution" o = Gst.ClockGetResolutionMethodInfo
    ResolveAudioClockMethod "getTimeout" o = Gst.ClockGetTimeoutMethodInfo
    ResolveAudioClockMethod "getValue" o = Gst.ObjectGetValueMethodInfo
    ResolveAudioClockMethod "getValueArray" o = Gst.ObjectGetValueArrayMethodInfo
    ResolveAudioClockMethod "setCalibration" o = Gst.ClockSetCalibrationMethodInfo
    ResolveAudioClockMethod "setControlBindingDisabled" o = Gst.ObjectSetControlBindingDisabledMethodInfo
    ResolveAudioClockMethod "setControlBindingsDisabled" o = Gst.ObjectSetControlBindingsDisabledMethodInfo
    ResolveAudioClockMethod "setControlRate" o = Gst.ObjectSetControlRateMethodInfo
    ResolveAudioClockMethod "setData" o = GObject.ObjectSetDataMethodInfo
    ResolveAudioClockMethod "setMaster" o = Gst.ClockSetMasterMethodInfo
    ResolveAudioClockMethod "setName" o = Gst.ObjectSetNameMethodInfo
    ResolveAudioClockMethod "setParent" o = Gst.ObjectSetParentMethodInfo
    ResolveAudioClockMethod "setProperty" o = GObject.ObjectSetPropertyMethodInfo
    ResolveAudioClockMethod "setResolution" o = Gst.ClockSetResolutionMethodInfo
    ResolveAudioClockMethod "setSynced" o = Gst.ClockSetSyncedMethodInfo
    ResolveAudioClockMethod "setTimeout" o = Gst.ClockSetTimeoutMethodInfo
    ResolveAudioClockMethod l o = MethodResolutionFailed l o

instance (info ~ ResolveAudioClockMethod t AudioClock, MethodInfo info AudioClock p) => IsLabelProxy t (AudioClock -> p) where
    fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info)

#if MIN_VERSION_base(4,9,0)
instance (info ~ ResolveAudioClockMethod t AudioClock, MethodInfo info AudioClock p) => IsLabel t (AudioClock -> p) where
    fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info)
#endif

type instance AttributeList AudioClock = AudioClockAttributeList
type AudioClockAttributeList = ('[ '("clockType", Gst.SystemClockClockTypePropertyInfo), '("name", Gst.ObjectNamePropertyInfo), '("parent", Gst.ObjectParentPropertyInfo), '("timeout", Gst.ClockTimeoutPropertyInfo), '("windowSize", Gst.ClockWindowSizePropertyInfo), '("windowThreshold", Gst.ClockWindowThresholdPropertyInfo)] :: [(Symbol, *)])

type instance SignalList AudioClock = AudioClockSignalList
type AudioClockSignalList = ('[ '("deepNotify", Gst.ObjectDeepNotifySignalInfo), '("notify", GObject.ObjectNotifySignalInfo), '("synced", Gst.ClockSyncedSignalInfo)] :: [(Symbol, *)])

-- method AudioClock::new
-- method type : Constructor
-- Args : [Arg {argCName = "name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "func", argType = TInterface "GstAudio" "AudioClockGetTimeFunc", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeNotified, argClosure = 2, argDestroy = 3, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TVoid, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "destroy_notify", argType = TInterface "GLib" "DestroyNotify", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeAsync, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TInterface "GstAudio" "AudioClock"
-- throws : False
-- Skip return : False

foreign import ccall "gst_audio_clock_new" gst_audio_clock_new :: 
    CString ->                              -- name : TBasicType TUTF8
    FunPtr AudioClockGetTimeFuncC ->        -- func : TInterface "GstAudio" "AudioClockGetTimeFunc"
    Ptr () ->                               -- user_data : TBasicType TVoid
    FunPtr GLib.DestroyNotifyC ->           -- destroy_notify : TInterface "GLib" "DestroyNotify"
    IO (Ptr AudioClock)


audioClockNew ::
    (MonadIO m) =>
    T.Text                                  -- name
    -> AudioClockGetTimeFunc                -- func
    -> m AudioClock                         -- result
audioClockNew name func = liftIO $ do
    name' <- textToCString name
    func' <- mkAudioClockGetTimeFunc (audioClockGetTimeFuncWrapper Nothing func)
    let userData = castFunPtrToPtr func'
    let destroyNotify = safeFreeFunPtrPtr
    result <- gst_audio_clock_new name' func' userData destroyNotify
    checkUnexpectedReturnNULL "gst_audio_clock_new" result
    result' <- (newObject AudioClock) result
    freeMem name'
    return result'

-- method AudioClock::reset
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GstAudio" "AudioClock", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "time", argType = TBasicType TUInt64, 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_clock_reset" gst_audio_clock_reset :: 
    Ptr AudioClock ->                       -- _obj : TInterface "GstAudio" "AudioClock"
    Word64 ->                               -- time : TBasicType TUInt64
    IO ()


audioClockReset ::
    (MonadIO m, AudioClockK a) =>
    a                                       -- _obj
    -> Word64                               -- time
    -> m ()                                 -- result
audioClockReset _obj time = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    gst_audio_clock_reset _obj' time
    touchManagedPtr _obj
    return ()

data AudioClockResetMethodInfo
instance (signature ~ (Word64 -> m ()), MonadIO m, AudioClockK a) => MethodInfo AudioClockResetMethodInfo a signature where
    overloadedMethod _ = audioClockReset

-- method AudioClock::adjust
-- method type : MemberFunction
-- Args : [Arg {argCName = "clock", argType = TInterface "Gst" "Clock", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "time", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TBasicType TUInt64
-- throws : False
-- Skip return : False

foreign import ccall "gst_audio_clock_adjust" gst_audio_clock_adjust :: 
    Ptr Gst.Clock ->                        -- clock : TInterface "Gst" "Clock"
    Word64 ->                               -- time : TBasicType TUInt64
    IO Word64


audioClockAdjust ::
    (MonadIO m, Gst.ClockK a) =>
    a                                       -- clock
    -> Word64                               -- time
    -> m Word64                             -- result
audioClockAdjust clock time = liftIO $ do
    let clock' = unsafeManagedPtrCastPtr clock
    result <- gst_audio_clock_adjust clock' time
    touchManagedPtr clock
    return result

-- method AudioClock::get_time
-- method type : MemberFunction
-- Args : [Arg {argCName = "clock", argType = TInterface "Gst" "Clock", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : TBasicType TUInt64
-- throws : False
-- Skip return : False

foreign import ccall "gst_audio_clock_get_time" gst_audio_clock_get_time :: 
    Ptr Gst.Clock ->                        -- clock : TInterface "Gst" "Clock"
    IO Word64


audioClockGetTime ::
    (MonadIO m, Gst.ClockK a) =>
    a                                       -- clock
    -> m Word64                             -- result
audioClockGetTime clock = liftIO $ do
    let clock' = unsafeManagedPtrCastPtr clock
    result <- gst_audio_clock_get_time clock'
    touchManagedPtr clock
    return result

-- method AudioClock::invalidate
-- method type : MemberFunction
-- Args : [Arg {argCName = "clock", argType = TInterface "Gst" "Clock", 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_clock_invalidate" gst_audio_clock_invalidate :: 
    Ptr Gst.Clock ->                        -- clock : TInterface "Gst" "Clock"
    IO ()


audioClockInvalidate ::
    (MonadIO m, Gst.ClockK a) =>
    a                                       -- clock
    -> m ()                                 -- result
audioClockInvalidate clock = liftIO $ do
    let clock' = unsafeManagedPtrCastPtr clock
    gst_audio_clock_invalidate clock'
    touchManagedPtr clock
    return ()