Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/sdroege/gst-plugin-rs.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/net/ndi
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2022-10-12 21:57:34 +0300
committerSebastian Dröge <sebastian@centricular.com>2022-10-12 22:09:56 +0300
commit53b02a82ae6d6beaaa2b8c374e5976839654f4c2 (patch)
treecfdb73ce05150936c10797c6949669d7e58f7360 /net/ndi
parent0a2e6e47c9dda4cca37f3a004e03f18ffa2ba3b7 (diff)
ndi: Re-organize code a bit and don't make internal modules public
Diffstat (limited to 'net/ndi')
-rw-r--r--net/ndi/src/lib.rs24
-rw-r--r--net/ndi/src/ndisrc/imp.rs13
-rw-r--r--net/ndi/src/ndisrc/mod.rs1
-rw-r--r--net/ndi/src/ndisrc/receiver.rs (renamed from net/ndi/src/receiver.rs)66
4 files changed, 56 insertions, 48 deletions
diff --git a/net/ndi/src/lib.rs b/net/ndi/src/lib.rs
index cf4ce9bb..ba82e9b3 100644
--- a/net/ndi/src/lib.rs
+++ b/net/ndi/src/lib.rs
@@ -1,24 +1,22 @@
// SPDX-License-Identifier: MPL-2.0
+#[allow(dead_code)]
+mod ndi;
+#[allow(dead_code)]
+mod ndisys;
+
mod device_provider;
-pub mod ndi;
+
#[cfg(feature = "sink")]
mod ndisink;
#[cfg(feature = "sink")]
mod ndisinkcombiner;
#[cfg(feature = "sink")]
-pub mod ndisinkmeta;
+mod ndisinkmeta;
+
mod ndisrc;
mod ndisrcdemux;
-pub mod ndisrcmeta;
-pub mod ndisys;
-pub mod receiver;
-
-use crate::ndi::*;
-use crate::ndisys::*;
-use crate::receiver::*;
-
-use std::time;
+mod ndisrcmeta;
use once_cell::sync::Lazy;
@@ -82,8 +80,10 @@ pub enum RecvColorFormat {
CompressedV5WithAudio = 13,
}
-impl From<RecvColorFormat> for NDIlib_recv_color_format_e {
+impl From<RecvColorFormat> for crate::ndisys::NDIlib_recv_color_format_e {
fn from(v: RecvColorFormat) -> Self {
+ use crate::ndisys::*;
+
match v {
RecvColorFormat::BgrxBgra => NDIlib_recv_color_format_BGRX_BGRA,
RecvColorFormat::UyvyBgra => NDIlib_recv_color_format_UYVY_BGRA,
diff --git a/net/ndi/src/ndisrc/imp.rs b/net/ndi/src/ndisrc/imp.rs
index 5bd90dfc..d971e89a 100644
--- a/net/ndi/src/ndisrc/imp.rs
+++ b/net/ndi/src/ndisrc/imp.rs
@@ -13,14 +13,11 @@ use std::u32;
use once_cell::sync::Lazy;
use crate::ndisys;
-
-use crate::ndisrcmeta;
-use crate::Buffer;
-use crate::Receiver;
-use crate::ReceiverControlHandle;
-use crate::ReceiverItem;
use crate::RecvColorFormat;
use crate::TimestampMode;
+
+use super::receiver::{self, Buffer, Receiver, ReceiverControlHandle, ReceiverItem};
+use crate::ndisrcmeta;
use crate::DEFAULT_RECEIVER_NDI_NAME;
static CAT: Lazy<gst::DebugCategory> = Lazy::new(|| {
@@ -61,9 +58,9 @@ impl Default for Settings {
}
struct State {
- video_info: Option<crate::VideoInfo>,
+ video_info: Option<receiver::VideoInfo>,
video_caps: Option<gst::Caps>,
- audio_info: Option<crate::AudioInfo>,
+ audio_info: Option<receiver::AudioInfo>,
audio_caps: Option<gst::Caps>,
current_latency: Option<gst::ClockTime>,
receiver: Option<Receiver>,
diff --git a/net/ndi/src/ndisrc/mod.rs b/net/ndi/src/ndisrc/mod.rs
index d8c05f5d..0b5f9bee 100644
--- a/net/ndi/src/ndisrc/mod.rs
+++ b/net/ndi/src/ndisrc/mod.rs
@@ -3,6 +3,7 @@
use glib::prelude::*;
mod imp;
+mod receiver;
glib::wrapper! {
pub struct NdiSrc(ObjectSubclass<imp::NdiSrc>) @extends gst_base::BaseSrc, gst::Element, gst::Object;
diff --git a/net/ndi/src/receiver.rs b/net/ndi/src/ndisrc/receiver.rs
index 6c1298ba..f5430ac5 100644
--- a/net/ndi/src/receiver.rs
+++ b/net/ndi/src/ndisrc/receiver.rs
@@ -11,10 +11,16 @@ use std::cmp;
use std::collections::VecDeque;
use std::sync::{Arc, Condvar, Mutex, Weak};
use std::thread;
+use std::time;
use atomic_refcell::AtomicRefCell;
-use super::*;
+use once_cell::sync::Lazy;
+
+use crate::ndi::*;
+use crate::ndisys;
+use crate::ndisys::*;
+use crate::TimestampMode;
static CAT: Lazy<gst::DebugCategory> = Lazy::new(|| {
gst::DebugCategory::new(
@@ -29,14 +35,15 @@ pub struct Receiver(Arc<ReceiverInner>);
#[derive(Debug, PartialEq, Eq)]
#[allow(clippy::large_enum_variant)]
pub enum AudioInfo {
- AudioInfo(gst_audio::AudioInfo),
+ Audio(gst_audio::AudioInfo),
#[cfg(feature = "advanced-sdk")]
- OpusInfo {
+ #[allow(dead_code)]
+ Opus {
sample_rate: i32,
no_channels: i32,
},
#[cfg(feature = "advanced-sdk")]
- AacInfo {
+ Aac {
sample_rate: i32,
no_channels: i32,
codec_data: [u8; 2],
@@ -46,9 +53,9 @@ pub enum AudioInfo {
impl AudioInfo {
pub fn to_caps(&self) -> Result<gst::Caps, glib::BoolError> {
match self {
- AudioInfo::AudioInfo(ref info) => info.to_caps(),
+ AudioInfo::Audio(ref info) => info.to_caps(),
#[cfg(feature = "advanced-sdk")]
- AudioInfo::OpusInfo {
+ AudioInfo::Opus {
sample_rate,
no_channels,
} => Ok(gst::Caps::builder("audio/x-opus")
@@ -57,7 +64,7 @@ impl AudioInfo {
.field("channel-mapping-family", 0i32)
.build()),
#[cfg(feature = "advanced-sdk")]
- AudioInfo::AacInfo {
+ AudioInfo::Aac {
sample_rate,
no_channels,
codec_data,
@@ -74,7 +81,7 @@ impl AudioInfo {
#[derive(Debug, PartialEq, Eq)]
pub enum VideoInfo {
- VideoInfo(gst_video::VideoInfo),
+ Video(gst_video::VideoInfo),
#[cfg(feature = "advanced-sdk")]
SpeedHQInfo {
variant: String,
@@ -87,7 +94,7 @@ pub enum VideoInfo {
interlace_mode: gst_video::VideoInterlaceMode,
},
#[cfg(feature = "advanced-sdk")]
- H264Info {
+ H264 {
xres: i32,
yres: i32,
fps_n: i32,
@@ -97,7 +104,7 @@ pub enum VideoInfo {
interlace_mode: gst_video::VideoInterlaceMode,
},
#[cfg(feature = "advanced-sdk")]
- H265Info {
+ H265 {
xres: i32,
yres: i32,
fps_n: i32,
@@ -111,7 +118,7 @@ pub enum VideoInfo {
impl VideoInfo {
pub fn to_caps(&self) -> Result<gst::Caps, glib::BoolError> {
match self {
- VideoInfo::VideoInfo(ref info) => info.to_caps(),
+ VideoInfo::Video(ref info) => info.to_caps(),
#[cfg(feature = "advanced-sdk")]
VideoInfo::SpeedHQInfo {
ref variant,
@@ -131,7 +138,7 @@ impl VideoInfo {
.field("variant", variant)
.build()),
#[cfg(feature = "advanced-sdk")]
- VideoInfo::H264Info {
+ VideoInfo::H264 {
xres,
yres,
fps_n,
@@ -150,7 +157,7 @@ impl VideoInfo {
.field("alignment", "au")
.build()),
#[cfg(feature = "advanced-sdk")]
- VideoInfo::H265Info {
+ VideoInfo::H265 {
xres,
yres,
fps_n,
@@ -639,17 +646,20 @@ impl Receiver {
}
}
+ #[allow(dead_code)]
pub fn set_flushing(&self, flushing: bool) {
let mut queue = (self.0.queue.0).0.lock().unwrap();
queue.flushing = flushing;
(self.0.queue.0).1.notify_all();
}
+ #[allow(dead_code)]
pub fn set_playing(&self, playing: bool) {
let mut queue = (self.0.queue.0).0.lock().unwrap();
queue.playing = playing;
}
+ #[allow(dead_code)]
pub fn shutdown(&self) {
let mut queue = (self.0.queue.0).0.lock().unwrap();
queue.shutdown = true;
@@ -1111,7 +1121,7 @@ impl Receiver {
builder = builder.field_order(gst_video::VideoFieldOrder::TopFieldFirst);
}
- return Ok(VideoInfo::VideoInfo(builder.build().map_err(|_| {
+ return Ok(VideoInfo::Video(builder.build().map_err(|_| {
gst::element_error!(
element,
gst::StreamError::Format,
@@ -1139,7 +1149,7 @@ impl Receiver {
builder = builder.field_order(gst_video::VideoFieldOrder::TopFieldFirst);
}
- return Ok(VideoInfo::VideoInfo(builder.build().map_err(|_| {
+ return Ok(VideoInfo::Video(builder.build().map_err(|_| {
gst::element_error!(
element,
gst::StreamError::Format,
@@ -1222,7 +1232,7 @@ impl Receiver {
return Err(gst::FlowError::Error);
}
- return Ok(VideoInfo::H264Info {
+ return Ok(VideoInfo::H264 {
xres: video_frame.xres(),
yres: video_frame.yres(),
fps_n: video_frame.frame_rate().0,
@@ -1260,7 +1270,7 @@ impl Receiver {
return Err(gst::FlowError::Error);
}
- return Ok(VideoInfo::H265Info {
+ return Ok(VideoInfo::H265 {
xres: video_frame.xres(),
yres: video_frame.yres(),
fps_n: video_frame.frame_rate().0,
@@ -1295,14 +1305,14 @@ impl Receiver {
gst::ReferenceTimestampMeta::add(
buffer,
- &*TIMECODE_CAPS,
+ &*crate::TIMECODE_CAPS,
gst::ClockTime::from_nseconds(video_frame.timecode() as u64 * 100),
gst::ClockTime::NONE,
);
if video_frame.timestamp() != ndisys::NDIlib_recv_timestamp_undefined {
gst::ReferenceTimestampMeta::add(
buffer,
- &*TIMESTAMP_CAPS,
+ &*crate::TIMESTAMP_CAPS,
gst::ClockTime::from_nseconds(video_frame.timestamp() as u64 * 100),
gst::ClockTime::NONE,
);
@@ -1355,7 +1365,7 @@ impl Receiver {
video_frame: &VideoFrame,
) -> Result<gst::Buffer, gst::FlowError> {
match info {
- VideoInfo::VideoInfo(ref info) => {
+ VideoInfo::Video(ref info) => {
let src = video_frame.data().ok_or(gst::FlowError::Error)?;
let buffer = gst::Buffer::with_size(info.size()).unwrap();
@@ -1495,7 +1505,7 @@ impl Receiver {
Ok(gst::Buffer::from_mut_slice(Vec::from(data)))
}
#[cfg(feature = "advanced-sdk")]
- VideoInfo::H264Info { .. } | VideoInfo::H265Info { .. } => {
+ VideoInfo::H264 { .. } | VideoInfo::H265 { .. } => {
let compressed_packet = video_frame.compressed_packet().ok_or_else(|| {
error!(
CAT,
@@ -1599,7 +1609,7 @@ impl Receiver {
gst::FlowError::NotNegotiated
})?;
- return Ok(AudioInfo::AudioInfo(info));
+ return Ok(AudioInfo::Audio(info));
}
#[cfg(feature = "advanced-sdk")]
@@ -1622,7 +1632,7 @@ impl Receiver {
return Err(gst::FlowError::Error);
}
- return Ok(AudioInfo::AacInfo {
+ return Ok(AudioInfo::Aac {
sample_rate: audio_frame.sample_rate(),
no_channels: audio_frame.no_channels(),
codec_data: compressed_packet
@@ -1653,7 +1663,7 @@ impl Receiver {
audio_frame: &AudioFrame,
) -> Result<gst::Buffer, gst::FlowError> {
match info {
- AudioInfo::AudioInfo(ref info) => {
+ AudioInfo::Audio(ref info) => {
let src = audio_frame.data().ok_or(gst::FlowError::Error)?;
let buff_size = (audio_frame.no_samples() as u32 * info.bpf()) as usize;
@@ -1666,14 +1676,14 @@ impl Receiver {
gst::ReferenceTimestampMeta::add(
buffer,
- &*TIMECODE_CAPS,
+ &*crate::TIMECODE_CAPS,
gst::ClockTime::from_nseconds(audio_frame.timecode() as u64 * 100),
gst::ClockTime::NONE,
);
if audio_frame.timestamp() != ndisys::NDIlib_recv_timestamp_undefined {
gst::ReferenceTimestampMeta::add(
buffer,
- &*TIMESTAMP_CAPS,
+ &*crate::TIMESTAMP_CAPS,
gst::ClockTime::from_nseconds(audio_frame.timestamp() as u64 * 100),
gst::ClockTime::NONE,
);
@@ -1709,7 +1719,7 @@ impl Receiver {
Ok(buffer)
}
#[cfg(feature = "advanced-sdk")]
- AudioInfo::OpusInfo { .. } => {
+ AudioInfo::Opus { .. } => {
let data = audio_frame.data().ok_or_else(|| {
error!(CAT, obj: element, "Audio packet has no data");
gst::element_error!(
@@ -1724,7 +1734,7 @@ impl Receiver {
Ok(gst::Buffer::from_mut_slice(Vec::from(data)))
}
#[cfg(feature = "advanced-sdk")]
- AudioInfo::AacInfo { .. } => {
+ AudioInfo::Aac { .. } => {
let compressed_packet = audio_frame.compressed_packet().ok_or_else(|| {
error!(
CAT,