diff --git a/crates/capture/src/main.rs b/crates/capture/src/main.rs index b248f071f1..e56bdf8fea 100644 --- a/crates/capture/src/main.rs +++ b/crates/capture/src/main.rs @@ -59,14 +59,8 @@ fn main() { room2.connect(&live_kit_url, &user2_token).await.unwrap(); cx.add_window(Default::default(), |cx| ScreenCaptureView::new(room2, cx)); - let display = live_kit::display_sources() - .await - .unwrap() - .into_iter() - .next() - .unwrap(); - - let track = LocalVideoTrack::screen_share_for_display(display); + let display_sources = live_kit::display_sources().await.unwrap(); + let track = LocalVideoTrack::screen_share_for_display(display_sources.first().unwrap()); room1.publish_video_track(&track).await.unwrap(); }) .detach(); diff --git a/crates/live_kit/LiveKitBridge/Sources/LiveKitBridge/LiveKitBridge.swift b/crates/live_kit/LiveKitBridge/Sources/LiveKitBridge/LiveKitBridge.swift index 7109e6dcf3..b33b0ecdb4 100644 --- a/crates/live_kit/LiveKitBridge/Sources/LiveKitBridge/LiveKitBridge.swift +++ b/crates/live_kit/LiveKitBridge/Sources/LiveKitBridge/LiveKitBridge.swift @@ -88,7 +88,7 @@ public func LKRoomPublishVideoTrack(room: UnsafeRawPointer, track: UnsafeRawPoin @_cdecl("LKCreateScreenShareTrackForDisplay") public func LKCreateScreenShareTrackForDisplay(display: UnsafeMutableRawPointer) -> UnsafeMutableRawPointer { - let display = Unmanaged.fromOpaque(display).takeRetainedValue() + let display = Unmanaged.fromOpaque(display).takeUnretainedValue() let track = LocalVideoTrack.createMacOSScreenShareTrack(source: display, preferredMethod: .legacy) return Unmanaged.passRetained(track).toOpaque() } diff --git a/crates/live_kit/src/live_kit.rs b/crates/live_kit/src/live_kit.rs index f2d61c261a..f8a94f6ae5 100644 --- a/crates/live_kit/src/live_kit.rs +++ b/crates/live_kit/src/live_kit.rs @@ -187,11 +187,8 @@ impl Drop for RoomDelegate { pub struct LocalVideoTrack(*const c_void); impl LocalVideoTrack { - pub fn screen_share_for_display(display: MacOSDisplay) -> Self { - let ptr = display.0; - let this = Self(unsafe { LKCreateScreenShareTrackForDisplay(ptr) }); - std::mem::forget(display); - this + pub fn screen_share_for_display(display: &MacOSDisplay) -> Self { + Self(unsafe { LKCreateScreenShareTrackForDisplay(display.0) }) } } @@ -259,7 +256,6 @@ pub fn display_sources() -> impl Future>> { let sources = CFArray::wrap_under_get_rule(sources); let sources_vec = sources.iter().map(|source| MacOSDisplay(*source)).collect(); let _ = tx.send(Ok(sources_vec)); - std::mem::forget(sources); // HACK: If I drop the CFArray, all the objects inside it get dropped and we get issues accessing the display later. } } }