2019-07-15 14:56:29 +00:00
|
|
|
use glib::prelude::*;
|
2018-04-09 05:53:04 +00:00
|
|
|
|
2020-01-16 08:27:50 +00:00
|
|
|
mod device_provider;
|
2019-07-11 17:35:43 +00:00
|
|
|
pub mod ndi;
|
|
|
|
mod ndiaudiosrc;
|
2019-07-15 16:43:22 +00:00
|
|
|
pub mod ndisys;
|
2018-09-18 09:53:12 +00:00
|
|
|
mod ndivideosrc;
|
2019-07-17 16:10:20 +00:00
|
|
|
pub mod receiver;
|
2018-06-25 08:38:45 +00:00
|
|
|
|
2019-07-23 11:20:56 +00:00
|
|
|
use crate::ndi::*;
|
|
|
|
use crate::ndisys::*;
|
|
|
|
use crate::receiver::*;
|
2018-06-25 08:38:45 +00:00
|
|
|
|
2018-08-14 13:45:13 +00:00
|
|
|
use std::collections::HashMap;
|
2019-07-17 07:40:26 +00:00
|
|
|
use std::time;
|
2018-08-14 14:47:58 +00:00
|
|
|
|
2021-02-23 10:29:04 +00:00
|
|
|
use once_cell::sync::Lazy;
|
|
|
|
|
2021-02-23 10:40:28 +00:00
|
|
|
#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Copy, glib::GEnum)]
|
2019-07-16 14:43:03 +00:00
|
|
|
#[repr(u32)]
|
2021-02-23 10:40:28 +00:00
|
|
|
#[genum(type_name = "GstNdiTimestampMode")]
|
2019-07-16 14:43:03 +00:00
|
|
|
pub enum TimestampMode {
|
2021-02-25 09:31:32 +00:00
|
|
|
#[genum(name = "Receive Time / Timecode", nick = "receive-time-vs-timecode")]
|
|
|
|
ReceiveTimeTimecode = 0,
|
|
|
|
#[genum(name = "Receive Time / Timestamp", nick = "receive-time-vs-timestamp")]
|
|
|
|
ReceiveTimeTimestamp = 1,
|
2021-02-23 10:40:28 +00:00
|
|
|
#[genum(name = "NDI Timecode", nick = "timecode")]
|
2021-02-25 09:31:32 +00:00
|
|
|
Timecode = 2,
|
2021-02-23 10:40:28 +00:00
|
|
|
#[genum(name = "NDI Timestamp", nick = "timestamp")]
|
2021-02-25 09:31:32 +00:00
|
|
|
Timestamp = 3,
|
2019-07-16 14:43:03 +00:00
|
|
|
}
|
|
|
|
|
2018-12-11 16:47:03 +00:00
|
|
|
fn plugin_init(plugin: &gst::Plugin) -> Result<(), glib::BoolError> {
|
2019-07-11 18:56:30 +00:00
|
|
|
if !ndi::initialize() {
|
2021-02-23 10:37:24 +00:00
|
|
|
return Err(glib::glib_bool_error!("Cannot initialize NDI"));
|
2019-07-11 18:56:30 +00:00
|
|
|
}
|
|
|
|
|
2018-12-11 16:47:03 +00:00
|
|
|
ndivideosrc::register(plugin)?;
|
|
|
|
ndiaudiosrc::register(plugin)?;
|
2020-01-16 08:27:50 +00:00
|
|
|
device_provider::register(plugin)?;
|
2018-12-11 16:47:03 +00:00
|
|
|
Ok(())
|
2018-04-09 05:53:04 +00:00
|
|
|
}
|
|
|
|
|
2021-02-23 10:29:04 +00:00
|
|
|
static DEFAULT_RECEIVER_NDI_NAME: Lazy<String> = Lazy::new(|| {
|
|
|
|
format!(
|
|
|
|
"GStreamer NDI Source {}-{}",
|
|
|
|
env!("CARGO_PKG_VERSION"),
|
|
|
|
env!("COMMIT_ID")
|
|
|
|
)
|
|
|
|
});
|
2019-07-16 13:03:15 +00:00
|
|
|
|
2019-07-22 06:12:04 +00:00
|
|
|
#[cfg(feature = "reference-timestamps")]
|
2021-02-23 10:29:04 +00:00
|
|
|
static TIMECODE_CAPS: Lazy<gst::Caps> =
|
|
|
|
Lazy::new(|| gst::Caps::new_simple("timestamp/x-ndi-timecode", &[]));
|
|
|
|
#[cfg(feature = "reference-timestamps")]
|
|
|
|
static TIMESTAMP_CAPS: Lazy<gst::Caps> =
|
|
|
|
Lazy::new(|| gst::Caps::new_simple("timestamp/x-ndi-timestamp", &[]));
|
2018-08-14 13:45:13 +00:00
|
|
|
|
2021-02-23 10:37:24 +00:00
|
|
|
gst::gst_plugin_define!(
|
2019-06-25 16:20:50 +00:00
|
|
|
ndi,
|
2019-07-09 14:51:57 +00:00
|
|
|
env!("CARGO_PKG_DESCRIPTION"),
|
2018-06-27 09:56:11 +00:00
|
|
|
plugin_init,
|
2019-07-09 14:51:57 +00:00
|
|
|
concat!(env!("CARGO_PKG_VERSION"), "-", env!("COMMIT_ID")),
|
2018-12-11 16:47:03 +00:00
|
|
|
"LGPL",
|
2019-07-09 14:51:57 +00:00
|
|
|
env!("CARGO_PKG_NAME"),
|
|
|
|
env!("CARGO_PKG_NAME"),
|
|
|
|
env!("CARGO_PKG_REPOSITORY"),
|
|
|
|
env!("BUILD_REL_DATE")
|
2018-06-27 09:56:11 +00:00
|
|
|
);
|