Skip to content

Commit b83e44a

Browse files
committed
Extract QueueInput
1 parent 8c9dec6 commit b83e44a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

73 files changed

+2546
-2078
lines changed

integration-tests/examples/encoded_channel_output.rs

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -79,21 +79,16 @@ fn main() {
7979
}),
8080
};
8181

82-
let input_options = RegisterInputOptions {
83-
input_options: ProtocolInputOptions::Mp4(Mp4InputOptions {
84-
source: Mp4InputSource::File(root_dir.join(BUNNY_FILE_PATH).into()),
85-
should_loop: false,
86-
video_decoders: Mp4InputVideoDecoders {
87-
h264: Some(VideoDecoderOptions::FfmpegH264),
88-
},
89-
buffer: InputBufferOptions::Const(None),
90-
seek: None,
91-
}),
92-
queue_options: QueueInputOptions {
93-
required: true,
94-
offset: Some(Duration::ZERO),
82+
let input_options = RegisterInputOptions::Mp4(Mp4InputOptions {
83+
source: Mp4InputSource::File(root_dir.join(BUNNY_FILE_PATH).into()),
84+
should_loop: false,
85+
video_decoders: Mp4InputVideoDecoders {
86+
h264: Some(VideoDecoderOptions::FfmpegH264),
9587
},
96-
};
88+
seek: None,
89+
required: true,
90+
offset: Some(Duration::ZERO),
91+
});
9792

9893
Pipeline::register_input(&state.pipeline().unwrap(), input_id.clone(), input_options).unwrap();
9994

integration-tests/examples/raw_channel_input.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#![recursion_limit = "256"]
2+
13
use core::panic;
24
use std::{
35
sync::{Arc, Mutex},
@@ -91,8 +93,6 @@ fn main() {
9193
video: true,
9294
audio: false,
9395
buffer_duration: None,
94-
},
95-
QueueInputOptions {
9696
required: true,
9797
offset: Some(Duration::ZERO),
9898
},

integration-tests/examples/raw_channel_output.rs

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -90,21 +90,16 @@ fn main() {
9090
}),
9191
};
9292

93-
let input_options = RegisterInputOptions {
94-
input_options: ProtocolInputOptions::Mp4(Mp4InputOptions {
95-
source: Mp4InputSource::File(integration_tests_root().join(BUNNY_FILE_PATH).into()),
96-
should_loop: false,
97-
video_decoders: Mp4InputVideoDecoders {
98-
h264: Some(VideoDecoderOptions::FfmpegH264),
99-
},
100-
buffer: InputBufferOptions::Const(None),
101-
seek: None,
102-
}),
103-
queue_options: QueueInputOptions {
104-
required: true,
105-
offset: Some(Duration::ZERO),
93+
let input_options = RegisterInputOptions::Mp4(Mp4InputOptions {
94+
source: Mp4InputSource::File(integration_tests_root().join(BUNNY_FILE_PATH).into()),
95+
should_loop: false,
96+
video_decoders: Mp4InputVideoDecoders {
97+
h264: Some(VideoDecoderOptions::FfmpegH264),
10698
},
107-
};
99+
seek: None,
100+
required: true,
101+
offset: Some(Duration::ZERO),
102+
});
108103

109104
Pipeline::register_input(&pipeline, input_id.clone(), input_options).unwrap();
110105

integration-tests/examples/v4l2_rust_api.rs

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#![recursion_limit = "256"]
2+
13
#[cfg(not(target_os = "linux"))]
24
fn main() {
35
panic!("Your OS does not support Video for Linux 2.");
@@ -63,18 +65,13 @@ mod main_module {
6365
.find(|d| d.formats.iter().any(|f| f.format == V4l2Format::Yuyv))
6466
.expect("no device supports the required format");
6567

66-
RegisterInputOptions {
67-
input_options: ProtocolInputOptions::V4l2(V4l2InputOptions {
68-
path: device.path,
69-
resolution: Some(VIDEO_RESOLUTION),
70-
format: V4l2Format::Yuyv,
71-
framerate: Some(Framerate { num: 30, den: 1 }),
72-
}),
73-
queue_options: QueueInputOptions {
74-
required: false,
75-
offset: None,
76-
},
77-
}
68+
RegisterInputOptions::V4l2(V4l2InputOptions {
69+
path: device.path,
70+
resolution: Some(VIDEO_RESOLUTION),
71+
format: V4l2Format::Yuyv,
72+
framerate: Some(Framerate { num: 30, den: 1 }),
73+
required: false,
74+
})
7875
}
7976

8077
#[cfg(target_os = "linux")]

integration-tests/src/bin/benchmark/benchmark_pass.rs

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -285,21 +285,16 @@ impl SingleBenchmarkPass {
285285
Pipeline::register_input(
286286
pipeline,
287287
input_id.clone(),
288-
RegisterInputOptions {
289-
input_options: ProtocolInputOptions::Mp4(Mp4InputOptions {
290-
should_loop: true,
291-
video_decoders: Mp4InputVideoDecoders {
292-
h264: Some(self.decoder),
293-
},
294-
source: Mp4InputSource::File(path.to_path_buf().into()),
295-
buffer: InputBufferOptions::Const(None),
296-
seek: None,
297-
}),
298-
queue_options: QueueInputOptions {
299-
offset: None,
300-
required: true,
288+
RegisterInputOptions::Mp4(Mp4InputOptions {
289+
should_loop: true,
290+
video_decoders: Mp4InputVideoDecoders {
291+
h264: Some(self.decoder),
301292
},
302-
},
293+
source: Mp4InputSource::File(path.to_path_buf().into()),
294+
seek: None,
295+
required: true,
296+
offset: None,
297+
}),
303298
)
304299
}
305300

@@ -315,10 +310,8 @@ impl SingleBenchmarkPass {
315310
video: true,
316311
audio: false,
317312
buffer_duration: None,
318-
},
319-
QueueInputOptions {
320-
offset: None,
321313
required: true,
314+
offset: None,
322315
},
323316
)?;
324317

smelter-api/src/input/decklink_into.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ impl TryFrom<DeckLink> for core::RegisterInputOptions {
66

77
#[cfg(feature = "decklink")]
88
fn try_from(value: DeckLink) -> Result<Self, Self::Error> {
9-
use super::queue_options::new_queue_options;
109
const ID_PARSE_ERROR_MESSAGE: &str =
1110
"\"persistent_id\" has to be a valid 32-bit hexadecimal number";
1211

@@ -20,16 +19,16 @@ impl TryFrom<DeckLink> for core::RegisterInputOptions {
2019
None => None,
2120
};
2221

23-
Ok(core::RegisterInputOptions {
24-
input_options: core::ProtocolInputOptions::DeckLink(core::DeckLinkInputOptions {
22+
Ok(core::RegisterInputOptions::DeckLink(
23+
core::DeckLinkInputOptions {
2524
subdevice_index: value.subdevice_index,
2625
display_name: value.display_name,
2726
persistent_id,
2827
enable_audio: value.enable_audio.unwrap_or(true),
2928
pixel_format: Some(core::DeckLinkPixelFormat::Format8BitYUV),
30-
}),
31-
queue_options: new_queue_options(value.required, None)?,
32-
})
29+
required: value.required.unwrap_or(false),
30+
},
31+
))
3332
}
3433

3534
#[cfg(not(feature = "decklink"))]

smelter-api/src/input/hls_into.rs

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,7 @@ impl TryFrom<HlsInput> for core::RegisterInputOptions {
1414
decoder_map,
1515
} = value;
1616

17-
let queue_options = new_queue_options(required, offset_ms)?;
18-
19-
let buffer = match &queue_options {
20-
core::QueueInputOptions {
21-
required: false,
22-
offset: None,
23-
} => core::InputBufferOptions::Adaptive,
24-
_ => core::InputBufferOptions::None,
25-
};
17+
let (required, offset) = new_queue_options(required, offset_ms)?;
2618

2719
let h264 = decoder_map
2820
.as_ref()
@@ -38,12 +30,10 @@ impl TryFrom<HlsInput> for core::RegisterInputOptions {
3830
let input_options = core::HlsInputOptions {
3931
url,
4032
video_decoders,
41-
buffer,
33+
required,
34+
offset,
4235
};
4336

44-
Ok(core::RegisterInputOptions {
45-
input_options: core::ProtocolInputOptions::Hls(input_options),
46-
queue_options,
47-
})
37+
Ok(core::RegisterInputOptions::Hls(input_options))
4838
}
4939
}

smelter-api/src/input/mp4_into.rs

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,7 @@ impl TryFrom<Mp4Input> for core::RegisterInputOptions {
2121

2222
const BAD_URL_PATH_SPEC: &str = "Exactly one of `url` or `path` has to be specified in a register request for an mp4 input.";
2323

24-
let queue_options = new_queue_options(required, offset_ms)?;
25-
26-
let buffer = match &queue_options {
27-
core::QueueInputOptions {
28-
required: false,
29-
offset: None,
30-
} => core::InputBufferOptions::Const(None),
31-
_ => core::InputBufferOptions::None,
32-
};
24+
let (required, offset) = new_queue_options(required, offset_ms)?;
3325

3426
let source = match (url, path) {
3527
(Some(_), Some(_)) | (None, None) => {
@@ -55,15 +47,13 @@ impl TryFrom<Mp4Input> for core::RegisterInputOptions {
5547
.transpose()
5648
.map_err(|err| TypeError::new(format!("Invalid duration. {err}")))?;
5749

58-
Ok(core::RegisterInputOptions {
59-
input_options: core::ProtocolInputOptions::Mp4(core::Mp4InputOptions {
60-
source,
61-
should_loop: should_loop.unwrap_or(false),
62-
video_decoders,
63-
buffer,
64-
seek,
65-
}),
66-
queue_options,
67-
})
50+
Ok(core::RegisterInputOptions::Mp4(core::Mp4InputOptions {
51+
source,
52+
should_loop: should_loop.unwrap_or(false),
53+
video_decoders,
54+
seek,
55+
required,
56+
offset,
57+
}))
6858
}
6959
}

smelter-api/src/input/queue_options.rs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,11 @@ use crate::*;
55
pub(super) fn new_queue_options(
66
required: Option<bool>,
77
offset_ms: Option<f64>,
8-
) -> Result<smelter_core::QueueInputOptions, TypeError> {
9-
Ok(smelter_core::QueueInputOptions {
10-
required: required.unwrap_or(false),
11-
offset: offset_ms
12-
.map(|offset_ms| Duration::try_from_secs_f64(offset_ms / 1000.0))
13-
.transpose()
14-
.map_err(|err| TypeError::new(format!("Invalid duration. {err}")))?,
15-
})
8+
) -> Result<(bool, Option<Duration>), TypeError> {
9+
let required = required.unwrap_or(false);
10+
let offset = offset_ms
11+
.map(|offset_ms| Duration::try_from_secs_f64(offset_ms / 1000.0))
12+
.transpose()
13+
.map_err(|err| TypeError::new(format!("Invalid duration. {err}")))?;
14+
Ok((required, offset))
1615
}

smelter-api/src/input/rtmp.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,6 @@ pub struct RtmpInput {
1818
/// (**default=`false`**) If input is required and the stream is not delivered
1919
/// on time, then Smelter will delay producing output frames.
2020
pub required: Option<bool>,
21-
/// Offset in milliseconds relative to the pipeline start (start request). If the offset is
22-
/// not defined then the stream will be synchronized based on the delivery time of the initial
23-
/// frames.
24-
pub offset_ms: Option<f64>,
2521
/// Assigns which decoder should be used for media encoded with a specific codec.
2622
pub decoder_map: Option<HashMap<InputRtmpCodec, RtmpVideoDecoderOptions>>,
2723
}

0 commit comments

Comments
 (0)