Add various other WebRTC related enums/flags types to the bindings

While they are not used by the types we have, they are used by the
webrtcbin element and are required for setting properties.

Fixes https://github.com/sdroege/gstreamer-rs/issues/110
This commit is contained in:
Sebastian Dröge 2018-06-04 09:00:09 +03:00
parent 8d0a0ee6b1
commit b6a5686798
3 changed files with 370 additions and 0 deletions

View file

@ -23,6 +23,11 @@ generate = [
"GstWebRTC.WebRTCICERole",
"GstWebRTC.WebRTCICEComponent",
"GstWebRTC.WebRTCSDPType",
"GstWebRTC.WebRTCDTLSSetup",
"GstWebRTC.WebRTCPeerConnectionState",
"GstWebRTC.WebRTCRTPTransceiverDirection",
"GstWebRTC.WebRTCSignalingState",
"GstWebRTC.WebRTCStatsType",
]
manual = [

View file

@ -12,6 +12,69 @@ use glib::value::SetValue;
use glib::value::Value;
use gobject_ffi;
#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
pub enum WebRTCDTLSSetup {
None,
Actpass,
Active,
Passive,
#[doc(hidden)]
__Unknown(i32),
}
#[doc(hidden)]
impl ToGlib for WebRTCDTLSSetup {
type GlibType = ffi::GstWebRTCDTLSSetup;
fn to_glib(&self) -> ffi::GstWebRTCDTLSSetup {
match *self {
WebRTCDTLSSetup::None => ffi::GST_WEBRTC_DTLS_SETUP_NONE,
WebRTCDTLSSetup::Actpass => ffi::GST_WEBRTC_DTLS_SETUP_ACTPASS,
WebRTCDTLSSetup::Active => ffi::GST_WEBRTC_DTLS_SETUP_ACTIVE,
WebRTCDTLSSetup::Passive => ffi::GST_WEBRTC_DTLS_SETUP_PASSIVE,
WebRTCDTLSSetup::__Unknown(value) => value
}
}
}
#[doc(hidden)]
impl FromGlib<ffi::GstWebRTCDTLSSetup> for WebRTCDTLSSetup {
fn from_glib(value: ffi::GstWebRTCDTLSSetup) -> Self {
skip_assert_initialized!();
match value {
0 => WebRTCDTLSSetup::None,
1 => WebRTCDTLSSetup::Actpass,
2 => WebRTCDTLSSetup::Active,
3 => WebRTCDTLSSetup::Passive,
value => WebRTCDTLSSetup::__Unknown(value),
}
}
}
impl StaticType for WebRTCDTLSSetup {
fn static_type() -> Type {
unsafe { from_glib(ffi::gst_webrtc_dtls_setup_get_type()) }
}
}
impl<'a> FromValueOptional<'a> for WebRTCDTLSSetup {
unsafe fn from_value_optional(value: &Value) -> Option<Self> {
Some(FromValue::from_value(value))
}
}
impl<'a> FromValue<'a> for WebRTCDTLSSetup {
unsafe fn from_value(value: &Value) -> Self {
from_glib(gobject_ffi::g_value_get_enum(value.to_glib_none().0))
}
}
impl SetValue for WebRTCDTLSSetup {
unsafe fn set_value(value: &mut Value, this: &Self) {
gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, this.to_glib())
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
pub enum WebRTCDTLSTransportState {
New,
@ -324,6 +387,141 @@ impl SetValue for WebRTCICERole {
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
pub enum WebRTCPeerConnectionState {
New,
Connecting,
Connected,
Disconnected,
Failed,
Closed,
#[doc(hidden)]
__Unknown(i32),
}
#[doc(hidden)]
impl ToGlib for WebRTCPeerConnectionState {
type GlibType = ffi::GstWebRTCPeerConnectionState;
fn to_glib(&self) -> ffi::GstWebRTCPeerConnectionState {
match *self {
WebRTCPeerConnectionState::New => ffi::GST_WEBRTC_PEER_CONNECTION_STATE_NEW,
WebRTCPeerConnectionState::Connecting => ffi::GST_WEBRTC_PEER_CONNECTION_STATE_CONNECTING,
WebRTCPeerConnectionState::Connected => ffi::GST_WEBRTC_PEER_CONNECTION_STATE_CONNECTED,
WebRTCPeerConnectionState::Disconnected => ffi::GST_WEBRTC_PEER_CONNECTION_STATE_DISCONNECTED,
WebRTCPeerConnectionState::Failed => ffi::GST_WEBRTC_PEER_CONNECTION_STATE_FAILED,
WebRTCPeerConnectionState::Closed => ffi::GST_WEBRTC_PEER_CONNECTION_STATE_CLOSED,
WebRTCPeerConnectionState::__Unknown(value) => value
}
}
}
#[doc(hidden)]
impl FromGlib<ffi::GstWebRTCPeerConnectionState> for WebRTCPeerConnectionState {
fn from_glib(value: ffi::GstWebRTCPeerConnectionState) -> Self {
skip_assert_initialized!();
match value {
0 => WebRTCPeerConnectionState::New,
1 => WebRTCPeerConnectionState::Connecting,
2 => WebRTCPeerConnectionState::Connected,
3 => WebRTCPeerConnectionState::Disconnected,
4 => WebRTCPeerConnectionState::Failed,
5 => WebRTCPeerConnectionState::Closed,
value => WebRTCPeerConnectionState::__Unknown(value),
}
}
}
impl StaticType for WebRTCPeerConnectionState {
fn static_type() -> Type {
unsafe { from_glib(ffi::gst_webrtc_peer_connection_state_get_type()) }
}
}
impl<'a> FromValueOptional<'a> for WebRTCPeerConnectionState {
unsafe fn from_value_optional(value: &Value) -> Option<Self> {
Some(FromValue::from_value(value))
}
}
impl<'a> FromValue<'a> for WebRTCPeerConnectionState {
unsafe fn from_value(value: &Value) -> Self {
from_glib(gobject_ffi::g_value_get_enum(value.to_glib_none().0))
}
}
impl SetValue for WebRTCPeerConnectionState {
unsafe fn set_value(value: &mut Value, this: &Self) {
gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, this.to_glib())
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
pub enum WebRTCRTPTransceiverDirection {
None,
Inactive,
Sendonly,
Recvonly,
Sendrecv,
#[doc(hidden)]
__Unknown(i32),
}
#[doc(hidden)]
impl ToGlib for WebRTCRTPTransceiverDirection {
type GlibType = ffi::GstWebRTCRTPTransceiverDirection;
fn to_glib(&self) -> ffi::GstWebRTCRTPTransceiverDirection {
match *self {
WebRTCRTPTransceiverDirection::None => ffi::GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_NONE,
WebRTCRTPTransceiverDirection::Inactive => ffi::GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_INACTIVE,
WebRTCRTPTransceiverDirection::Sendonly => ffi::GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_SENDONLY,
WebRTCRTPTransceiverDirection::Recvonly => ffi::GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_RECVONLY,
WebRTCRTPTransceiverDirection::Sendrecv => ffi::GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_SENDRECV,
WebRTCRTPTransceiverDirection::__Unknown(value) => value
}
}
}
#[doc(hidden)]
impl FromGlib<ffi::GstWebRTCRTPTransceiverDirection> for WebRTCRTPTransceiverDirection {
fn from_glib(value: ffi::GstWebRTCRTPTransceiverDirection) -> Self {
skip_assert_initialized!();
match value {
0 => WebRTCRTPTransceiverDirection::None,
1 => WebRTCRTPTransceiverDirection::Inactive,
2 => WebRTCRTPTransceiverDirection::Sendonly,
3 => WebRTCRTPTransceiverDirection::Recvonly,
4 => WebRTCRTPTransceiverDirection::Sendrecv,
value => WebRTCRTPTransceiverDirection::__Unknown(value),
}
}
}
impl StaticType for WebRTCRTPTransceiverDirection {
fn static_type() -> Type {
unsafe { from_glib(ffi::gst_webrtc_rtp_transceiver_direction_get_type()) }
}
}
impl<'a> FromValueOptional<'a> for WebRTCRTPTransceiverDirection {
unsafe fn from_value_optional(value: &Value) -> Option<Self> {
Some(FromValue::from_value(value))
}
}
impl<'a> FromValue<'a> for WebRTCRTPTransceiverDirection {
unsafe fn from_value(value: &Value) -> Self {
from_glib(gobject_ffi::g_value_get_enum(value.to_glib_none().0))
}
}
impl SetValue for WebRTCRTPTransceiverDirection {
unsafe fn set_value(value: &mut Value, this: &Self) {
gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, this.to_glib())
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
pub enum WebRTCSDPType {
Offer,
@ -387,3 +585,165 @@ impl SetValue for WebRTCSDPType {
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
pub enum WebRTCSignalingState {
Stable,
Closed,
HaveLocalOffer,
HaveRemoteOffer,
HaveLocalPranswer,
HaveRemotePranswer,
#[doc(hidden)]
__Unknown(i32),
}
#[doc(hidden)]
impl ToGlib for WebRTCSignalingState {
type GlibType = ffi::GstWebRTCSignalingState;
fn to_glib(&self) -> ffi::GstWebRTCSignalingState {
match *self {
WebRTCSignalingState::Stable => ffi::GST_WEBRTC_SIGNALING_STATE_STABLE,
WebRTCSignalingState::Closed => ffi::GST_WEBRTC_SIGNALING_STATE_CLOSED,
WebRTCSignalingState::HaveLocalOffer => ffi::GST_WEBRTC_SIGNALING_STATE_HAVE_LOCAL_OFFER,
WebRTCSignalingState::HaveRemoteOffer => ffi::GST_WEBRTC_SIGNALING_STATE_HAVE_REMOTE_OFFER,
WebRTCSignalingState::HaveLocalPranswer => ffi::GST_WEBRTC_SIGNALING_STATE_HAVE_LOCAL_PRANSWER,
WebRTCSignalingState::HaveRemotePranswer => ffi::GST_WEBRTC_SIGNALING_STATE_HAVE_REMOTE_PRANSWER,
WebRTCSignalingState::__Unknown(value) => value
}
}
}
#[doc(hidden)]
impl FromGlib<ffi::GstWebRTCSignalingState> for WebRTCSignalingState {
fn from_glib(value: ffi::GstWebRTCSignalingState) -> Self {
skip_assert_initialized!();
match value {
0 => WebRTCSignalingState::Stable,
1 => WebRTCSignalingState::Closed,
2 => WebRTCSignalingState::HaveLocalOffer,
3 => WebRTCSignalingState::HaveRemoteOffer,
4 => WebRTCSignalingState::HaveLocalPranswer,
5 => WebRTCSignalingState::HaveRemotePranswer,
value => WebRTCSignalingState::__Unknown(value),
}
}
}
impl StaticType for WebRTCSignalingState {
fn static_type() -> Type {
unsafe { from_glib(ffi::gst_webrtc_signaling_state_get_type()) }
}
}
impl<'a> FromValueOptional<'a> for WebRTCSignalingState {
unsafe fn from_value_optional(value: &Value) -> Option<Self> {
Some(FromValue::from_value(value))
}
}
impl<'a> FromValue<'a> for WebRTCSignalingState {
unsafe fn from_value(value: &Value) -> Self {
from_glib(gobject_ffi::g_value_get_enum(value.to_glib_none().0))
}
}
impl SetValue for WebRTCSignalingState {
unsafe fn set_value(value: &mut Value, this: &Self) {
gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, this.to_glib())
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
pub enum WebRTCStatsType {
Codec,
InboundRtp,
OutboundRtp,
RemoteInboundRtp,
RemoteOutboundRtp,
Csrc,
PeerConnection,
DataChannel,
Stream,
Transport,
CandidatePair,
LocalCandidate,
RemoteCandidate,
Certificate,
#[doc(hidden)]
__Unknown(i32),
}
#[doc(hidden)]
impl ToGlib for WebRTCStatsType {
type GlibType = ffi::GstWebRTCStatsType;
fn to_glib(&self) -> ffi::GstWebRTCStatsType {
match *self {
WebRTCStatsType::Codec => ffi::GST_WEBRTC_STATS_CODEC,
WebRTCStatsType::InboundRtp => ffi::GST_WEBRTC_STATS_INBOUND_RTP,
WebRTCStatsType::OutboundRtp => ffi::GST_WEBRTC_STATS_OUTBOUND_RTP,
WebRTCStatsType::RemoteInboundRtp => ffi::GST_WEBRTC_STATS_REMOTE_INBOUND_RTP,
WebRTCStatsType::RemoteOutboundRtp => ffi::GST_WEBRTC_STATS_REMOTE_OUTBOUND_RTP,
WebRTCStatsType::Csrc => ffi::GST_WEBRTC_STATS_CSRC,
WebRTCStatsType::PeerConnection => ffi::GST_WEBRTC_STATS_PEER_CONNECTION,
WebRTCStatsType::DataChannel => ffi::GST_WEBRTC_STATS_DATA_CHANNEL,
WebRTCStatsType::Stream => ffi::GST_WEBRTC_STATS_STREAM,
WebRTCStatsType::Transport => ffi::GST_WEBRTC_STATS_TRANSPORT,
WebRTCStatsType::CandidatePair => ffi::GST_WEBRTC_STATS_CANDIDATE_PAIR,
WebRTCStatsType::LocalCandidate => ffi::GST_WEBRTC_STATS_LOCAL_CANDIDATE,
WebRTCStatsType::RemoteCandidate => ffi::GST_WEBRTC_STATS_REMOTE_CANDIDATE,
WebRTCStatsType::Certificate => ffi::GST_WEBRTC_STATS_CERTIFICATE,
WebRTCStatsType::__Unknown(value) => value
}
}
}
#[doc(hidden)]
impl FromGlib<ffi::GstWebRTCStatsType> for WebRTCStatsType {
fn from_glib(value: ffi::GstWebRTCStatsType) -> Self {
skip_assert_initialized!();
match value {
1 => WebRTCStatsType::Codec,
2 => WebRTCStatsType::InboundRtp,
3 => WebRTCStatsType::OutboundRtp,
4 => WebRTCStatsType::RemoteInboundRtp,
5 => WebRTCStatsType::RemoteOutboundRtp,
6 => WebRTCStatsType::Csrc,
7 => WebRTCStatsType::PeerConnection,
8 => WebRTCStatsType::DataChannel,
9 => WebRTCStatsType::Stream,
10 => WebRTCStatsType::Transport,
11 => WebRTCStatsType::CandidatePair,
12 => WebRTCStatsType::LocalCandidate,
13 => WebRTCStatsType::RemoteCandidate,
14 => WebRTCStatsType::Certificate,
value => WebRTCStatsType::__Unknown(value),
}
}
}
impl StaticType for WebRTCStatsType {
fn static_type() -> Type {
unsafe { from_glib(ffi::gst_webrtc_stats_type_get_type()) }
}
}
impl<'a> FromValueOptional<'a> for WebRTCStatsType {
unsafe fn from_value_optional(value: &Value) -> Option<Self> {
Some(FromValue::from_value(value))
}
}
impl<'a> FromValue<'a> for WebRTCStatsType {
unsafe fn from_value(value: &Value) -> Self {
from_glib(gobject_ffi::g_value_get_enum(value.to_glib_none().0))
}
}
impl SetValue for WebRTCStatsType {
unsafe fn set_value(value: &mut Value, this: &Self) {
gobject_ffi::g_value_set_enum(value.to_glib_none_mut().0, this.to_glib())
}
}

View file

@ -21,12 +21,17 @@ mod web_rtc_session_description;
pub use self::web_rtc_session_description::WebRTCSessionDescription;
mod enums;
pub use self::enums::WebRTCDTLSSetup;
pub use self::enums::WebRTCDTLSTransportState;
pub use self::enums::WebRTCICEComponent;
pub use self::enums::WebRTCICEConnectionState;
pub use self::enums::WebRTCICEGatheringState;
pub use self::enums::WebRTCICERole;
pub use self::enums::WebRTCPeerConnectionState;
pub use self::enums::WebRTCRTPTransceiverDirection;
pub use self::enums::WebRTCSDPType;
pub use self::enums::WebRTCSignalingState;
pub use self::enums::WebRTCStatsType;
#[doc(hidden)]
pub mod traits {