[vlc-commits] [Git][videolan/vlc][master] 3 commits: macosx: Add a mutex within VLCVoutView
Jean-Baptiste Kempf (@jbk)
gitlab at videolan.org
Mon Jul 1 20:36:29 UTC 2024
Jean-Baptiste Kempf pushed to branch master at VideoLAN / VLC
Commits:
26c6973f by Claudio Cambra at 2024-07-01T20:24:08+00:00
macosx: Add a mutex within VLCVoutView
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
cf2ad08d by Claudio Cambra at 2024-07-01T20:24:08+00:00
macosx: Use vlc_mutex to wrap mouse event reporting to core instead of serial dispatch queue
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
8186585a by Claudio Cambra at 2024-07-01T20:24:08+00:00
macosx: Use vlc_mutex for accessing/setting window pointers in VLCVoutView
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
1 changed file:
- modules/gui/macosx/windows/video/VLCVoutView.m
Changes:
=====================================
modules/gui/macosx/windows/video/VLCVoutView.m
=====================================
@@ -58,6 +58,7 @@
vout_thread_t *p_vout;
vlc_window_t *_wnd;
dispatch_queue_t _eventQueue;
+ vlc_mutex_t _mutex;
NSTrackingArea *_trackingArea;
VLCPlayerController *_playerController;
VLCHotkeysController *_hotkeysController;
@@ -71,11 +72,13 @@
- (void)dealloc
{
- dispatch_sync(_eventQueue, ^{
- _wnd = NULL;
- });
- if (p_vout)
+ vlc_mutex_lock(&_mutex);
+ _wnd = NULL;
+ vlc_mutex_unlock(&_mutex);
+
+ if (p_vout) {
vout_Release(p_vout);
+ }
[self unregisterDraggedTypes];
}
@@ -102,7 +105,8 @@
_playerController = VLCMain.sharedInstance.playlistController.playerController;
_hotkeysController = [[VLCHotkeysController alloc] init];
- _eventQueue = dispatch_queue_create("org.videolan.vlc.vout.mouseevents", DISPATCH_QUEUE_SERIAL);
+ _eventQueue = dispatch_queue_create("org.videolan.vlc.vout.events", DISPATCH_QUEUE_SERIAL);
+ vlc_mutex_init(&_mutex);
}
- (void)layout {
@@ -184,14 +188,15 @@
- (void)mouseDown:(NSEvent *)o_event
{
if (([o_event type] == NSLeftMouseDown) && (! ([o_event modifierFlags] & NSControlKeyMask))) {
- if ([o_event clickCount] == 1)
- dispatch_sync(_eventQueue, ^{
- if (_wnd)
- vlc_window_ReportMousePressed(_wnd, MOUSE_BUTTON_LEFT);
- });
- if ([o_event clickCount] == 2)
+ if (o_event.clickCount == 1) {
+ vlc_mutex_lock(&_mutex);
+ if (_wnd) {
+ vlc_window_ReportMousePressed(_wnd, MOUSE_BUTTON_LEFT);
+ }
+ vlc_mutex_unlock(&_mutex);
+ } else if (o_event.clickCount == 2) {
[_playerController toggleFullscreen];
-
+ }
} else if (([o_event type] == NSRightMouseDown) ||
(([o_event type] == NSLeftMouseDown) &&
([o_event modifierFlags] & NSControlKeyMask)))
@@ -203,10 +208,11 @@
- (void)mouseUp:(NSEvent *)event
{
if (event.type == NSLeftMouseUp) {
- dispatch_sync(_eventQueue, ^{
- if (_wnd)
- vlc_window_ReportMouseReleased(_wnd, MOUSE_BUTTON_LEFT);
- });
+ vlc_mutex_lock(&_mutex);
+ if (_wnd) {
+ vlc_window_ReportMouseReleased(_wnd, MOUSE_BUTTON_LEFT);
+ }
+ vlc_mutex_unlock(&_mutex);
}
[super mouseUp:event];
@@ -231,20 +237,18 @@
- (void)mouseMoved:(NSEvent *)event
{
- NSPoint pointInView =
- [self convertPoint:event.locationInWindow fromView:nil];
+ const NSPoint pointInView = [self convertPoint:event.locationInWindow fromView:nil];
if ([self mouse:pointInView inRect:self.bounds]) {
- [NSNotificationCenter.defaultCenter postNotificationName:VLCVideoWindowShouldShowFullscreenController
- object:self];
+ [NSNotificationCenter.defaultCenter postNotificationName:VLCVideoWindowShouldShowFullscreenController object:self];
// Invert Y coordinates
- CGPoint pointInWindow =
- CGPointMake(pointInView.x, self.bounds.size.height - pointInView.y);
- NSPoint pointInBacking = [self convertPointToBacking:pointInWindow];
- dispatch_sync(_eventQueue, ^{
- if (_wnd == NULL)
- return;
+ const CGPoint pointInWindow = CGPointMake(pointInView.x, self.bounds.size.height - pointInView.y);
+ const NSPoint pointInBacking = [self convertPointToBacking:pointInWindow];
+
+ vlc_mutex_lock(&_mutex);
+ if (_wnd) {
vlc_window_ReportMouseMoved(_wnd, pointInBacking.x, pointInBacking.y);
- });
+ }
+ vlc_mutex_unlock(&_mutex);
}
[super mouseMoved:event];
}
@@ -325,17 +329,19 @@
#pragma mark -
#pragma mark Handling of vout related actions
-- (void)setVoutWindow:(vlc_window_t *)p_wnd {
- dispatch_sync(_eventQueue, ^{
- _wnd = p_wnd;
- });
+- (void)setVoutWindow:(vlc_window_t *)p_wnd
+{
+ vlc_mutex_lock(&_mutex);
+ _wnd = p_wnd;
+ vlc_mutex_unlock(&_mutex);
}
-- (vlc_window_t *)voutWindow {
- __block vlc_window_t *p_wnd = NULL;
- dispatch_sync(_eventQueue, ^{
- p_wnd = _wnd;
- });
+- (vlc_window_t *)voutWindow
+{
+ vlc_window_t *p_wnd = NULL;
+ vlc_mutex_lock(&_mutex);
+ p_wnd = _wnd;
+ vlc_mutex_unlock(&_mutex);
return p_wnd;
}
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/4b0dbf829d9761bc0d99e64b98c9c245983aeffd...8186585a1e1db8ce7b14c61e0123618378042e6e
--
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/4b0dbf829d9761bc0d99e64b98c9c245983aeffd...8186585a1e1db8ce7b14c61e0123618378042e6e
You're receiving this email because of your account on code.videolan.org.
VideoLAN code repository instance
More information about the vlc-commits
mailing list