[vlc-commits] minimal_macosx: re-implement in-separate-window video output based upon the 2.0 vout API
Felix Paul Kühne
git at videolan.org
Wed Dec 19 19:53:15 CET 2012
vlc | branch: master | Felix Paul Kühne <fkuehne at videolan.org> | Wed Dec 19 19:23:33 2012 +0100| [d85321315a0c42ae79cc2b1b76d1d517a3d44519] | committer: Felix Paul Kühne
minimal_macosx: re-implement in-separate-window video output based upon the 2.0 vout API
remnants to be removed in next commit
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=d85321315a0c42ae79cc2b1b76d1d517a3d44519
---
modules/gui/minimal_macosx/VLCMinimalVoutWindow.h | 3 -
modules/gui/minimal_macosx/VLCMinimalVoutWindow.m | 15 +---
modules/gui/minimal_macosx/VLCOpenGLVoutView.m | 2 +
modules/gui/minimal_macosx/intf.m | 95 +++++++++++++++++++++
modules/gui/minimal_macosx/voutgl.m | 3 +
5 files changed, 101 insertions(+), 17 deletions(-)
diff --git a/modules/gui/minimal_macosx/VLCMinimalVoutWindow.h b/modules/gui/minimal_macosx/VLCMinimalVoutWindow.h
index 7e2fd28..c73c27b 100644
--- a/modules/gui/minimal_macosx/VLCMinimalVoutWindow.h
+++ b/modules/gui/minimal_macosx/VLCMinimalVoutWindow.h
@@ -35,9 +35,6 @@
- (id)initWithContentRect:(NSRect)contentRect;
-/* @protocol VLCOpenGLVoutEmbedding */
-- (void)addVoutSubview:(NSView *)view;
-- (void)removeVoutSubview:(NSView *)view;
- (void)enterFullscreen;
- (void)leaveFullscreen;
- (BOOL)stretchesVideo;
diff --git a/modules/gui/minimal_macosx/VLCMinimalVoutWindow.m b/modules/gui/minimal_macosx/VLCMinimalVoutWindow.m
index f3357e0..77814ed 100644
--- a/modules/gui/minimal_macosx/VLCMinimalVoutWindow.m
+++ b/modules/gui/minimal_macosx/VLCMinimalVoutWindow.m
@@ -45,24 +45,11 @@
[self setHasShadow:YES];
[self setMovableByWindowBackground: YES];
[self center];
+ NSLog( @"window created" );
}
return self;
}
-/* @protocol VLCOpenGLVoutEmbedding */
-- (void)addVoutSubview:(NSView *)view
-{
- [view setAutoresizingMask:NSViewHeightSizable|NSViewWidthSizable];
- [[self contentView] addSubview:view];
- [view setFrame:[[self contentView] bounds]];
-}
-
-- (void)removeVoutSubview:(NSView *)view
-{
- [self close];
- [self release];
-}
-
- (void)enterFullscreen
{
fullscreen = YES;
diff --git a/modules/gui/minimal_macosx/VLCOpenGLVoutView.m b/modules/gui/minimal_macosx/VLCOpenGLVoutView.m
index 16c548f..755d064 100644
--- a/modules/gui/minimal_macosx/VLCOpenGLVoutView.m
+++ b/modules/gui/minimal_macosx/VLCOpenGLVoutView.m
@@ -39,6 +39,7 @@
#include <OpenGL/OpenGL.h>
#include <OpenGL/gl.h>
+#if 0
/*****************************************************************************
* cocoaglvoutviewInit
@@ -187,3 +188,4 @@ void cocoaglvoutviewEnd( vout_window_t * p_wnd )
}
@end
+#endif
diff --git a/modules/gui/minimal_macosx/intf.m b/modules/gui/minimal_macosx/intf.m
index 3ba8e8b..dd88a71 100644
--- a/modules/gui/minimal_macosx/intf.m
+++ b/modules/gui/minimal_macosx/intf.m
@@ -41,7 +41,10 @@
#include <vlc_input.h>
#import <vlc_interface.h>
+#include <vlc_vout_window.h>
+
#import <intf.h>
+#import "VLCMinimalVoutWindow.h"
/*****************************************************************************
* Local prototypes.
@@ -148,3 +151,95 @@ static void Run( intf_thread_t *p_intf )
[pool release];
}
+/*****************************************************************************
+ * Vout window management
+ *****************************************************************************/
+static int WindowControl(vout_window_t *, int i_query, va_list);
+
+int WindowOpen(vout_window_t *p_wnd, const vout_window_cfg_t *cfg)
+{
+ NSAutoreleasePool *o_pool = [[NSAutoreleasePool alloc] init];
+
+ NSRect proposedVideoViewPosition = NSMakeRect(cfg->x, cfg->y, cfg->width, cfg->height);
+
+ VLCMinimalVoutWindow *o_window = [[VLCMinimalVoutWindow alloc] initWithContentRect:proposedVideoViewPosition];
+ [o_window makeKeyAndOrderFront:nil];
+
+ if (!o_window) {
+ msg_Err(p_wnd, "window creation failed");
+ [o_pool release];
+ return VLC_EGENERIC;
+ }
+
+ msg_Dbg(p_wnd, "returning video window with proposed position x=%i, y=%i, width=%i, height=%i", cfg->x, cfg->y, cfg->width, cfg->height);
+ p_wnd->handle.nsobject = [o_window contentView];
+
+ // TODO: find a cleaner way for "start in fullscreen"
+ if (var_GetBool(pl_Get(p_wnd), "fullscreen"))
+ [o_window performSelectorOnMainThread:@selector(enterFullscreen) withObject:nil waitUntilDone:NO];
+
+ p_wnd->control = WindowControl;
+
+ [o_pool release];
+ return VLC_SUCCESS;
+}
+
+static int WindowControl(vout_window_t *p_wnd, int i_query, va_list args)
+{
+ NSWindow * o_window = [(id)p_wnd->handle.nsobject window];
+ if (!o_window) {
+ msg_Err(p_wnd, "failed to recover cocoa window");
+ return VLC_EGENERIC;
+ }
+
+ switch(i_query) {
+ case VOUT_WINDOW_SET_STATE:
+ {
+ unsigned i_state = va_arg(args, unsigned);
+ // TODO
+// [o_window performSelectorOnMainThread:@selector(setWindowLevel:) withObject:[NSNumber numberWithUnsignedInt:i_state] waitUntilDone:NO];
+ return VLC_SUCCESS;
+ }
+ case VOUT_WINDOW_SET_SIZE:
+ {
+ NSAutoreleasePool *o_pool = [[NSAutoreleasePool alloc] init];
+
+ unsigned int i_width = va_arg(args, unsigned int);
+ unsigned int i_height = va_arg(args, unsigned int);
+
+ NSSize newSize = NSMakeSize(i_width, i_height);
+ // TODO
+
+ [o_pool release];
+ return VLC_SUCCESS;
+ }
+ case VOUT_WINDOW_SET_FULLSCREEN:
+ {
+ NSAutoreleasePool *o_pool = [[NSAutoreleasePool alloc] init];
+ int i_full = va_arg(args, int);
+
+ if (i_full)
+ [o_window performSelectorOnMainThread:@selector(enterFullscreen) withObject:nil waitUntilDone:NO];
+ else
+ [o_window performSelectorOnMainThread:@selector(leaveFullscreen) withObject:nil waitUntilDone:NO];
+
+ [o_pool release];
+ return VLC_SUCCESS;
+ }
+ default:
+ msg_Warn(p_wnd, "unsupported control query");
+ return VLC_EGENERIC;
+ }
+}
+
+void WindowClose(vout_window_t *p_wnd)
+{
+ NSAutoreleasePool *o_pool = [[NSAutoreleasePool alloc] init];
+
+ NSWindow * o_window = [(id)p_wnd->handle.nsobject window];
+ if (o_window)
+ [o_window release];
+
+ [o_pool release];
+}
+
diff --git a/modules/gui/minimal_macosx/voutgl.m b/modules/gui/minimal_macosx/voutgl.m
index 7bc8e09..39ae676 100644
--- a/modules/gui/minimal_macosx/voutgl.m
+++ b/modules/gui/minimal_macosx/voutgl.m
@@ -33,6 +33,7 @@
#include "intf.h"
#include "voutgl.h"
+# if 0
static int WindowControl( vout_window_t *, int i_query, va_list );
@@ -78,3 +79,5 @@ void WindowClose( vout_window_t *p_wnd )
/* Clean up */
free( p_wnd->sys );
}
+
+#endif
More information about the vlc-commits
mailing list