[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