gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/webrtc/webrtc_fwd.h
Philippe Normand 4254920b72 webrtc: Expose RTCError enum
The error codes not complying with the spec are now notified with the
GST_WEBRTC_ERROR_INTERNAL_FAILURE code.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1485>
2022-01-29 14:42:22 +00:00

467 lines
14 KiB
C

/* GStreamer
* Copyright (C) 2017 Matthew Waters <matthew@centricular.com>
*
* 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., 51 Franklin St, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#ifndef __GST_WEBRTC_FWD_H__
#define __GST_WEBRTC_FWD_H__
#ifndef GST_USE_UNSTABLE_API
#warning "The WebRTC library from gst-plugins-bad is unstable API and may change in future."
#warning "You can define GST_USE_UNSTABLE_API to avoid this warning."
#endif
#include <gst/gst.h>
/**
* SECTION:webrtc_fwd.h
* @title: GstWebRTC Enumerations
*/
#ifndef GST_WEBRTC_API
# ifdef BUILDING_GST_WEBRTC
# define GST_WEBRTC_API GST_API_EXPORT /* from config.h */
# else
# define GST_WEBRTC_API GST_API_IMPORT
# endif
#endif
#include <gst/webrtc/webrtc-enumtypes.h>
/**
* GstWebRTCDTLSTransport:
*/
typedef struct _GstWebRTCDTLSTransport GstWebRTCDTLSTransport;
typedef struct _GstWebRTCDTLSTransportClass GstWebRTCDTLSTransportClass;
/**
* GstWebRTCICETransport:
*/
typedef struct _GstWebRTCICETransport GstWebRTCICETransport;
typedef struct _GstWebRTCICETransportClass GstWebRTCICETransportClass;
/**
* GstWebRTCRTPReceiver:
*
* An object to track the receiving aspect of the stream
*
* Mostly matches the WebRTC RTCRtpReceiver interface.
*/
typedef struct _GstWebRTCRTPReceiver GstWebRTCRTPReceiver;
typedef struct _GstWebRTCRTPReceiverClass GstWebRTCRTPReceiverClass;
/**
* GstWebRTCRTPSender:
*
* An object to track the sending aspect of the stream
*
* Mostly matches the WebRTC RTCRtpSender interface.
*/
typedef struct _GstWebRTCRTPSender GstWebRTCRTPSender;
typedef struct _GstWebRTCRTPSenderClass GstWebRTCRTPSenderClass;
typedef struct _GstWebRTCSessionDescription GstWebRTCSessionDescription;
/**
* GstWebRTCRTPTransceiver:
*
* Mostly matches the WebRTC RTCRtpTransceiver interface.
*/
typedef struct _GstWebRTCRTPTransceiver GstWebRTCRTPTransceiver;
typedef struct _GstWebRTCRTPTransceiverClass GstWebRTCRTPTransceiverClass;
/**
* GstWebRTCDataChannel:
*
* Since: 1.18
*/
typedef struct _GstWebRTCDataChannel GstWebRTCDataChannel;
typedef struct _GstWebRTCDataChannelClass GstWebRTCDataChannelClass;
typedef struct _GstWebRTCSCTPTransport GstWebRTCSCTPTransport;
typedef struct _GstWebRTCSCTPTransportClass GstWebRTCSCTPTransportClass;
/**
* GstWebRTCDTLSTransportState:
* @GST_WEBRTC_DTLS_TRANSPORT_STATE_NEW: new
* @GST_WEBRTC_DTLS_TRANSPORT_STATE_CLOSED: closed
* @GST_WEBRTC_DTLS_TRANSPORT_STATE_FAILED: failed
* @GST_WEBRTC_DTLS_TRANSPORT_STATE_CONNECTING: connecting
* @GST_WEBRTC_DTLS_TRANSPORT_STATE_CONNECTED: connected
*/
typedef enum /*< underscore_name=gst_webrtc_dtls_transport_state >*/
{
GST_WEBRTC_DTLS_TRANSPORT_STATE_NEW,
GST_WEBRTC_DTLS_TRANSPORT_STATE_CLOSED,
GST_WEBRTC_DTLS_TRANSPORT_STATE_FAILED,
GST_WEBRTC_DTLS_TRANSPORT_STATE_CONNECTING,
GST_WEBRTC_DTLS_TRANSPORT_STATE_CONNECTED,
} GstWebRTCDTLSTransportState;
/**
* GstWebRTCICEGatheringState:
* @GST_WEBRTC_ICE_GATHERING_STATE_NEW: new
* @GST_WEBRTC_ICE_GATHERING_STATE_GATHERING: gathering
* @GST_WEBRTC_ICE_GATHERING_STATE_COMPLETE: complete
*
* See <http://w3c.github.io/webrtc-pc/#dom-rtcicegatheringstate>
*/
typedef enum /*< underscore_name=gst_webrtc_ice_gathering_state >*/
{
GST_WEBRTC_ICE_GATHERING_STATE_NEW,
GST_WEBRTC_ICE_GATHERING_STATE_GATHERING,
GST_WEBRTC_ICE_GATHERING_STATE_COMPLETE,
} GstWebRTCICEGatheringState; /*< underscore_name=gst_webrtc_ice_gathering_state >*/
/**
* GstWebRTCICEConnectionState:
* @GST_WEBRTC_ICE_CONNECTION_STATE_NEW: new
* @GST_WEBRTC_ICE_CONNECTION_STATE_CHECKING: checking
* @GST_WEBRTC_ICE_CONNECTION_STATE_CONNECTED: connected
* @GST_WEBRTC_ICE_CONNECTION_STATE_COMPLETED: completed
* @GST_WEBRTC_ICE_CONNECTION_STATE_FAILED: failed
* @GST_WEBRTC_ICE_CONNECTION_STATE_DISCONNECTED: disconnected
* @GST_WEBRTC_ICE_CONNECTION_STATE_CLOSED: closed
*
* See <http://w3c.github.io/webrtc-pc/#dom-rtciceconnectionstate>
*/
typedef enum /*< underscore_name=gst_webrtc_ice_connection_state >*/
{
GST_WEBRTC_ICE_CONNECTION_STATE_NEW,
GST_WEBRTC_ICE_CONNECTION_STATE_CHECKING,
GST_WEBRTC_ICE_CONNECTION_STATE_CONNECTED,
GST_WEBRTC_ICE_CONNECTION_STATE_COMPLETED,
GST_WEBRTC_ICE_CONNECTION_STATE_FAILED,
GST_WEBRTC_ICE_CONNECTION_STATE_DISCONNECTED,
GST_WEBRTC_ICE_CONNECTION_STATE_CLOSED,
} GstWebRTCICEConnectionState;
/**
* GstWebRTCSignalingState:
* @GST_WEBRTC_SIGNALING_STATE_STABLE: stable
* @GST_WEBRTC_SIGNALING_STATE_CLOSED: closed
* @GST_WEBRTC_SIGNALING_STATE_HAVE_LOCAL_OFFER: have-local-offer
* @GST_WEBRTC_SIGNALING_STATE_HAVE_REMOTE_OFFER: have-remote-offer
* @GST_WEBRTC_SIGNALING_STATE_HAVE_LOCAL_PRANSWER: have-local-pranswer
* @GST_WEBRTC_SIGNALING_STATE_HAVE_REMOTE_PRANSWER: have-remote-pranswer
*
* See <http://w3c.github.io/webrtc-pc/#dom-rtcsignalingstate>
*/
typedef enum /*< underscore_name=gst_webrtc_signaling_state >*/
{
GST_WEBRTC_SIGNALING_STATE_STABLE,
GST_WEBRTC_SIGNALING_STATE_CLOSED,
GST_WEBRTC_SIGNALING_STATE_HAVE_LOCAL_OFFER,
GST_WEBRTC_SIGNALING_STATE_HAVE_REMOTE_OFFER,
GST_WEBRTC_SIGNALING_STATE_HAVE_LOCAL_PRANSWER,
GST_WEBRTC_SIGNALING_STATE_HAVE_REMOTE_PRANSWER,
} GstWebRTCSignalingState;
/**
* GstWebRTCPeerConnectionState:
* @GST_WEBRTC_PEER_CONNECTION_STATE_NEW: new
* @GST_WEBRTC_PEER_CONNECTION_STATE_CONNECTING: connecting
* @GST_WEBRTC_PEER_CONNECTION_STATE_CONNECTED: connected
* @GST_WEBRTC_PEER_CONNECTION_STATE_DISCONNECTED: disconnected
* @GST_WEBRTC_PEER_CONNECTION_STATE_FAILED: failed
* @GST_WEBRTC_PEER_CONNECTION_STATE_CLOSED: closed
*
* See <http://w3c.github.io/webrtc-pc/#dom-rtcpeerconnectionstate>
*/
typedef enum /*< underscore_name=gst_webrtc_peer_connection_state >*/
{
GST_WEBRTC_PEER_CONNECTION_STATE_NEW,
GST_WEBRTC_PEER_CONNECTION_STATE_CONNECTING,
GST_WEBRTC_PEER_CONNECTION_STATE_CONNECTED,
GST_WEBRTC_PEER_CONNECTION_STATE_DISCONNECTED,
GST_WEBRTC_PEER_CONNECTION_STATE_FAILED,
GST_WEBRTC_PEER_CONNECTION_STATE_CLOSED,
} GstWebRTCPeerConnectionState;
/**
* GstWebRTCICERole:
* @GST_WEBRTC_ICE_ROLE_CONTROLLED: controlled
* @GST_WEBRTC_ICE_ROLE_CONTROLLING: controlling
*/
typedef enum /*< underscore_name=gst_webrtc_ice_role >*/
{
GST_WEBRTC_ICE_ROLE_CONTROLLED,
GST_WEBRTC_ICE_ROLE_CONTROLLING,
} GstWebRTCICERole;
/**
* GstWebRTCICEComponent:
* @GST_WEBRTC_ICE_COMPONENT_RTP: RTP component
* @GST_WEBRTC_ICE_COMPONENT_RTCP: RTCP component
*/
typedef enum /*< underscore_name=gst_webrtc_ice_component >*/
{
GST_WEBRTC_ICE_COMPONENT_RTP,
GST_WEBRTC_ICE_COMPONENT_RTCP,
} GstWebRTCICEComponent;
/**
* GstWebRTCSDPType:
* @GST_WEBRTC_SDP_TYPE_OFFER: offer
* @GST_WEBRTC_SDP_TYPE_PRANSWER: pranswer
* @GST_WEBRTC_SDP_TYPE_ANSWER: answer
* @GST_WEBRTC_SDP_TYPE_ROLLBACK: rollback
*
* See <http://w3c.github.io/webrtc-pc/#rtcsdptype>
*/
typedef enum /*< underscore_name=gst_webrtc_sdp_type >*/
{
GST_WEBRTC_SDP_TYPE_OFFER = 1,
GST_WEBRTC_SDP_TYPE_PRANSWER,
GST_WEBRTC_SDP_TYPE_ANSWER,
GST_WEBRTC_SDP_TYPE_ROLLBACK,
} GstWebRTCSDPType;
/**
* GstWebRTCRTPTransceiverDirection:
* @GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_NONE: none
* @GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_INACTIVE: inactive
* @GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_SENDONLY: sendonly
* @GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_RECVONLY: recvonly
* @GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_SENDRECV: sendrecv
*/
typedef enum /*< underscore_name=gst_webrtc_rtp_transceiver_direction >*/
{
GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_NONE,
GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_INACTIVE,
GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_SENDONLY,
GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_RECVONLY,
GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_SENDRECV,
} GstWebRTCRTPTransceiverDirection;
/**
* GstWebRTCDTLSSetup:
* @GST_WEBRTC_DTLS_SETUP_NONE: none
* @GST_WEBRTC_DTLS_SETUP_ACTPASS: actpass
* @GST_WEBRTC_DTLS_SETUP_ACTIVE: sendonly
* @GST_WEBRTC_DTLS_SETUP_PASSIVE: recvonly
*/
typedef enum /*< underscore_name=gst_webrtc_dtls_setup >*/
{
GST_WEBRTC_DTLS_SETUP_NONE,
GST_WEBRTC_DTLS_SETUP_ACTPASS,
GST_WEBRTC_DTLS_SETUP_ACTIVE,
GST_WEBRTC_DTLS_SETUP_PASSIVE,
} GstWebRTCDTLSSetup;
/**
* GstWebRTCStatsType:
* @GST_WEBRTC_STATS_CODEC: codec
* @GST_WEBRTC_STATS_INBOUND_RTP: inbound-rtp
* @GST_WEBRTC_STATS_OUTBOUND_RTP: outbound-rtp
* @GST_WEBRTC_STATS_REMOTE_INBOUND_RTP: remote-inbound-rtp
* @GST_WEBRTC_STATS_REMOTE_OUTBOUND_RTP: remote-outbound-rtp
* @GST_WEBRTC_STATS_CSRC: csrc
* @GST_WEBRTC_STATS_PEER_CONNECTION: peer-connectiion
* @GST_WEBRTC_STATS_DATA_CHANNEL: data-channel
* @GST_WEBRTC_STATS_STREAM: stream
* @GST_WEBRTC_STATS_TRANSPORT: transport
* @GST_WEBRTC_STATS_CANDIDATE_PAIR: candidate-pair
* @GST_WEBRTC_STATS_LOCAL_CANDIDATE: local-candidate
* @GST_WEBRTC_STATS_REMOTE_CANDIDATE: remote-candidate
* @GST_WEBRTC_STATS_CERTIFICATE: certificate
*/
typedef enum /*< underscore_name=gst_webrtc_stats_type >*/
{
GST_WEBRTC_STATS_CODEC = 1,
GST_WEBRTC_STATS_INBOUND_RTP,
GST_WEBRTC_STATS_OUTBOUND_RTP,
GST_WEBRTC_STATS_REMOTE_INBOUND_RTP,
GST_WEBRTC_STATS_REMOTE_OUTBOUND_RTP,
GST_WEBRTC_STATS_CSRC,
GST_WEBRTC_STATS_PEER_CONNECTION,
GST_WEBRTC_STATS_DATA_CHANNEL,
GST_WEBRTC_STATS_STREAM,
GST_WEBRTC_STATS_TRANSPORT,
GST_WEBRTC_STATS_CANDIDATE_PAIR,
GST_WEBRTC_STATS_LOCAL_CANDIDATE,
GST_WEBRTC_STATS_REMOTE_CANDIDATE,
GST_WEBRTC_STATS_CERTIFICATE,
} GstWebRTCStatsType;
/**
* GstWebRTCFECType:
* @GST_WEBRTC_FEC_TYPE_NONE: none
* @GST_WEBRTC_FEC_TYPE_ULP_RED: ulpfec + red
*
* Since: 1.14.1
*/
typedef enum /*< underscore_name=gst_webrtc_fec_type >*/
{
GST_WEBRTC_FEC_TYPE_NONE,
GST_WEBRTC_FEC_TYPE_ULP_RED,
} GstWebRTCFECType;
/**
* GstWebRTCSCTPTransportState:
* @GST_WEBRTC_SCTP_TRANSPORT_STATE_NEW: new
* @GST_WEBRTC_SCTP_TRANSPORT_STATE_CONNECTING: connecting
* @GST_WEBRTC_SCTP_TRANSPORT_STATE_CONNECTED: connected
* @GST_WEBRTC_SCTP_TRANSPORT_STATE_CLOSED: closed
*
* See <http://w3c.github.io/webrtc-pc/#dom-rtcsctptransportstate>
*
* Since: 1.16
*/
typedef enum /*< underscore_name=gst_webrtc_sctp_transport_state >*/
{
GST_WEBRTC_SCTP_TRANSPORT_STATE_NEW,
GST_WEBRTC_SCTP_TRANSPORT_STATE_CONNECTING,
GST_WEBRTC_SCTP_TRANSPORT_STATE_CONNECTED,
GST_WEBRTC_SCTP_TRANSPORT_STATE_CLOSED,
} GstWebRTCSCTPTransportState;
/**
* GstWebRTCPriorityType:
* @GST_WEBRTC_PRIORITY_TYPE_VERY_LOW: very-low
* @GST_WEBRTC_PRIORITY_TYPE_LOW: low
* @GST_WEBRTC_PRIORITY_TYPE_MEDIUM: medium
* @GST_WEBRTC_PRIORITY_TYPE_HIGH: high
*
* See <http://w3c.github.io/webrtc-pc/#dom-rtcprioritytype>
*
* Since: 1.16
*/
typedef enum /*< underscore_name=gst_webrtc_priority_type >*/
{
GST_WEBRTC_PRIORITY_TYPE_VERY_LOW = 1,
GST_WEBRTC_PRIORITY_TYPE_LOW,
GST_WEBRTC_PRIORITY_TYPE_MEDIUM,
GST_WEBRTC_PRIORITY_TYPE_HIGH,
} GstWebRTCPriorityType;
/**
* GstWebRTCDataChannelState:
* @GST_WEBRTC_DATA_CHANNEL_STATE_NEW: new
* @GST_WEBRTC_DATA_CHANNEL_STATE_CONNECTING: connection
* @GST_WEBRTC_DATA_CHANNEL_STATE_OPEN: open
* @GST_WEBRTC_DATA_CHANNEL_STATE_CLOSING: closing
* @GST_WEBRTC_DATA_CHANNEL_STATE_CLOSED: closed
*
* See <http://w3c.github.io/webrtc-pc/#dom-rtcdatachannelstate>
*
* Since: 1.16
*/
typedef enum /*< underscore_name=gst_webrtc_data_channel_state >*/
{
GST_WEBRTC_DATA_CHANNEL_STATE_NEW,
GST_WEBRTC_DATA_CHANNEL_STATE_CONNECTING,
GST_WEBRTC_DATA_CHANNEL_STATE_OPEN,
GST_WEBRTC_DATA_CHANNEL_STATE_CLOSING,
GST_WEBRTC_DATA_CHANNEL_STATE_CLOSED,
} GstWebRTCDataChannelState;
/**
* GstWebRTCBundlePolicy:
* @GST_WEBRTC_BUNDLE_POLICY_NONE: none
* @GST_WEBRTC_BUNDLE_POLICY_BALANCED: balanced
* @GST_WEBRTC_BUNDLE_POLICY_MAX_COMPAT: max-compat
* @GST_WEBRTC_BUNDLE_POLICY_MAX_BUNDLE: max-bundle
*
* See https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-24#section-4.1.1
* for more information.
*
* Since: 1.16
*/
typedef enum /*<underscore_name=gst_webrtc_bundle_policy>*/
{
GST_WEBRTC_BUNDLE_POLICY_NONE,
GST_WEBRTC_BUNDLE_POLICY_BALANCED,
GST_WEBRTC_BUNDLE_POLICY_MAX_COMPAT,
GST_WEBRTC_BUNDLE_POLICY_MAX_BUNDLE,
} GstWebRTCBundlePolicy;
/**
* GstWebRTCICETransportPolicy:
* @GST_WEBRTC_ICE_TRANSPORT_POLICY_ALL: all
* @GST_WEBRTC_ICE_TRANSPORT_POLICY_RELAY: relay
*
* See https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-24#section-4.1.1
* for more information.
*
* Since: 1.16
*/
typedef enum /*<underscore_name=gst_webrtc_ice_transport_policy>*/
{
GST_WEBRTC_ICE_TRANSPORT_POLICY_ALL,
GST_WEBRTC_ICE_TRANSPORT_POLICY_RELAY,
} GstWebRTCICETransportPolicy;
/**
* GstWebRTCKind:
* @GST_WEBRTC_KIND_UNKNOWN: Kind has not yet been set
* @GST_WEBRTC_KIND_AUDIO: Kind is audio
* @GST_WEBRTC_KIND_VIDEO: Kind is audio
*
* https://w3c.github.io/mediacapture-main/#dom-mediastreamtrack-kind
*
* Since: 1.20
*/
typedef enum /*<underscore_name=gst_webrtc_kind>*/
{
GST_WEBRTC_KIND_UNKNOWN,
GST_WEBRTC_KIND_AUDIO,
GST_WEBRTC_KIND_VIDEO,
} GstWebRTCKind;
GST_WEBRTC_API
GQuark gst_webrtc_error_quark (void);
/**
* GST_WEBRTC_ERROR:
*
* Since: 1.20
*/
#define GST_WEBRTC_ERROR gst_webrtc_error_quark ()
/**
* GstWebRTCError:
* @GST_WEBRTC_ERROR_DATA_CHANNEL_FAILURE: data-channel-failure
* @GST_WEBRTC_ERROR_DTLS_FAILURE: dtls-failure
* @GST_WEBRTC_ERROR_FINGERPRINT_FAILURE: fingerprint-failure
* @GST_WEBRTC_ERROR_SCTP_FAILURE: sctp-failure
* @GST_WEBRTC_ERROR_SDP_SYNTAX_ERROR: sdp-syntax-error
* @GST_WEBRTC_ERROR_HARDWARE_ENCODER_NOT_AVAILABLE: hardware-encoder-not-available
* @GST_WEBRTC_ERROR_ENCODER_ERROR: encoder-error
* @GST_WEBRTC_ERROR_INVALID_STATE: invalid-state (part of WebIDL specification)
* @GST_WEBRTC_ERROR_INTERNAL_FAILURE: GStreamer-specific failure, not matching any other value from the specification
*
* See <https://www.w3.org/TR/webrtc/#dom-rtcerrordetailtype> for more information.
*
* Since: 1.20
*/
typedef enum /*<underscore_name=gst_webrtc_error>*/
{
GST_WEBRTC_ERROR_DATA_CHANNEL_FAILURE,
GST_WEBRTC_ERROR_DTLS_FAILURE,
GST_WEBRTC_ERROR_FINGERPRINT_FAILURE,
GST_WEBRTC_ERROR_SCTP_FAILURE,
GST_WEBRTC_ERROR_SDP_SYNTAX_ERROR,
GST_WEBRTC_ERROR_HARDWARE_ENCODER_NOT_AVAILABLE,
GST_WEBRTC_ERROR_ENCODER_ERROR,
GST_WEBRTC_ERROR_INVALID_STATE,
GST_WEBRTC_ERROR_INTERNAL_FAILURE
} GstWebRTCError;
#endif /* __GST_WEBRTC_FWD_H__ */