[options]
girs_dir = "gir-files"
library = "Gst"
version = "1.0"
min_cfg_version = "1.8"
target_path = "gstreamer"
work_mode = "normal"
concurrency = "send+sync"
generate_safety_asserts = true
single_version_file = true

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

generate = [
    "Gst.ClockTimeDiff",
    "Gst.Pipeline",
    "Gst.State",
    "Gst.StateChange",
    "Gst.SeekFlags",
    "Gst.SeekType",
    "Gst.PadDirection",
    "Gst.PadPresence",
    "Gst.URIHandler",
    "Gst.URIType",
    "Gst.ElementFactoryListType",
    "Gst.BufferingMode",
    "Gst.CoreError",
    "Gst.ResourceError",
    "Gst.LibraryError",
    "Gst.StreamError",
    "Gst.PluginError",
    "Gst.ParseError",
    "Gst.URIError",
    "Gst.StructureChangeType",
    "Gst.StreamStatusType",
    "Gst.StreamType",
    "Gst.StreamFlags",
    "Gst.ProgressType",
    "Gst.BusSyncReply",
    "Gst.TagMergeMode",
    "Gst.PadProbeType",
    "Gst.PadProbeReturn",
    "Gst.CapsIntersectMode",
    "Gst.BufferCopyFlags",
    "Gst.PadMode",
    "Gst.SchedulingFlags",
    "Gst.ChildProxy",
    "Gst.TagSetter",
    "Gst.QOSType",
    "Gst.TocSetter",
    "Gst.ClockType",
    "Gst.ElementFlags",
    "Gst.PadLinkCheck",
    "Gst.DebugLevel",
    "Gst.DebugColorFlags",
    "Gst.StackTraceFlags",
    "Gst.DebugGraphDetails",
    "Gst.ParseFlags",
    "Gst.TaskState",
    "Gst.PluginDependencyFlags",
    "Gst.DateTime",
    "Gst.BufferPoolAcquireFlags",
    "Gst.PromiseResult",
]

manual = [
    "GLib.Error",
    "GLib.Source",
    "GLib.DateTime",
    "GObject.Object",
    "Gst.Segment",
    "Gst.StaticCaps",
    "Gst.StaticPadTemplate",
]

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

[[object]]
name = "Gst.Bin"
status = "generate"
    [[object.function]]
    name = "add"
        [object.function.return]
        bool_return_is_error = "Failed to add element"

    [[object.function]]
    name = "remove"
        [object.function.return]
        bool_return_is_error = "Failed to remove element"

    [[object.function]]
    name = "recalculate_latency"
        [object.function.return]
        bool_return_is_error = "Failed to recalculate latency"

    [[object.function]]
    name = "sync_children_states"
        [object.function.return]
        bool_return_is_error = "Failed to sync children states"

[[object]]
name = "Gst.Bus"
status = "generate"
trait = false
    [[object.function]]
    name = "add_signal_watch_full"
    # Priority
    ignore = true

    [[object.function]]
    name = "timed_pop_filtered"
    # Uses enum as flags
    ignore = true
    [[object.function]]
    name = "pop_filtered"
    # Uses enum as flags
    ignore = true
    [[object.function]]
    name = "poll"
    # Uses enum as flags
    ignore = true

    [[object.function]]
    name = "create_watch"
    # More convenient manual implementation
    ignore = true

    [[object.signal]]
    name = "message"
    concurrency = "send"

    [[object.function]]
    name = "post"
        [object.function.return]
        bool_return_is_error = "Failed to post message"

[[object]]
name = "Gst.BufferFlags"
status = "generate"
    [[object.derive]]
    name = "Serialize, Deserialize"
    cfg_condition = "feature = \"ser_de\""

[[object]]
name = "Gst.Format"
status = "generate"
    [[object.derive]]
    name = "Serialize, Deserialize"
    cfg_condition = "feature = \"ser_de\""
    [[object.derive]]
    name = "Debug, PartialEq, Eq, PartialOrd, Ord, Hash"

[[object]]
name = "Gst.SegmentFlags"
status = "generate"
    [[object.derive]]
    name = "Serialize, Deserialize"
    cfg_condition = "feature = \"ser_de\""

[[object]]
name = "Gst.TocScope"
status = "generate"
    [[object.derive]]
    name = "Serialize, Deserialize"
    cfg_condition = "feature = \"ser_de\""
    [[object.derive]]
    name = "Debug, PartialEq, Eq, PartialOrd, Ord, Hash"

[[object]]
name = "Gst.TocEntryType"
status = "generate"
    [[object.derive]]
    name = "Serialize, Deserialize"
    cfg_condition = "feature = \"ser_de\""
    [[object.derive]]
    name = "Debug, PartialEq, Eq, PartialOrd, Ord, Hash"

[[object]]
name = "Gst.TocLoopType"
status = "generate"
    [[object.derive]]
    name = "Serialize, Deserialize"
    cfg_condition = "feature = \"ser_de\""
    [[object.derive]]
    name = "Debug, PartialEq, Eq, PartialOrd, Ord, Hash"

[[object]]
name = "Gst.Rank"
status = "generate"
    [[object.derive]]
    name = "Debug, PartialEq, Eq, Hash"

[[object]]
name = "Gst.TypeFindProbability"
status = "generate"
    [[object.derive]]
    name = "Debug, PartialEq, Eq, Hash"

[[object]]
name = "Gst.EventType"
status = "generate"
    [[object.derive]]
    name = "Debug, PartialEq, Eq, Hash"

[[object]]
name = "Gst.Structure"
status = "manual"
ref_mode = "ref-mut"

[[object]]
name = "Gst.ParseContext"
status = "manual"
ref_mode = "ref-mut"

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

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

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

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

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

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

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

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

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

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

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

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

[[object]]
name = "Gst.Clock"
status = "generate"
    [[object.function]]
    name = "set_master"
        [object.function.return]
        bool_return_is_error = "Failed to set master clock"

    [[object.function]]
    name = "wait_for_sync"
        [object.function.return]
        bool_return_is_error = "Timed out waiting for sync"

    [[object.function]]
    name = "adjust_with_calibration"
    # Useless clock parameter
    ignore = true

    [[object.function]]
    name = "unadjust_with_calibration"
    # Useless clock parameter
    ignore = true

[[object]]
name = "Gst.SystemClock"
status = "generate"
    [[object.function]]
    name = "obtain"
        [object.function.return]
        nullable = false

[[object]]
name = "Gst.Element"
status = "generate"
    [[object.function]]
    name = "make_from_uri"
        [object.function.return]
        # It is already a Result
        nullable = false

    [[object.function]]
    name = "add_pad"
        [object.function.return]
        bool_return_is_error = "Failed to add pad"

    [[object.function]]
    name = "remove_pad"
        [object.function.return]
        bool_return_is_error = "Failed to remove pad"

    [[object.function]]
    name = "link"
        [object.function.return]
        bool_return_is_error = "Failed to link elements"

    [[object.function]]
    name = "link_filtered"
        [object.function.return]
        bool_return_is_error = "Failed to link elements"

    [[object.function]]
    name = "link_pads"
        [object.function.return]
        bool_return_is_error = "Failed to link pads"

    [[object.function]]
    name = "link_pads_filtered"
        [object.function.return]
        bool_return_is_error = "Failed to link pads"

    [[object.function]]
    name = "link_pads_full"
        [object.function.return]
        bool_return_is_error = "Failed to link pads"

    [[object.function]]
    name = "post_message"
        [object.function.return]
        bool_return_is_error = "Failed to post message"

    [[object.function]]
    name = "seek"
        [object.function.return]
        bool_return_is_error = "Failed to seek"

    [[object.function]]
    name = "seek_simple"
        [object.function.return]
        bool_return_is_error = "Failed to seek"

    [[object.function]]
    name = "set_clock"
        [object.function.return]
        bool_return_is_error = "Failed to set clock"

    [[object.function]]
    name = "sync_state_with_parent"
        [object.function.return]
        bool_return_is_error = "Failed to sync state with parent"

    [[object.function]]
    name = "query"
    # correct mutability
    ignore = true

    [[object.function]]
    name = "send_event"
    # Pass by value
    ignore = true

    [[object.function]]
    name = "get_context_unlocked"
    # Unsafe
    ignore = true

    [[object.function]]
    name = "add_property_deep_notify_watch"
    # ulong
    ignore = true

    [[object.function]]
    name = "add_property_notify_watch"
    # ulong
    ignore = true

    [[object.function]]
    name = "remove_property_notify_watch"
    # ulong
    ignore = true

    [[object.function]]
    name = "query_duration"
    # formatted value
    ignore = true

    [[object.function]]
    name = "query_position"
    # formatted value
    ignore = true

    [[object.function]]
    name = "query_convert"
    # formatted value
    ignore = true

    [[object.function]]
    name = "seek"
    # formatted value
    ignore = true

    [[object.function]]
    name = "seek_simple"
    # formatted value
    ignore = true

    [[object.function]]
    name = "state_change_return_get_name"
    # Wrong place
    ignore = true

    [[object.function]]
    name = "state_get_name"
    # Wrong place
    ignore = true

    [[object.function]]
    name = "get_metadata"
    # better manual function
    ignore = true

    [[object.function]]
    name = "get_pad_template"
    # better manual function
    ignore = true

    [[object.function]]
    name = "get_pad_template_list"
    # better manual function
    ignore = true

[[object]]
name = "Gst.ElementFactory"
status = "generate"
trait = false

[[object]]
name = "Gst.TypeFindFactory"
status = "generate"
trait = false

[[object]]
name = "Gst.DeviceProviderFactory"
status = "generate"
trait = false

[[object]]
name = "Gst.DeviceProvider"
status = "generate"
    [[object.function]]
    name = "get_bus"
        [object.function.return]
        nullable = false

    [[object.function]]
    name = "start"
        [object.function.return]
        bool_return_is_error = "Failed to start"

    [[object.function]]
    name = "get_metadata"
    # better manual function
    ignore = true

[[object]]
name = "Gst.DeviceMonitor"
status = "generate"
    [[object.function]]
    name = "new"
    # Work-around for 1.14 switch from transfer-floating to transfer-full
    ignore = true

    [[object.function]]
    name = "get_bus"
        [object.function.return]
        nullable = false

    [[object.function]]
    name = "start"
        [object.function.return]
        bool_return_is_error = "Failed to start"

[[object]]
name = "Gst.Device"
status = "generate"
    [[object.function]]
    name = "get_display_name"
        [object.function.return]
        nullable = false

    [[object.function]]
    name = "get_device_class"
        [object.function.return]
        nullable = false

[[object]]
name = "Gst.Object"
# For renaming the trait...
status = "generate"
trait_name = "GstObjectExt"
    [[object.function]]
    name = "set_name"
        [object.function.return]
        bool_return_is_error = "Failed to set object name"

    [[object.function]]
    name = "get_name"
        [object.function.return]
        nullable = false

    [[object.function]]
    name = "set_name"
        [[object.function.parameter]]
        name = "name"
        nullable = false

    [[object.function]]
    name = "get_path_string"
        [object.function.return]
        nullable = false

    [[object.function]]
    name = "set_parent"
        [object.function.return]
        bool_return_is_error = "Failed to set parent object"

    [[object.function]]
    name = "sync_values"
        [object.function.return]
        bool_return_is_error = "Failed to sync values"

[[object]]
name = "Gst.Pad"
status = "generate"
    [[object.function]]
    name = "link_maybe_ghosting"
        [object.function.return]
        bool_return_is_error = "Failed to link pad, possibly ghosting"

    [[object.function]]
    name = "unlink"
        [object.function.return]
        bool_return_is_error = "Failed to unlink pad"

    [[object.function]]
    name = "pause_task"
        [object.function.return]
        bool_return_is_error = "Failed to pause pad task"

    [[object.function]]
    name = "stop_task"
        [object.function.return]
        bool_return_is_error = "Failed to stop pad task"

    [[object.function]]
    name = "set_active"
        [object.function.return]
        bool_return_is_error = "Failed to activate pad"

    [[object.function]]
    name = "activate_mode"
        [object.function.return]
        bool_return_is_error = "Failed to activate mode pad"

    [[object.function]]
    name = "remove_probe"
    # Don't use a ulong
    ignore = true

    [[object.function]]
    name = "chain"
    # Move buffer
    ignore = true

    [[object.function]]
    name = "push"
    # Move buffer
    ignore = true

    [[object.function]]
    name = "chain_list"
    # Move buffer
    ignore = true

    [[object.function]]
    name = "push_list"
    # Move buffer
    ignore = true

    [[object.function]]
    name = "pull_range"
    # Buffer can be NULL
    ignore = true

    [[object.function]]
    name = "get_range"
    # Buffer can be NULL
    ignore = true

    [[object.function]]
    name = "query"
    # Correct mutability
    ignore = true

    [[object.function]]
    name = "peer_query"
    # Correct mutability
    ignore = true

    [[object.function]]
    name = "query_default"
    # Correct mutability
    ignore = true

    [[object.function]]
    name = "proxy_query_caps"
    # Correct mutability
    ignore = true

    [[object.function]]
    name = "proxy_query_accept_caps"
    # Correct mutability
    ignore = true

    [[object.function]]
    name = "event_default"
    # Pass by value
    ignore = true

    [[object.function]]
    name = "push_event"
    # Pass by value
    ignore = true

    [[object.function]]
    name = "send_event"
    # Pass by value
    ignore = true

    [[object.function]]
    name = "new_from_static_template"
    # Correct mutability
    ignore = true

    [[object.function]]
    name = "query_duration"
    # formatted value
    ignore = true

    [[object.function]]
    name = "query_position"
    # formatted value
    ignore = true

    [[object.function]]
    name = "query_convert"
    # formatted value
    ignore = true

    [[object.function]]
    name = "peer_query_duration"
    # formatted value
    ignore = true

    [[object.function]]
    name = "peer_query_position"
    # formatted value
    ignore = true

    [[object.function]]
    name = "peer_query_convert"
    # formatted value
    ignore = true

    [[object.function]]
    name = "link_get_name"
    # Wrong place
    ignore = true

[[object]]
name = "Gst.PadTemplate"
status = "generate"
trait = false
    [[object.function]]
    name = "new_from_static_pad_template_with_gtype"
    # static pad template manual
    ignore = true

[[object]]
name = "Gst.GhostPad"
status = "generate"
    [[object.function]]
    name = "set_target"
        [object.function.return]
        bool_return_is_error = "Failed to set target"

    [[object.function]]
    name = "new"
    ignore = true

    [[object.function]]
    name = "new_from_template"
    ignore = true

    [[object.function]]
    name = "construct"
    ignore = true

    [[object.function]]
    name = "activate_mode_default"
    # wrong instance type
    ignore = true

    [[object.function]]
    name = "internal_activate_mode_default"
    # wrong instance type
    ignore = true

[[object]]
name = "Gst.ProxyPad"
status = "generate"

    [[object.function]]
    name = "chain_default"
    # Buffer move
    ignore = true

    [[object.function]]
    name = "chain_list_default"
    # Buffer move
    ignore = true

    [[object.function]]
    name = "getrange_default"
    # Buffer move
    ignore = true

[[object]]
name = "Gst.Stream"
status = "generate"
trait = false
    [[object.function]]
    name = "new"
    # Work-around for 1.14 switch from transfer-floating to transfer-full
    ignore = true

[[object]]
name = "Gst.StreamCollection"
status = "generate"
trait = false
    [[object.function]]
    name = "new"
    # Work-around for 1.14 switch from transfer-floating to transfer-full
    ignore = true

[[object]]
name = "Gst.Plugin"
status = "generate"
trait = false

    [[object.function]]
    name = "list_free"
    # useless and unsafe
    ignore = true

    [[object.function]]
    name = "set_cache_data"
    # pass by value
    ignore = true

    [[object.function]]
    name = "get_cache_data"
    # structure ref
    ignore = true

    [[object.function]]
    name = "get_description"
        [object.function.return]
        nullable = false

    [[object.function]]
    name = "get_name"
        [object.function.return]
        nullable = false

    [[object.function]]
    name = "get_license"
        [object.function.return]
        nullable = false

    [[object.function]]
    name = "get_origin"
        [object.function.return]
        nullable = false

    [[object.function]]
    name = "get_package"
        [object.function.return]
        nullable = false

    [[object.function]]
    name = "get_source"
        [object.function.return]
        nullable = false

    [[object.function]]
    name = "get_version"
        [object.function.return]
        nullable = false

[[object]]
name = "Gst.PluginFeature"
status = "generate"
    [[object.function]]
    pattern = "list_.*"
    ignore = true

    [[object.function]]
    name = "rank_compare_func"
    ignore = true

[[object]]
name = "Gst.Registry"
status = "generate"
trait = false

    [[object.function]]
    pattern = "fork_.*"
    ignore = true

    [[object.function]]
    name = "get"
        [object.function.return]
        nullable = false

    [[object.function]]
    name = "add_feature"
        [object.function.return]
        bool_return_is_error = "Failed to add feature"

    [[object.function]]
    name = "add_plugin"
        [object.function.return]
        bool_return_is_error = "Failed to add plugin"

[[object]]
name = "Gst.BufferPool"
status = "generate"
    [[object.function]]
    pattern = "config_.*"
    # A different type
    ignore = true

    [[object.function]]
    name = "get_config"
    # A different type
    ignore = true

    [[object.function]]
    name = "set_config"
    # Takes ownership
    ignore = true

    [[object.function]]
    name = "acquire_buffer"
    # Params and return value
    ignore = true

    [[object.function]]
    name = "release_buffer"
    # Takes ownership
    ignore = true

    [[object.function]]
    name = "new"
    # Work-around for 1.14 switch from transfer-floating to transfer-full
    ignore = true

    [[object.function]]
    name = "set_active"
        [object.function.return]
        bool_return_is_error = "Failed to activate buffer pool"

[[object]]
name = "Gst.Preset"
status = "generate"

    [[object.function]]
    name = "set_app_dir"
        [object.function.return]
        bool_return_is_error = "Failed to set app preset directory"

    [[object.function]]
    name = "delete_preset"
        [object.function.return]
        bool_return_is_error = "Failed to delete preset"

    [[object.function]]
    name = "load_preset"
        [object.function.return]
        bool_return_is_error = "Failed to load preset"

    [[object.function]]
    name = "save_preset"
        [object.function.return]
        bool_return_is_error = "Failed to save preset"

    [[object.function]]
    name = "rename_preset"
        [object.function.return]
        bool_return_is_error = "Failed to rename preset"

    [[object.function]]
    name = "set_meta"
        [object.function.return]
        bool_return_is_error = "Failed to set preset meta"

[[object]]
name = "Gst.*"
status = "generate"
    # We'll opt-in for constants at a later time
    [[object.constant]]
    pattern = ".+"
    ignore = true

    [[object.function]]
    name = "util_dump_mem"
    ignore = true

    [[object.function]]
    name = "util_dump_buffer"
    # We have our Debug impl on buffers
    ignore = true

    [[object.function]]
    name = "protection_select_system"
    # unsupported array type
    ignore = true

    [[object.function]]
    name = "calculate_linear_regression"
    ignore = true

    [[object.function]]
    pattern = "value_.*"
    ignore = true

    [[object.function]]
    pattern = ".*_get_type"
    ignore = true

    [[object.function]]
    pattern = "tag_.*"
    ignore = true

    [[object.function]]
    pattern = "segtrap_.*"
    ignore = true

    [[object.function]]
    pattern = "util_[g]?double_.*"
    ignore = true

    [[object.function]]
    pattern = "util_fraction_.*"
    ignore = true

    [[object.function]]
    pattern = "util_greatest_.*"
    ignore = true

    [[object.function]]
    pattern = "util_[g]?uint64.*"
    ignore = true

    [[object.function]]
    name = "deinit"
    ignore = true

    [[object.function]]
    name = "util_set_object_arg"
    ignore = true

    [[object.function]]
    name = "util_seqnum_compare"
    ignore = true

    [[object.function]]
    name = "dynamic_type_register"
    ignore = true

    [[object.function]]
    name = "flow_get_name"
    ignore = true

    [[object.function]]
    name = "filename_to_uri"
    ignore = true

    [[object.function]]
    name = "is_initialized"
    ignore = true

    [[object.function]]
    name = "debug_add_log_function"
    ignore = true

    [[object.function]]
    name = "debug_remove_log_function"
    ignore = true

    [[object.function]]
    name = "debug_remove_log_function_by_data"
    ignore = true

    [[object.function]]
    name = "debug_construct_term_color"
    ignore = true

    [[object.function]]
    name = "debug_construct_win_color"
    ignore = true

    [[object.function]]
    name = "debug_get_all_categories"
    ignore = true

    [[object.function]]
    name = "debug_get_color_mode"
    ignore = true

    [[object.function]]
    pattern = "debug_log.*"
    ignore = true

    [[object.function]]
    name = "debug_set_color_mode"
    ignore = true

    [[object.function]]
    name = "debug_set_color_mode_from_string"
    ignore = true

    [[object.function]]
    name = "error_get_message"
    ignore = true

    [[object.function]]
    name = "flow_to_quark"
    ignore = true

    [[object.function]]
    name = "formats_contains"
    ignore = true

    [[object.function]]
    pattern = "info_.*"
    ignore = true

    [[object.function]]
    pattern = "print.*"
    ignore = true

    [[object.function]]
    pattern = "init.*"
    ignore = true

    [[object.function]]
    pattern = "param_spec_.*"
    ignore = true

    [[object.function]]
    name = "is_caps_features"
    ignore = true

    [[object.function]]
    name = "make_element_message_details"
    ignore = true

    [[object.function]]
    name = "util_array_binary_search"
    ignore = true

    [[object.function]]
    name = "util_get_object_array"
    ignore = true

    [[object.function]]
    name = "util_set_object_array"
    ignore = true

    [[object.function]]
    name = "util_set_value_from_string"
    ignore = true

    [[object.function]]
    pattern = "parse.*full"
    # wrong mutable for context parameter
    ignore = true

    [[object.function]]
    name = "util_group_id_next"
    # newtype wrapper
    ignore = true

    [[object.function]]
    name = "util_seqnum_next"
    # newtype wrapper
    ignore = true

    [[object.function]]
    name = "protection_filter_systems_by_available_decryptors"
    # wrong array annotations
    ignore = true

    [[object.function]]
    name = "debug_bin_to_dot_data"
        [object.function.return]
        nullable = false

    [[object.function]]
    name = "version_string"
        [object.function.return]
        nullable = false

    [[object.function]]
    name = "parse_bin_from_description"
        [object.function.return]
        nullable = false

    [[object.function]]
    name = "parse_launch"
        [object.function.return]
        # Already a Result
        nullable = false

    [[object.function]]
    name = "parse_launchv"
        [object.function.return]
        # Already a Result
        nullable = false

[[object]]
name = "Gst.StateChangeReturn"
status = "generate"
must_use = true

[[object]]
name = "Gst.FlowReturn"
status = "generate"
must_use = true

[[object]]
name = "Gst.PadLinkReturn"
status = "generate"
must_use = true

[[object]]
name = "Gst.ClockReturn"
status = "generate"
must_use = true