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

'GI.GstAudio.Objects.AudioFilter.AudioFilter' is a 'GI.GstBase.Objects.BaseTransform.BaseTransform'\<!-- -->-derived base class for simple audio
filters, ie. those that output the same format that they get as input.

'GI.GstAudio.Objects.AudioFilter.AudioFilter' will parse the input format for you (with error checking)
before calling your setup function. Also, elements deriving from
'GI.GstAudio.Objects.AudioFilter.AudioFilter' may use 'GI.GstAudio.Structs.AudioFilterClass.audioFilterClassAddPadTemplates' from
their class_init function to easily configure the set of caps\/formats that
the element is able to handle.

Derived classes should override the 'GI.GstAudio.Structs.AudioFilterClass.AudioFilterClass'.@/setup/@() and
'GI.GstBase.Structs.BaseTransformClass.BaseTransformClass'.@/transform_ip/@() and\/or
'GI.GstBase.Structs.BaseTransformClass.BaseTransformClass'.@/transform/@()
virtual functions in their class_init function.
-}

module GI.GstAudio.Objects.AudioFilter
    ( 

-- * Exported types
    AudioFilter(..)                         ,
    IsAudioFilter                           ,
    toAudioFilter                           ,
    noAudioFilter                           ,


    ) 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.GError as B.GError
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
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 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 qualified GI.GstBase.Objects.BaseTransform as GstBase.BaseTransform

newtype AudioFilter = AudioFilter (ManagedPtr AudioFilter)
foreign import ccall "gst_audio_filter_get_type"
    c_gst_audio_filter_get_type :: IO GType

instance GObject AudioFilter where
    gobjectType _ = c_gst_audio_filter_get_type
    

class GObject o => IsAudioFilter o
#if MIN_VERSION_base(4,9,0)
instance {-# OVERLAPPABLE #-} (GObject a, O.UnknownAncestorError AudioFilter a) =>
    IsAudioFilter a
#endif
instance IsAudioFilter AudioFilter
instance GstBase.BaseTransform.IsBaseTransform AudioFilter
instance Gst.Element.IsElement AudioFilter
instance Gst.Object.IsObject AudioFilter
instance GObject.Object.IsObject AudioFilter

toAudioFilter :: IsAudioFilter o => o -> IO AudioFilter
toAudioFilter = unsafeCastTo AudioFilter

noAudioFilter :: Maybe AudioFilter
noAudioFilter = Nothing

type family ResolveAudioFilterMethod (t :: Symbol) (o :: *) :: * where
    ResolveAudioFilterMethod "abortState" o = Gst.Element.ElementAbortStateMethodInfo
    ResolveAudioFilterMethod "addControlBinding" o = Gst.Object.ObjectAddControlBindingMethodInfo
    ResolveAudioFilterMethod "addPad" o = Gst.Element.ElementAddPadMethodInfo
    ResolveAudioFilterMethod "addPropertyDeepNotifyWatch" o = Gst.Element.ElementAddPropertyDeepNotifyWatchMethodInfo
    ResolveAudioFilterMethod "addPropertyNotifyWatch" o = Gst.Element.ElementAddPropertyNotifyWatchMethodInfo
    ResolveAudioFilterMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveAudioFilterMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveAudioFilterMethod "callAsync" o = Gst.Element.ElementCallAsyncMethodInfo
    ResolveAudioFilterMethod "changeState" o = Gst.Element.ElementChangeStateMethodInfo
    ResolveAudioFilterMethod "continueState" o = Gst.Element.ElementContinueStateMethodInfo
    ResolveAudioFilterMethod "createAllPads" o = Gst.Element.ElementCreateAllPadsMethodInfo
    ResolveAudioFilterMethod "defaultError" o = Gst.Object.ObjectDefaultErrorMethodInfo
    ResolveAudioFilterMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveAudioFilterMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveAudioFilterMethod "hasActiveControlBindings" o = Gst.Object.ObjectHasActiveControlBindingsMethodInfo
    ResolveAudioFilterMethod "hasAncestor" o = Gst.Object.ObjectHasAncestorMethodInfo
    ResolveAudioFilterMethod "hasAsAncestor" o = Gst.Object.ObjectHasAsAncestorMethodInfo
    ResolveAudioFilterMethod "hasAsParent" o = Gst.Object.ObjectHasAsParentMethodInfo
    ResolveAudioFilterMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveAudioFilterMethod "isInPlace" o = GstBase.BaseTransform.BaseTransformIsInPlaceMethodInfo
    ResolveAudioFilterMethod "isLockedState" o = Gst.Element.ElementIsLockedStateMethodInfo
    ResolveAudioFilterMethod "isPassthrough" o = GstBase.BaseTransform.BaseTransformIsPassthroughMethodInfo
    ResolveAudioFilterMethod "isQosEnabled" o = GstBase.BaseTransform.BaseTransformIsQosEnabledMethodInfo
    ResolveAudioFilterMethod "iteratePads" o = Gst.Element.ElementIteratePadsMethodInfo
    ResolveAudioFilterMethod "iterateSinkPads" o = Gst.Element.ElementIterateSinkPadsMethodInfo
    ResolveAudioFilterMethod "iterateSrcPads" o = Gst.Element.ElementIterateSrcPadsMethodInfo
    ResolveAudioFilterMethod "link" o = Gst.Element.ElementLinkMethodInfo
    ResolveAudioFilterMethod "linkFiltered" o = Gst.Element.ElementLinkFilteredMethodInfo
    ResolveAudioFilterMethod "linkPads" o = Gst.Element.ElementLinkPadsMethodInfo
    ResolveAudioFilterMethod "linkPadsFiltered" o = Gst.Element.ElementLinkPadsFilteredMethodInfo
    ResolveAudioFilterMethod "linkPadsFull" o = Gst.Element.ElementLinkPadsFullMethodInfo
    ResolveAudioFilterMethod "lostState" o = Gst.Element.ElementLostStateMethodInfo
    ResolveAudioFilterMethod "messageFull" o = Gst.Element.ElementMessageFullMethodInfo
    ResolveAudioFilterMethod "messageFullWithDetails" o = Gst.Element.ElementMessageFullWithDetailsMethodInfo
    ResolveAudioFilterMethod "noMorePads" o = Gst.Element.ElementNoMorePadsMethodInfo
    ResolveAudioFilterMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveAudioFilterMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveAudioFilterMethod "postMessage" o = Gst.Element.ElementPostMessageMethodInfo
    ResolveAudioFilterMethod "provideClock" o = Gst.Element.ElementProvideClockMethodInfo
    ResolveAudioFilterMethod "query" o = Gst.Element.ElementQueryMethodInfo
    ResolveAudioFilterMethod "queryConvert" o = Gst.Element.ElementQueryConvertMethodInfo
    ResolveAudioFilterMethod "queryDuration" o = Gst.Element.ElementQueryDurationMethodInfo
    ResolveAudioFilterMethod "queryPosition" o = Gst.Element.ElementQueryPositionMethodInfo
    ResolveAudioFilterMethod "reconfigureSink" o = GstBase.BaseTransform.BaseTransformReconfigureSinkMethodInfo
    ResolveAudioFilterMethod "reconfigureSrc" o = GstBase.BaseTransform.BaseTransformReconfigureSrcMethodInfo
    ResolveAudioFilterMethod "ref" o = Gst.Object.ObjectRefMethodInfo
    ResolveAudioFilterMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveAudioFilterMethod "releaseRequestPad" o = Gst.Element.ElementReleaseRequestPadMethodInfo
    ResolveAudioFilterMethod "removeControlBinding" o = Gst.Object.ObjectRemoveControlBindingMethodInfo
    ResolveAudioFilterMethod "removePad" o = Gst.Element.ElementRemovePadMethodInfo
    ResolveAudioFilterMethod "removePropertyNotifyWatch" o = Gst.Element.ElementRemovePropertyNotifyWatchMethodInfo
    ResolveAudioFilterMethod "replaceData" o = GObject.Object.ObjectReplaceDataMethodInfo
    ResolveAudioFilterMethod "replaceQdata" o = GObject.Object.ObjectReplaceQdataMethodInfo
    ResolveAudioFilterMethod "requestPad" o = Gst.Element.ElementRequestPadMethodInfo
    ResolveAudioFilterMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveAudioFilterMethod "seek" o = Gst.Element.ElementSeekMethodInfo
    ResolveAudioFilterMethod "seekSimple" o = Gst.Element.ElementSeekSimpleMethodInfo
    ResolveAudioFilterMethod "sendEvent" o = Gst.Element.ElementSendEventMethodInfo
    ResolveAudioFilterMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveAudioFilterMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveAudioFilterMethod "suggestNextSync" o = Gst.Object.ObjectSuggestNextSyncMethodInfo
    ResolveAudioFilterMethod "syncStateWithParent" o = Gst.Element.ElementSyncStateWithParentMethodInfo
    ResolveAudioFilterMethod "syncValues" o = Gst.Object.ObjectSyncValuesMethodInfo
    ResolveAudioFilterMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveAudioFilterMethod "unlink" o = Gst.Element.ElementUnlinkMethodInfo
    ResolveAudioFilterMethod "unlinkPads" o = Gst.Element.ElementUnlinkPadsMethodInfo
    ResolveAudioFilterMethod "unparent" o = Gst.Object.ObjectUnparentMethodInfo
    ResolveAudioFilterMethod "unref" o = Gst.Object.ObjectUnrefMethodInfo
    ResolveAudioFilterMethod "updateQos" o = GstBase.BaseTransform.BaseTransformUpdateQosMethodInfo
    ResolveAudioFilterMethod "updateSrcCaps" o = GstBase.BaseTransform.BaseTransformUpdateSrcCapsMethodInfo
    ResolveAudioFilterMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveAudioFilterMethod "getAllocator" o = GstBase.BaseTransform.BaseTransformGetAllocatorMethodInfo
    ResolveAudioFilterMethod "getBaseTime" o = Gst.Element.ElementGetBaseTimeMethodInfo
    ResolveAudioFilterMethod "getBufferPool" o = GstBase.BaseTransform.BaseTransformGetBufferPoolMethodInfo
    ResolveAudioFilterMethod "getBus" o = Gst.Element.ElementGetBusMethodInfo
    ResolveAudioFilterMethod "getClock" o = Gst.Element.ElementGetClockMethodInfo
    ResolveAudioFilterMethod "getCompatiblePad" o = Gst.Element.ElementGetCompatiblePadMethodInfo
    ResolveAudioFilterMethod "getCompatiblePadTemplate" o = Gst.Element.ElementGetCompatiblePadTemplateMethodInfo
    ResolveAudioFilterMethod "getContext" o = Gst.Element.ElementGetContextMethodInfo
    ResolveAudioFilterMethod "getContextUnlocked" o = Gst.Element.ElementGetContextUnlockedMethodInfo
    ResolveAudioFilterMethod "getContexts" o = Gst.Element.ElementGetContextsMethodInfo
    ResolveAudioFilterMethod "getControlBinding" o = Gst.Object.ObjectGetControlBindingMethodInfo
    ResolveAudioFilterMethod "getControlRate" o = Gst.Object.ObjectGetControlRateMethodInfo
    ResolveAudioFilterMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveAudioFilterMethod "getFactory" o = Gst.Element.ElementGetFactoryMethodInfo
    ResolveAudioFilterMethod "getGValueArray" o = Gst.Object.ObjectGetGValueArrayMethodInfo
    ResolveAudioFilterMethod "getName" o = Gst.Object.ObjectGetNameMethodInfo
    ResolveAudioFilterMethod "getParent" o = Gst.Object.ObjectGetParentMethodInfo
    ResolveAudioFilterMethod "getPathString" o = Gst.Object.ObjectGetPathStringMethodInfo
    ResolveAudioFilterMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveAudioFilterMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveAudioFilterMethod "getRequestPad" o = Gst.Element.ElementGetRequestPadMethodInfo
    ResolveAudioFilterMethod "getStartTime" o = Gst.Element.ElementGetStartTimeMethodInfo
    ResolveAudioFilterMethod "getState" o = Gst.Element.ElementGetStateMethodInfo
    ResolveAudioFilterMethod "getStaticPad" o = Gst.Element.ElementGetStaticPadMethodInfo
    ResolveAudioFilterMethod "getValue" o = Gst.Object.ObjectGetValueMethodInfo
    ResolveAudioFilterMethod "getValueArray" o = Gst.Object.ObjectGetValueArrayMethodInfo
    ResolveAudioFilterMethod "setBaseTime" o = Gst.Element.ElementSetBaseTimeMethodInfo
    ResolveAudioFilterMethod "setBus" o = Gst.Element.ElementSetBusMethodInfo
    ResolveAudioFilterMethod "setClock" o = Gst.Element.ElementSetClockMethodInfo
    ResolveAudioFilterMethod "setContext" o = Gst.Element.ElementSetContextMethodInfo
    ResolveAudioFilterMethod "setControlBindingDisabled" o = Gst.Object.ObjectSetControlBindingDisabledMethodInfo
    ResolveAudioFilterMethod "setControlBindingsDisabled" o = Gst.Object.ObjectSetControlBindingsDisabledMethodInfo
    ResolveAudioFilterMethod "setControlRate" o = Gst.Object.ObjectSetControlRateMethodInfo
    ResolveAudioFilterMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveAudioFilterMethod "setGapAware" o = GstBase.BaseTransform.BaseTransformSetGapAwareMethodInfo
    ResolveAudioFilterMethod "setInPlace" o = GstBase.BaseTransform.BaseTransformSetInPlaceMethodInfo
    ResolveAudioFilterMethod "setLockedState" o = Gst.Element.ElementSetLockedStateMethodInfo
    ResolveAudioFilterMethod "setName" o = Gst.Object.ObjectSetNameMethodInfo
    ResolveAudioFilterMethod "setParent" o = Gst.Object.ObjectSetParentMethodInfo
    ResolveAudioFilterMethod "setPassthrough" o = GstBase.BaseTransform.BaseTransformSetPassthroughMethodInfo
    ResolveAudioFilterMethod "setPreferPassthrough" o = GstBase.BaseTransform.BaseTransformSetPreferPassthroughMethodInfo
    ResolveAudioFilterMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveAudioFilterMethod "setQosEnabled" o = GstBase.BaseTransform.BaseTransformSetQosEnabledMethodInfo
    ResolveAudioFilterMethod "setStartTime" o = Gst.Element.ElementSetStartTimeMethodInfo
    ResolveAudioFilterMethod "setState" o = Gst.Element.ElementSetStateMethodInfo
    ResolveAudioFilterMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveAudioFilterMethod t AudioFilter, O.MethodInfo info AudioFilter p) => O.IsLabelProxy t (AudioFilter -> p) where
    fromLabelProxy _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)

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

instance O.HasAttributeList AudioFilter
type instance O.AttributeList AudioFilter = AudioFilterAttributeList
type AudioFilterAttributeList = ('[ '("name", Gst.Object.ObjectNamePropertyInfo), '("parent", Gst.Object.ObjectParentPropertyInfo), '("qos", GstBase.BaseTransform.BaseTransformQosPropertyInfo)] :: [(Symbol, *)])

type instance O.SignalList AudioFilter = AudioFilterSignalList
type AudioFilterSignalList = ('[ '("deepNotify", Gst.Object.ObjectDeepNotifySignalInfo), '("noMorePads", Gst.Element.ElementNoMorePadsSignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo), '("padAdded", Gst.Element.ElementPadAddedSignalInfo), '("padRemoved", Gst.Element.ElementPadRemovedSignalInfo)] :: [(Symbol, *)])