annotate libvo/vo_corevideo.m @ 33672:e576232a39d5

Prevent balance from hopping. Only recalculate the balance if the balance has changed, not if just the volume has changed. Because (at least with my soundcard) not all volume values can be stored, but seem to be mapped onto a discrete value set, recalculation the balance from the volume isn't accurate enough.
author ib
date Tue, 28 Jun 2011 18:16:06 +0000
parents ad12e6080ed1
children 1237a0a79119
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
28446
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
1 /*
29210
779281d8cd80 Rename macosx video output driver to corevideo.
diego
parents: 29177
diff changeset
2 * CoreVideo video output driver
28836
93652f17d567 cosmetics: Reformat file header.
diego
parents: 28446
diff changeset
3 * Copyright (c) 2005 Nicolas Plourde <nicolasplourde@gmail.com>
93652f17d567 cosmetics: Reformat file header.
diego
parents: 28446
diff changeset
4 *
28446
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
5 * This file is part of MPlayer.
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
6 *
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
7 * MPlayer is free software; you can redistribute it and/or modify
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
8 * it under the terms of the GNU General Public License as published by
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
9 * the Free Software Foundation; either version 2 of the License, or
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
10 * (at your option) any later version.
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
11 *
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
12 * MPlayer is distributed in the hope that it will be useful,
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
15 * GNU General Public License for more details.
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
16 *
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
17 * You should have received a copy of the GNU General Public License along
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
18 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
20 */
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 28306
diff changeset
21
29210
779281d8cd80 Rename macosx video output driver to corevideo.
diego
parents: 29177
diff changeset
22 #import "vo_corevideo.h"
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
23 #include <sys/types.h>
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
24 #include <sys/ipc.h>
28016
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
25 #include <sys/mman.h>
28077
75925b6d0d51 Add missing unistd.h #include, fixes the warning:
diego
parents: 28076
diff changeset
26 #include <unistd.h>
27988
84bad10e6d8d Allow vo_macosx to be compiled in 64-bits mode:
gpoirier
parents: 27397
diff changeset
27 #include <CoreServices/CoreServices.h>
84bad10e6d8d Allow vo_macosx to be compiled in 64-bits mode:
gpoirier
parents: 27397
diff changeset
28 //special workaround for Apple bug #6267445
84bad10e6d8d Allow vo_macosx to be compiled in 64-bits mode:
gpoirier
parents: 27397
diff changeset
29 //(OSServices Power API disabled in OSServices.h for 64bit systems)
84bad10e6d8d Allow vo_macosx to be compiled in 64-bits mode:
gpoirier
parents: 27397
diff changeset
30 #ifndef __POWER__
84bad10e6d8d Allow vo_macosx to be compiled in 64-bits mode:
gpoirier
parents: 27397
diff changeset
31 #include <CoreServices/../Frameworks/OSServices.framework/Headers/Power.h>
84bad10e6d8d Allow vo_macosx to be compiled in 64-bits mode:
gpoirier
parents: 27397
diff changeset
32 #endif
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
33
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
34 //MPLAYER
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
35 #include "config.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
36 #include "fastmemcpy.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
37 #include "video_out.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
38 #include "video_out_internal.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
39 #include "aspect.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
40 #include "mp_msg.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
41 #include "m_option.h"
28075
ca9badc94740 #include appropriate headers instead of locally declaring function prototypes.
diego
parents: 28051
diff changeset
42 #include "mp_fifo.h"
32471
ba766479d931 vo_corevideo.m: change path for sub.h.
cigaes
parents: 31760
diff changeset
43 #include "sub/sub.h"
28130
b5898cb411da Replace vo_macosx's custom options parsing with a subopt_parse()-based one
gpoirier
parents: 28077
diff changeset
44 #include "subopt-helper.h"
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
45
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
46 #include "input/input.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
47 #include "input/mouse.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
48
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
49 #include "osdep/keycodes.h"
29533
9c8f8e375823 Reuse the osx_common convert_key function to convert OSX keycodes to MPlayer
reimar
parents: 29272
diff changeset
50 #include "osx_common.h"
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
51
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
52 //Cocoa
25157
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
53 NSDistantObject *mplayerosxProxy;
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
54 id <MPlayerOSXVOProto> mplayerosxProto;
15611
2f77a2da1d82 Function name cleanup
nplourde
parents: 15610
diff changeset
55 MPlayerOpenGLView *mpGLView;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
56 NSAutoreleasePool *autoreleasepool;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
57 OSType pixelFormat;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
58
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
59 //shared memory
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
60 BOOL shared_buffer = false;
28180
781ef511a767 Add an option to vo_macosx to set a custom buffer_name.
gpoirier
parents: 28130
diff changeset
61 #define DEFAULT_BUFFER_NAME "mplayerosx"
781ef511a767 Add an option to vo_macosx to set a custom buffer_name.
gpoirier
parents: 28130
diff changeset
62 static char *buffer_name;
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
63
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
64 //Screen
28306
19cf626f188a fix device_id option after r28165
gpoirier
parents: 28204
diff changeset
65 int screen_id = -1;
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
66 NSRect screen_frame;
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
67 NSScreen *screen_handle;
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
68 NSArray *screen_array;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
69
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
70 //image
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
71 unsigned char *image_data;
25180
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
72 // For double buffering
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
73 static uint8_t image_page = 0;
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
74 static unsigned char *image_datas[2];
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
75
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
76 static uint32_t image_width;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
77 static uint32_t image_height;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
78 static uint32_t image_depth;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
79 static uint32_t image_bytes;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
80 static uint32_t image_format;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
81
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
82 //vo
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
83 static int isFullscreen;
15320
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
84 static int isOntop;
15327
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
85 static int isRootwin;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
86
15731
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
87 static float winAlpha = 1;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
88 static int int_pause = 0;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
89
25179
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
90 static BOOL isLeopardOrLater;
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
91
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
92 static vo_info_t info =
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
93 {
28837
e5171567fe6c cosmetics: spelling fixes
diego
parents: 28836
diff changeset
94 "Mac OS X Core Video",
29210
779281d8cd80 Rename macosx video output driver to corevideo.
diego
parents: 29177
diff changeset
95 "corevideo",
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
96 "Nicolas Plourde <nicolas.plourde@gmail.com>",
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
97 ""
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
98 };
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
99
29210
779281d8cd80 Rename macosx video output driver to corevideo.
diego
parents: 29177
diff changeset
100 LIBVO_EXTERN(corevideo)
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
101
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
102 static void draw_alpha(int x0, int y0, int w, int h, unsigned char *src, unsigned char *srca, int stride)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
103 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
104 switch (image_format)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
105 {
30974
bd964ca1f6fa Fix RGB support for corevideo: corevideo can only support
reimar
parents: 30973
diff changeset
106 case IMGFMT_RGB24:
bd964ca1f6fa Fix RGB support for corevideo: corevideo can only support
reimar
parents: 30973
diff changeset
107 vo_draw_alpha_rgb24(w,h,src,srca,stride,image_data+3*(y0*image_width+x0),3*image_width);
bd964ca1f6fa Fix RGB support for corevideo: corevideo can only support
reimar
parents: 30973
diff changeset
108 break;
bd964ca1f6fa Fix RGB support for corevideo: corevideo can only support
reimar
parents: 30973
diff changeset
109 case IMGFMT_ARGB:
bd964ca1f6fa Fix RGB support for corevideo: corevideo can only support
reimar
parents: 30973
diff changeset
110 case IMGFMT_BGRA:
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
111 vo_draw_alpha_rgb32(w,h,src,srca,stride,image_data+4*(y0*image_width+x0),4*image_width);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
112 break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
113 case IMGFMT_YUY2:
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
114 vo_draw_alpha_yuy2(w,h,src,srca,stride,image_data + (x0 + y0 * image_width) * 2,image_width*2);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
115 break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
116 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
117 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
118
29564
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
119 static void update_screen_info(void)
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
120 {
30000
a30debd7acd7 Add -xineramascreen support to corevideo vo. Still prefer corevideo's own device_id parameter if it's set.
adrian
parents: 29657
diff changeset
121 if (screen_id == -1 && xinerama_screen > -1)
a30debd7acd7 Add -xineramascreen support to corevideo vo. Still prefer corevideo's own device_id parameter if it's set.
adrian
parents: 29657
diff changeset
122 screen_id = xinerama_screen;
a30debd7acd7 Add -xineramascreen support to corevideo vo. Still prefer corevideo's own device_id parameter if it's set.
adrian
parents: 29657
diff changeset
123
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
124 screen_array = [NSScreen screens];
31740
ede53d2a08eb Simplify update_screen_info.
reimar
parents: 31739
diff changeset
125 if(screen_id >= (int)[screen_array count])
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
126 {
29210
779281d8cd80 Rename macosx video output driver to corevideo.
diego
parents: 29177
diff changeset
127 mp_msg(MSGT_VO, MSGL_INFO, "[vo_corevideo] Device ID %d does not exist, falling back to main device\n", screen_id);
28306
19cf626f188a fix device_id option after r28165
gpoirier
parents: 28204
diff changeset
128 screen_id = -1;
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
129 }
31741
601cd1e830fe Avoid some code duplication in update_screen_info.
reimar
parents: 31740
diff changeset
130 if (screen_id < 0 && [mpGLView window])
601cd1e830fe Avoid some code duplication in update_screen_info.
reimar
parents: 31740
diff changeset
131 screen_handle = [[mpGLView window] screen];
601cd1e830fe Avoid some code duplication in update_screen_info.
reimar
parents: 31740
diff changeset
132 else
31742
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
133 screen_handle = [screen_array objectAtIndex:(screen_id < 0 ? 0 : screen_id)];
29564
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
134
31741
601cd1e830fe Avoid some code duplication in update_screen_info.
reimar
parents: 31740
diff changeset
135 screen_frame = [screen_handle frame];
25414
5c03a9bdf220 Record screen size and display size in vo_ variables.
ulion
parents: 25413
diff changeset
136 vo_screenwidth = screen_frame.size.width;
5c03a9bdf220 Record screen size and display size in vo_ variables.
ulion
parents: 25413
diff changeset
137 vo_screenheight = screen_frame.size.height;
29564
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
138 xinerama_x = xinerama_y = 0;
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
139 aspect_save_screenres(vo_screenwidth, vo_screenheight);
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
140 }
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
141
29573
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
142 static void free_file_specific(void)
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
143 {
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
144 if(shared_buffer)
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
145 {
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
146 [mplayerosxProto stop];
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
147 mplayerosxProto = nil;
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
148 [mplayerosxProxy release];
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
149 mplayerosxProxy = nil;
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
150
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
151 if (munmap(image_data, image_width*image_height*image_bytes) == -1)
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
152 mp_msg(MSGT_VO, MSGL_FATAL, "[vo_corevideo] uninit: munmap failed. Error: %s\n", strerror(errno));
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
153
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
154 if (shm_unlink(buffer_name) == -1)
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
155 mp_msg(MSGT_VO, MSGL_FATAL, "[vo_corevideo] uninit: shm_unlink failed. Error: %s\n", strerror(errno));
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
156 } else {
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
157 free(image_datas[0]);
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
158 if (vo_doublebuffering)
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
159 free(image_datas[1]);
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
160 image_datas[0] = NULL;
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
161 image_datas[1] = NULL;
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
162 image_data = NULL;
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
163 }
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
164 }
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
165
29564
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
166 static int config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t flags, char *title, uint32_t format)
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
167 {
29573
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
168 free_file_specific();
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
169
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
170 //misc mplayer setup
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
171 image_width = width;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
172 image_height = height;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
173 switch (image_format)
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
174 {
30974
bd964ca1f6fa Fix RGB support for corevideo: corevideo can only support
reimar
parents: 30973
diff changeset
175 case IMGFMT_RGB24:
bd964ca1f6fa Fix RGB support for corevideo: corevideo can only support
reimar
parents: 30973
diff changeset
176 image_depth = 24;
bd964ca1f6fa Fix RGB support for corevideo: corevideo can only support
reimar
parents: 30973
diff changeset
177 break;
bd964ca1f6fa Fix RGB support for corevideo: corevideo can only support
reimar
parents: 30973
diff changeset
178 case IMGFMT_ARGB:
bd964ca1f6fa Fix RGB support for corevideo: corevideo can only support
reimar
parents: 30973
diff changeset
179 case IMGFMT_BGRA:
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
180 image_depth = 32;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
181 break;
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
182 case IMGFMT_YUY2:
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
183 image_depth = 16;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
184 break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
185 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
186 image_bytes = (image_depth + 7) / 8;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
187
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
188 if(!shared_buffer)
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
189 {
29657
6c2cbc64c596 Fix vo_corevideo with shared buffer after r29606: Only do GUI dependent display config if shared buffer is not enabled.
adrian
parents: 29604
diff changeset
190 config_movie_aspect((float)d_width/d_height);
6c2cbc64c596 Fix vo_corevideo with shared buffer after r29606: Only do GUI dependent display config if shared buffer is not enabled.
adrian
parents: 29604
diff changeset
191
6c2cbc64c596 Fix vo_corevideo with shared buffer after r29606: Only do GUI dependent display config if shared buffer is not enabled.
adrian
parents: 29604
diff changeset
192 vo_dwidth = d_width *= mpGLView->winSizeMult;
6c2cbc64c596 Fix vo_corevideo with shared buffer after r29606: Only do GUI dependent display config if shared buffer is not enabled.
adrian
parents: 29604
diff changeset
193 vo_dheight = d_height *= mpGLView->winSizeMult;
6c2cbc64c596 Fix vo_corevideo with shared buffer after r29606: Only do GUI dependent display config if shared buffer is not enabled.
adrian
parents: 29604
diff changeset
194
25120
9b4ca4dc1294 Fix a memory leak when working in shared_buffer mode.
ulion
parents: 25114
diff changeset
195 image_data = malloc(image_width*image_height*image_bytes);
25180
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
196 image_datas[0] = image_data;
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
197 if (vo_doublebuffering)
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
198 image_datas[1] = malloc(image_width*image_height*image_bytes);
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
199 image_page = 0;
25120
9b4ca4dc1294 Fix a memory leak when working in shared_buffer mode.
ulion
parents: 25114
diff changeset
200
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
201 vo_fs = flags & VOFLAG_FULLSCREEN;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
202
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
203 //config OpenGL View
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
204 [mpGLView config];
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
205 [mpGLView reshape];
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
206 }
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
207 else
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
208 {
29567
349de9bdfcce Make shm_fd a local variable and close it when we need it no longer, thus
reimar
parents: 29566
diff changeset
209 int shm_fd;
29210
779281d8cd80 Rename macosx video output driver to corevideo.
diego
parents: 29177
diff changeset
210 mp_msg(MSGT_VO, MSGL_INFO, "[vo_corevideo] writing output to a shared buffer "
29170
9d40283d9a5d Unify error message output and update error messages.
diego
parents: 29137
diff changeset
211 "named \"%s\"\n",buffer_name);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
212
28016
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
213 // create shared memory
28180
781ef511a767 Add an option to vo_macosx to set a custom buffer_name.
gpoirier
parents: 28130
diff changeset
214 shm_fd = shm_open(buffer_name, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR);
28016
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
215 if (shm_fd == -1)
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
216 {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
217 mp_msg(MSGT_VO, MSGL_FATAL,
29210
779281d8cd80 Rename macosx video output driver to corevideo.
diego
parents: 29177
diff changeset
218 "[vo_corevideo] failed to open shared memory. Error: %s\n", strerror(errno));
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
219 return 1;
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
220 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
221
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
222
28016
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
223 if (ftruncate(shm_fd, image_width*image_height*image_bytes) == -1)
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
224 {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
225 mp_msg(MSGT_VO, MSGL_FATAL,
29210
779281d8cd80 Rename macosx video output driver to corevideo.
diego
parents: 29177
diff changeset
226 "[vo_corevideo] failed to size shared memory, possibly already in use. Error: %s\n", strerror(errno));
29567
349de9bdfcce Make shm_fd a local variable and close it when we need it no longer, thus
reimar
parents: 29566
diff changeset
227 close(shm_fd);
28180
781ef511a767 Add an option to vo_macosx to set a custom buffer_name.
gpoirier
parents: 28130
diff changeset
228 shm_unlink(buffer_name);
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
229 return 1;
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
230 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
231
28016
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
232 image_data = mmap(NULL, image_width*image_height*image_bytes,
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
233 PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0);
29567
349de9bdfcce Make shm_fd a local variable and close it when we need it no longer, thus
reimar
parents: 29566
diff changeset
234 close(shm_fd);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
235
28016
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
236 if (image_data == MAP_FAILED)
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
237 {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
238 mp_msg(MSGT_VO, MSGL_FATAL,
29210
779281d8cd80 Rename macosx video output driver to corevideo.
diego
parents: 29177
diff changeset
239 "[vo_corevideo] failed to map shared memory. Error: %s\n", strerror(errno));
28180
781ef511a767 Add an option to vo_macosx to set a custom buffer_name.
gpoirier
parents: 28130
diff changeset
240 shm_unlink(buffer_name);
28016
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
241 return 1;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
242 }
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
243
28837
e5171567fe6c cosmetics: spelling fixes
diego
parents: 28836
diff changeset
244 //connect to mplayerosx
28180
781ef511a767 Add an option to vo_macosx to set a custom buffer_name.
gpoirier
parents: 28130
diff changeset
245 mplayerosxProxy=[NSConnection rootProxyForConnectionWithRegisteredName:[NSString stringWithCString:buffer_name] host:nil];
25157
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
246 if ([mplayerosxProxy conformsToProtocol:@protocol(MPlayerOSXVOProto)]) {
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
247 [mplayerosxProxy setProtocolForProxy:@protocol(MPlayerOSXVOProto)];
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
248 mplayerosxProto = (id <MPlayerOSXVOProto>)mplayerosxProxy;
29564
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
249 [mplayerosxProto startWithWidth: image_width withHeight: image_height withBytes: image_bytes withAspect:d_width*100/d_height];
25157
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
250 }
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
251 else {
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
252 [mplayerosxProxy release];
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
253 mplayerosxProxy = nil;
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
254 mplayerosxProto = nil;
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
255 }
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
256 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
257 return 0;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
258 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
259
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
260 static void check_events(void)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
261 {
29272
c95bad660986 When used with shared_buffer, there's no need for a NSApp object, which causes MPlayer to be marked as unresponsive.
adrian
parents: 29271
diff changeset
262 if (mpGLView)
c95bad660986 When used with shared_buffer, there's no need for a NSApp object, which causes MPlayer to be marked as unresponsive.
adrian
parents: 29271
diff changeset
263 [mpGLView check_events];
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
264 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
265
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
266 static void draw_osd(void)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
267 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
268 vo_draw_text(image_width, image_height, draw_alpha);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
269 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
270
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
271 static void flip_page(void)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
272 {
29271
82b6fbc72099 When used with shared_buffer, autorelease in each flip_page so objects don't accumulate until exit.
adrian
parents: 29263
diff changeset
273 if(shared_buffer) {
82b6fbc72099 When used with shared_buffer, autorelease in each flip_page so objects don't accumulate until exit.
adrian
parents: 29263
diff changeset
274 NSAutoreleasePool *pool = [NSAutoreleasePool new];
25157
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
275 [mplayerosxProto render];
29271
82b6fbc72099 When used with shared_buffer, autorelease in each flip_page so objects don't accumulate until exit.
adrian
parents: 29263
diff changeset
276 [pool release];
82b6fbc72099 When used with shared_buffer, autorelease in each flip_page so objects don't accumulate until exit.
adrian
parents: 29263
diff changeset
277 } else {
25114
bed4188998ca Move the setCurrentTexture call into flip_page(), fix osd flicker problem.
ulion
parents: 25078
diff changeset
278 [mpGLView setCurrentTexture];
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
279 [mpGLView render];
25180
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
280 if (vo_doublebuffering) {
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
281 image_page = 1 - image_page;
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
282 image_data = image_datas[image_page];
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
283 }
25114
bed4188998ca Move the setCurrentTexture call into flip_page(), fix osd flicker problem.
ulion
parents: 25078
diff changeset
284 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
285 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
286
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 16145
diff changeset
287 static int draw_slice(uint8_t *src[], int stride[], int w,int h,int x,int y)
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
288 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
289 return 0;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
290 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
291
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
292
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 16145
diff changeset
293 static int draw_frame(uint8_t *src[])
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
294 {
30972
886527159cae Implement VOCTRL_DRAW_IMAGE instead of the deprecated draw_frame, avoiding
reimar
parents: 30922
diff changeset
295 return 0;
886527159cae Implement VOCTRL_DRAW_IMAGE instead of the deprecated draw_frame, avoiding
reimar
parents: 30922
diff changeset
296 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
297
30972
886527159cae Implement VOCTRL_DRAW_IMAGE instead of the deprecated draw_frame, avoiding
reimar
parents: 30922
diff changeset
298 static uint32_t draw_image(mp_image_t *mpi)
886527159cae Implement VOCTRL_DRAW_IMAGE instead of the deprecated draw_frame, avoiding
reimar
parents: 30922
diff changeset
299 {
886527159cae Implement VOCTRL_DRAW_IMAGE instead of the deprecated draw_frame, avoiding
reimar
parents: 30922
diff changeset
300 memcpy_pic(image_data, mpi->planes[0], image_width*image_bytes, image_height, image_width*image_bytes, mpi->stride[0]);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
301
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
302 return 0;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
303 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
304
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 16145
diff changeset
305 static int query_format(uint32_t format)
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
306 {
30974
bd964ca1f6fa Fix RGB support for corevideo: corevideo can only support
reimar
parents: 30973
diff changeset
307 const int supportflags = VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_OSD | VFCAP_HWSCALE_UP | VFCAP_HWSCALE_DOWN;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
308 image_format = format;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
309
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
310 switch(format)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
311 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
312 case IMGFMT_YUY2:
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
313 pixelFormat = kYUVSPixelFormat;
30974
bd964ca1f6fa Fix RGB support for corevideo: corevideo can only support
reimar
parents: 30973
diff changeset
314 return supportflags;
bd964ca1f6fa Fix RGB support for corevideo: corevideo can only support
reimar
parents: 30973
diff changeset
315
bd964ca1f6fa Fix RGB support for corevideo: corevideo can only support
reimar
parents: 30973
diff changeset
316 case IMGFMT_RGB24:
bd964ca1f6fa Fix RGB support for corevideo: corevideo can only support
reimar
parents: 30973
diff changeset
317 pixelFormat = k24RGBPixelFormat;
bd964ca1f6fa Fix RGB support for corevideo: corevideo can only support
reimar
parents: 30973
diff changeset
318 return supportflags;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
319
30974
bd964ca1f6fa Fix RGB support for corevideo: corevideo can only support
reimar
parents: 30973
diff changeset
320 case IMGFMT_ARGB:
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
321 pixelFormat = k32ARGBPixelFormat;
30974
bd964ca1f6fa Fix RGB support for corevideo: corevideo can only support
reimar
parents: 30973
diff changeset
322 return supportflags;
bd964ca1f6fa Fix RGB support for corevideo: corevideo can only support
reimar
parents: 30973
diff changeset
323
bd964ca1f6fa Fix RGB support for corevideo: corevideo can only support
reimar
parents: 30973
diff changeset
324 case IMGFMT_BGRA:
bd964ca1f6fa Fix RGB support for corevideo: corevideo can only support
reimar
parents: 30973
diff changeset
325 pixelFormat = k32BGRAPixelFormat;
bd964ca1f6fa Fix RGB support for corevideo: corevideo can only support
reimar
parents: 30973
diff changeset
326 return supportflags;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
327 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
328 return 0;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
329 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
330
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
331 static void uninit(void)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
332 {
21551
c35115c05c64 vo_macosx, fix crash when closing window
nplourde
parents: 21546
diff changeset
333 SetSystemUIMode( kUIModeNormal, 0);
c35115c05c64 vo_macosx, fix crash when closing window
nplourde
parents: 21546
diff changeset
334 CGDisplayShowCursor(kCGDirectMainDisplay);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
335
29573
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
336 free_file_specific();
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
337
21551
c35115c05c64 vo_macosx, fix crash when closing window
nplourde
parents: 21546
diff changeset
338 if(mpGLView)
c35115c05c64 vo_macosx, fix crash when closing window
nplourde
parents: 21546
diff changeset
339 {
25136
e029d2fcd20f Fix warning:
ulion
parents: 25121
diff changeset
340 NSAutoreleasePool *finalPool;
24742
0bef706332b5 Fix deallocate bug which sometimes causes a crash when reinitializing.
nplourde
parents: 24698
diff changeset
341 mpGLView = nil;
21551
c35115c05c64 vo_macosx, fix crash when closing window
nplourde
parents: 21546
diff changeset
342 [autoreleasepool release];
25136
e029d2fcd20f Fix warning:
ulion
parents: 25121
diff changeset
343 finalPool = [[NSAutoreleasePool alloc] init];
25078
3efbdaab822f Let NSApp handle events when uninit to fix the delay dealloc bug of mpGLView.
ulion
parents: 24965
diff changeset
344 [NSApp nextEventMatchingMask:NSAnyEventMask untilDate:nil inMode:NSDefaultRunLoopMode dequeue:YES];
3efbdaab822f Let NSApp handle events when uninit to fix the delay dealloc bug of mpGLView.
ulion
parents: 24965
diff changeset
345 [finalPool release];
21551
c35115c05c64 vo_macosx, fix crash when closing window
nplourde
parents: 21546
diff changeset
346 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
347
32537
8fa2f43cb760 Remove most of the NULL pointer check before free all over the code
cboesch
parents: 32471
diff changeset
348 free(buffer_name);
28180
781ef511a767 Add an option to vo_macosx to set a custom buffer_name.
gpoirier
parents: 28130
diff changeset
349 buffer_name = NULL;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
350 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
351
29603
4c81686ad728 Subopt parser subopts should now be const.
reimar
parents: 29575
diff changeset
352 static const opt_t subopts[] = {
28306
19cf626f188a fix device_id option after r28165
gpoirier
parents: 28204
diff changeset
353 {"device_id", OPT_ARG_INT, &screen_id, NULL},
28130
b5898cb411da Replace vo_macosx's custom options parsing with a subopt_parse()-based one
gpoirier
parents: 28077
diff changeset
354 {"shared_buffer", OPT_ARG_BOOL, &shared_buffer, NULL},
28180
781ef511a767 Add an option to vo_macosx to set a custom buffer_name.
gpoirier
parents: 28130
diff changeset
355 {"buffer_name", OPT_ARG_MSTRZ,&buffer_name, NULL},
28130
b5898cb411da Replace vo_macosx's custom options parsing with a subopt_parse()-based one
gpoirier
parents: 28077
diff changeset
356 {NULL}
b5898cb411da Replace vo_macosx's custom options parsing with a subopt_parse()-based one
gpoirier
parents: 28077
diff changeset
357 };
b5898cb411da Replace vo_macosx's custom options parsing with a subopt_parse()-based one
gpoirier
parents: 28077
diff changeset
358
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 16145
diff changeset
359 static int preinit(const char *arg)
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
360 {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
361
28130
b5898cb411da Replace vo_macosx's custom options parsing with a subopt_parse()-based one
gpoirier
parents: 28077
diff changeset
362 // set defaults
28306
19cf626f188a fix device_id option after r28165
gpoirier
parents: 28204
diff changeset
363 screen_id = -1;
28130
b5898cb411da Replace vo_macosx's custom options parsing with a subopt_parse()-based one
gpoirier
parents: 28077
diff changeset
364 shared_buffer = false;
28204
ec9c4610f10f Fix deinit problem due to r28215
gpoirier
parents: 28180
diff changeset
365 buffer_name = NULL;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
366
28130
b5898cb411da Replace vo_macosx's custom options parsing with a subopt_parse()-based one
gpoirier
parents: 28077
diff changeset
367 if (subopt_parse(arg, subopts) != 0) {
b5898cb411da Replace vo_macosx's custom options parsing with a subopt_parse()-based one
gpoirier
parents: 28077
diff changeset
368 mp_msg(MSGT_VO, MSGL_FATAL,
29210
779281d8cd80 Rename macosx video output driver to corevideo.
diego
parents: 29177
diff changeset
369 "\n-vo corevideo command line help:\n"
779281d8cd80 Rename macosx video output driver to corevideo.
diego
parents: 29177
diff changeset
370 "Example: mplayer -vo corevideo:device_id=1:shared_buffer:buffer_name=mybuff\n"
28130
b5898cb411da Replace vo_macosx's custom options parsing with a subopt_parse()-based one
gpoirier
parents: 28077
diff changeset
371 "\nOptions:\n"
b5898cb411da Replace vo_macosx's custom options parsing with a subopt_parse()-based one
gpoirier
parents: 28077
diff changeset
372 " device_id=<0-...>\n"
28837
e5171567fe6c cosmetics: spelling fixes
diego
parents: 28836
diff changeset
373 " Set screen device ID for fullscreen.\n"
28130
b5898cb411da Replace vo_macosx's custom options parsing with a subopt_parse()-based one
gpoirier
parents: 28077
diff changeset
374 " shared_buffer\n"
b5898cb411da Replace vo_macosx's custom options parsing with a subopt_parse()-based one
gpoirier
parents: 28077
diff changeset
375 " Write output to a shared memory buffer instead of displaying it.\n"
28180
781ef511a767 Add an option to vo_macosx to set a custom buffer_name.
gpoirier
parents: 28130
diff changeset
376 " buffer_name=<name>\n"
781ef511a767 Add an option to vo_macosx to set a custom buffer_name.
gpoirier
parents: 28130
diff changeset
377 " Name of the shared buffer created with shm_open() as well as\n"
781ef511a767 Add an option to vo_macosx to set a custom buffer_name.
gpoirier
parents: 28130
diff changeset
378 " the name of the NSConnection MPlayer will try to open.\n"
781ef511a767 Add an option to vo_macosx to set a custom buffer_name.
gpoirier
parents: 28130
diff changeset
379 " Setting buffer_name implicitly enables shared_buffer.\n"
28130
b5898cb411da Replace vo_macosx's custom options parsing with a subopt_parse()-based one
gpoirier
parents: 28077
diff changeset
380 "\n" );
b5898cb411da Replace vo_macosx's custom options parsing with a subopt_parse()-based one
gpoirier
parents: 28077
diff changeset
381 return -1;
b5898cb411da Replace vo_macosx's custom options parsing with a subopt_parse()-based one
gpoirier
parents: 28077
diff changeset
382 }
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
383
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
384 autoreleasepool = [[NSAutoreleasePool alloc] init];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
385
28204
ec9c4610f10f Fix deinit problem due to r28215
gpoirier
parents: 28180
diff changeset
386 if (!buffer_name)
ec9c4610f10f Fix deinit problem due to r28215
gpoirier
parents: 28180
diff changeset
387 buffer_name = strdup(DEFAULT_BUFFER_NAME);
ec9c4610f10f Fix deinit problem due to r28215
gpoirier
parents: 28180
diff changeset
388 else
28180
781ef511a767 Add an option to vo_macosx to set a custom buffer_name.
gpoirier
parents: 28130
diff changeset
389 shared_buffer = true;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
390
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
391 if(!shared_buffer)
16144
6ea7c0735fce properly release window
nplourde
parents: 16081
diff changeset
392 {
29272
c95bad660986 When used with shared_buffer, there's no need for a NSApp object, which causes MPlayer to be marked as unresponsive.
adrian
parents: 29271
diff changeset
393 NSApplicationLoad();
c95bad660986 When used with shared_buffer, there's no need for a NSApp object, which causes MPlayer to be marked as unresponsive.
adrian
parents: 29271
diff changeset
394 NSApp = [NSApplication sharedApplication];
c95bad660986 When used with shared_buffer, there's no need for a NSApp object, which causes MPlayer to be marked as unresponsive.
adrian
parents: 29271
diff changeset
395 isLeopardOrLater = floor(NSAppKitVersionNumber) > 824;
c95bad660986 When used with shared_buffer, there's no need for a NSApp object, which causes MPlayer to be marked as unresponsive.
adrian
parents: 29271
diff changeset
396
30922
7e3b047c51e7 Refactor OS X foreground process setting into a separate function.
diego
parents: 30001
diff changeset
397 osx_foreground_hack();
17358
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
398
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
399 if(!mpGLView)
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
400 {
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
401 mpGLView = [[MPlayerOpenGLView alloc] initWithFrame:NSMakeRect(0, 0, 100, 100) pixelFormat:[MPlayerOpenGLView defaultPixelFormat]];
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
402 [mpGLView autorelease];
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
403 }
31758
0577595394f8 Make the Quit menu entry work.
reimar
parents: 31757
diff changeset
404 // Install an event handler so the Quit menu entry works
0577595394f8 Make the Quit menu entry work.
reimar
parents: 31757
diff changeset
405 // The proper way using NSApp setDelegate: and
0577595394f8 Make the Quit menu entry work.
reimar
parents: 31757
diff changeset
406 // applicationShouldTerminate: does not work,
0577595394f8 Make the Quit menu entry work.
reimar
parents: 31757
diff changeset
407 // probably NSApplication never installs its handler.
0577595394f8 Make the Quit menu entry work.
reimar
parents: 31757
diff changeset
408 [[NSAppleEventManager sharedAppleEventManager]
0577595394f8 Make the Quit menu entry work.
reimar
parents: 31757
diff changeset
409 setEventHandler:mpGLView
0577595394f8 Make the Quit menu entry work.
reimar
parents: 31757
diff changeset
410 andSelector:@selector(handleQuitEvent:withReplyEvent:)
0577595394f8 Make the Quit menu entry work.
reimar
parents: 31757
diff changeset
411 forEventClass:kCoreEventClass
0577595394f8 Make the Quit menu entry work.
reimar
parents: 31757
diff changeset
412 andEventID:kAEQuitApplication];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
413
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
414 [mpGLView display];
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
415 [mpGLView preinit];
16144
6ea7c0735fce properly release window
nplourde
parents: 16081
diff changeset
416 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
417
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
418 return 0;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
419 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
420
33330
ad12e6080ed1 Fix compilation for OSX due to r33392 - control() vaarg removal.
iive
parents: 32537
diff changeset
421 static int control(uint32_t request, void *data)
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
422 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
423 switch (request)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
424 {
30972
886527159cae Implement VOCTRL_DRAW_IMAGE instead of the deprecated draw_frame, avoiding
reimar
parents: 30922
diff changeset
425 case VOCTRL_DRAW_IMAGE: return draw_image(data);
26755
46f0b4d34fa1 cosmetics: Remove useless parentheses from from return statements.
diego
parents: 25468
diff changeset
426 case VOCTRL_PAUSE: return int_pause = 1;
46f0b4d34fa1 cosmetics: Remove useless parentheses from from return statements.
diego
parents: 25468
diff changeset
427 case VOCTRL_RESUME: return int_pause = 0;
31737
38999f9d3c7e Remove yet more useless ()
reimar
parents: 31736
diff changeset
428 case VOCTRL_QUERY_FORMAT: return query_format(*(uint32_t*)data);
38999f9d3c7e Remove yet more useless ()
reimar
parents: 31736
diff changeset
429 case VOCTRL_ONTOP: vo_ontop = !vo_ontop; if(!shared_buffer){ [mpGLView ontop]; } else { [mplayerosxProto ontop]; } return VO_TRUE;
38999f9d3c7e Remove yet more useless ()
reimar
parents: 31736
diff changeset
430 case VOCTRL_ROOTWIN: vo_rootwin = !vo_rootwin; [mpGLView rootwin]; return VO_TRUE;
38999f9d3c7e Remove yet more useless ()
reimar
parents: 31736
diff changeset
431 case VOCTRL_FULLSCREEN: vo_fs = !vo_fs; if(!shared_buffer){ [mpGLView fullscreen: NO]; } else { [mplayerosxProto toggleFullscreen]; } return VO_TRUE;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
432 case VOCTRL_GET_PANSCAN: return VO_TRUE;
15611
2f77a2da1d82 Function name cleanup
nplourde
parents: 15610
diff changeset
433 case VOCTRL_SET_PANSCAN: [mpGLView panscan]; return VO_TRUE;
29564
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
434 case VOCTRL_UPDATE_SCREENINFO: update_screen_info(); return VO_TRUE;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
435 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
436 return VO_NOTIMPL;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
437 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
438
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
439 //////////////////////////////////////////////////////////////////////////
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
440 // NSOpenGLView Subclass
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
441 //////////////////////////////////////////////////////////////////////////
15611
2f77a2da1d82 Function name cleanup
nplourde
parents: 15610
diff changeset
442 @implementation MPlayerOpenGLView
24076
7ac48ed8c394 Functions that do not return a value must be void
reimar
parents: 24074
diff changeset
443 - (void) preinit
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
444 {
29575
0e182921966b Make glContext a local variable, it is not needed outside the function
reimar
parents: 29574
diff changeset
445 NSOpenGLContext *glContext;
29566
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
446 GLint swapInterval = 1;
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
447 CVReturn error;
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
448
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
449 //init menu
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
450 [self initMenu];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
451
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
452 //create window
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
453 window = [[NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, 100, 100)
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
454 styleMask:NSTitledWindowMask|NSTexturedBackgroundWindowMask|NSClosableWindowMask|NSMiniaturizableWindowMask|NSResizableWindowMask
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
455 backing:NSBackingStoreBuffered defer:NO];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
456
16144
6ea7c0735fce properly release window
nplourde
parents: 16081
diff changeset
457 [window autorelease];
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
458 [window setDelegate:mpGLView];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
459 [window setContentView:mpGLView];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
460 [window setInitialFirstResponder:mpGLView];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
461 [window setAcceptsMouseMovedEvents:YES];
31742
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
462 [window setTitle:@"MPlayer - The Movie Player"];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
463
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
464 isFullscreen = 0;
15855
1ca8b5873c3f keep window size when changing aspect
nplourde
parents: 15854
diff changeset
465 winSizeMult = 1;
29566
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
466
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
467 //create OpenGL Context
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
468 glContext = [[NSOpenGLContext alloc] initWithFormat:[NSOpenGLView defaultPixelFormat] shareContext:nil];
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
469
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
470 [self setOpenGLContext:glContext];
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
471 [glContext setValues:&swapInterval forParameter:NSOpenGLCPSwapInterval];
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
472 [glContext setView:self];
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
473 [glContext makeCurrentContext];
29575
0e182921966b Make glContext a local variable, it is not needed outside the function
reimar
parents: 29574
diff changeset
474 [glContext release];
29566
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
475
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
476 error = CVOpenGLTextureCacheCreate(NULL, 0, [glContext CGLContextObj], [[self pixelFormat] CGLPixelFormatObj], 0, &textureCache);
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
477 if(error != kCVReturnSuccess)
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
478 mp_msg(MSGT_VO, MSGL_ERR,"[vo_corevideo] Failed to create OpenGL texture Cache(%d)\n", error);
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
479 }
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
480
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
481 - (void) releaseVideoSpecific
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
482 {
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
483 CVPixelBufferRelease(frameBuffers[0]);
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
484 frameBuffers[0] = NULL;
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
485 CVPixelBufferRelease(frameBuffers[1]);
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
486 frameBuffers[1] = NULL;
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
487 CVOpenGLTextureRelease(texture);
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
488 texture = NULL;
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
489 }
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
490
29574
0aa36133f638 Add a dealloc function to corevideo to reduce the memleaks from
reimar
parents: 29573
diff changeset
491 - (void) dealloc
0aa36133f638 Add a dealloc function to corevideo to reduce the memleaks from
reimar
parents: 29573
diff changeset
492 {
0aa36133f638 Add a dealloc function to corevideo to reduce the memleaks from
reimar
parents: 29573
diff changeset
493 [self releaseVideoSpecific];
0aa36133f638 Add a dealloc function to corevideo to reduce the memleaks from
reimar
parents: 29573
diff changeset
494 CVOpenGLTextureCacheRelease(textureCache);
0aa36133f638 Add a dealloc function to corevideo to reduce the memleaks from
reimar
parents: 29573
diff changeset
495 textureCache = NULL;
0aa36133f638 Add a dealloc function to corevideo to reduce the memleaks from
reimar
parents: 29573
diff changeset
496 [self setOpenGLContext:nil];
0aa36133f638 Add a dealloc function to corevideo to reduce the memleaks from
reimar
parents: 29573
diff changeset
497 [super dealloc];
0aa36133f638 Add a dealloc function to corevideo to reduce the memleaks from
reimar
parents: 29573
diff changeset
498 }
0aa36133f638 Add a dealloc function to corevideo to reduce the memleaks from
reimar
parents: 29573
diff changeset
499
24076
7ac48ed8c394 Functions that do not return a value must be void
reimar
parents: 24074
diff changeset
500 - (void) config
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
501 {
30001
444f843a54ec Add support for -geometry to corevideo.
adrian
parents: 30000
diff changeset
502 NSRect visibleFrame;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
503 CVReturn error = kCVReturnSuccess;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
504
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
505 //config window
30001
444f843a54ec Add support for -geometry to corevideo.
adrian
parents: 30000
diff changeset
506 [window setContentSize:NSMakeSize(vo_dwidth, vo_dheight)];
444f843a54ec Add support for -geometry to corevideo.
adrian
parents: 30000
diff changeset
507
444f843a54ec Add support for -geometry to corevideo.
adrian
parents: 30000
diff changeset
508 // Use visibleFrame to position the window taking the menu bar and dock into account.
444f843a54ec Add support for -geometry to corevideo.
adrian
parents: 30000
diff changeset
509 // Also flip vo_dy since the screen origin is in the bottom left on OSX.
31743
f3315500970f Avoid some code duplication.
reimar
parents: 31742
diff changeset
510 update_screen_info();
f3315500970f Avoid some code duplication.
reimar
parents: 31742
diff changeset
511 visibleFrame = [screen_handle visibleFrame];
30001
444f843a54ec Add support for -geometry to corevideo.
adrian
parents: 30000
diff changeset
512 [window setFrameTopLeftPoint:NSMakePoint(
444f843a54ec Add support for -geometry to corevideo.
adrian
parents: 30000
diff changeset
513 visibleFrame.origin.x + vo_dx,
444f843a54ec Add support for -geometry to corevideo.
adrian
parents: 30000
diff changeset
514 visibleFrame.origin.y + visibleFrame.size.height - vo_dy)];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
515
29566
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
516 [self releaseVideoSpecific];
25180
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
517 error = CVPixelBufferCreateWithBytes(NULL, image_width, image_height, pixelFormat, image_datas[0], image_width*image_bytes, NULL, NULL, NULL, &frameBuffers[0]);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
518 if(error != kCVReturnSuccess)
29210
779281d8cd80 Rename macosx video output driver to corevideo.
diego
parents: 29177
diff changeset
519 mp_msg(MSGT_VO, MSGL_ERR,"[vo_corevideo] Failed to create Pixel Buffer(%d)\n", error);
25180
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
520 if (vo_doublebuffering) {
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
521 error = CVPixelBufferCreateWithBytes(NULL, image_width, image_height, pixelFormat, image_datas[1], image_width*image_bytes, NULL, NULL, NULL, &frameBuffers[1]);
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
522 if(error != kCVReturnSuccess)
29210
779281d8cd80 Rename macosx video output driver to corevideo.
diego
parents: 29177
diff changeset
523 mp_msg(MSGT_VO, MSGL_ERR,"[vo_corevideo] Failed to create Pixel Double Buffer(%d)\n", error);
25180
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
524 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
525
25180
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
526 error = CVOpenGLTextureCacheCreateTextureFromImage(NULL, textureCache, frameBuffers[image_page], 0, &texture);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
527 if(error != kCVReturnSuccess)
29210
779281d8cd80 Rename macosx video output driver to corevideo.
diego
parents: 29177
diff changeset
528 mp_msg(MSGT_VO, MSGL_ERR,"[vo_corevideo] Failed to create OpenGL texture(%d)\n", error);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
529
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
530 //show window
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
531 [window makeKeyAndOrderFront:mpGLView];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
532
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
533 if(vo_rootwin)
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
534 [mpGLView rootwin];
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
535
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
536 if(vo_fs)
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
537 [mpGLView fullscreen: NO];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
538
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
539 if(vo_ontop)
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
540 [mpGLView ontop];
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
541 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
542
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
543 /*
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
544 Init Menu
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
545 */
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
546 - (void)initMenu
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
547 {
21395
dd05dd9e3e7b Fix declarations vs statements warning.
diego
parents: 18878
diff changeset
548 NSMenu *menu, *aspectMenu;
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
549 NSMenuItem *menuItem;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
550
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
551 [NSApp setMainMenu:[[NSMenu alloc] init]];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
552
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
553 //Create Movie Menu
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
554 menu = [[NSMenu alloc] initWithTitle:@"Movie"];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
555 menuItem = [[NSMenuItem alloc] initWithTitle:@"Half Size" action:@selector(menuAction:) keyEquivalent:@"0"]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
556 kHalfScreenCmd = menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
557 menuItem = [[NSMenuItem alloc] initWithTitle:@"Normal Size" action:@selector(menuAction:) keyEquivalent:@"1"]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
558 kNormalScreenCmd = menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
559 menuItem = [[NSMenuItem alloc] initWithTitle:@"Double Size" action:@selector(menuAction:) keyEquivalent:@"2"]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
560 kDoubleScreenCmd = menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
561 menuItem = [[NSMenuItem alloc] initWithTitle:@"Full Size" action:@selector(menuAction:) keyEquivalent:@"f"]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
562 kFullScreenCmd = menuItem;
31738
781904280cd7 Remove pointless casts.
reimar
parents: 31737
diff changeset
563 menuItem = [NSMenuItem separatorItem]; [menu addItem:menuItem];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
564
31742
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
565 aspectMenu = [[NSMenu alloc] initWithTitle:@"Aspect Ratio"];
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
566 menuItem = [[NSMenuItem alloc] initWithTitle:@"Keep" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem];
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
567 if(vo_keepaspect) [menuItem setState:NSOnState];
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
568 kKeepAspectCmd = menuItem;
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
569 menuItem = [[NSMenuItem alloc] initWithTitle:@"Pan-Scan" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem];
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
570 if(vo_panscan) [menuItem setState:NSOnState];
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
571 kPanScanCmd = menuItem;
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
572 menuItem = [NSMenuItem separatorItem]; [aspectMenu addItem:menuItem];
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
573 menuItem = [[NSMenuItem alloc] initWithTitle:@"Original" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem];
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
574 kAspectOrgCmd = menuItem;
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
575 menuItem = [[NSMenuItem alloc] initWithTitle:@"4:3" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem];
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
576 kAspectFullCmd = menuItem;
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
577 menuItem = [[NSMenuItem alloc] initWithTitle:@"16:9" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem];
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
578 kAspectWideCmd = menuItem;
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
579 menuItem = [[NSMenuItem alloc] initWithTitle:@"Aspect Ratio" action:nil keyEquivalent:@""];
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
580 [menuItem setSubmenu:aspectMenu];
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
581 [menu addItem:menuItem];
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
582 [aspectMenu release];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
583
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
584 //Add to menubar
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
585 menuItem = [[NSMenuItem alloc] initWithTitle:@"Movie" action:nil keyEquivalent:@""];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
586 [menuItem setSubmenu:menu];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
587 [[NSApp mainMenu] addItem:menuItem];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
588
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
589 //Create Window Menu
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
590 menu = [[NSMenu alloc] initWithTitle:@"Window"];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
591
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
592 menuItem = [[NSMenuItem alloc] initWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@"m"]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
593 menuItem = [[NSMenuItem alloc] initWithTitle:@"Zoom" action:@selector(performZoom:) keyEquivalent:@""]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
594
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
595 //Add to menubar
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
596 menuItem = [[NSMenuItem alloc] initWithTitle:@"Window" action:nil keyEquivalent:@""];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
597 [menuItem setSubmenu:menu];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
598 [[NSApp mainMenu] addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
599 [NSApp setWindowsMenu:menu];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
600
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
601 [menu release];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
602 [menuItem release];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
603 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
604
29604
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
605 - (void)set_winSizeMult:(float)mult
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
606 {
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
607 NSRect frame;
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
608 int d_width, d_height;
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
609 aspect(&d_width, &d_height, A_NOZOOM);
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
610
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
611 if (isFullscreen) {
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
612 vo_fs = !vo_fs;
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
613 [self fullscreen:NO];
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
614 }
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
615
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
616 winSizeMult = mult;
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
617 frame.size.width = d_width * mult;
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
618 frame.size.height = d_height * mult;
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
619 [window setContentSize: frame.size];
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
620 [self reshape];
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
621 }
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
622
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
623 /*
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
624 Menu Action
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
625 */
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
626 - (void)menuAction:(id)sender
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
627 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
628 if(sender == kHalfScreenCmd)
29604
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
629 [self set_winSizeMult: 0.5];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
630 if(sender == kNormalScreenCmd)
29604
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
631 [self set_winSizeMult: 1];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
632 if(sender == kDoubleScreenCmd)
29604
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
633 [self set_winSizeMult: 2];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
634 if(sender == kFullScreenCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
635 {
31736
8d6697e4838e Remove useless ().
reimar
parents: 31735
diff changeset
636 vo_fs = !vo_fs;
21546
253a1e98bfe3 vo_macosx.m disable window animation when going to fullscreen
nplourde
parents: 21395
diff changeset
637 [self fullscreen:NO];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
638 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
639
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
640 if(sender == kKeepAspectCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
641 {
31736
8d6697e4838e Remove useless ().
reimar
parents: 31735
diff changeset
642 vo_keepaspect = !vo_keepaspect;
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
643 if(vo_keepaspect)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
644 [kKeepAspectCmd setState:NSOnState];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
645 else
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
646 [kKeepAspectCmd setState:NSOffState];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
647
15909
b1bc923b38fe resize video after keep aspect menu item toggle
nplourde
parents: 15902
diff changeset
648 [self reshape];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
649 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
650
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
651 if(sender == kPanScanCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
652 {
31736
8d6697e4838e Remove useless ().
reimar
parents: 31735
diff changeset
653 vo_panscan = !vo_panscan;
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
654 if(vo_panscan)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
655 [kPanScanCmd setState:NSOnState];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
656 else
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
657 [kPanScanCmd setState:NSOffState];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
658
15902
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
659 [self panscan];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
660 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
661
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
662 if(sender == kAspectOrgCmd)
29564
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
663 change_movie_aspect(-1);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
664
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
665 if(sender == kAspectFullCmd)
29564
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
666 change_movie_aspect(4.0f/3.0f);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
667
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
668 if(sender == kAspectWideCmd)
29564
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
669 change_movie_aspect(16.0f/9.0f);
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
670 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
671
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
672 /*
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
673 Setup OpenGL
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
674 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
675 - (void)prepareOpenGL
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
676 {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
677 glEnable(GL_BLEND);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
678 glDisable(GL_DEPTH_TEST);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
679 glDepthMask(GL_FALSE);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
680 glDisable(GL_CULL_FACE);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
681 [self reshape];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
682 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
683
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
684 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
685 reshape OpenGL viewport
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
686 */
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
687 - (void)reshape
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
688 {
31739
923b5da53f65 Declare variables with proper types to avoid dangerous pointer casts.
reimar
parents: 31738
diff changeset
689 int d_width, d_height;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
690
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
691 NSRect frame = [self frame];
29564
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
692 vo_dwidth = frame.size.width;
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
693 vo_dheight = frame.size.height;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
694
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
695 glViewport(0, 0, frame.size.width, frame.size.height);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
696 glMatrixMode(GL_PROJECTION);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
697 glLoadIdentity();
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
698 glOrtho(0, frame.size.width, frame.size.height, 0, -1.0, 1.0);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
699 glMatrixMode(GL_MODELVIEW);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
700 glLoadIdentity();
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
701
15729
55aaeb7b6aae new texture frame
nplourde
parents: 15728
diff changeset
702 //set texture frame
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
703 if(vo_keepaspect)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
704 {
31739
923b5da53f65 Declare variables with proper types to avoid dangerous pointer casts.
reimar
parents: 31738
diff changeset
705 aspect(&d_width, &d_height, A_WINZOOM);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
706
29564
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
707 textureFrame = NSMakeRect((vo_dwidth - d_width) / 2, (vo_dheight - d_height) / 2, d_width, d_height);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
708 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
709 else
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
710 {
15729
55aaeb7b6aae new texture frame
nplourde
parents: 15728
diff changeset
711 textureFrame = frame;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
712 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
713 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
714
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
715 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
716 Render frame
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
717 */
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
718 - (void) render
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
719 {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
720 glClear(GL_COLOR_BUFFER_BIT);
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
721
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
722 glEnable(CVOpenGLTextureGetTarget(texture));
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
723 glBindTexture(CVOpenGLTextureGetTarget(texture), CVOpenGLTextureGetName(texture));
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
724
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
725 glColor3f(1,1,1);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
726 glBegin(GL_QUADS);
15729
55aaeb7b6aae new texture frame
nplourde
parents: 15728
diff changeset
727 glTexCoord2f(upperLeft[0], upperLeft[1]); glVertex2i( textureFrame.origin.x-(vo_panscan_x >> 1), textureFrame.origin.y-(vo_panscan_y >> 1));
25424
cf72b0793c67 Use NSMakeRect and NSRect in correct way:
ulion
parents: 25423
diff changeset
728 glTexCoord2f(lowerLeft[0], lowerLeft[1]); glVertex2i(textureFrame.origin.x-(vo_panscan_x >> 1), NSMaxY(textureFrame)+(vo_panscan_y >> 1));
cf72b0793c67 Use NSMakeRect and NSRect in correct way:
ulion
parents: 25423
diff changeset
729 glTexCoord2f(lowerRight[0], lowerRight[1]); glVertex2i(NSMaxX(textureFrame)+(vo_panscan_x >> 1), NSMaxY(textureFrame)+(vo_panscan_y >> 1));
cf72b0793c67 Use NSMakeRect and NSRect in correct way:
ulion
parents: 25423
diff changeset
730 glTexCoord2f(upperRight[0], upperRight[1]); glVertex2i(NSMaxX(textureFrame)+(vo_panscan_x >> 1), textureFrame.origin.y-(vo_panscan_y >> 1));
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
731 glEnd();
15339
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
732 glDisable(CVOpenGLTextureGetTarget(texture));
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
733
15339
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
734 //render resize box
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
735 if(!isFullscreen)
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
736 {
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
737 NSRect frame = [self frame];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
738
15339
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
739 glBegin(GL_LINES);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
740 glColor4f(0.2, 0.2, 0.2, 0.5);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
741 glVertex2i(frame.size.width-1, frame.size.height-1); glVertex2i(frame.size.width-1, frame.size.height-1);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
742 glVertex2i(frame.size.width-1, frame.size.height-5); glVertex2i(frame.size.width-5, frame.size.height-1);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
743 glVertex2i(frame.size.width-1, frame.size.height-9); glVertex2i(frame.size.width-9, frame.size.height-1);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
744
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
745 glColor4f(0.4, 0.4, 0.4, 0.5);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
746 glVertex2i(frame.size.width-1, frame.size.height-2); glVertex2i(frame.size.width-2, frame.size.height-1);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
747 glVertex2i(frame.size.width-1, frame.size.height-6); glVertex2i(frame.size.width-6, frame.size.height-1);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
748 glVertex2i(frame.size.width-1, frame.size.height-10); glVertex2i(frame.size.width-10, frame.size.height-1);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
749
15339
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
750 glColor4f(0.6, 0.6, 0.6, 0.5);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
751 glVertex2i(frame.size.width-1, frame.size.height-3); glVertex2i(frame.size.width-3, frame.size.height-1);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
752 glVertex2i(frame.size.width-1, frame.size.height-7); glVertex2i(frame.size.width-7, frame.size.height-1);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
753 glVertex2i(frame.size.width-1, frame.size.height-11); glVertex2i(frame.size.width-11, frame.size.height-1);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
754 glEnd();
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
755 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
756
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
757 glFlush();
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
758 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
759
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
760 /*
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
761 Create OpenGL texture from current frame & set texco
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
762 */
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
763 - (void) setCurrentTexture
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
764 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
765 CVReturn error = kCVReturnSuccess;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
766
29137
0f6fc0df2c23 fix a memory leak leading to ~80 bytes being leaked at each call to flip_page.
gpoirier
parents: 28837
diff changeset
767 CVOpenGLTextureRelease(texture);
25180
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
768 error = CVOpenGLTextureCacheCreateTextureFromImage(NULL, textureCache, frameBuffers[image_page], 0, &texture);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
769 if(error != kCVReturnSuccess)
29210
779281d8cd80 Rename macosx video output driver to corevideo.
diego
parents: 29177
diff changeset
770 mp_msg(MSGT_VO, MSGL_ERR,"[vo_corevideo] Failed to create OpenGL texture(%d)\n", error);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
771
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
772 CVOpenGLTextureGetCleanTexCoords(texture, lowerLeft, lowerRight, upperRight, upperLeft);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
773 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
774
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
775 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
776 redraw win rect
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
777 */
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
778 - (void) drawRect: (NSRect *) bounds
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
779 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
780 [self render];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
781 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
782
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
783 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
784 Toggle Fullscreen
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
785 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
786 - (void) fullscreen: (BOOL) animate
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
787 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
788 static NSRect old_frame;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
789 static NSRect old_view_frame;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
790
15573
5db3dd72c876 Fix pan-scan in fullscreen mode
nplourde
parents: 15571
diff changeset
791 panscan_calc();
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
792
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
793 //go fullscreen
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
794 if(vo_fs)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
795 {
15327
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
796 if(!isRootwin)
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
797 {
15882
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
798 SetSystemUIMode( kUIModeAllHidden, kUIOptionAutoShowMenuBar);
18057
0e7291ee4b6b Replace deprecated function
nplourde
parents: 17725
diff changeset
799 CGDisplayHideCursor(kCGDirectMainDisplay);
15327
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
800 mouseHide = YES;
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
801 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
802
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
803 old_frame = [window frame]; //save main window size & position
29564
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
804 update_screen_info();
25413
8368ae92c092 screen_frame is only used for fullscreen mode.
ulion
parents: 25180
diff changeset
805
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
806 [window setFrame:screen_frame display:YES animate:animate]; //zoom-in window with nice useless sfx
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
807 old_view_frame = [self bounds];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
808
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
809 //fix origin for multi screen setup
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
810 screen_frame.origin.x = 0;
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
811 screen_frame.origin.y = 0;
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
812 [self setFrame:screen_frame];
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
813 [self setNeedsDisplay:YES];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
814 [window setHasShadow:NO];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
815 isFullscreen = 1;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
816 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
817 else
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
818 {
15902
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
819 SetSystemUIMode( kUIModeNormal, 0);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
820
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
821 isFullscreen = 0;
18057
0e7291ee4b6b Replace deprecated function
nplourde
parents: 17725
diff changeset
822 CGDisplayShowCursor(kCGDirectMainDisplay);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
823 mouseHide = NO;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
824
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
825 //revert window to previous setting
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
826 [self setFrame:old_view_frame];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
827 [self setNeedsDisplay:YES];
16081
72c352edce8f restore window shadow when quitting fullscreen mode
nplourde
parents: 15909
diff changeset
828 [window setHasShadow:YES];
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
829 [window setFrame:old_frame display:YES animate:animate];//zoom-out window with nice useless sfx
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
830 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
831 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
832
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
833 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
834 Toggle ontop
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
835 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
836 - (void) ontop
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
837 {
15320
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
838 if(vo_ontop)
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
839 {
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
840 [window setLevel:NSScreenSaverWindowLevel];
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
841 isOntop = YES;
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
842 }
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
843 else
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
844 {
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
845 [window setLevel:NSNormalWindowLevel];
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
846 isOntop = NO;
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
847 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
848 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
849
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
850 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
851 Toggle panscan
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
852 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
853 - (void) panscan
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
854 {
15331
7746903599b2 enable panscan
nplourde
parents: 15327
diff changeset
855 panscan_calc();
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
856 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
857
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
858 /*
15327
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
859 Toggle rootwin
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
860 */
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
861 - (void) rootwin
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
862 {
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
863 if(vo_rootwin)
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
864 {
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
865 [window setLevel:CGWindowLevelForKey(kCGDesktopWindowLevelKey)];
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
866 [window orderBack:self];
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
867 isRootwin = YES;
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
868 }
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
869 else
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
870 {
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
871 [window setLevel:NSNormalWindowLevel];
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
872 isRootwin = NO;
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
873 }
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
874 }
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
875
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
876 /*
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
877 Check event for new event
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
878 */
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
879 - (void) check_events
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
880 {
31760
dc95a7191375 Move variable into the only function where it is used.
reimar
parents: 31759
diff changeset
881 NSEvent *event;
31759
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
882 int curTime = TickCount()/60;
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
883
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
884 //automatically hide mouse cursor (and future on-screen control?)
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
885 if(isFullscreen && !mouseHide && !isRootwin)
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
886 {
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
887 if(curTime - lastMouseHide >= 5 || lastMouseHide == 0)
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
888 {
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
889 CGDisplayHideCursor(kCGDirectMainDisplay);
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
890 mouseHide = TRUE;
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
891 lastMouseHide = curTime;
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
892 }
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
893 }
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
894
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
895 //update activity every 30 seconds to prevent
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
896 //screensaver from starting up.
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
897 if(curTime - lastScreensaverUpdate >= 30 || lastScreensaverUpdate == 0)
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
898 {
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
899 UpdateSystemActivity(UsrActivity);
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
900 lastScreensaverUpdate = curTime;
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
901 }
a320b893f660 Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents: 31758
diff changeset
902
31757
83423e6b288e Simplify check_events: avoid seemingly pointless untilDate argument.
reimar
parents: 31756
diff changeset
903 event = [NSApp nextEventMatchingMask:NSAnyEventMask untilDate:nil inMode:NSEventTrackingRunLoopMode dequeue:YES];
25178
e9d23081b4ab Ignore empty event.
ulion
parents: 25157
diff changeset
904 if (event == nil)
e9d23081b4ab Ignore empty event.
ulion
parents: 25157
diff changeset
905 return;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
906 [NSApp sendEvent:event];
25179
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
907 // Without SDL's bootstrap code (include SDL.h in mplayer.c),
28837
e5171567fe6c cosmetics: spelling fixes
diego
parents: 28836
diff changeset
908 // on Leopard, we have trouble to get the play window automatically focused
e5171567fe6c cosmetics: spelling fixes
diego
parents: 28836
diff changeset
909 // when the app is actived. The Following code fix this problem.
27370
14c5017f40d2 Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents: 26755
diff changeset
910 #ifndef CONFIG_SDL
25179
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
911 if (isLeopardOrLater && [event type] == NSAppKitDefined
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
912 && [event subtype] == NSApplicationActivatedEventType) {
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
913 [window makeMainWindow];
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
914 [window makeKeyAndOrderFront:mpGLView];
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
915 }
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
916 #endif
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
917 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
918
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
919 /*
15731
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
920 From NSView, respond to key equivalents.
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
921 */
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
922 - (BOOL)performKeyEquivalent:(NSEvent *)theEvent
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
923 {
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
924 switch([theEvent keyCode])
31742
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
925 {
15731
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
926 case 0x21: [window setAlphaValue: winAlpha-=0.05]; return YES;
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
927 case 0x1e: [window setAlphaValue: winAlpha+=0.05]; return YES;
31742
8c22970585a7 Cosmetics: indentation fixes.
reimar
parents: 31741
diff changeset
928 }
15731
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
929 return NO;
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
930 }
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
931
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
932 /*
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
933 Process key event
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
934 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
935 - (void) keyDown: (NSEvent *) theEvent
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
936 {
29533
9c8f8e375823 Reuse the osx_common convert_key function to convert OSX keycodes to MPlayer
reimar
parents: 29272
diff changeset
937 int key = convert_key([theEvent keyCode], *[[theEvent characters] UTF8String]);
9c8f8e375823 Reuse the osx_common convert_key function to convert OSX keycodes to MPlayer
reimar
parents: 29272
diff changeset
938 if (key != -1)
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
939 mplayer_put_key(key);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
940 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
941
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
942 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
943 Process mouse button event
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
944 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
945 - (void) mouseMoved: (NSEvent *) theEvent
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
946 {
15327
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
947 if(isFullscreen && !isRootwin)
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
948 {
18057
0e7291ee4b6b Replace deprecated function
nplourde
parents: 17725
diff changeset
949 CGDisplayShowCursor(kCGDirectMainDisplay);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
950 mouseHide = NO;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
951 }
25468
a77c438fedf7 Do not send mouse movements events in root win mode.
ulion
parents: 25446
diff changeset
952 if (enable_mouse_movements && !isRootwin) {
25446
8dfc8a3b4152 Support send mouse movements commands to mplayer.
ulion
parents: 25424
diff changeset
953 NSPoint p =[self convertPoint:[theEvent locationInWindow] fromView:nil];
8dfc8a3b4152 Support send mouse movements commands to mplayer.
ulion
parents: 25424
diff changeset
954 if ([self mouse:p inRect:textureFrame]) {
31049
b40e41324173 Avoid duplicating mouse-movement command-generation code.
reimar
parents: 31047
diff changeset
955 vo_mouse_movement(vo_fs ? p.x : p.x - textureFrame.origin.x,
b40e41324173 Avoid duplicating mouse-movement command-generation code.
reimar
parents: 31047
diff changeset
956 vo_fs ? [self frame].size.height - p.y : NSMaxY(textureFrame) - p.y);
25446
8dfc8a3b4152 Support send mouse movements commands to mplayer.
ulion
parents: 25424
diff changeset
957 }
8dfc8a3b4152 Support send mouse movements commands to mplayer.
ulion
parents: 25424
diff changeset
958 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
959 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
960
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
961 - (void) mouseDown: (NSEvent *) theEvent
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
962 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
963 [self mouseEvent: theEvent];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
964 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
965
24077
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
966 - (void) mouseUp: (NSEvent *) theEvent
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
967 {
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
968 [self mouseEvent: theEvent];
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
969 }
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
970
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
971 - (void) rightMouseDown: (NSEvent *) theEvent
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
972 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
973 [self mouseEvent: theEvent];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
974 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
975
24077
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
976 - (void) rightMouseUp: (NSEvent *) theEvent
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
977 {
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
978 [self mouseEvent: theEvent];
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
979 }
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
980
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
981 - (void) otherMouseDown: (NSEvent *) theEvent
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
982 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
983 [self mouseEvent: theEvent];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
984 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
985
24077
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
986 - (void) otherMouseUp: (NSEvent *) theEvent
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
987 {
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
988 [self mouseEvent: theEvent];
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
989 }
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
990
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
991 - (void) scrollWheel: (NSEvent *) theEvent
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
992 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
993 if([theEvent deltaY] > 0)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
994 mplayer_put_key(MOUSE_BTN3);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
995 else
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
996 mplayer_put_key(MOUSE_BTN4);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
997 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
998
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
999 - (void) mouseEvent: (NSEvent *) theEvent
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1000 {
24077
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1001 if ( [theEvent buttonNumber] >= 0 && [theEvent buttonNumber] <= 9 )
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1002 {
25422
31bc1206890c Fix mouse button mapping:
ulion
parents: 25414
diff changeset
1003 int buttonNumber = [theEvent buttonNumber];
31bc1206890c Fix mouse button mapping:
ulion
parents: 25414
diff changeset
1004 // Fix to mplayer defined button order: left, middle, right
31bc1206890c Fix mouse button mapping:
ulion
parents: 25414
diff changeset
1005 if (buttonNumber == 1)
31bc1206890c Fix mouse button mapping:
ulion
parents: 25414
diff changeset
1006 buttonNumber = 2;
25423
875d77cb7bbc Fix wrong code in last commit.
ulion
parents: 25422
diff changeset
1007 else if (buttonNumber == 2)
875d77cb7bbc Fix wrong code in last commit.
ulion
parents: 25422
diff changeset
1008 buttonNumber = 1;
24077
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1009 switch([theEvent type])
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1010 {
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1011 case NSLeftMouseDown:
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1012 case NSRightMouseDown:
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1013 case NSOtherMouseDown:
25422
31bc1206890c Fix mouse button mapping:
ulion
parents: 25414
diff changeset
1014 mplayer_put_key((MOUSE_BTN0 + buttonNumber) | MP_KEY_DOWN);
24077
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1015 break;
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1016 case NSLeftMouseUp:
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1017 case NSRightMouseUp:
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1018 case NSOtherMouseUp:
25422
31bc1206890c Fix mouse button mapping:
ulion
parents: 25414
diff changeset
1019 mplayer_put_key(MOUSE_BTN0 + buttonNumber);
24077
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1020 break;
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1021 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1022 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1023 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1024
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1025 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1026 NSResponder
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
1027 */
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1028 - (BOOL) acceptsFirstResponder
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1029 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1030 return YES;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1031 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1032
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1033 - (BOOL) becomeFirstResponder
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1034 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1035 return YES;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1036 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1037
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1038 - (BOOL) resignFirstResponder
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1039 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1040 return YES;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1041 }
15325
5bd11a72dc58 close button exit mplayer with esc key
nplourde
parents: 15320
diff changeset
1042
31756
8e043273075d Change window-closing handling so it works properly if the
reimar
parents: 31745
diff changeset
1043 - (BOOL)windowShouldClose:(id)sender
15325
5bd11a72dc58 close button exit mplayer with esc key
nplourde
parents: 15320
diff changeset
1044 {
31735
3bb00f5abe8e Send KEY_CLOSE_WIN instead of KEY_ESC when the user requested
reimar
parents: 31049
diff changeset
1045 mplayer_put_key(KEY_CLOSE_WIN);
31756
8e043273075d Change window-closing handling so it works properly if the
reimar
parents: 31745
diff changeset
1046 // We have to wait for MPlayer to handle this,
8e043273075d Change window-closing handling so it works properly if the
reimar
parents: 31745
diff changeset
1047 // otherwise we are in trouble if the
8e043273075d Change window-closing handling so it works properly if the
reimar
parents: 31745
diff changeset
1048 // KEY_CLOSE_WIN handler is disabled
8e043273075d Change window-closing handling so it works properly if the
reimar
parents: 31745
diff changeset
1049 return NO;
15325
5bd11a72dc58 close button exit mplayer with esc key
nplourde
parents: 15320
diff changeset
1050 }
31758
0577595394f8 Make the Quit menu entry work.
reimar
parents: 31757
diff changeset
1051
0577595394f8 Make the Quit menu entry work.
reimar
parents: 31757
diff changeset
1052 - (void)handleQuitEvent:(NSAppleEventDescriptor*)e withReplyEvent:(NSAppleEventDescriptor*)r
0577595394f8 Make the Quit menu entry work.
reimar
parents: 31757
diff changeset
1053 {
0577595394f8 Make the Quit menu entry work.
reimar
parents: 31757
diff changeset
1054 mplayer_put_key(KEY_CLOSE_WIN);
0577595394f8 Make the Quit menu entry work.
reimar
parents: 31757
diff changeset
1055 }
15325
5bd11a72dc58 close button exit mplayer with esc key
nplourde
parents: 15320
diff changeset
1056 @end