diff --git a/examples/gstreamer-player/main.rs b/examples/gstreamer-player/main.rs index 402fa3b90..e580d727d 100644 --- a/examples/gstreamer-player/main.rs +++ b/examples/gstreamer-player/main.rs @@ -6,10 +6,7 @@ slint::include_modules!(); use futures::stream::StreamExt; use gst::{prelude::*, MessageView}; -#[cfg(slint_gstreamer_egl)] -mod egl_integration; -#[cfg(not(slint_gstreamer_egl))] -mod software_rendering; +mod slint_video_sink; fn main() -> anyhow::Result<()> { slint::BackendSelector::new() @@ -28,10 +25,6 @@ fn main() -> anyhow::Result<()> { .downcast::() .unwrap(); - let new_frame_callback = |app: App, new_frame| { - app.set_video_frame(new_frame); - }; - // Handle messages from the GStreamer pipeline bus. // For most GStreamer objects with buses, you can use `while let Some(msg) = bus.next().await` // inside an async closure passed to `slint::spawn_local` to read messages from the bus. @@ -73,10 +66,7 @@ fn main() -> anyhow::Result<()> { }) .unwrap(); - #[cfg(not(slint_gstreamer_egl))] - software_rendering::init(&app, &pipeline, new_frame_callback, bus_sender)?; - #[cfg(slint_gstreamer_egl)] - egl_integration::init(&app, &pipeline, new_frame_callback, bus_sender)?; + slint_video_sink::init(&app, &pipeline, bus_sender)?; let pipeline_weak_for_callback = pipeline.downgrade(); app.on_toggle_pause_play(move || { diff --git a/examples/gstreamer-player/egl_integration.rs b/examples/gstreamer-player/slint_video_sink/egl_integration.rs similarity index 100% rename from examples/gstreamer-player/egl_integration.rs rename to examples/gstreamer-player/slint_video_sink/egl_integration.rs diff --git a/examples/gstreamer-player/slint_video_sink/mod.rs b/examples/gstreamer-player/slint_video_sink/mod.rs new file mode 100644 index 000000000..72679f947 --- /dev/null +++ b/examples/gstreamer-player/slint_video_sink/mod.rs @@ -0,0 +1,25 @@ +// Copyright © SixtyFPS GmbH +// SPDX-License-Identifier: MIT + +use crate::App; +use futures::channel::mpsc::UnboundedSender; + +#[cfg(slint_gstreamer_egl)] +mod egl_integration; +#[cfg(not(slint_gstreamer_egl))] +mod software_rendering; + +pub fn init( + app: &App, + pipeline: &gst::Pipeline, + bus_sender: UnboundedSender, +) -> anyhow::Result<()> { + let new_frame_callback = |app: App, new_frame| { + app.set_video_frame(new_frame); + }; + + #[cfg(not(slint_gstreamer_egl))] + return software_rendering::init(app, pipeline, new_frame_callback, bus_sender); + #[cfg(slint_gstreamer_egl)] + return egl_integration::init(app, pipeline, new_frame_callback, bus_sender); +} diff --git a/examples/gstreamer-player/software_rendering.rs b/examples/gstreamer-player/slint_video_sink/software_rendering.rs similarity index 100% rename from examples/gstreamer-player/software_rendering.rs rename to examples/gstreamer-player/slint_video_sink/software_rendering.rs