diff --git a/video/gtk4/src/sink/frame.rs b/video/gtk4/src/sink/frame.rs index d6eefbe1..8adcfd2c 100644 --- a/video/gtk4/src/sink/frame.rs +++ b/video/gtk4/src/sink/frame.rs @@ -11,7 +11,7 @@ use gst_video::prelude::*; -#[cfg(feature = "gst_gl")] +#[cfg(any(target_os = "macos", feature = "gst_gl"))] use gst_gl::prelude::*; use gtk::{gdk, glib}; use std::collections::{HashMap, HashSet}; @@ -20,7 +20,7 @@ use std::collections::{HashMap, HashSet}; pub(crate) struct Frame { frame: gst_video::VideoFrame, overlays: Vec, - #[cfg(feature = "gst_gl")] + #[cfg(any(target_os = "macos", feature = "gst_gl"))] gst_context: Option, } @@ -94,7 +94,7 @@ fn video_frame_to_memory_texture( (texture, pixel_aspect_ratio) } -#[cfg(feature = "gst_gl")] +#[cfg(any(target_os = "macos", feature = "gst_gl"))] fn video_frame_to_gl_texture( frame: &gst_video::VideoFrame, cached_textures: &mut HashMap, @@ -141,11 +141,11 @@ impl Frame { let width = self.frame.width(); let height = self.frame.height(); let (texture, pixel_aspect_ratio) = { - #[cfg(not(feature = "gst_gl"))] + #[cfg(not(any(target_os = "macos", feature = "gst_gl")))] { video_frame_to_memory_texture(self.frame, cached_textures, &mut used_textures) } - #[cfg(feature = "gst_gl")] + #[cfg(any(target_os = "macos", feature = "gst_gl"))] { if let (Some(gdk_ctx), Some(gst_ctx)) = (gdk_context, self.gst_context.as_ref()) { video_frame_to_gl_texture( @@ -206,7 +206,7 @@ impl Frame { let mut frame; - #[cfg(not(feature = "gst_gl"))] + #[cfg(not(any(target_os = "macos", feature = "gst_gl")))] { frame = Self { frame: gst_video::VideoFrame::from_buffer_readable(buffer.clone(), info) @@ -214,7 +214,7 @@ impl Frame { overlays: vec![], }; } - #[cfg(feature = "gst_gl")] + #[cfg(any(target_os = "macos", feature = "gst_gl"))] { let is_buffer_gl = buffer .peek_memory(0) diff --git a/video/gtk4/src/sink/imp.rs b/video/gtk4/src/sink/imp.rs index 3dd4a759..fb4d5651 100644 --- a/video/gtk4/src/sink/imp.rs +++ b/video/gtk4/src/sink/imp.rs @@ -26,13 +26,13 @@ use std::sync::{Mutex, MutexGuard}; use crate::utils; -#[cfg(feature = "gst_gl")] +#[cfg(any(target_os = "macos", feature = "gst_gl"))] use glib::translate::*; -#[cfg(feature = "gst_gl")] +#[cfg(any(target_os = "macos", feature = "gst_gl"))] use gst_gl::prelude::GLContextExt as GstGLContextExt; -#[cfg(feature = "gst_gl")] +#[cfg(any(target_os = "macos", feature = "gst_gl"))] use gst_gl::prelude::*; -#[cfg(feature = "gst_gl")] +#[cfg(any(target_os = "macos", feature = "gst_gl"))] use std::sync::atomic::{AtomicBool, Ordering}; static CAT: Lazy = Lazy::new(|| { @@ -49,14 +49,14 @@ pub struct PaintableSink { info: Mutex>, sender: Mutex>>, pending_frame: Mutex>, - #[cfg(feature = "gst_gl")] + #[cfg(any(target_os = "macos", feature = "gst_gl"))] gst_display: Mutex>, - #[cfg(feature = "gst_gl")] + #[cfg(any(target_os = "macos", feature = "gst_gl"))] gst_app_context: Mutex>, - #[cfg(feature = "gst_gl")] + #[cfg(any(target_os = "macos", feature = "gst_gl"))] gst_context: Mutex>, cached_caps: Mutex>, - #[cfg(feature = "gst_gl")] + #[cfg(any(target_os = "macos", feature = "gst_gl"))] have_gl_context: AtomicBool, } @@ -212,7 +212,7 @@ impl ElementImpl for PaintableSink { drop(paintable); - #[cfg(feature = "gst_gl")] + #[cfg(any(target_os = "macos", feature = "gst_gl"))] { if self.have_gl_context.load(Ordering::Relaxed) && !self.initialize_gl_wrapper() { @@ -238,7 +238,7 @@ impl ElementImpl for PaintableSink { } }); } - #[cfg(feature = "gst_gl")] + #[cfg(any(target_os = "macos", feature = "gst_gl"))] gst::StateChange::ReadyToNull => { let _ = self.gst_context.lock().unwrap().take(); let _ = self.gst_app_context.lock().unwrap().take(); @@ -304,12 +304,12 @@ impl BaseSinkImpl for PaintableSink { // TODO: Provide a preferred "window size" here for higher-resolution rendering query.add_allocation_meta::(None); - #[cfg(not(feature = "gst_gl"))] + #[cfg(not(any(target_os = "macos", feature = "gst_gl")))] { Ok(()) } - #[cfg(feature = "gst_gl")] + #[cfg(any(target_os = "macos", feature = "gst_gl"))] { { // Early return if there is no context initialized @@ -384,7 +384,7 @@ impl BaseSinkImpl for PaintableSink { gst::log!(CAT, imp: self, "Handling query {:?}", query); match query.view_mut() { - #[cfg(feature = "gst_gl")] + #[cfg(any(target_os = "macos", feature = "gst_gl"))] gst::QueryViewMut::Context(q) => { // Avoid holding the locks while we respond to the query // The objects are ref-counted anyway. @@ -436,11 +436,11 @@ impl VideoSinkImpl for PaintableSink { })?; let have_gl_context = { - #[cfg(not(feature = "gst_gl"))] + #[cfg(not(any(target_os = "macos", feature = "gst_gl")))] { false } - #[cfg(feature = "gst_gl")] + #[cfg(any(target_os = "macos", feature = "gst_gl"))] { self.have_gl_context.load(Ordering::Relaxed) } @@ -494,7 +494,7 @@ impl PaintableSink { #[allow(unused_mut)] let mut tmp_caps = Self::pad_templates()[0].caps().clone(); - #[cfg(feature = "gst_gl")] + #[cfg(any(target_os = "macos", feature = "gst_gl"))] { // Filter out GL caps from the template pads if we have no context if !self.have_gl_context.load(Ordering::Relaxed) { @@ -516,7 +516,7 @@ impl PaintableSink { #[allow(unused_mut)] let mut ctx = None; - #[cfg(feature = "gst_gl")] + #[cfg(any(target_os = "macos", feature = "gst_gl"))] { if let Some(c) = self.realize_context() { self.have_gl_context.store(true, Ordering::Relaxed); @@ -557,7 +557,7 @@ impl PaintableSink { *self.sender.lock().unwrap() = Some(sender); } - #[cfg(feature = "gst_gl")] + #[cfg(any(target_os = "macos", feature = "gst_gl"))] fn realize_context(&self) -> Option> { gst::debug!(CAT, imp: self, "Realizing GDK GL Context"); @@ -598,7 +598,7 @@ impl PaintableSink { "GdkX11GLContextGLX" => (), #[cfg(all(target_os = "linux", feature = "wayland"))] "GdkWaylandGLContext" => (), - #[cfg(all(target_os = "macos", feature = "gst_gl"))] + #[cfg(target_os = "macos")] "GdkMacosGLContext" => (), display => { gst::error!(CAT, imp: self_, "Unsupported GDK display {display} for GL"); @@ -621,14 +621,14 @@ impl PaintableSink { }) } - #[cfg(feature = "gst_gl")] + #[cfg(any(target_os = "macos", feature = "gst_gl"))] fn initialize_gl_wrapper(&self) -> bool { gst::info!(CAT, imp: self, "Initializing GDK GL Context"); let self_ = self.to_owned(); utils::invoke_on_main_thread(move || self_.initialize_gl()) } - #[cfg(feature = "gst_gl")] + #[cfg(any(target_os = "macos", feature = "gst_gl"))] fn initialize_gl(&self) -> bool { let ctx = { let paintable = self.paintable.lock().unwrap(); @@ -656,7 +656,7 @@ impl PaintableSink { "GdkWaylandGLContext" => { self.initialize_waylandegl(display, &mut display_ctx_guard, &mut app_ctx_guard); } - #[cfg(all(target_os = "macos", feature = "gst_gl"))] + #[cfg(target_os = "macos")] "GdkMacosGLContext" => { self.initialize_macosgl(display, &mut display_ctx_guard, &mut app_ctx_guard); } @@ -858,7 +858,7 @@ impl PaintableSink { } } - #[cfg(all(target_os = "macos", feature = "gst_gl"))] + #[cfg(target_os = "macos")] fn initialize_macosgl( &self, display: gdk::Display, diff --git a/video/gtk4/src/sink/paintable/imp.rs b/video/gtk4/src/sink/paintable/imp.rs index 38193bab..8c554a26 100644 --- a/video/gtk4/src/sink/paintable/imp.rs +++ b/video/gtk4/src/sink/paintable/imp.rs @@ -165,7 +165,7 @@ impl PaintableImpl for Paintable { } impl Paintable { - #[cfg(feature = "gst_gl")] + #[cfg(any(target_os = "macos", feature = "gst_gl"))] pub(super) fn context(&self) -> Option { self.gl_context.borrow().clone() } diff --git a/video/gtk4/src/sink/paintable/mod.rs b/video/gtk4/src/sink/paintable/mod.rs index a6f857dd..7def368d 100644 --- a/video/gtk4/src/sink/paintable/mod.rs +++ b/video/gtk4/src/sink/paintable/mod.rs @@ -30,7 +30,7 @@ impl Paintable { } impl Paintable { - #[cfg(feature = "gst_gl")] + #[cfg(any(target_os = "macos", feature = "gst_gl"))] pub(crate) fn context(&self) -> Option { self.imp().context() }