{-# LANGUAGE PatternSynonyms, ScopedTypeVariables, ViewPatterns #-}


-- | Copyright  : Will Thompson and Iñaki García Etxebarria
-- License    : LGPL-2.1
-- Maintainer : Iñaki García Etxebarria

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

module GI.GstAudio.Constants
    ( 
    pattern META_TAG_AUDIO_STR              ,
    pattern META_TAG_AUDIO_RATE_STR         ,
    pattern META_TAG_AUDIO_CHANNELS_STR     ,
    pattern AUDIO_RESAMPLER_QUALITY_MIN     ,
    pattern AUDIO_RESAMPLER_QUALITY_MAX     ,
    pattern AUDIO_RESAMPLER_QUALITY_DEFAULT ,
    pattern AUDIO_RESAMPLER_OPT_TRANSITION_BANDWIDTH,
    pattern AUDIO_RESAMPLER_OPT_STOP_ATTENUATION,
    pattern AUDIO_RESAMPLER_OPT_N_TAPS      ,
    pattern AUDIO_RESAMPLER_OPT_MAX_PHASE_ERROR,
    pattern AUDIO_RESAMPLER_OPT_FILTER_OVERSAMPLE,
    pattern AUDIO_RESAMPLER_OPT_FILTER_MODE_THRESHOLD,
    pattern AUDIO_RESAMPLER_OPT_FILTER_MODE ,
    pattern AUDIO_RESAMPLER_OPT_FILTER_INTERPOLATION,
    pattern AUDIO_RESAMPLER_OPT_CUTOFF      ,
    pattern AUDIO_RESAMPLER_OPT_CUBIC_C     ,
    pattern AUDIO_RESAMPLER_OPT_CUBIC_B     ,
    pattern AUDIO_RATE_RANGE                ,
    pattern AUDIO_FORMATS_ALL               ,
    pattern AUDIO_ENCODER_SRC_NAME          ,
    pattern AUDIO_ENCODER_SINK_NAME         ,
    pattern AUDIO_DEF_RATE                  ,
    pattern AUDIO_DEF_FORMAT                ,
    pattern AUDIO_DEF_CHANNELS              ,
    pattern AUDIO_DECODER_SRC_NAME          ,
    pattern AUDIO_DECODER_SINK_NAME         ,
    pattern AUDIO_DECODER_MAX_ERRORS        ,
    pattern AUDIO_CONVERTER_OPT_RESAMPLER_METHOD,
    pattern AUDIO_CONVERTER_OPT_QUANTIZATION,
    pattern AUDIO_CONVERTER_OPT_NOISE_SHAPING_METHOD,
    pattern AUDIO_CONVERTER_OPT_MIX_MATRIX  ,
    pattern AUDIO_CONVERTER_OPT_DITHER_METHOD,
    pattern AUDIO_CHANNELS_RANGE            ,

    ) 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


-- | This metadata is relevant for audio streams.
-- 
-- /Since: 1.2/
pattern $mMETA_TAG_AUDIO_STR :: forall {r}. Text -> ((# #) -> r) -> ((# #) -> r) -> r
$bMETA_TAG_AUDIO_STR :: Text
META_TAG_AUDIO_STR = "audio" :: T.Text

-- | This metadata stays relevant as long as sample rate is unchanged.
-- 
-- /Since: 1.8/
pattern $mMETA_TAG_AUDIO_RATE_STR :: forall {r}. Text -> ((# #) -> r) -> ((# #) -> r) -> r
$bMETA_TAG_AUDIO_RATE_STR :: Text
META_TAG_AUDIO_RATE_STR = "rate" :: T.Text

-- | This metadata stays relevant as long as channels are unchanged.
-- 
-- /Since: 1.2/
pattern $mMETA_TAG_AUDIO_CHANNELS_STR :: forall {r}. Text -> ((# #) -> r) -> ((# #) -> r) -> r
$bMETA_TAG_AUDIO_CHANNELS_STR :: Text
META_TAG_AUDIO_CHANNELS_STR = "channels" :: T.Text

-- | /No description available in the introspection data./
pattern $mAUDIO_RESAMPLER_QUALITY_MIN :: forall {r}. Int32 -> ((# #) -> r) -> ((# #) -> r) -> r
$bAUDIO_RESAMPLER_QUALITY_MIN :: Int32
AUDIO_RESAMPLER_QUALITY_MIN = 0 :: Int32

-- | /No description available in the introspection data./
pattern $mAUDIO_RESAMPLER_QUALITY_MAX :: forall {r}. Int32 -> ((# #) -> r) -> ((# #) -> r) -> r
$bAUDIO_RESAMPLER_QUALITY_MAX :: Int32
AUDIO_RESAMPLER_QUALITY_MAX = 10 :: Int32

-- | /No description available in the introspection data./
pattern $mAUDIO_RESAMPLER_QUALITY_DEFAULT :: forall {r}. Int32 -> ((# #) -> r) -> ((# #) -> r) -> r
$bAUDIO_RESAMPLER_QUALITY_DEFAULT :: Int32
AUDIO_RESAMPLER_QUALITY_DEFAULT = 4 :: Int32

-- | G_TYPE_DOUBLE, transition bandwidth. The width of the
-- transition band for the kaiser window. 0.087 is the default.
pattern $mAUDIO_RESAMPLER_OPT_TRANSITION_BANDWIDTH :: forall {r}. Text -> ((# #) -> r) -> ((# #) -> r) -> r
$bAUDIO_RESAMPLER_OPT_TRANSITION_BANDWIDTH :: Text
AUDIO_RESAMPLER_OPT_TRANSITION_BANDWIDTH = "GstAudioResampler.transition-bandwidth" :: T.Text

-- | G_TYPE_DOUBLE, stopband attenuation in decibels. The attenuation
-- after the stopband for the kaiser window. 85 dB is the default.
pattern $mAUDIO_RESAMPLER_OPT_STOP_ATTENUATION :: forall {r}. Text -> ((# #) -> r) -> ((# #) -> r) -> r
$bAUDIO_RESAMPLER_OPT_STOP_ATTENUATION :: Text
AUDIO_RESAMPLER_OPT_STOP_ATTENUATION = "GstAudioResampler.stop-attenutation" :: T.Text

-- | G_TYPE_INT: the number of taps to use for the filter.
-- 0 is the default and selects the taps automatically.
pattern $mAUDIO_RESAMPLER_OPT_N_TAPS :: forall {r}. Text -> ((# #) -> r) -> ((# #) -> r) -> r
$bAUDIO_RESAMPLER_OPT_N_TAPS :: Text
AUDIO_RESAMPLER_OPT_N_TAPS = "GstAudioResampler.n-taps" :: T.Text

-- | G_TYPE_DOUBLE: The maximum allowed phase error when switching sample
-- rates.
-- 0.1 is the default.
pattern $mAUDIO_RESAMPLER_OPT_MAX_PHASE_ERROR :: forall {r}. Text -> ((# #) -> r) -> ((# #) -> r) -> r
$bAUDIO_RESAMPLER_OPT_MAX_PHASE_ERROR :: Text
AUDIO_RESAMPLER_OPT_MAX_PHASE_ERROR = "GstAudioResampler.max-phase-error" :: T.Text

-- | G_TYPE_UINT, oversampling to use when interpolating filters
-- 8 is the default.
pattern $mAUDIO_RESAMPLER_OPT_FILTER_OVERSAMPLE :: forall {r}. Text -> ((# #) -> r) -> ((# #) -> r) -> r
$bAUDIO_RESAMPLER_OPT_FILTER_OVERSAMPLE :: Text
AUDIO_RESAMPLER_OPT_FILTER_OVERSAMPLE = "GstAudioResampler.filter-oversample" :: T.Text

-- | G_TYPE_UINT: the amount of memory to use for full filter tables before
-- switching to interpolated filter tables.
-- 1048576 is the default.
pattern $mAUDIO_RESAMPLER_OPT_FILTER_MODE_THRESHOLD :: forall {r}. Text -> ((# #) -> r) -> ((# #) -> r) -> r
$bAUDIO_RESAMPLER_OPT_FILTER_MODE_THRESHOLD :: Text
AUDIO_RESAMPLER_OPT_FILTER_MODE_THRESHOLD = "GstAudioResampler.filter-mode-threshold" :: T.Text

-- | GST_TYPE_AUDIO_RESAMPLER_FILTER_MODE: how the filter tables should be
-- constructed.
-- GST_AUDIO_RESAMPLER_FILTER_MODE_AUTO is the default.
pattern $mAUDIO_RESAMPLER_OPT_FILTER_MODE :: forall {r}. Text -> ((# #) -> r) -> ((# #) -> r) -> r
$bAUDIO_RESAMPLER_OPT_FILTER_MODE :: Text
AUDIO_RESAMPLER_OPT_FILTER_MODE = "GstAudioResampler.filter-mode" :: T.Text

-- | GST_TYPE_AUDIO_RESAMPLER_INTERPOLATION: how the filter coefficients should be
--    interpolated.
-- GST_AUDIO_RESAMPLER_FILTER_INTERPOLATION_CUBIC is default.
pattern $mAUDIO_RESAMPLER_OPT_FILTER_INTERPOLATION :: forall {r}. Text -> ((# #) -> r) -> ((# #) -> r) -> r
$bAUDIO_RESAMPLER_OPT_FILTER_INTERPOLATION :: Text
AUDIO_RESAMPLER_OPT_FILTER_INTERPOLATION = "GstAudioResampler.filter-interpolation" :: T.Text

-- | G_TYPE_DOUBLE, Cutoff parameter for the filter. 0.940 is the default.
pattern $mAUDIO_RESAMPLER_OPT_CUTOFF :: forall {r}. Text -> ((# #) -> r) -> ((# #) -> r) -> r
$bAUDIO_RESAMPLER_OPT_CUTOFF :: Text
AUDIO_RESAMPLER_OPT_CUTOFF = "GstAudioResampler.cutoff" :: T.Text

-- | G_TYPE_DOUBLE, C parameter of the cubic filter.
-- Values between 0.0 and 2.0 are accepted. 0.0 is the default.
-- 
-- See 'GI.GstAudio.Constants.AUDIO_RESAMPLER_OPT_CUBIC_B' for some more common values
pattern $mAUDIO_RESAMPLER_OPT_CUBIC_C :: forall {r}. Text -> ((# #) -> r) -> ((# #) -> r) -> r
$bAUDIO_RESAMPLER_OPT_CUBIC_C :: Text
AUDIO_RESAMPLER_OPT_CUBIC_C = "GstAudioResampler.cubic-c" :: T.Text

-- | G_TYPE_DOUBLE, B parameter of the cubic filter.
-- Values between 0.0 and 2.0 are accepted. 1.0 is the default.
-- 
-- Below are some values of popular filters:
--                    B       C
-- Hermite           0.0     0.0
-- Spline            1.0     0.0
-- Catmull-Rom       0.0     1\/2
pattern $mAUDIO_RESAMPLER_OPT_CUBIC_B :: forall {r}. Text -> ((# #) -> r) -> ((# #) -> r) -> r
$bAUDIO_RESAMPLER_OPT_CUBIC_B :: Text
AUDIO_RESAMPLER_OPT_CUBIC_B = "GstAudioResampler.cubic-b" :: T.Text

-- | Maximum range of allowed sample rates, for use in template caps strings.
pattern $mAUDIO_RATE_RANGE :: forall {r}. Text -> ((# #) -> r) -> ((# #) -> r) -> r
$bAUDIO_RATE_RANGE :: Text
AUDIO_RATE_RANGE = "(int) [ 1, max ]" :: T.Text

-- | List of all audio formats, for use in template caps strings.
-- 
-- Formats are sorted by decreasing \"quality\", using these criteria by priority:
--   - depth
--   - width
--   - Float > Signed > Unsigned
--   - native endianness preferred
pattern $mAUDIO_FORMATS_ALL :: forall {r}. Text -> ((# #) -> r) -> ((# #) -> r) -> r
$bAUDIO_FORMATS_ALL :: Text
AUDIO_FORMATS_ALL = "{ F64BE, F64LE, F32BE, F32LE, S32BE, S32LE, U32BE, U32LE, S24_32BE, S24_32LE, U24_32BE, U24_32LE, S24BE, S24LE, U24BE, U24LE, S20BE, S20LE, U20BE, U20LE, S18BE, S18LE, U18BE, U18LE, S16BE, S16LE, U16BE, U16LE, S8, U8 }" :: T.Text

-- | the name of the templates for the source pad
pattern $mAUDIO_ENCODER_SRC_NAME :: forall {r}. Text -> ((# #) -> r) -> ((# #) -> r) -> r
$bAUDIO_ENCODER_SRC_NAME :: Text
AUDIO_ENCODER_SRC_NAME = "src" :: T.Text

-- | the name of the templates for the sink pad
pattern $mAUDIO_ENCODER_SINK_NAME :: forall {r}. Text -> ((# #) -> r) -> ((# #) -> r) -> r
$bAUDIO_ENCODER_SINK_NAME :: Text
AUDIO_ENCODER_SINK_NAME = "sink" :: T.Text

-- | Standard sampling rate used in consumer audio.
pattern $mAUDIO_DEF_RATE :: forall {r}. Int32 -> ((# #) -> r) -> ((# #) -> r) -> r
$bAUDIO_DEF_RATE :: Int32
AUDIO_DEF_RATE = 44100 :: Int32

-- | Standard format used in consumer audio.
pattern $mAUDIO_DEF_FORMAT :: forall {r}. Text -> ((# #) -> r) -> ((# #) -> r) -> r
$bAUDIO_DEF_FORMAT :: Text
AUDIO_DEF_FORMAT = "S16LE" :: T.Text

-- | Standard number of channels used in consumer audio.
pattern $mAUDIO_DEF_CHANNELS :: forall {r}. Int32 -> ((# #) -> r) -> ((# #) -> r) -> r
$bAUDIO_DEF_CHANNELS :: Int32
AUDIO_DEF_CHANNELS = 2 :: Int32

-- | The name of the templates for the source pad.
pattern $mAUDIO_DECODER_SRC_NAME :: forall {r}. Text -> ((# #) -> r) -> ((# #) -> r) -> r
$bAUDIO_DECODER_SRC_NAME :: Text
AUDIO_DECODER_SRC_NAME = "src" :: T.Text

-- | The name of the templates for the sink pad.
pattern $mAUDIO_DECODER_SINK_NAME :: forall {r}. Text -> ((# #) -> r) -> ((# #) -> r) -> r
$bAUDIO_DECODER_SINK_NAME :: Text
AUDIO_DECODER_SINK_NAME = "sink" :: T.Text

-- | Default maximum number of errors tolerated before signaling error.
pattern $mAUDIO_DECODER_MAX_ERRORS :: forall {r}. Int32 -> ((# #) -> r) -> ((# #) -> r) -> r
$bAUDIO_DECODER_MAX_ERRORS :: Int32
AUDIO_DECODER_MAX_ERRORS = 10 :: Int32

-- | t'GI.GstAudio.Enums.AudioResamplerMethod', The resampler method to use when
-- changing sample rates.
-- Default is @/GST_AUDIO_RESAMPLER_METHOD_BLACKMAN_NUTTALL/@.
pattern $mAUDIO_CONVERTER_OPT_RESAMPLER_METHOD :: forall {r}. Text -> ((# #) -> r) -> ((# #) -> r) -> r
$bAUDIO_CONVERTER_OPT_RESAMPLER_METHOD :: Text
AUDIO_CONVERTER_OPT_RESAMPLER_METHOD = "GstAudioConverter.resampler-method" :: T.Text

-- | @/G_TYPE_UINT/@, The quantization amount. Components will be
-- quantized to multiples of this value.
-- Default is 1
pattern $mAUDIO_CONVERTER_OPT_QUANTIZATION :: forall {r}. Text -> ((# #) -> r) -> ((# #) -> r) -> r
$bAUDIO_CONVERTER_OPT_QUANTIZATION :: Text
AUDIO_CONVERTER_OPT_QUANTIZATION = "GstAudioConverter.quantization" :: T.Text

-- | t'GI.GstAudio.Enums.AudioNoiseShapingMethod', The noise shaping method to use
-- to mask noise from quantization errors.
-- Default is @/GST_AUDIO_NOISE_SHAPING_NONE/@.
pattern $mAUDIO_CONVERTER_OPT_NOISE_SHAPING_METHOD :: forall {r}. Text -> ((# #) -> r) -> ((# #) -> r) -> r
$bAUDIO_CONVERTER_OPT_NOISE_SHAPING_METHOD :: Text
AUDIO_CONVERTER_OPT_NOISE_SHAPING_METHOD = "GstAudioConverter.noise-shaping-method" :: T.Text

-- | @/GST_TYPE_LIST/@, The channel mapping matrix.
-- 
-- The matrix coefficients must be between -1 and 1: the number of rows is equal
-- to the number of output channels and the number of columns is equal to the
-- number of input channels.
-- 
-- == Example matrix generation code
-- To generate the matrix using code:
-- 
-- >
-- >GValue v = G_VALUE_INIT;
-- >GValue v2 = G_VALUE_INIT;
-- >GValue v3 = G_VALUE_INIT;
-- >
-- >g_value_init (&v2, GST_TYPE_ARRAY);
-- >g_value_init (&v3, G_TYPE_DOUBLE);
-- >g_value_set_double (&v3, 1);
-- >gst_value_array_append_value (&v2, &v3);
-- >g_value_unset (&v3);
-- >[ Repeat for as many double as your input channels - unset and reinit v3 ]
-- >g_value_init (&v, GST_TYPE_ARRAY);
-- >gst_value_array_append_value (&v, &v2);
-- >g_value_unset (&v2);
-- >[ Repeat for as many v2's as your output channels - unset and reinit v2]
-- >g_object_set_property (G_OBJECT (audiomixmatrix), "matrix", &v);
-- >g_value_unset (&v);
pattern $mAUDIO_CONVERTER_OPT_MIX_MATRIX :: forall {r}. Text -> ((# #) -> r) -> ((# #) -> r) -> r
$bAUDIO_CONVERTER_OPT_MIX_MATRIX :: Text
AUDIO_CONVERTER_OPT_MIX_MATRIX = "GstAudioConverter.mix-matrix" :: T.Text

-- | t'GI.GstAudio.Enums.AudioDitherMethod', The dither method to use when
-- changing bit depth.
-- Default is @/GST_AUDIO_DITHER_NONE/@.
pattern $mAUDIO_CONVERTER_OPT_DITHER_METHOD :: forall {r}. Text -> ((# #) -> r) -> ((# #) -> r) -> r
$bAUDIO_CONVERTER_OPT_DITHER_METHOD :: Text
AUDIO_CONVERTER_OPT_DITHER_METHOD = "GstAudioConverter.dither-method" :: T.Text

-- | Maximum range of allowed channels, for use in template caps strings.
pattern $mAUDIO_CHANNELS_RANGE :: forall {r}. Text -> ((# #) -> r) -> ((# #) -> r) -> r
$bAUDIO_CHANNELS_RANGE :: Text
AUDIO_CHANNELS_RANGE = "(int) [ 1, max ]" :: T.Text