[options]
girs_directories = ["../gir-files", "../gst-gir-files"]
library = "GstAudio"
version = "1.0"
min_cfg_version = "1.14"
work_mode = "normal"
concurrency = "send+sync"
generate_safety_asserts = true
single_version_file = true
generate_display_trait = false
trust_return_value_nullability = true

external_libraries = [
    "GLib",
    "GObject",
    "Gst",
    "GstBase",
]

generate = [
    "GstAudio.AudioBaseSrc",
    "GstAudio.AudioDitherMethod",
    "GstAudio.AudioFormatFlags",
    "GstAudio.AudioLayout",
    "GstAudio.AudioNoiseShapingMethod",
    "GstAudio.AudioResamplerMethod",
    "GstAudio.AudioSink",
    "GstAudio.AudioSrc",
    "GstAudio.StreamVolume",
    "GstAudio.StreamVolumeFormat",
]

manual = [
    "GObject.Object",
    "Gst.AllocationParams",
    "Gst.Allocator",
    "Gst.ClockTimeDiff",
    "Gst.Element",
    "Gst.Format",
    "Gst.Pad",
    "Gst.TagList",
    "Gst.TagMergeMode",
    "GstAudio.AudioChannelPosition",
    "GstAudio.AudioClippingMeta",
    "GstAudio.AudioFormatInfo",
    "GstAudio.AudioInfo",
    "GstAudio.AudioLevelMeta",
    "GstAudio.AudioMeta",
    "GstAudio.AudioRingBufferSpec",
    "GstBase.Aggregator",
    "GstBase.AggregatorPad",
    "GstBase.BaseSink",
    "GstBase.BaseSrc",
    "GstBase.BaseTransform",
]

[[object]]
name = "Gst.Buffer"
status = "manual"
ref_mode = "ref"

[[object]]
name = "Gst.Caps"
status = "manual"
ref_mode = "ref"

[[object]]
name = "Gst.ClockTime"
status = "manual"
conversion_type = "Option"

[[object]]
name = "Gst.FlowReturn"
status = "manual"
must_use = true
    [object.conversion_type]
    variant = "Result"
    ok_type = "gst::FlowSuccess"
    err_type = "gst::FlowError"

[[object]]
name = "Gst.Object"
# For renaming the trait...
status = "manual"
trait_name = "GstObjectExt"

[[object]]
name = "GstAudio.AudioAggregator"
status = "generate"
manual_traits = ["AudioAggregatorExtManual"]

    [[object.function]]
    name = "set_sink_caps"
    # capsref
    manual = true

    [[object.property]]
    name = "output-buffer-duration-fraction"
    # fraction
    manual = true

    [[object.property]]
    name = "ignore-inactive-pads"
    # getter/setter exists in base class
    ignore = true

    [[object.property]]
    name = "force-live"
    # getter/setter exists in base class
    ignore = true

[[object]]
name = "GstAudio.AudioAggregatorConvertPad"
status = "generate"
manual_traits = ["AudioAggregatorConvertPadExtManual"]

[[object]]
name = "GstAudio.AudioAggregatorPad"
status = "generate"
manual_traits = ["AudioAggregatorPadExtManual"]

[[object]]
name = "GstAudio.AudioBaseSink"
status = "generate"

    [[object.function]]
    name = "get_alignment_threshold"
        [object.function.return]
        mandatory = true

    [[object.function]]
    name = "get_discont_wait"
        [object.function.return]
        mandatory = true

    [[object.function]]
    name = "set_alignment_threshold"
        [[object.function.parameter]]
        name = "alignment_threshold"
        mandatory = true

    [[object.function]]
    name = "set_discont_wait"
        [[object.function.parameter]]
        name = "discont_wait"
        mandatory = true

[[object]]
name = "GstAudio.AudioBuffer"
status = "manual"

    [[object.function]]
    name = "map"
    # Readable and writable variant dealing with mutability
    rename = "from_buffer_readable"

[[object]]
name = "GstAudio.AudioDecoder"
status = "generate"
manual_traits = ["AudioDecoderExtManual"]

    [[object.function]]
    name = "get_latency"
        [[object.function.parameter]]
        name = "min"
        mandatory = true

    [[object.function]]
    name = "get_min_latency"
        [object.function.return]
        mandatory = true

    [[object.function]]
    name = "get_tolerance"
        [object.function.return]
        mandatory = true

    [[object.function]]
    name = "negotiate"
    manual = true

    [[object.function]]
    name = "set_latency"
        [[object.function.parameter]]
        name = "min"
        mandatory = true

    [[object.function]]
    name = "set_min_latency"
        [[object.function.parameter]]
        name = "num"
        mandatory = true

    [[object.function]]
    name = "set_output_caps"
    manual = true

    [[object.function]]
    name = "set_output_format"
    manual = true

    [[object.function]]
    name = "set_tolerance"
        [[object.function.parameter]]
        name = "tolerance"
        mandatory = true

    [[object.function]]
    name = "get_allocator"
    manual = true

[[object]]
name = "GstAudio.AudioEncoder"
status = "generate"
manual_traits = ["AudioEncoderExtManual"]
    [[object.function]]
    name = "negotiate"
    manual = true

    [[object.function]]
    name = "set_output_format"
    manual = true

    [[object.function]]
    name = "get_allocator"
    manual = true

    [[object.function]]
    name = "get_latency"
        [[object.function.parameter]]
        name = "min"
        mandatory = true

    [[object.function]]
    name = "get_tolerance"
        [object.function.return]
        mandatory = true

    [[object.function]]
    name = "set_latency"
        [[object.function.parameter]]
        name = "min"
        mandatory = true

    [[object.function]]
    name = "set_tolerance"
        [[object.function.parameter]]
        name = "tolerance"
        mandatory = true

    [[object.function]]
    name = "set_headers"
    manual = true

[[object]]
name = "GstAudio.AudioFilter"
status = "generate"
manual_traits = ["AudioFilterExtManual"]

[[object]]
name = "GstAudio.AudioFlags"
status = "generate"
    [[object.member]]
    name = "none"
    ignore = true

[[object]]
name = "GstAudio.AudioFormat"
status = "generate"

    [[object.derive]]
    name = "Debug, Eq, PartialEq, Hash"

    [[object.member]]
    name = "s16"
    # Platform dependant
    manual = true

    [[object.member]]
    name = "u16"
    # Platform dependant
    manual = true

    [[object.member]]
    name = "s24_32"
    # Platform dependant
    manual = true

    [[object.member]]
    name = "u24_32"
    # Platform dependant
    manual = true

    [[object.member]]
    name = "s32"
    # Platform dependant
    manual = true

    [[object.member]]
    name = "u32"
    # Platform dependant
    manual = true

    [[object.member]]
    name = "s24"
    # Platform dependant
    manual = true

    [[object.member]]
    name = "u24"
    # Platform dependant
    manual = true

    [[object.member]]
    name = "s20"
    # Platform dependant
    manual = true

    [[object.member]]
    name = "u20"
    # Platform dependant
    manual = true

    [[object.member]]
    name = "s18"
    # Platform dependant
    manual = true

    [[object.member]]
    name = "u18"
    # Platform dependant
    manual = true

    [[object.member]]
    name = "f32"
    # Platform dependant
    manual = true

    [[object.member]]
    name = "f64"
    # Platform dependant
    manual = true

    [[object.member]]
    name = "s20_32"
    # Platform dependant
    manual = true

    [[object.member]]
    name = "u20_32"
    # Platform dependant
    manual = true

    [[object.member]]
    name = "last"
    ignore = true

    [[object.function]]
    name = "to_string"
    # This has an Unknown field that may return NULL or "UNKNOWN"
    manual = true

    [[object.function]]
    name = "fill_silence"
    # Function does not belong in AudioFormat but AudioFormatInfo.
    # Manual implementation is available, and glib argument conversion
    # is broken.
    manual = true

    [[object.function]]
    name = "get_info"
    # Result is not nullable, function does effectively the same
    # as AudioFormatInfo::from_format()
    ignore = true

    [[object.function]]
    name = "build_integer"
    # Use custom AudioEndianness enum
    manual = true

[[object]]
name = "GstAudio.AudioPackFlags"
status = "generate"
    [[object.member]]
    name = "none"
    ignore = true

[[object]]
name = "GstAudio.AudioRingBufferFormatType"
status = "generate"
    [[object.member]]
    name = "dsd"
    version = "1.24" 

[[object]]
name = "GstAudio.AudioStreamAlign"
status = "generate"

    [[object.function]]
    name = "process"
    # bool does not signal error
    manual = true

    [[object.function]]
    pattern = "get_.*"
        [[object.function.parameter]]
        name = "align"
        const = true

    [[object.function]]
    name = "new"
        [[object.function.parameter]]
        name = "alignment_threshold"
        mandatory = true
        [[object.function.parameter]]
        name = "discont_wait"
        mandatory = true

    [[object.function]]
    name = "get_alignment_threshold"
        [object.function.return]
        mandatory = true

    [[object.function]]
    name = "get_discont_wait"
        [object.function.return]
        mandatory = true

    [[object.function]]
    name = "set_alignment_threshold"
        [[object.function.parameter]]
        name = "alignment_threshold"
        mandatory = true

    [[object.function]]
    name = "set_discont_wait"
        [[object.function.parameter]]
        name = "discont_wait"
        mandatory = true
