[vlc-commits] windowed mac plugin: fix vout resizing

Felix Paul Kühne git at videolan.org
Wed Jan 16 02:09:48 CET 2013


npapi-vlc | branch: master | Felix Paul Kühne <fkuehne at videolan.org> | Wed Jan 16 02:09:40 2013 +0100| [da726fb534c634d6df5d968fb00c1e7322a010b0] | committer: Felix Paul Kühne

windowed mac plugin: fix vout resizing

> http://git.videolan.org/gitweb.cgi/npapi-vlc.git/?a=commit;h=da726fb534c634d6df5d968fb00c1e7322a010b0
---

 npapi/vlcplugin_mac.mm |   54 ++++++++++++++++++++++++++++++++++--------------
 1 file changed, 39 insertions(+), 15 deletions(-)

diff --git a/npapi/vlcplugin_mac.mm b/npapi/vlcplugin_mac.mm
index fc79a1b..3efc763 100644
--- a/npapi/vlcplugin_mac.mm
+++ b/npapi/vlcplugin_mac.mm
@@ -150,17 +150,18 @@ unsigned VlcPluginMac::video_format_cb(char *chroma,
                                        unsigned *pitches, unsigned *lines)
 {
     if ( p_browser ) {
+        /* request video in fullscreen size. scaling will be done by CA */
+        NSSize screenSize = [[NSScreen mainScreen] visibleFrame].size;
         float src_aspect = (float)(*width) / (*height);
-        float dst_aspect = (float)npwindow.width/npwindow.height;
+        float dst_aspect = (float)screenSize.width/screenSize.height;
         if ( src_aspect > dst_aspect ) {
-            if( npwindow.width != (*width) ) { //don't scale if size equal
-                (*width) = npwindow.width;
+            if( screenSize.width != (*width) ) { //don't scale if size equal
+                (*width) = screenSize.width;
                 (*height) = static_cast<unsigned>( (*width) / src_aspect + 0.5);
             }
-        }
-        else {
-            if( npwindow.height != (*height) ) { //don't scale if size equal
-                (*height) = npwindow.height;
+        } else {
+            if( screenSize.height != (*height) ) { //don't scale if size equal
+                (*height) = screenSize.height;
                 (*width) = static_cast<unsigned>( (*height) * src_aspect + 0.5);
             }
         }
@@ -452,18 +453,41 @@ bool VlcPluginMac::handle_event(void *event)
     if (![self cppPlugin]->playlist_isplaying() || ![self cppPlugin]->player_has_vout())
         return;
 
-    unsigned int media_width = [self cppPlugin]->m_media_width;
-    unsigned int media_height = [self cppPlugin]->m_media_height;
+    float media_width = (float)[self cppPlugin]->m_media_width;
+    float media_height = (float)[self cppPlugin]->m_media_height;
 
-    if (media_width == 0 || media_height == 0)
+    if (media_width == 0. || media_height == 0.)
         return;
 
-    CGContextSaveGState(cgContext);
+    NSRect layerRect = self.bounds;
+    float display_width = 0.;
+    float display_height = 0.;
+
+    float src_aspect = (float)media_width / media_height;
+    float dst_aspect = (float)layerRect.size.width/layerRect.size.height;
+    if ( src_aspect > dst_aspect ) {
+        if( layerRect.size.width != media_width ) { //don't scale if size equal
+            display_width = layerRect.size.width;
+            display_height = display_width / src_aspect; // + 0.5);
+        } else {
+            display_width = media_width;
+            display_height = media_height;
+        }
+    } else {
+        if( layerRect.size.height != media_height ) { //don't scale if size equal
+            display_height = layerRect.size.height;
+            display_width = display_height * src_aspect; // + 0.5);
+        } else {
+            display_width = media_width;
+            display_height = media_height;
+        }
+    }
 
     /* Compute the position of the video */
-    NSRect layerRect = self.bounds;
-    float left = (layerRect.size.width  - media_width)  / 2.;
-    float top  = (layerRect.size.height - media_height) / 2.;
+    float left = (layerRect.size.width  - display_width)  / 2.;
+    float top  = (layerRect.size.height - display_height) / 2.;
+
+    CGContextSaveGState(cgContext);
 
     static const size_t kComponentsPerPixel = 4;
     static const size_t kBitsPerComponent = sizeof(unsigned char) * 8;
@@ -493,7 +517,7 @@ bool VlcPluginMac::handle_event(void *event)
         CGContextRestoreGState(cgContext);
         return;
     }
-    CGRect rect = CGRectMake(left, top, media_width, media_height);
+    CGRect rect = CGRectMake(left, top, display_width, display_height);
     CGContextDrawImage(cgContext, rect, image);
 
     CGColorSpaceRelease(colorspace);



More information about the vlc-commits mailing list