{-# LANGUAGE TypeApplications #-}


-- | Copyright  : Will Thompson and Iñaki García Etxebarria
-- License    : LGPL-2.1
-- Maintainer : Iñaki García Etxebarria
-- 
-- This is the most simple base class for audio sinks that only requires
-- subclasses to implement a set of simple functions:
-- 
-- * @open()@ :Open the device.
-- 
-- * @prepare()@ :Configure the device with the specified format.
-- 
-- * @write()@ :Write samples to the device.
-- 
-- * @reset()@ :Unblock writes and flush the device.
-- 
-- * @delay()@ :Get the number of samples written but not yet played
-- by the device.
-- 
-- * @unprepare()@ :Undo operations done by prepare.
-- 
-- * @close()@ :Close the device.
-- 
-- All scheduling of samples and timestamps is done in this base class
-- together with t'GI.GstAudio.Objects.AudioBaseSink.AudioBaseSink' using a default implementation of a
-- t'GI.GstAudio.Objects.AudioRingBuffer.AudioRingBuffer' that uses threads.

#if (MIN_VERSION_haskell_gi_overloading(1,0,0) && !defined(__HADDOCK_VERSION__))
#define ENABLE_OVERLOADING
#endif

module GI.GstAudio.Objects.AudioSink
    ( 

-- * Exported types
    AudioSink(..)                           ,
    IsAudioSink                             ,
    toAudioSink                             ,


 -- * Methods
-- | 
-- 
--  === __Click to display all available methods, including inherited ones__
-- ==== Methods
-- [abortState]("GI.Gst.Objects.Element#g:method:abortState"), [addControlBinding]("GI.Gst.Objects.Object#g:method:addControlBinding"), [addPad]("GI.Gst.Objects.Element#g:method:addPad"), [addPropertyDeepNotifyWatch]("GI.Gst.Objects.Element#g:method:addPropertyDeepNotifyWatch"), [addPropertyNotifyWatch]("GI.Gst.Objects.Element#g:method:addPropertyNotifyWatch"), [bindProperty]("GI.GObject.Objects.Object#g:method:bindProperty"), [bindPropertyFull]("GI.GObject.Objects.Object#g:method:bindPropertyFull"), [callAsync]("GI.Gst.Objects.Element#g:method:callAsync"), [changeState]("GI.Gst.Objects.Element#g:method:changeState"), [continueState]("GI.Gst.Objects.Element#g:method:continueState"), [createAllPads]("GI.Gst.Objects.Element#g:method:createAllPads"), [createRingbuffer]("GI.GstAudio.Objects.AudioBaseSink#g:method:createRingbuffer"), [defaultError]("GI.Gst.Objects.Object#g:method:defaultError"), [doPreroll]("GI.GstBase.Objects.BaseSink#g:method:doPreroll"), [forceFloating]("GI.GObject.Objects.Object#g:method:forceFloating"), [foreachPad]("GI.Gst.Objects.Element#g:method:foreachPad"), [foreachSinkPad]("GI.Gst.Objects.Element#g:method:foreachSinkPad"), [foreachSrcPad]("GI.Gst.Objects.Element#g:method:foreachSrcPad"), [freezeNotify]("GI.GObject.Objects.Object#g:method:freezeNotify"), [getv]("GI.GObject.Objects.Object#g:method:getv"), [hasActiveControlBindings]("GI.Gst.Objects.Object#g:method:hasActiveControlBindings"), [hasAncestor]("GI.Gst.Objects.Object#g:method:hasAncestor"), [hasAsAncestor]("GI.Gst.Objects.Object#g:method:hasAsAncestor"), [hasAsParent]("GI.Gst.Objects.Object#g:method:hasAsParent"), [isAsyncEnabled]("GI.GstBase.Objects.BaseSink#g:method:isAsyncEnabled"), [isFloating]("GI.GObject.Objects.Object#g:method:isFloating"), [isLastSampleEnabled]("GI.GstBase.Objects.BaseSink#g:method:isLastSampleEnabled"), [isLockedState]("GI.Gst.Objects.Element#g:method:isLockedState"), [isQosEnabled]("GI.GstBase.Objects.BaseSink#g:method:isQosEnabled"), [iteratePads]("GI.Gst.Objects.Element#g:method:iteratePads"), [iterateSinkPads]("GI.Gst.Objects.Element#g:method:iterateSinkPads"), [iterateSrcPads]("GI.Gst.Objects.Element#g:method:iterateSrcPads"), [link]("GI.Gst.Objects.Element#g:method:link"), [linkFiltered]("GI.Gst.Objects.Element#g:method:linkFiltered"), [linkPads]("GI.Gst.Objects.Element#g:method:linkPads"), [linkPadsFiltered]("GI.Gst.Objects.Element#g:method:linkPadsFiltered"), [linkPadsFull]("GI.Gst.Objects.Element#g:method:linkPadsFull"), [lostState]("GI.Gst.Objects.Element#g:method:lostState"), [messageFull]("GI.Gst.Objects.Element#g:method:messageFull"), [messageFullWithDetails]("GI.Gst.Objects.Element#g:method:messageFullWithDetails"), [noMorePads]("GI.Gst.Objects.Element#g:method:noMorePads"), [notify]("GI.GObject.Objects.Object#g:method:notify"), [notifyByPspec]("GI.GObject.Objects.Object#g:method:notifyByPspec"), [postMessage]("GI.Gst.Objects.Element#g:method:postMessage"), [provideClock]("GI.Gst.Objects.Element#g:method:provideClock"), [query]("GI.Gst.Objects.Element#g:method:query"), [queryConvert]("GI.Gst.Objects.Element#g:method:queryConvert"), [queryDuration]("GI.Gst.Objects.Element#g:method:queryDuration"), [queryLatency]("GI.GstBase.Objects.BaseSink#g:method:queryLatency"), [queryPosition]("GI.Gst.Objects.Element#g:method:queryPosition"), [ref]("GI.Gst.Objects.Object#g:method:ref"), [refSink]("GI.GObject.Objects.Object#g:method:refSink"), [releaseRequestPad]("GI.Gst.Objects.Element#g:method:releaseRequestPad"), [removeControlBinding]("GI.Gst.Objects.Object#g:method:removeControlBinding"), [removePad]("GI.Gst.Objects.Element#g:method:removePad"), [removePropertyNotifyWatch]("GI.Gst.Objects.Element#g:method:removePropertyNotifyWatch"), [reportDeviceFailure]("GI.GstAudio.Objects.AudioBaseSink#g:method:reportDeviceFailure"), [requestPad]("GI.Gst.Objects.Element#g:method:requestPad"), [requestPadSimple]("GI.Gst.Objects.Element#g:method:requestPadSimple"), [runDispose]("GI.GObject.Objects.Object#g:method:runDispose"), [seek]("GI.Gst.Objects.Element#g:method:seek"), [seekSimple]("GI.Gst.Objects.Element#g:method:seekSimple"), [sendEvent]("GI.Gst.Objects.Element#g:method:sendEvent"), [stealData]("GI.GObject.Objects.Object#g:method:stealData"), [stealQdata]("GI.GObject.Objects.Object#g:method:stealQdata"), [suggestNextSync]("GI.Gst.Objects.Object#g:method:suggestNextSync"), [syncStateWithParent]("GI.Gst.Objects.Element#g:method:syncStateWithParent"), [syncValues]("GI.Gst.Objects.Object#g:method:syncValues"), [thawNotify]("GI.GObject.Objects.Object#g:method:thawNotify"), [unlink]("GI.Gst.Objects.Element#g:method:unlink"), [unlinkPads]("GI.Gst.Objects.Element#g:method:unlinkPads"), [unparent]("GI.Gst.Objects.Object#g:method:unparent"), [unref]("GI.Gst.Objects.Object#g:method:unref"), [wait]("GI.GstBase.Objects.BaseSink#g:method:wait"), [waitClock]("GI.GstBase.Objects.BaseSink#g:method:waitClock"), [waitPreroll]("GI.GstBase.Objects.BaseSink#g:method:waitPreroll"), [watchClosure]("GI.GObject.Objects.Object#g:method:watchClosure").
-- 
-- ==== Getters
-- [getAlignmentThreshold]("GI.GstAudio.Objects.AudioBaseSink#g:method:getAlignmentThreshold"), [getBaseTime]("GI.Gst.Objects.Element#g:method:getBaseTime"), [getBlocksize]("GI.GstBase.Objects.BaseSink#g:method:getBlocksize"), [getBus]("GI.Gst.Objects.Element#g:method:getBus"), [getClock]("GI.Gst.Objects.Element#g:method:getClock"), [getCompatiblePad]("GI.Gst.Objects.Element#g:method:getCompatiblePad"), [getCompatiblePadTemplate]("GI.Gst.Objects.Element#g:method:getCompatiblePadTemplate"), [getContext]("GI.Gst.Objects.Element#g:method:getContext"), [getContextUnlocked]("GI.Gst.Objects.Element#g:method:getContextUnlocked"), [getContexts]("GI.Gst.Objects.Element#g:method:getContexts"), [getControlBinding]("GI.Gst.Objects.Object#g:method:getControlBinding"), [getControlRate]("GI.Gst.Objects.Object#g:method:getControlRate"), [getCurrentClockTime]("GI.Gst.Objects.Element#g:method:getCurrentClockTime"), [getCurrentRunningTime]("GI.Gst.Objects.Element#g:method:getCurrentRunningTime"), [getData]("GI.GObject.Objects.Object#g:method:getData"), [getDiscontWait]("GI.GstAudio.Objects.AudioBaseSink#g:method:getDiscontWait"), [getDriftTolerance]("GI.GstAudio.Objects.AudioBaseSink#g:method:getDriftTolerance"), [getDropOutOfSegment]("GI.GstBase.Objects.BaseSink#g:method:getDropOutOfSegment"), [getFactory]("GI.Gst.Objects.Element#g:method:getFactory"), [getGValueArray]("GI.Gst.Objects.Object#g:method:getGValueArray"), [getLastSample]("GI.GstBase.Objects.BaseSink#g:method:getLastSample"), [getLatency]("GI.GstBase.Objects.BaseSink#g:method:getLatency"), [getMaxBitrate]("GI.GstBase.Objects.BaseSink#g:method:getMaxBitrate"), [getMaxLateness]("GI.GstBase.Objects.BaseSink#g:method:getMaxLateness"), [getMetadata]("GI.Gst.Objects.Element#g:method:getMetadata"), [getName]("GI.Gst.Objects.Object#g:method:getName"), [getPadTemplate]("GI.Gst.Objects.Element#g:method:getPadTemplate"), [getPadTemplateList]("GI.Gst.Objects.Element#g:method:getPadTemplateList"), [getParent]("GI.Gst.Objects.Object#g:method:getParent"), [getPathString]("GI.Gst.Objects.Object#g:method:getPathString"), [getProcessingDeadline]("GI.GstBase.Objects.BaseSink#g:method:getProcessingDeadline"), [getProperty]("GI.GObject.Objects.Object#g:method:getProperty"), [getProvideClock]("GI.GstAudio.Objects.AudioBaseSink#g:method:getProvideClock"), [getQdata]("GI.GObject.Objects.Object#g:method:getQdata"), [getRenderDelay]("GI.GstBase.Objects.BaseSink#g:method:getRenderDelay"), [getRequestPad]("GI.Gst.Objects.Element#g:method:getRequestPad"), [getSlaveMethod]("GI.GstAudio.Objects.AudioBaseSink#g:method:getSlaveMethod"), [getStartTime]("GI.Gst.Objects.Element#g:method:getStartTime"), [getState]("GI.Gst.Objects.Element#g:method:getState"), [getStaticPad]("GI.Gst.Objects.Element#g:method:getStaticPad"), [getStats]("GI.GstBase.Objects.BaseSink#g:method:getStats"), [getSync]("GI.GstBase.Objects.BaseSink#g:method:getSync"), [getThrottleTime]("GI.GstBase.Objects.BaseSink#g:method:getThrottleTime"), [getTsOffset]("GI.GstBase.Objects.BaseSink#g:method:getTsOffset"), [getValue]("GI.Gst.Objects.Object#g:method:getValue").
-- 
-- ==== Setters
-- [setAlignmentThreshold]("GI.GstAudio.Objects.AudioBaseSink#g:method:setAlignmentThreshold"), [setAsyncEnabled]("GI.GstBase.Objects.BaseSink#g:method:setAsyncEnabled"), [setBaseTime]("GI.Gst.Objects.Element#g:method:setBaseTime"), [setBlocksize]("GI.GstBase.Objects.BaseSink#g:method:setBlocksize"), [setBus]("GI.Gst.Objects.Element#g:method:setBus"), [setClock]("GI.Gst.Objects.Element#g:method:setClock"), [setContext]("GI.Gst.Objects.Element#g:method:setContext"), [setControlBindingDisabled]("GI.Gst.Objects.Object#g:method:setControlBindingDisabled"), [setControlBindingsDisabled]("GI.Gst.Objects.Object#g:method:setControlBindingsDisabled"), [setControlRate]("GI.Gst.Objects.Object#g:method:setControlRate"), [setCustomSlavingCallback]("GI.GstAudio.Objects.AudioBaseSink#g:method:setCustomSlavingCallback"), [setData]("GI.GObject.Objects.Object#g:method:setData"), [setDataFull]("GI.GObject.Objects.Object#g:method:setDataFull"), [setDiscontWait]("GI.GstAudio.Objects.AudioBaseSink#g:method:setDiscontWait"), [setDriftTolerance]("GI.GstAudio.Objects.AudioBaseSink#g:method:setDriftTolerance"), [setDropOutOfSegment]("GI.GstBase.Objects.BaseSink#g:method:setDropOutOfSegment"), [setLastSampleEnabled]("GI.GstBase.Objects.BaseSink#g:method:setLastSampleEnabled"), [setLockedState]("GI.Gst.Objects.Element#g:method:setLockedState"), [setMaxBitrate]("GI.GstBase.Objects.BaseSink#g:method:setMaxBitrate"), [setMaxLateness]("GI.GstBase.Objects.BaseSink#g:method:setMaxLateness"), [setName]("GI.Gst.Objects.Object#g:method:setName"), [setParent]("GI.Gst.Objects.Object#g:method:setParent"), [setProcessingDeadline]("GI.GstBase.Objects.BaseSink#g:method:setProcessingDeadline"), [setProperty]("GI.GObject.Objects.Object#g:method:setProperty"), [setProvideClock]("GI.GstAudio.Objects.AudioBaseSink#g:method:setProvideClock"), [setQosEnabled]("GI.GstBase.Objects.BaseSink#g:method:setQosEnabled"), [setRenderDelay]("GI.GstBase.Objects.BaseSink#g:method:setRenderDelay"), [setSlaveMethod]("GI.GstAudio.Objects.AudioBaseSink#g:method:setSlaveMethod"), [setStartTime]("GI.Gst.Objects.Element#g:method:setStartTime"), [setState]("GI.Gst.Objects.Element#g:method:setState"), [setSync]("GI.GstBase.Objects.BaseSink#g:method:setSync"), [setThrottleTime]("GI.GstBase.Objects.BaseSink#g:method:setThrottleTime"), [setTsOffset]("GI.GstBase.Objects.BaseSink#g:method:setTsOffset").

#if defined(ENABLE_OVERLOADING)
    ResolveAudioSinkMethod                  ,
#endif



    ) 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.BasicTypes as B.Types
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GArray as B.GArray
import qualified Data.GI.Base.GClosure as B.GClosure
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GHashTable as B.GHT
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.GI.Base.Signals as B.Signals
import qualified Control.Monad.IO.Class as MIO
import qualified Data.Coerce as Coerce
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 GHC.Records as R

import qualified GI.GObject.Objects.Object as GObject.Object
import qualified GI.Gst.Objects.Element as Gst.Element
import qualified GI.Gst.Objects.Object as Gst.Object
import {-# SOURCE #-} qualified GI.GstAudio.Objects.AudioBaseSink as GstAudio.AudioBaseSink
import qualified GI.GstBase.Objects.BaseSink as GstBase.BaseSink

-- | Memory-managed wrapper type.
newtype AudioSink = AudioSink (SP.ManagedPtr AudioSink)
    deriving (AudioSink -> AudioSink -> Bool
(AudioSink -> AudioSink -> Bool)
-> (AudioSink -> AudioSink -> Bool) -> Eq AudioSink
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: AudioSink -> AudioSink -> Bool
== :: AudioSink -> AudioSink -> Bool
$c/= :: AudioSink -> AudioSink -> Bool
/= :: AudioSink -> AudioSink -> Bool
Eq)

instance SP.ManagedPtrNewtype AudioSink where
    toManagedPtr :: AudioSink -> ManagedPtr AudioSink
toManagedPtr (AudioSink ManagedPtr AudioSink
p) = ManagedPtr AudioSink
p

foreign import ccall "gst_audio_sink_get_type"
    c_gst_audio_sink_get_type :: IO B.Types.GType

instance B.Types.TypedObject AudioSink where
    glibType :: IO GType
glibType = IO GType
c_gst_audio_sink_get_type

instance B.Types.GObject AudioSink

-- | Type class for types which can be safely cast to `AudioSink`, for instance with `toAudioSink`.
class (SP.GObject o, O.IsDescendantOf AudioSink o) => IsAudioSink o
instance (SP.GObject o, O.IsDescendantOf AudioSink o) => IsAudioSink o

instance O.HasParentTypes AudioSink
type instance O.ParentTypes AudioSink = '[GstAudio.AudioBaseSink.AudioBaseSink, GstBase.BaseSink.BaseSink, Gst.Element.Element, Gst.Object.Object, GObject.Object.Object]

-- | Cast to `AudioSink`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
toAudioSink :: (MIO.MonadIO m, IsAudioSink o) => o -> m AudioSink
toAudioSink :: forall (m :: * -> *) o.
(MonadIO m, IsAudioSink o) =>
o -> m AudioSink
toAudioSink = IO AudioSink -> m AudioSink
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO AudioSink -> m AudioSink)
-> (o -> IO AudioSink) -> o -> m AudioSink
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ManagedPtr AudioSink -> AudioSink) -> o -> IO AudioSink
forall o o'.
(HasCallStack, ManagedPtrNewtype o, TypedObject o,
 ManagedPtrNewtype o', TypedObject o') =>
(ManagedPtr o' -> o') -> o -> IO o'
B.ManagedPtr.unsafeCastTo ManagedPtr AudioSink -> AudioSink
AudioSink

-- | Convert 'AudioSink' to and from 'Data.GI.Base.GValue.GValue'. See 'Data.GI.Base.GValue.toGValue' and 'Data.GI.Base.GValue.fromGValue'.
instance B.GValue.IsGValue (Maybe AudioSink) where
    gvalueGType_ :: IO GType
gvalueGType_ = IO GType
c_gst_audio_sink_get_type
    gvalueSet_ :: Ptr GValue -> Maybe AudioSink -> IO ()
gvalueSet_ Ptr GValue
gv Maybe AudioSink
P.Nothing = Ptr GValue -> Ptr AudioSink -> IO ()
forall a. GObject a => Ptr GValue -> Ptr a -> IO ()
B.GValue.set_object Ptr GValue
gv (Ptr AudioSink
forall a. Ptr a
FP.nullPtr :: FP.Ptr AudioSink)
    gvalueSet_ Ptr GValue
gv (P.Just AudioSink
obj) = AudioSink -> (Ptr AudioSink -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
B.ManagedPtr.withManagedPtr AudioSink
obj (Ptr GValue -> Ptr AudioSink -> IO ()
forall a. GObject a => Ptr GValue -> Ptr a -> IO ()
B.GValue.set_object Ptr GValue
gv)
    gvalueGet_ :: Ptr GValue -> IO (Maybe AudioSink)
gvalueGet_ Ptr GValue
gv = do
        Ptr AudioSink
ptr <- Ptr GValue -> IO (Ptr AudioSink)
forall a. GObject a => Ptr GValue -> IO (Ptr a)
B.GValue.get_object Ptr GValue
gv :: IO (FP.Ptr AudioSink)
        if Ptr AudioSink
ptr Ptr AudioSink -> Ptr AudioSink -> Bool
forall a. Eq a => a -> a -> Bool
/= Ptr AudioSink
forall a. Ptr a
FP.nullPtr
        then AudioSink -> Maybe AudioSink
forall a. a -> Maybe a
P.Just (AudioSink -> Maybe AudioSink)
-> IO AudioSink -> IO (Maybe AudioSink)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (ManagedPtr AudioSink -> AudioSink)
-> Ptr AudioSink -> IO AudioSink
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
B.ManagedPtr.newObject ManagedPtr AudioSink -> AudioSink
AudioSink Ptr AudioSink
ptr
        else Maybe AudioSink -> IO (Maybe AudioSink)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe AudioSink
forall a. Maybe a
P.Nothing
        
    

#if defined(ENABLE_OVERLOADING)
type family ResolveAudioSinkMethod (t :: Symbol) (o :: *) :: * where
    ResolveAudioSinkMethod "abortState" o = Gst.Element.ElementAbortStateMethodInfo
    ResolveAudioSinkMethod "addControlBinding" o = Gst.Object.ObjectAddControlBindingMethodInfo
    ResolveAudioSinkMethod "addPad" o = Gst.Element.ElementAddPadMethodInfo
    ResolveAudioSinkMethod "addPropertyDeepNotifyWatch" o = Gst.Element.ElementAddPropertyDeepNotifyWatchMethodInfo
    ResolveAudioSinkMethod "addPropertyNotifyWatch" o = Gst.Element.ElementAddPropertyNotifyWatchMethodInfo
    ResolveAudioSinkMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveAudioSinkMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveAudioSinkMethod "callAsync" o = Gst.Element.ElementCallAsyncMethodInfo
    ResolveAudioSinkMethod "changeState" o = Gst.Element.ElementChangeStateMethodInfo
    ResolveAudioSinkMethod "continueState" o = Gst.Element.ElementContinueStateMethodInfo
    ResolveAudioSinkMethod "createAllPads" o = Gst.Element.ElementCreateAllPadsMethodInfo
    ResolveAudioSinkMethod "createRingbuffer" o = GstAudio.AudioBaseSink.AudioBaseSinkCreateRingbufferMethodInfo
    ResolveAudioSinkMethod "defaultError" o = Gst.Object.ObjectDefaultErrorMethodInfo
    ResolveAudioSinkMethod "doPreroll" o = GstBase.BaseSink.BaseSinkDoPrerollMethodInfo
    ResolveAudioSinkMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveAudioSinkMethod "foreachPad" o = Gst.Element.ElementForeachPadMethodInfo
    ResolveAudioSinkMethod "foreachSinkPad" o = Gst.Element.ElementForeachSinkPadMethodInfo
    ResolveAudioSinkMethod "foreachSrcPad" o = Gst.Element.ElementForeachSrcPadMethodInfo
    ResolveAudioSinkMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveAudioSinkMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
    ResolveAudioSinkMethod "hasActiveControlBindings" o = Gst.Object.ObjectHasActiveControlBindingsMethodInfo
    ResolveAudioSinkMethod "hasAncestor" o = Gst.Object.ObjectHasAncestorMethodInfo
    ResolveAudioSinkMethod "hasAsAncestor" o = Gst.Object.ObjectHasAsAncestorMethodInfo
    ResolveAudioSinkMethod "hasAsParent" o = Gst.Object.ObjectHasAsParentMethodInfo
    ResolveAudioSinkMethod "isAsyncEnabled" o = GstBase.BaseSink.BaseSinkIsAsyncEnabledMethodInfo
    ResolveAudioSinkMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveAudioSinkMethod "isLastSampleEnabled" o = GstBase.BaseSink.BaseSinkIsLastSampleEnabledMethodInfo
    ResolveAudioSinkMethod "isLockedState" o = Gst.Element.ElementIsLockedStateMethodInfo
    ResolveAudioSinkMethod "isQosEnabled" o = GstBase.BaseSink.BaseSinkIsQosEnabledMethodInfo
    ResolveAudioSinkMethod "iteratePads" o = Gst.Element.ElementIteratePadsMethodInfo
    ResolveAudioSinkMethod "iterateSinkPads" o = Gst.Element.ElementIterateSinkPadsMethodInfo
    ResolveAudioSinkMethod "iterateSrcPads" o = Gst.Element.ElementIterateSrcPadsMethodInfo
    ResolveAudioSinkMethod "link" o = Gst.Element.ElementLinkMethodInfo
    ResolveAudioSinkMethod "linkFiltered" o = Gst.Element.ElementLinkFilteredMethodInfo
    ResolveAudioSinkMethod "linkPads" o = Gst.Element.ElementLinkPadsMethodInfo
    ResolveAudioSinkMethod "linkPadsFiltered" o = Gst.Element.ElementLinkPadsFilteredMethodInfo
    ResolveAudioSinkMethod "linkPadsFull" o = Gst.Element.ElementLinkPadsFullMethodInfo
    ResolveAudioSinkMethod "lostState" o = Gst.Element.ElementLostStateMethodInfo
    ResolveAudioSinkMethod "messageFull" o = Gst.Element.ElementMessageFullMethodInfo
    ResolveAudioSinkMethod "messageFullWithDetails" o = Gst.Element.ElementMessageFullWithDetailsMethodInfo
    ResolveAudioSinkMethod "noMorePads" o = Gst.Element.ElementNoMorePadsMethodInfo
    ResolveAudioSinkMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveAudioSinkMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveAudioSinkMethod "postMessage" o = Gst.Element.ElementPostMessageMethodInfo
    ResolveAudioSinkMethod "provideClock" o = Gst.Element.ElementProvideClockMethodInfo
    ResolveAudioSinkMethod "query" o = Gst.Element.ElementQueryMethodInfo
    ResolveAudioSinkMethod "queryConvert" o = Gst.Element.ElementQueryConvertMethodInfo
    ResolveAudioSinkMethod "queryDuration" o = Gst.Element.ElementQueryDurationMethodInfo
    ResolveAudioSinkMethod "queryLatency" o = GstBase.BaseSink.BaseSinkQueryLatencyMethodInfo
    ResolveAudioSinkMethod "queryPosition" o = Gst.Element.ElementQueryPositionMethodInfo
    ResolveAudioSinkMethod "ref" o = Gst.Object.ObjectRefMethodInfo
    ResolveAudioSinkMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveAudioSinkMethod "releaseRequestPad" o = Gst.Element.ElementReleaseRequestPadMethodInfo
    ResolveAudioSinkMethod "removeControlBinding" o = Gst.Object.ObjectRemoveControlBindingMethodInfo
    ResolveAudioSinkMethod "removePad" o = Gst.Element.ElementRemovePadMethodInfo
    ResolveAudioSinkMethod "removePropertyNotifyWatch" o = Gst.Element.ElementRemovePropertyNotifyWatchMethodInfo
    ResolveAudioSinkMethod "reportDeviceFailure" o = GstAudio.AudioBaseSink.AudioBaseSinkReportDeviceFailureMethodInfo
    ResolveAudioSinkMethod "requestPad" o = Gst.Element.ElementRequestPadMethodInfo
    ResolveAudioSinkMethod "requestPadSimple" o = Gst.Element.ElementRequestPadSimpleMethodInfo
    ResolveAudioSinkMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveAudioSinkMethod "seek" o = Gst.Element.ElementSeekMethodInfo
    ResolveAudioSinkMethod "seekSimple" o = Gst.Element.ElementSeekSimpleMethodInfo
    ResolveAudioSinkMethod "sendEvent" o = Gst.Element.ElementSendEventMethodInfo
    ResolveAudioSinkMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveAudioSinkMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveAudioSinkMethod "suggestNextSync" o = Gst.Object.ObjectSuggestNextSyncMethodInfo
    ResolveAudioSinkMethod "syncStateWithParent" o = Gst.Element.ElementSyncStateWithParentMethodInfo
    ResolveAudioSinkMethod "syncValues" o = Gst.Object.ObjectSyncValuesMethodInfo
    ResolveAudioSinkMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveAudioSinkMethod "unlink" o = Gst.Element.ElementUnlinkMethodInfo
    ResolveAudioSinkMethod "unlinkPads" o = Gst.Element.ElementUnlinkPadsMethodInfo
    ResolveAudioSinkMethod "unparent" o = Gst.Object.ObjectUnparentMethodInfo
    ResolveAudioSinkMethod "unref" o = Gst.Object.ObjectUnrefMethodInfo
    ResolveAudioSinkMethod "wait" o = GstBase.BaseSink.BaseSinkWaitMethodInfo
    ResolveAudioSinkMethod "waitClock" o = GstBase.BaseSink.BaseSinkWaitClockMethodInfo
    ResolveAudioSinkMethod "waitPreroll" o = GstBase.BaseSink.BaseSinkWaitPrerollMethodInfo
    ResolveAudioSinkMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveAudioSinkMethod "getAlignmentThreshold" o = GstAudio.AudioBaseSink.AudioBaseSinkGetAlignmentThresholdMethodInfo
    ResolveAudioSinkMethod "getBaseTime" o = Gst.Element.ElementGetBaseTimeMethodInfo
    ResolveAudioSinkMethod "getBlocksize" o = GstBase.BaseSink.BaseSinkGetBlocksizeMethodInfo
    ResolveAudioSinkMethod "getBus" o = Gst.Element.ElementGetBusMethodInfo
    ResolveAudioSinkMethod "getClock" o = Gst.Element.ElementGetClockMethodInfo
    ResolveAudioSinkMethod "getCompatiblePad" o = Gst.Element.ElementGetCompatiblePadMethodInfo
    ResolveAudioSinkMethod "getCompatiblePadTemplate" o = Gst.Element.ElementGetCompatiblePadTemplateMethodInfo
    ResolveAudioSinkMethod "getContext" o = Gst.Element.ElementGetContextMethodInfo
    ResolveAudioSinkMethod "getContextUnlocked" o = Gst.Element.ElementGetContextUnlockedMethodInfo
    ResolveAudioSinkMethod "getContexts" o = Gst.Element.ElementGetContextsMethodInfo
    ResolveAudioSinkMethod "getControlBinding" o = Gst.Object.ObjectGetControlBindingMethodInfo
    ResolveAudioSinkMethod "getControlRate" o = Gst.Object.ObjectGetControlRateMethodInfo
    ResolveAudioSinkMethod "getCurrentClockTime" o = Gst.Element.ElementGetCurrentClockTimeMethodInfo
    ResolveAudioSinkMethod "getCurrentRunningTime" o = Gst.Element.ElementGetCurrentRunningTimeMethodInfo
    ResolveAudioSinkMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveAudioSinkMethod "getDiscontWait" o = GstAudio.AudioBaseSink.AudioBaseSinkGetDiscontWaitMethodInfo
    ResolveAudioSinkMethod "getDriftTolerance" o = GstAudio.AudioBaseSink.AudioBaseSinkGetDriftToleranceMethodInfo
    ResolveAudioSinkMethod "getDropOutOfSegment" o = GstBase.BaseSink.BaseSinkGetDropOutOfSegmentMethodInfo
    ResolveAudioSinkMethod "getFactory" o = Gst.Element.ElementGetFactoryMethodInfo
    ResolveAudioSinkMethod "getGValueArray" o = Gst.Object.ObjectGetGValueArrayMethodInfo
    ResolveAudioSinkMethod "getLastSample" o = GstBase.BaseSink.BaseSinkGetLastSampleMethodInfo
    ResolveAudioSinkMethod "getLatency" o = GstBase.BaseSink.BaseSinkGetLatencyMethodInfo
    ResolveAudioSinkMethod "getMaxBitrate" o = GstBase.BaseSink.BaseSinkGetMaxBitrateMethodInfo
    ResolveAudioSinkMethod "getMaxLateness" o = GstBase.BaseSink.BaseSinkGetMaxLatenessMethodInfo
    ResolveAudioSinkMethod "getMetadata" o = Gst.Element.ElementGetMetadataMethodInfo
    ResolveAudioSinkMethod "getName" o = Gst.Object.ObjectGetNameMethodInfo
    ResolveAudioSinkMethod "getPadTemplate" o = Gst.Element.ElementGetPadTemplateMethodInfo
    ResolveAudioSinkMethod "getPadTemplateList" o = Gst.Element.ElementGetPadTemplateListMethodInfo
    ResolveAudioSinkMethod "getParent" o = Gst.Object.ObjectGetParentMethodInfo
    ResolveAudioSinkMethod "getPathString" o = Gst.Object.ObjectGetPathStringMethodInfo
    ResolveAudioSinkMethod "getProcessingDeadline" o = GstBase.BaseSink.BaseSinkGetProcessingDeadlineMethodInfo
    ResolveAudioSinkMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveAudioSinkMethod "getProvideClock" o = GstAudio.AudioBaseSink.AudioBaseSinkGetProvideClockMethodInfo
    ResolveAudioSinkMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveAudioSinkMethod "getRenderDelay" o = GstBase.BaseSink.BaseSinkGetRenderDelayMethodInfo
    ResolveAudioSinkMethod "getRequestPad" o = Gst.Element.ElementGetRequestPadMethodInfo
    ResolveAudioSinkMethod "getSlaveMethod" o = GstAudio.AudioBaseSink.AudioBaseSinkGetSlaveMethodMethodInfo
    ResolveAudioSinkMethod "getStartTime" o = Gst.Element.ElementGetStartTimeMethodInfo
    ResolveAudioSinkMethod "getState" o = Gst.Element.ElementGetStateMethodInfo
    ResolveAudioSinkMethod "getStaticPad" o = Gst.Element.ElementGetStaticPadMethodInfo
    ResolveAudioSinkMethod "getStats" o = GstBase.BaseSink.BaseSinkGetStatsMethodInfo
    ResolveAudioSinkMethod "getSync" o = GstBase.BaseSink.BaseSinkGetSyncMethodInfo
    ResolveAudioSinkMethod "getThrottleTime" o = GstBase.BaseSink.BaseSinkGetThrottleTimeMethodInfo
    ResolveAudioSinkMethod "getTsOffset" o = GstBase.BaseSink.BaseSinkGetTsOffsetMethodInfo
    ResolveAudioSinkMethod "getValue" o = Gst.Object.ObjectGetValueMethodInfo
    ResolveAudioSinkMethod "setAlignmentThreshold" o = GstAudio.AudioBaseSink.AudioBaseSinkSetAlignmentThresholdMethodInfo
    ResolveAudioSinkMethod "setAsyncEnabled" o = GstBase.BaseSink.BaseSinkSetAsyncEnabledMethodInfo
    ResolveAudioSinkMethod "setBaseTime" o = Gst.Element.ElementSetBaseTimeMethodInfo
    ResolveAudioSinkMethod "setBlocksize" o = GstBase.BaseSink.BaseSinkSetBlocksizeMethodInfo
    ResolveAudioSinkMethod "setBus" o = Gst.Element.ElementSetBusMethodInfo
    ResolveAudioSinkMethod "setClock" o = Gst.Element.ElementSetClockMethodInfo
    ResolveAudioSinkMethod "setContext" o = Gst.Element.ElementSetContextMethodInfo
    ResolveAudioSinkMethod "setControlBindingDisabled" o = Gst.Object.ObjectSetControlBindingDisabledMethodInfo
    ResolveAudioSinkMethod "setControlBindingsDisabled" o = Gst.Object.ObjectSetControlBindingsDisabledMethodInfo
    ResolveAudioSinkMethod "setControlRate" o = Gst.Object.ObjectSetControlRateMethodInfo
    ResolveAudioSinkMethod "setCustomSlavingCallback" o = GstAudio.AudioBaseSink.AudioBaseSinkSetCustomSlavingCallbackMethodInfo
    ResolveAudioSinkMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveAudioSinkMethod "setDataFull" o = GObject.Object.ObjectSetDataFullMethodInfo
    ResolveAudioSinkMethod "setDiscontWait" o = GstAudio.AudioBaseSink.AudioBaseSinkSetDiscontWaitMethodInfo
    ResolveAudioSinkMethod "setDriftTolerance" o = GstAudio.AudioBaseSink.AudioBaseSinkSetDriftToleranceMethodInfo
    ResolveAudioSinkMethod "setDropOutOfSegment" o = GstBase.BaseSink.BaseSinkSetDropOutOfSegmentMethodInfo
    ResolveAudioSinkMethod "setLastSampleEnabled" o = GstBase.BaseSink.BaseSinkSetLastSampleEnabledMethodInfo
    ResolveAudioSinkMethod "setLockedState" o = Gst.Element.ElementSetLockedStateMethodInfo
    ResolveAudioSinkMethod "setMaxBitrate" o = GstBase.BaseSink.BaseSinkSetMaxBitrateMethodInfo
    ResolveAudioSinkMethod "setMaxLateness" o = GstBase.BaseSink.BaseSinkSetMaxLatenessMethodInfo
    ResolveAudioSinkMethod "setName" o = Gst.Object.ObjectSetNameMethodInfo
    ResolveAudioSinkMethod "setParent" o = Gst.Object.ObjectSetParentMethodInfo
    ResolveAudioSinkMethod "setProcessingDeadline" o = GstBase.BaseSink.BaseSinkSetProcessingDeadlineMethodInfo
    ResolveAudioSinkMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveAudioSinkMethod "setProvideClock" o = GstAudio.AudioBaseSink.AudioBaseSinkSetProvideClockMethodInfo
    ResolveAudioSinkMethod "setQosEnabled" o = GstBase.BaseSink.BaseSinkSetQosEnabledMethodInfo
    ResolveAudioSinkMethod "setRenderDelay" o = GstBase.BaseSink.BaseSinkSetRenderDelayMethodInfo
    ResolveAudioSinkMethod "setSlaveMethod" o = GstAudio.AudioBaseSink.AudioBaseSinkSetSlaveMethodMethodInfo
    ResolveAudioSinkMethod "setStartTime" o = Gst.Element.ElementSetStartTimeMethodInfo
    ResolveAudioSinkMethod "setState" o = Gst.Element.ElementSetStateMethodInfo
    ResolveAudioSinkMethod "setSync" o = GstBase.BaseSink.BaseSinkSetSyncMethodInfo
    ResolveAudioSinkMethod "setThrottleTime" o = GstBase.BaseSink.BaseSinkSetThrottleTimeMethodInfo
    ResolveAudioSinkMethod "setTsOffset" o = GstBase.BaseSink.BaseSinkSetTsOffsetMethodInfo
    ResolveAudioSinkMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveAudioSinkMethod t AudioSink, O.OverloadedMethod info AudioSink p) => OL.IsLabel t (AudioSink -> p) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.overloadedMethod @info
#else
    fromLabel _ = O.overloadedMethod @info
#endif

#if MIN_VERSION_base(4,13,0)
instance (info ~ ResolveAudioSinkMethod t AudioSink, O.OverloadedMethod info AudioSink p, R.HasField t AudioSink p) => R.HasField t AudioSink p where
    getField = O.overloadedMethod @info

#endif

instance (info ~ ResolveAudioSinkMethod t AudioSink, O.OverloadedMethodInfo info AudioSink) => OL.IsLabel t (O.MethodProxy info AudioSink) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.MethodProxy
#else
    fromLabel _ = O.MethodProxy
#endif

#endif

#if defined(ENABLE_OVERLOADING)
instance O.HasAttributeList AudioSink
type instance O.AttributeList AudioSink = AudioSinkAttributeList
type AudioSinkAttributeList = ('[ '("alignmentThreshold", GstAudio.AudioBaseSink.AudioBaseSinkAlignmentThresholdPropertyInfo), '("async", GstBase.BaseSink.BaseSinkAsyncPropertyInfo), '("blocksize", GstBase.BaseSink.BaseSinkBlocksizePropertyInfo), '("bufferTime", GstAudio.AudioBaseSink.AudioBaseSinkBufferTimePropertyInfo), '("canActivatePull", GstAudio.AudioBaseSink.AudioBaseSinkCanActivatePullPropertyInfo), '("discontWait", GstAudio.AudioBaseSink.AudioBaseSinkDiscontWaitPropertyInfo), '("driftTolerance", GstAudio.AudioBaseSink.AudioBaseSinkDriftTolerancePropertyInfo), '("enableLastSample", GstBase.BaseSink.BaseSinkEnableLastSamplePropertyInfo), '("lastSample", GstBase.BaseSink.BaseSinkLastSamplePropertyInfo), '("latencyTime", GstAudio.AudioBaseSink.AudioBaseSinkLatencyTimePropertyInfo), '("maxBitrate", GstBase.BaseSink.BaseSinkMaxBitratePropertyInfo), '("maxLateness", GstBase.BaseSink.BaseSinkMaxLatenessPropertyInfo), '("name", Gst.Object.ObjectNamePropertyInfo), '("parent", Gst.Object.ObjectParentPropertyInfo), '("processingDeadline", GstBase.BaseSink.BaseSinkProcessingDeadlinePropertyInfo), '("provideClock", GstAudio.AudioBaseSink.AudioBaseSinkProvideClockPropertyInfo), '("qos", GstBase.BaseSink.BaseSinkQosPropertyInfo), '("renderDelay", GstBase.BaseSink.BaseSinkRenderDelayPropertyInfo), '("slaveMethod", GstAudio.AudioBaseSink.AudioBaseSinkSlaveMethodPropertyInfo), '("stats", GstBase.BaseSink.BaseSinkStatsPropertyInfo), '("sync", GstBase.BaseSink.BaseSinkSyncPropertyInfo), '("throttleTime", GstBase.BaseSink.BaseSinkThrottleTimePropertyInfo), '("tsOffset", GstBase.BaseSink.BaseSinkTsOffsetPropertyInfo)] :: [(Symbol, *)])
#endif

#if defined(ENABLE_OVERLOADING)
#endif

#if defined(ENABLE_OVERLOADING)
type instance O.SignalList AudioSink = AudioSinkSignalList
type AudioSinkSignalList = ('[ '("deepNotify", Gst.Object.ObjectDeepNotifySignalInfo), '("noMorePads", Gst.Element.ElementNoMorePadsSignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo), '("padAdded", Gst.Element.ElementPadAddedSignalInfo), '("padRemoved", Gst.Element.ElementPadRemovedSignalInfo)] :: [(Symbol, *)])

#endif