[vlc-commits] vout_macosx: sync remnants with 2.1 branch
Felix Paul Kühne
git at videolan.org
Fri Apr 20 13:45:57 CEST 2012
vlc/vlc-2.0 | branch: master | Felix Paul Kühne <fkuehne at videolan.org> | Fri Apr 20 13:45:54 2012 +0200| [ff4917e750125b4174e770fc0c4991925c764863] | committer: Felix Paul Kühne
vout_macosx: sync remnants with 2.1 branch
> http://git.videolan.org/gitweb.cgi/vlc/vlc-2.0.git/?a=commit;h=ff4917e750125b4174e770fc0c4991925c764863
---
modules/video_output/macosx.m | 78 +++++++++++------------------------------
1 files changed, 21 insertions(+), 57 deletions(-)
diff --git a/modules/video_output/macosx.m b/modules/video_output/macosx.m
index c4e54ad..1ea45f0 100644
--- a/modules/video_output/macosx.m
+++ b/modules/video_output/macosx.m
@@ -1,5 +1,5 @@
/*****************************************************************************
- * voutgl.m: MacOS X OpenGL provider
+ * macosx.m: MacOS X OpenGL provider
*****************************************************************************
* Copyright (C) 2001-2012 the VideoLAN team
* $Id$
@@ -317,28 +317,6 @@ static int Control (vout_display_t *vd, int query, va_list ap)
if (vout_window_SetFullScreen (sys->embed, cfg->is_fullscreen))
return VLC_EGENERIC;
- NSRect frame;
-
- /* when entering fullscreen, set the OSD / display size to the visible screen size.
- * this way, the text rendering will be as sharp as possible.
- * when returning from fullscreen, pick the dimensions from cfg, which can be different
- * from the native video size because of crop and zoom */
- if (cfg->is_fullscreen)
- frame = [[[sys->glView window] screen] visibleFrame];
- else
- frame = NSMakeRect( 0., 0., cfg->display.width, cfg->display.height );
-
- vout_display_SendEventDisplaySize( vd, frame.size.width, frame.size.height, cfg->is_fullscreen );
-
- const video_format_t * source;
- source = &vd->source;
- vout_display_cfg_t place_cfg = *cfg;
- place_cfg.display.width = frame.size.width;
- place_cfg.display.height = frame.size.height;
-
- vout_display_place_t place;
- vout_display_PlacePicture(&place, source, &place_cfg, false);
-
return VLC_SUCCESS;
}
case VOUT_DISPLAY_CHANGE_WINDOW_STATE:
@@ -376,17 +354,23 @@ static int Control (vout_display_t *vd, int query, va_list ap)
if (query == VOUT_DISPLAY_CHANGE_SOURCE_ASPECT || query == VOUT_DISPLAY_CHANGE_SOURCE_CROP)
{
- const video_format_t *source;
-
source = (const video_format_t *)va_arg (ap, const video_format_t *);
cfg = vd->cfg;
+ }
+ else
+ {
+ source = &vd->source;
+ cfg = (const vout_display_cfg_t*)va_arg (ap, const vout_display_cfg_t *);
+ if (query == VOUT_DISPLAY_CHANGE_DISPLAY_SIZE)
+ is_forced = (bool)va_arg (ap, int);
+ }
if (query == VOUT_DISPLAY_CHANGE_DISPLAY_SIZE && is_forced
&& (cfg->display.width != vd->cfg->display.width
|| cfg->display.height != vd->cfg->display.height)
&& vout_window_SetSize (sys->embed, cfg->display.width, cfg->display.height))
return VLC_EGENERIC;
-
+
/* for the case that the core wants to resize below minimum window size we correct the size here
to ensure a centered picture */
vout_display_cfg_t cfg_tmp = *cfg;
@@ -408,7 +392,8 @@ static int Control (vout_display_t *vd, int query, va_list ap)
This has the positive side effect that we avoid erratic sizing as we animate every resize. */
if (query != VOUT_DISPLAY_CHANGE_DISPLAY_SIZE)
{
- glViewport (place.x, place.y, place.width, place.height);
+ // x / y are top left corner, but we need the lower left one
+ glViewport (place.x, cfg_tmp.display.height - (place.y + place.height), place.width, place.height);
}
[o_pool release];
@@ -471,6 +456,7 @@ static void OpenglSwap(vlc_gl_t *gl)
#define VLCAssertMainThread() assert([[NSThread currentThread] isMainThread])
+
+ (void)getNewView:(NSValue *)value
{
id *ret = [value pointerValue];
@@ -626,44 +612,22 @@ static void OpenglSwap(vlc_gl_t *gl)
VLCAssertMainThread();
NSRect bounds = [self bounds];
-
- CGFloat height, width;
- if( !vd || ( vd && vd->cfg->is_display_filled ))
- {
- height = bounds.size.height;
- width = bounds.size.width;
- }
- else
- {
- height = vd->source.i_visible_height;
- width = vd->source.i_visible_width;
- }
-
- GLint x = width, y = height;
+ vout_display_place_t place;
@synchronized(self) {
if (vd) {
- CGFloat videoHeight = vd->source.i_visible_height;
- CGFloat videoWidth = vd->source.i_visible_width;
+ vout_display_cfg_t cfg_tmp = *(vd->cfg);
+ cfg_tmp.display.width = bounds.size.width;
+ cfg_tmp.display.height = bounds.size.height;
- GLint sarNum = vd->source.i_sar_num;
- GLint sarDen = vd->source.i_sar_den;
-
- if (height * videoWidth * sarNum < width * videoHeight * sarDen)
- {
- x = (height * videoWidth * sarNum) / (videoHeight * sarDen);
- y = height;
- }
- else
- {
- x = width;
- y = (width * videoHeight * sarDen) / (videoWidth * sarNum);
- }
+ vout_display_PlacePicture (&place, &vd->source, &cfg_tmp, false);
+ vout_display_SendEventDisplaySize (vd, bounds.size.width, bounds.size.height, vd->cfg->is_fullscreen);
}
}
if ([self lockgl]) {
- glViewport((bounds.size.width - x) / 2, (bounds.size.height - y) / 2, x, y);
+ // x / y are top left corner, but we need the lower left one
+ glViewport (place.x, bounds.size.height - (place.y + place.height), place.width, place.height);
@synchronized(self) {
// This may be cleared before -drawRect is being called,
More information about the vlc-commits
mailing list