1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
// This file was generated by gir (https://github.com/gtk-rs/gir)
// from gir-files (https://github.com/gtk-rs/gir-files)
// from gst-gir-files (https://gitlab.freedesktop.org/gstreamer/gir-files-rs.git)
// DO NOT EDIT

use crate::{Object, Stream};
use glib::translate::*;

glib::wrapper! {
    /// A collection of [`Stream`][crate::Stream] that are available.
    ///
    /// A [`StreamCollection`][crate::StreamCollection] will be provided by elements that can make those
    /// streams available. Applications can use the collection to show the user
    /// what streams are available by using [`stream()`][Self::stream()]
    ///
    /// Once posted, a [`StreamCollection`][crate::StreamCollection] is immutable. Updates are made by sending
    /// a new [`StreamCollection`][crate::StreamCollection] message, which may or may not share some of
    /// the [`Stream`][crate::Stream] objects from the collection it replaces. The receiver can check
    /// the sender of a stream collection message to know which collection is
    /// obsoleted.
    ///
    /// Several elements in a pipeline can provide [`StreamCollection`][crate::StreamCollection].
    ///
    /// Applications can activate streams from a collection by using the
    /// [`EventType::SelectStreams`][crate::EventType::SelectStreams] event on a pipeline, bin or element.
    ///
    /// ## Properties
    ///
    ///
    /// #### `upstream-id`
    ///  stream-id
    ///
    /// Readable | Writeable | Construct
    /// <details><summary><h4>Object</h4></summary>
    ///
    ///
    /// #### `name`
    ///  Readable | Writeable | Construct
    ///
    ///
    /// #### `parent`
    ///  The parent of the object. Please note, that when changing the 'parent'
    /// property, we don't emit [`notify`][struct@crate::glib::Object#notify] and [`deep-notify`][struct@crate::Object#deep-notify]
    /// signals due to locking issues. In some cases one can use
    /// [`element-added`][struct@crate::Bin#element-added] or [`element-removed`][struct@crate::Bin#element-removed] signals on the parent to
    /// achieve a similar effect.
    ///
    /// Readable | Writeable
    /// </details>
    ///
    /// ## Signals
    ///
    ///
    /// #### `stream-notify`
    ///  The stream notify signal is used to be notified of property changes to
    /// streams within the collection.
    ///
    /// Detailed
    /// <details><summary><h4>Object</h4></summary>
    ///
    ///
    /// #### `deep-notify`
    ///  The deep notify signal is used to be notified of property changes. It is
    /// typically attached to the toplevel bin to receive notifications from all
    /// the elements contained in that bin.
    ///
    /// Detailed
    /// </details>
    ///
    /// # Implements
    ///
    /// [`GstObjectExt`][trait@crate::prelude::GstObjectExt], [`trait@glib::ObjectExt`]
    #[doc(alias = "GstStreamCollection")]
    pub struct StreamCollection(Object<ffi::GstStreamCollection, ffi::GstStreamCollectionClass>) @extends Object;

    match fn {
        type_ => || ffi::gst_stream_collection_get_type(),
    }
}

impl StreamCollection {
    /// Get the number of streams this collection contains
    ///
    /// # Returns
    ///
    /// The number of streams that `self` contains
    #[doc(alias = "gst_stream_collection_get_size")]
    #[doc(alias = "get_size")]
    pub fn size(&self) -> u32 {
        unsafe { ffi::gst_stream_collection_get_size(self.to_glib_none().0) }
    }

    /// Retrieve the [`Stream`][crate::Stream] with index `index` from the collection.
    ///
    /// The caller should not modify the returned [`Stream`][crate::Stream]
    /// ## `index`
    /// Index of the stream to retrieve
    ///
    /// # Returns
    ///
    /// A [`Stream`][crate::Stream]
    #[doc(alias = "gst_stream_collection_get_stream")]
    #[doc(alias = "get_stream")]
    pub fn stream(&self, index: u32) -> Option<Stream> {
        unsafe {
            from_glib_none(ffi::gst_stream_collection_get_stream(
                self.to_glib_none().0,
                index,
            ))
        }
    }

    /// Returns the upstream id of the `self`.
    ///
    /// # Returns
    ///
    /// The upstream id
    #[doc(alias = "gst_stream_collection_get_upstream_id")]
    #[doc(alias = "get_upstream_id")]
    pub fn upstream_id(&self) -> Option<glib::GString> {
        unsafe {
            from_glib_none(ffi::gst_stream_collection_get_upstream_id(
                self.to_glib_none().0,
            ))
        }
    }

    //#[doc(alias = "stream-notify")]
    //pub fn connect_stream_notify<Unsupported or ignored types>(&self, detail: Option<&str>, f: F) -> SignalHandlerId {
    //    Ignored prop: GObject.ParamSpec
    //}
}

unsafe impl Send for StreamCollection {}
unsafe impl Sync for StreamCollection {}