summaryrefslogtreecommitdiff
path: root/include/gst/rtp/gstrtphdrext.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/gst/rtp/gstrtphdrext.h')
-rw-r--r--include/gst/rtp/gstrtphdrext.h294
1 files changed, 294 insertions, 0 deletions
diff --git a/include/gst/rtp/gstrtphdrext.h b/include/gst/rtp/gstrtphdrext.h
new file mode 100644
index 0000000000..442c27af60
--- /dev/null
+++ b/include/gst/rtp/gstrtphdrext.h
@@ -0,0 +1,294 @@
+/* GStreamer
+ * Copyright (C) <2012> Wim Taymans <wim.taymans@gmail.com>
+ * Copyright (C) <2020> Matthew Waters <matthew@centricular.com>
+ *
+ * gstrtphdrext.h: RTP header extensions
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_RTPHDREXT_H__
+#define __GST_RTPHDREXT_H__
+
+#include <gst/gst.h>
+#include <gst/rtp/gstrtpbuffer.h>
+
+G_BEGIN_DECLS
+
+#define GST_RTP_HDREXT_BASE "urn:ietf:params:rtp-hdrext:"
+
+/* RFC 6051 */
+#define GST_RTP_HDREXT_NTP_64 "ntp-64"
+
+#define GST_RTP_HDREXT_NTP_64_SIZE 8
+
+GST_RTP_API
+gboolean gst_rtp_hdrext_set_ntp_64 (gpointer data, guint size, guint64 ntptime);
+
+GST_RTP_API
+gboolean gst_rtp_hdrext_get_ntp_64 (gpointer data, guint size, guint64 *ntptime);
+
+#define GST_RTP_HDREXT_NTP_56 "ntp-56"
+
+#define GST_RTP_HDREXT_NTP_56_SIZE 7
+
+GST_RTP_API
+gboolean gst_rtp_hdrext_set_ntp_56 (gpointer data, guint size, guint64 ntptime);
+
+GST_RTP_API
+gboolean gst_rtp_hdrext_get_ntp_56 (gpointer data, guint size, guint64 *ntptime);
+
+/**
+ * GST_RTP_HDREXT_ELEMENT_CLASS:
+ *
+ * Constant string used in element classification to signal that this element
+ * is a RTP header extension.
+ *
+ * Since: 1.20
+ */
+#define GST_RTP_HDREXT_ELEMENT_CLASS "Network/Extension/RTPHeader"
+
+GST_RTP_API
+GType gst_rtp_header_extension_get_type (void);
+#define GST_TYPE_RTP_HEADER_EXTENSION (gst_rtp_header_extension_get_type())
+#define GST_RTP_HEADER_EXTENSION(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_RTP_HEADER_EXTENSION,GstRTPHeaderExtension))
+#define GST_RTP_HEADER_EXTENSION_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_RTP_HEADER_EXTENSION,GstRTPHeaderExtensionClass))
+#define GST_RTP_HEADER_EXTENSION_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj),GST_TYPE_RTP_HEADER_EXTENSION,GstRTPHeaderExtensionClass))
+#define GST_IS_RTP_HEADER_EXTENSION(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_RTP_HEADER_EXTENSION))
+#define GST_IS_RTP_HEADER_EXTENSION_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_RTP_HEADER_EXTENSION))
+/**
+ * GST_RTP_HEADER_EXTENSION_CAST:
+ *
+ * Since: 1.20
+ */
+#define GST_RTP_HEADER_EXTENSION_CAST(obj) ((GstRTPHeaderExtension *)(obj))
+
+typedef struct _GstRTPHeaderExtension GstRTPHeaderExtension;
+typedef struct _GstRTPHeaderExtensionClass GstRTPHeaderExtensionClass;
+
+/**
+ * GstRTPHeaderExtensionFlags:
+ * @GST_RTP_HEADER_EXTENSION_ONE_BYTE: The one byte rtp extension header.
+ * 1-16 data bytes per extension with a maximum of
+ * 14 extension ids in total.
+ * @GST_RTP_HEADER_EXTENSION_TWO_BYTE: The two byte rtp extension header.
+ * 256 data bytes per extension with a maximum of 255 (or 256
+ * including appbits) extensions in total.
+ *
+ * Flags that apply to a RTP Audio/Video header extension.
+ *
+ * Since: 1.20
+ */
+typedef enum /*< underscore_name=gst_rtp_header_extension_flags >*/
+{
+ GST_RTP_HEADER_EXTENSION_ONE_BYTE = (1 << 0),
+ GST_RTP_HEADER_EXTENSION_TWO_BYTE = (1 << 1),
+} GstRTPHeaderExtensionFlags;
+
+/**
+ * GstRTPHeaderExtensionDirection:
+ * @GST_RTP_HEADER_EXTENSION_DIRECTION_INACTIVE: Neither send nor
+ * receive RTP Header Extensions
+ * @GST_RTP_HEADER_EXTENSION_DIRECTION_SENDONLY: Only send RTP Header
+ * Extensions @GST_RTP_HEADER_EXTENSION_DIRECTION_RECVONLY: Only
+ * receive RTP Header Extensions
+ * @GST_RTP_HEADER_EXTENSION_DIRECTION_SENDRECV: Send and receive RTP
+ * Header Extensions ext
+ * @GST_RTP_HEADER_EXTENSION_DIRECTION_INHERITED: RTP header extension
+ * direction is inherited from the stream
+ *
+ * Direction to which to apply the RTP Header Extension
+ *
+ * Since: 1.20
+ */
+typedef enum /*< underscore_name=gst_rtp_header_extension_direction >*/
+{
+ GST_RTP_HEADER_EXTENSION_DIRECTION_INACTIVE = 0,
+ GST_RTP_HEADER_EXTENSION_DIRECTION_SENDONLY = (1 << 0),
+ GST_RTP_HEADER_EXTENSION_DIRECTION_RECVONLY = (1 << 1),
+ GST_RTP_HEADER_EXTENSION_DIRECTION_SENDRECV = (
+ GST_RTP_HEADER_EXTENSION_DIRECTION_SENDONLY |
+ GST_RTP_HEADER_EXTENSION_DIRECTION_RECVONLY),
+ GST_RTP_HEADER_EXTENSION_DIRECTION_INHERITED = (1 << 2)
+} GstRTPHeaderExtensionDirection;
+
+/**
+ * GstRTPHeaderExtension:
+ * @parent: the parent #GObject
+ * @ext_id: the configured extension id
+ *
+ * Instance struct for a RTP Audio/Video header extension.
+ *
+ * Since: 1.20
+ */
+struct _GstRTPHeaderExtension
+{
+ GstElement parent;
+
+ /*< private >*/
+ gpointer _gst_reserved[GST_PADDING];
+};
+
+/**
+ * GstRTPHeaderExtensionClass:
+ * @parent_class: the parent class
+ * @get_uri: retrieve the RTP extension uri
+ * @get_supported_flags: retrieve the supported flags
+ * @get_max_size: retrieve the maximum size for this extension based on the
+ * information available from input_meta. Implementations should attempt
+ * to provide as accurate information as possible as the returned value
+ * will be used to control the amount of possible data in the payload.
+ * Implementations must return the maximum as the allocated size for
+ * writing the extension will be at least the size of the returned value.
+ * Return the amount of data read or <0 on failure.
+ * @write: write into @data the information for this extension. Various
+ * information is provided to help writing extensions in particular cases.
+ * @read: read from a rtp payloaded buffer and extract the extension
+ * information, optionally adding some meta onto the output buffer.
+ * @set_non_rtp_sink_caps: read any information from sink caps that the header
+ * extension needs for its function.
+ * @update_non_rtp_src_caps: update depayloader non-RTP (depayloaded) caps with
+ * the information parsed from RTP header.
+ * @set_attributes: set the necessary attributes that may be signaled e.g. with
+ * an SDP.
+ * @set_caps_from_attributes: write the necessary caps field/s for the configured
+ * attributes e.g. as signalled with SDP.
+ *
+ * Base class for RTP Header extensions.
+ *
+ * Since: 1.20
+ */
+
+struct _GstRTPHeaderExtensionClass
+{
+ GstElementClass parent_class;
+
+ /*< public >*/
+ GstRTPHeaderExtensionFlags (*get_supported_flags) (GstRTPHeaderExtension * ext);
+
+ gsize (*get_max_size) (GstRTPHeaderExtension * ext,
+ const GstBuffer * input_meta);
+
+ gssize (*write) (GstRTPHeaderExtension * ext,
+ const GstBuffer * input_meta,
+ GstRTPHeaderExtensionFlags write_flags,
+ GstBuffer * output,
+ guint8 * data,
+ gsize size);
+
+ gboolean (*read) (GstRTPHeaderExtension * ext,
+ GstRTPHeaderExtensionFlags read_flags,
+ const guint8 * data,
+ gsize size,
+ GstBuffer * buffer);
+ gboolean (*set_non_rtp_sink_caps) (GstRTPHeaderExtension * ext,
+ const GstCaps * caps);
+ gboolean (*update_non_rtp_src_caps) (GstRTPHeaderExtension * ext,
+ GstCaps * caps);
+ gboolean (*set_attributes) (GstRTPHeaderExtension * ext,
+ GstRTPHeaderExtensionDirection direction,
+ const gchar * attributes);
+ gboolean (*set_caps_from_attributes) (GstRTPHeaderExtension * ext,
+ GstCaps * caps);
+
+ /*< private >*/
+ gpointer _gst_reserved[GST_PADDING_LARGE];
+};
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstRTPHeaderExtension, gst_object_unref)
+
+/**
+ * GST_RTP_HEADER_EXTENSION_URI_METADATA_KEY:
+ *
+ * Since: 1.20
+ */
+#define GST_RTP_HEADER_EXTENSION_URI_METADATA_KEY "RTP-Header-Extension-URI"
+
+GST_RTP_API
+void gst_rtp_header_extension_class_set_uri (GstRTPHeaderExtensionClass *klass,
+ const gchar * uri);
+
+GST_RTP_API
+const gchar * gst_rtp_header_extension_get_uri (GstRTPHeaderExtension * ext);
+GST_RTP_API
+gsize gst_rtp_header_extension_get_max_size (GstRTPHeaderExtension * ext,
+ const GstBuffer * input_meta);
+GST_RTP_API
+GstRTPHeaderExtensionFlags gst_rtp_header_extension_get_supported_flags (GstRTPHeaderExtension * ext);
+GST_RTP_API
+guint gst_rtp_header_extension_get_id (GstRTPHeaderExtension * ext);
+GST_RTP_API
+void gst_rtp_header_extension_set_id (GstRTPHeaderExtension * ext,
+ guint ext_id);
+GST_RTP_API
+gssize gst_rtp_header_extension_write (GstRTPHeaderExtension * ext,
+ const GstBuffer * input_meta,
+ GstRTPHeaderExtensionFlags write_flags,
+ GstBuffer * output,
+ guint8 * data,
+ gsize size);
+GST_RTP_API
+gboolean gst_rtp_header_extension_read (GstRTPHeaderExtension * ext,
+ GstRTPHeaderExtensionFlags read_flags,
+ const guint8 * data,
+ gsize size,
+ GstBuffer * buffer);
+GST_RTP_API
+gboolean gst_rtp_header_extension_set_non_rtp_sink_caps (GstRTPHeaderExtension * ext,
+ const GstCaps * caps);
+GST_RTP_API
+gboolean gst_rtp_header_extension_wants_update_non_rtp_src_caps (GstRTPHeaderExtension * ext);
+GST_RTP_API
+void gst_rtp_header_extension_set_wants_update_non_rtp_src_caps (GstRTPHeaderExtension * ext,
+ gboolean state);
+GST_RTP_API
+gboolean gst_rtp_header_extension_update_non_rtp_src_caps (GstRTPHeaderExtension * ext,
+ GstCaps * caps);
+GST_RTP_API
+gboolean gst_rtp_header_extension_set_caps_from_attributes (GstRTPHeaderExtension * ext,
+ GstCaps * caps);
+GST_RTP_API
+gboolean gst_rtp_header_extension_set_attributes_from_caps (GstRTPHeaderExtension * ext,
+ const GstCaps * caps);
+
+GST_RTP_API
+GList * gst_rtp_get_header_extension_list (void);
+GST_RTP_API
+GstRTPHeaderExtension * gst_rtp_header_extension_create_from_uri (const gchar * uri);
+
+GST_RTP_API
+gchar * gst_rtp_header_extension_get_sdp_caps_field_name (GstRTPHeaderExtension * ext);
+
+GST_RTP_API
+void gst_rtp_header_extension_set_direction (GstRTPHeaderExtension * ext,
+ GstRTPHeaderExtensionDirection direction);
+GST_RTP_API
+GstRTPHeaderExtensionDirection gst_rtp_header_extension_get_direction (GstRTPHeaderExtension * ext);
+
+GST_RTP_API
+gboolean gst_rtp_header_extension_set_caps_from_attributes_helper (GstRTPHeaderExtension * ext,
+ GstCaps * caps,
+ const gchar * attributes);
+
+G_END_DECLS
+
+#endif /* __GST_RTPHDREXT_H__ */
+