mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-06 07:28:53 +00:00
Small updates to various docs.
Original commit message from CVS: * docs/manual/basics-pads.xml: * docs/plugins/Makefile.am: * docs/plugins/gstreamer-plugins-docs.sgml: * docs/plugins/gstreamer-plugins-sections.txt: * docs/pwg/advanced-clock.xml: * docs/pwg/advanced-scheduling.xml: * docs/pwg/advanced-types.xml: * plugins/elements/gstfdsink.c: * plugins/elements/gstfdsrc.c: * plugins/elements/gstfdsrc.h: * plugins/elements/gstidentity.c: (gst_identity_class_init): * plugins/elements/gstidentity.h: * plugins/elements/gstqueue.h: * plugins/elements/gsttee.c: * plugins/elements/gsttee.h: * plugins/elements/gsttypefindelement.c: (gst_type_find_element_class_init): * plugins/elements/gsttypefindelement.h: Small updates to various docs. Added core plugins to docs.
This commit is contained in:
parent
0acf2fc2b4
commit
4f15126b53
18 changed files with 164 additions and 30 deletions
23
ChangeLog
23
ChangeLog
|
@ -1,3 +1,26 @@
|
||||||
|
2006-01-04 Wim Taymans <wim@fluendo.com>
|
||||||
|
|
||||||
|
* docs/manual/basics-pads.xml:
|
||||||
|
* docs/plugins/Makefile.am:
|
||||||
|
* docs/plugins/gstreamer-plugins-docs.sgml:
|
||||||
|
* docs/plugins/gstreamer-plugins-sections.txt:
|
||||||
|
* docs/pwg/advanced-clock.xml:
|
||||||
|
* docs/pwg/advanced-scheduling.xml:
|
||||||
|
* docs/pwg/advanced-types.xml:
|
||||||
|
* plugins/elements/gstfdsink.c:
|
||||||
|
* plugins/elements/gstfdsrc.c:
|
||||||
|
* plugins/elements/gstfdsrc.h:
|
||||||
|
* plugins/elements/gstidentity.c: (gst_identity_class_init):
|
||||||
|
* plugins/elements/gstidentity.h:
|
||||||
|
* plugins/elements/gstqueue.h:
|
||||||
|
* plugins/elements/gsttee.c:
|
||||||
|
* plugins/elements/gsttee.h:
|
||||||
|
* plugins/elements/gsttypefindelement.c:
|
||||||
|
(gst_type_find_element_class_init):
|
||||||
|
* plugins/elements/gsttypefindelement.h:
|
||||||
|
Small updates to various docs.
|
||||||
|
Added core plugins to docs.
|
||||||
|
|
||||||
2006-01-03 Thomas Vander Stichele <thomas (at) apestaart (dot) org>
|
2006-01-03 Thomas Vander Stichele <thomas (at) apestaart (dot) org>
|
||||||
|
|
||||||
* common/gst.supp:
|
* common/gst.supp:
|
||||||
|
|
|
@ -195,7 +195,7 @@ link_to_multiplexer (GstPad *tolink_pad,
|
||||||
Since the pads play a very important role in how the element is
|
Since the pads play a very important role in how the element is
|
||||||
viewed by the outside world, a mechanism is implemented to describe
|
viewed by the outside world, a mechanism is implemented to describe
|
||||||
the data that can flow or currently flows through the pad by using
|
the data that can flow or currently flows through the pad by using
|
||||||
capabilities. Here,w e will briefly describe what capabilities are
|
capabilities. Here, we will briefly describe what capabilities are
|
||||||
and how to use them, enough to get an understanding of the concept.
|
and how to use them, enough to get an understanding of the concept.
|
||||||
For an in-depth look into capabilities and a list of all capabilities
|
For an in-depth look into capabilities and a list of all capabilities
|
||||||
defined in &GStreamer;, see the <ulink type="http"
|
defined in &GStreamer;, see the <ulink type="http"
|
||||||
|
@ -381,7 +381,7 @@ Pad Templates:
|
||||||
Metadata: by reading the capabilities from a pad, applications
|
Metadata: by reading the capabilities from a pad, applications
|
||||||
can provide information about the type of media that is being
|
can provide information about the type of media that is being
|
||||||
streamed over the pad, which is information about the stream
|
streamed over the pad, which is information about the stream
|
||||||
thatis currently being played back.
|
that is currently being played back.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
|
|
|
@ -76,9 +76,13 @@ IGNORE_CFILES =
|
||||||
EXTRA_HFILES = \
|
EXTRA_HFILES = \
|
||||||
$(top_srcdir)/plugins/elements/gstfakesrc.h \
|
$(top_srcdir)/plugins/elements/gstfakesrc.h \
|
||||||
$(top_srcdir)/plugins/elements/gstfakesink.h \
|
$(top_srcdir)/plugins/elements/gstfakesink.h \
|
||||||
|
$(top_srcdir)/plugins/elements/gstfdsrc.h \
|
||||||
$(top_srcdir)/plugins/elements/gstfilesrc.h \
|
$(top_srcdir)/plugins/elements/gstfilesrc.h \
|
||||||
$(top_srcdir)/plugins/elements/gstfilesink.h \
|
$(top_srcdir)/plugins/elements/gstfilesink.h \
|
||||||
$(top_srcdir)/plugins/elements/gstqueue.h
|
$(top_srcdir)/plugins/elements/gstidentity.h \
|
||||||
|
$(top_srcdir)/plugins/elements/gstqueue.h \
|
||||||
|
$(top_srcdir)/plugins/elements/gsttypefindelement.h \
|
||||||
|
$(top_srcdir)/plugins/elements/gsttee.h
|
||||||
|
|
||||||
# Images to copy into HTML directory.
|
# Images to copy into HTML directory.
|
||||||
HTML_IMAGES =
|
HTML_IMAGES =
|
||||||
|
|
|
@ -14,9 +14,13 @@
|
||||||
<title>gstreamer Elements</title>
|
<title>gstreamer Elements</title>
|
||||||
<xi:include href="xml/element-fakesrc.xml" />
|
<xi:include href="xml/element-fakesrc.xml" />
|
||||||
<xi:include href="xml/element-fakesink.xml" />
|
<xi:include href="xml/element-fakesink.xml" />
|
||||||
|
<xi:include href="xml/element-fdsrc.xml" />
|
||||||
<xi:include href="xml/element-filesrc.xml" />
|
<xi:include href="xml/element-filesrc.xml" />
|
||||||
<xi:include href="xml/element-filesink.xml" />
|
<xi:include href="xml/element-filesink.xml" />
|
||||||
|
<xi:include href="xml/element-identity.xml" />
|
||||||
<xi:include href="xml/element-queue.xml" />
|
<xi:include href="xml/element-queue.xml" />
|
||||||
|
<xi:include href="xml/element-tee.xml" />
|
||||||
|
<xi:include href="xml/element-typefind.xml" />
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
<chapter>
|
<chapter>
|
||||||
|
|
|
@ -34,6 +34,20 @@ GST_IS_FAKE_SINK_CLASS
|
||||||
gst_fake_sink_get_type
|
gst_fake_sink_get_type
|
||||||
</SECTION>
|
</SECTION>
|
||||||
|
|
||||||
|
<SECTION>
|
||||||
|
<FILE>element-fdsrc</FILE>
|
||||||
|
<TITLE>fdsrc</TITLE>
|
||||||
|
GstFdSrc
|
||||||
|
<SUBSECTION Standard>
|
||||||
|
GstFdSrcClass
|
||||||
|
GST_FD_SRC
|
||||||
|
GST_IS_FD_SRC
|
||||||
|
GST_TYPE_FD_SRC
|
||||||
|
GST_FD_SRC_CLASS
|
||||||
|
GST_IS_FD_SRC_CLASS
|
||||||
|
<SUBSECTION Private>
|
||||||
|
gst_fd_src_get_type
|
||||||
|
</SECTION>
|
||||||
|
|
||||||
<SECTION>
|
<SECTION>
|
||||||
<FILE>element-filesrc</FILE>
|
<FILE>element-filesrc</FILE>
|
||||||
|
@ -66,6 +80,21 @@ GST_IS_FILE_SINK_CLASS
|
||||||
gst_file_sink_get_type
|
gst_file_sink_get_type
|
||||||
</SECTION>
|
</SECTION>
|
||||||
|
|
||||||
|
<SECTION>
|
||||||
|
<FILE>element-identity</FILE>
|
||||||
|
<TITLE>identity</TITLE>
|
||||||
|
GstIdentity
|
||||||
|
<SUBSECTION Standard>
|
||||||
|
GstIdentityClass
|
||||||
|
GST_IDENTITY
|
||||||
|
GST_IS_IDENTITY
|
||||||
|
GST_TYPE_IDENTITY
|
||||||
|
GST_IDENTITY_CLASS
|
||||||
|
GST_IS_IDENTITY_CLASS
|
||||||
|
<SUBSECTION Private>
|
||||||
|
gst_identity_get_type
|
||||||
|
</SECTION>
|
||||||
|
|
||||||
<SECTION>
|
<SECTION>
|
||||||
<FILE>element-queue</FILE>
|
<FILE>element-queue</FILE>
|
||||||
<TITLE>queue</TITLE>
|
<TITLE>queue</TITLE>
|
||||||
|
@ -81,4 +110,35 @@ GST_TYPE_QUEUE
|
||||||
<SUBSECTION Private>
|
<SUBSECTION Private>
|
||||||
gst_queue_get_type
|
gst_queue_get_type
|
||||||
</SECTION>
|
</SECTION>
|
||||||
|
|
||||||
|
<SECTION>
|
||||||
|
<FILE>element-typefind</FILE>
|
||||||
|
<TITLE>typefind</TITLE>
|
||||||
|
GstTypeFindElement
|
||||||
<SUBSECTION Standard>
|
<SUBSECTION Standard>
|
||||||
|
GstTypeFindElementClass
|
||||||
|
GST_TYPE_FIND_ELEMENT
|
||||||
|
GST_IS_TYPE_FIND_ELEMENT
|
||||||
|
GST_TYPE_TYPE_FIND_ELEMENT
|
||||||
|
GST_TYPE_FIND_ELEMENT_CLASS
|
||||||
|
GST_IS_TYPE_FIND_ELEMENT_CLASS
|
||||||
|
GST_TYPE_FIND_ELEMENT_GET_CLASS
|
||||||
|
<SUBSECTION Private>
|
||||||
|
gst_type_find_element_get_type
|
||||||
|
</SECTION>
|
||||||
|
|
||||||
|
<SECTION>
|
||||||
|
<FILE>element-tee</FILE>
|
||||||
|
<TITLE>tee</TITLE>
|
||||||
|
GstTee
|
||||||
|
<SUBSECTION Standard>
|
||||||
|
GstTeeClass
|
||||||
|
GST_TEE
|
||||||
|
GST_IS_TEE
|
||||||
|
GST_TYPE_TEE
|
||||||
|
GST_TEE_CLASS
|
||||||
|
GST_IS_TEE_CLASS
|
||||||
|
<SUBSECTION Private>
|
||||||
|
gst_tee_get_type
|
||||||
|
</SECTION>
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<para>
|
<para>
|
||||||
When playing complex media, each sound and video sample must be played in a
|
When playing complex media, each sound and video sample must be played in a
|
||||||
specific order at a specific time. For this purpose, GStreamer provides a
|
specific order at a specific time. For this purpose, GStreamer provides a
|
||||||
syncrhonization mechanism.
|
synchronization mechanism.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<sect1 id="section-clock-time-types" xreflabel="Types of time">
|
<sect1 id="section-clock-time-types" xreflabel="Types of time">
|
||||||
|
|
|
@ -47,7 +47,7 @@
|
||||||
If all pads of an element are assigned to do
|
If all pads of an element are assigned to do
|
||||||
<quote>push</quote>-based scheduling, then this means that data
|
<quote>push</quote>-based scheduling, then this means that data
|
||||||
will be pushed by upstream elements to this element using the
|
will be pushed by upstream elements to this element using the
|
||||||
sinkpads <function>_chain ()</function>-function. Pprerequisites
|
sinkpads <function>_chain ()</function>-function. Prerequisites
|
||||||
for this scheduling mode are that a chain-function was set for
|
for this scheduling mode are that a chain-function was set for
|
||||||
each sinkpad using<function>gst_pad_set_chain_function ()</function>
|
each sinkpad using<function>gst_pad_set_chain_function ()</function>
|
||||||
and that all downstream elements operate in the same mode. Pads are
|
and that all downstream elements operate in the same mode. Pads are
|
||||||
|
|
|
@ -331,25 +331,6 @@ plugin_init (GstPlugin *plugin)
|
||||||
The amount of bits used and allocated per sample.
|
The amount of bits used and allocated per sample.
|
||||||
</entry>
|
</entry>
|
||||||
</row>
|
</row>
|
||||||
<row>
|
|
||||||
<entry morerows="1">buffer-frames</entry>
|
|
||||||
<entry morerows="1">integer</entry>
|
|
||||||
<entry morerows="1">Any</entry>
|
|
||||||
<entry>
|
|
||||||
The number of frames per buffer. The reason for this property
|
|
||||||
is that the element does not need to reuse buffers or use data
|
|
||||||
spanned over multiple buffers, so this property - when used
|
|
||||||
rightly - will decrease latency.
|
|
||||||
</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>
|
|
||||||
Note that some people think that this property is very ugly,
|
|
||||||
whereas others think it is vital for the use of &GStreamer; in
|
|
||||||
professional audio applications. The special value zero is
|
|
||||||
reserved and implies that size is variable between buffers.
|
|
||||||
</entry>
|
|
||||||
</row>
|
|
||||||
|
|
||||||
<!-- ############ subtitle ############# -->
|
<!-- ############ subtitle ############# -->
|
||||||
|
|
||||||
|
@ -750,14 +731,14 @@ plugin_init (GstPlugin *plugin)
|
||||||
</row>
|
</row>
|
||||||
<row>
|
<row>
|
||||||
<entry>framerate</entry>
|
<entry>framerate</entry>
|
||||||
<entry>double</entry>
|
<entry>fraction</entry>
|
||||||
<entry>greater than 0</entry>
|
<entry>greater or equal 0</entry>
|
||||||
<entry>
|
<entry>
|
||||||
The (average) framerate in frames per second. Note that this
|
The (average) framerate in frames per second. Note that this
|
||||||
property does not guarantee in <emphasis>any</emphasis> way that
|
property does not guarantee in <emphasis>any</emphasis> way that
|
||||||
it will actually come close to this value. If you need a fixed
|
it will actually come close to this value. If you need a fixed
|
||||||
framerate, please use an element that provides that (such as
|
framerate, please use an element that provides that (such as
|
||||||
<quote>videodrop</quote>).
|
<quote>videodrop</quote>). 0 means a variable framerate.
|
||||||
</entry>
|
</entry>
|
||||||
</row>
|
</row>
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,14 @@
|
||||||
* Boston, MA 02111-1307, USA.
|
* Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SECTION:element-fdsink
|
||||||
|
* @short_description: write to a unix file descriptor
|
||||||
|
* @see_also: #GstFdSrc
|
||||||
|
*
|
||||||
|
* Write data to a unix file descriptor.
|
||||||
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -20,6 +20,14 @@
|
||||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
* Boston, MA 02111-1307, USA.
|
* Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
/**
|
||||||
|
* SECTION:element-fdsrc
|
||||||
|
* @short_description: read from a unix file descriptor
|
||||||
|
* @see_also: #GstFdSink
|
||||||
|
*
|
||||||
|
* Read data from a unix file descriptor.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
|
|
|
@ -46,9 +46,15 @@ G_BEGIN_DECLS
|
||||||
typedef struct _GstFdSrc GstFdSrc;
|
typedef struct _GstFdSrc GstFdSrc;
|
||||||
typedef struct _GstFdSrcClass GstFdSrcClass;
|
typedef struct _GstFdSrcClass GstFdSrcClass;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GstFdSrc:
|
||||||
|
*
|
||||||
|
* Opaque #GstFdSrc data structure
|
||||||
|
*/
|
||||||
struct _GstFdSrc {
|
struct _GstFdSrc {
|
||||||
GstPushSrc element;
|
GstPushSrc element;
|
||||||
|
|
||||||
|
/*< private >*/
|
||||||
/* new_fd is copied to fd on READY->PAUSED */
|
/* new_fd is copied to fd on READY->PAUSED */
|
||||||
gint new_fd;
|
gint new_fd;
|
||||||
|
|
||||||
|
|
|
@ -208,6 +208,14 @@ gst_identity_class_init (GstIdentityClass * klass)
|
||||||
"Verify that the stream is time- and data-contiguous",
|
"Verify that the stream is time- and data-contiguous",
|
||||||
DEFAULT_CHECK_PERFECT, G_PARAM_READWRITE));
|
DEFAULT_CHECK_PERFECT, G_PARAM_READWRITE));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GstIdentity::handoff:
|
||||||
|
* @identity: the identity instance
|
||||||
|
* @buffer: the buffer that just has been received
|
||||||
|
* @pad: the pad that received it
|
||||||
|
*
|
||||||
|
* This signal gets emitted before passing the buffer downstream.
|
||||||
|
*/
|
||||||
gst_identity_signals[SIGNAL_HANDOFF] =
|
gst_identity_signals[SIGNAL_HANDOFF] =
|
||||||
g_signal_new ("handoff", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
|
g_signal_new ("handoff", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
|
||||||
G_STRUCT_OFFSET (GstIdentityClass, handoff), NULL, NULL,
|
G_STRUCT_OFFSET (GstIdentityClass, handoff), NULL, NULL,
|
||||||
|
|
|
@ -45,9 +45,15 @@ G_BEGIN_DECLS
|
||||||
typedef struct _GstIdentity GstIdentity;
|
typedef struct _GstIdentity GstIdentity;
|
||||||
typedef struct _GstIdentityClass GstIdentityClass;
|
typedef struct _GstIdentityClass GstIdentityClass;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GstIdentity:
|
||||||
|
*
|
||||||
|
* Opaque #GstIdentity data structure
|
||||||
|
*/
|
||||||
struct _GstIdentity {
|
struct _GstIdentity {
|
||||||
GstBaseTransform element;
|
GstBaseTransform element;
|
||||||
|
|
||||||
|
/*< private >*/
|
||||||
GstClockID clock_id;
|
GstClockID clock_id;
|
||||||
gint error_after;
|
gint error_after;
|
||||||
gfloat drop_probability;
|
gfloat drop_probability;
|
||||||
|
|
|
@ -24,8 +24,7 @@
|
||||||
#ifndef __GST_QUEUE_H__
|
#ifndef __GST_QUEUE_H__
|
||||||
#define __GST_QUEUE_H__
|
#define __GST_QUEUE_H__
|
||||||
|
|
||||||
|
#include <gst/gst.h>
|
||||||
#include <gst/gstelement.h>
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,14 @@
|
||||||
* Boston, MA 02111-1307, USA.
|
* Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SECTION:element-tee
|
||||||
|
* @short_description: 1-to-N pipe fitting
|
||||||
|
* @see_also: #GstIdentity
|
||||||
|
*
|
||||||
|
* Split data to multiple pads.
|
||||||
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -43,9 +43,15 @@ G_BEGIN_DECLS
|
||||||
typedef struct _GstTee GstTee;
|
typedef struct _GstTee GstTee;
|
||||||
typedef struct _GstTeeClass GstTeeClass;
|
typedef struct _GstTeeClass GstTeeClass;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GstTee:
|
||||||
|
*
|
||||||
|
* Opaque #GstTee data structure.
|
||||||
|
*/
|
||||||
struct _GstTee {
|
struct _GstTee {
|
||||||
GstElement element;
|
GstElement element;
|
||||||
|
|
||||||
|
/*< private >*/
|
||||||
GstPad *sinkpad;
|
GstPad *sinkpad;
|
||||||
|
|
||||||
gboolean silent;
|
gboolean silent;
|
||||||
|
|
|
@ -191,7 +191,15 @@ gst_type_find_element_class_init (GstTypeFindElementClass * typefind_class)
|
||||||
g_param_spec_uint ("maximum", _("maximum"),
|
g_param_spec_uint ("maximum", _("maximum"),
|
||||||
"probability to stop typefinding", GST_TYPE_FIND_MINIMUM,
|
"probability to stop typefinding", GST_TYPE_FIND_MINIMUM,
|
||||||
GST_TYPE_FIND_MAXIMUM, GST_TYPE_FIND_MAXIMUM, G_PARAM_READWRITE));
|
GST_TYPE_FIND_MAXIMUM, GST_TYPE_FIND_MAXIMUM, G_PARAM_READWRITE));
|
||||||
|
/**
|
||||||
|
* GstTypeFindElement::have-type:
|
||||||
|
* @typefind: the typefind instance
|
||||||
|
* @probability: the probability of the type found
|
||||||
|
* @caps: the caps of the type found
|
||||||
|
*
|
||||||
|
* This signal gets emitted when the type and its probability has
|
||||||
|
* been found.
|
||||||
|
*/
|
||||||
gst_type_find_element_signals[HAVE_TYPE] = g_signal_new ("have_type",
|
gst_type_find_element_signals[HAVE_TYPE] = g_signal_new ("have_type",
|
||||||
G_TYPE_FROM_CLASS (typefind_class), G_SIGNAL_RUN_LAST,
|
G_TYPE_FROM_CLASS (typefind_class), G_SIGNAL_RUN_LAST,
|
||||||
G_STRUCT_OFFSET (GstTypeFindElementClass, have_type), NULL, NULL,
|
G_STRUCT_OFFSET (GstTypeFindElementClass, have_type), NULL, NULL,
|
||||||
|
|
|
@ -42,6 +42,11 @@ G_BEGIN_DECLS
|
||||||
typedef struct _GstTypeFindElement GstTypeFindElement;
|
typedef struct _GstTypeFindElement GstTypeFindElement;
|
||||||
typedef struct _GstTypeFindElementClass GstTypeFindElementClass;
|
typedef struct _GstTypeFindElementClass GstTypeFindElementClass;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GstTypeFindElement:
|
||||||
|
*
|
||||||
|
* Opaque #GstTypeFindElement data structure
|
||||||
|
*/
|
||||||
struct _GstTypeFindElement {
|
struct _GstTypeFindElement {
|
||||||
GstElement element;
|
GstElement element;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue