Mercurial > mplayer.hg
annotate libvo/vo_corevideo.m @ 33960:1cd81338af07
Rework fullscreen handling.
This should fix all problems the GUI had with fullscreen handling.
In interface.c:
1. Remove disabled code.
2. Set background of inactive video window to black (which prevents
some flashing when starting the playback in fullscreen mode).
3. Set the state of the fullscreen button according to next playback
mode (normal or fullscreen).
4. Make the video window invisible if there is no video, but don't
make it visible that early if there is video.
5. Set the global fullscreen variable to get aspect scaling. (Hack)
6. In GUI_SETUP_VIDEO_WINDOW:
a. First set the video size,
b. then resize and reposition,
c. then make the window visible,
d. switch to/from fullscreen, if necessary.
(This minimizes disturbances and the display stays in fullscreen
mode and is smoothly black as often as possible.)
7. When playback ends, either act as in 6. or make video window
quickly invisible if requested.
In actions.c:
8. Allow calling uiFullScreen() even if not playing.
9. Remove unnecessary (and misplaced) repositioning (but not properly
resizing) code from uiFullScreen().
10. Don't call wsFullScreen() conditionally.
11. Only set global variable vo_fs, not the global fullscreen
variable.
author | ib |
---|---|
date | Thu, 01 Sep 2011 20:15:40 +0000 |
parents | ad12e6080ed1 |
children | 1237a0a79119 |
rev | line source |
---|---|
28446
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
28306
diff
changeset
|
1 /* |
29210 | 2 * CoreVideo video output driver |
28836 | 3 * Copyright (c) 2005 Nicolas Plourde <nicolasplourde@gmail.com> |
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 | 22 #import "vo_corevideo.h" |
16385 | 23 #include <sys/types.h> |
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 | 26 #include <unistd.h> |
27988 | 27 #include <CoreServices/CoreServices.h> |
28 //special workaround for Apple bug #6267445 | |
29 //(OSServices Power API disabled in OSServices.h for 64bit systems) | |
30 #ifndef __POWER__ | |
31 #include <CoreServices/../Frameworks/OSServices.framework/Headers/Power.h> | |
32 #endif | |
15289 | 33 |
34 //MPLAYER | |
35 #include "config.h" | |
36 #include "fastmemcpy.h" | |
37 #include "video_out.h" | |
38 #include "video_out_internal.h" | |
39 #include "aspect.h" | |
40 #include "mp_msg.h" | |
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 | 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 | 45 |
46 #include "input/input.h" | |
47 #include "input/mouse.h" | |
48 | |
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 | 51 |
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 | 55 MPlayerOpenGLView *mpGLView; |
15289 | 56 NSAutoreleasePool *autoreleasepool; |
57 OSType pixelFormat; | |
58 | |
16385 | 59 //shared memory |
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 | 63 |
15728 | 64 //Screen |
28306 | 65 int screen_id = -1; |
15728 | 66 NSRect screen_frame; |
67 NSScreen *screen_handle; | |
68 NSArray *screen_array; | |
15289 | 69 |
70 //image | |
71 unsigned char *image_data; | |
25180 | 72 // For double buffering |
73 static uint8_t image_page = 0; | |
74 static unsigned char *image_datas[2]; | |
75 | |
15289 | 76 static uint32_t image_width; |
77 static uint32_t image_height; | |
78 static uint32_t image_depth; | |
79 static uint32_t image_bytes; | |
80 static uint32_t image_format; | |
81 | |
82 //vo | |
83 static int isFullscreen; | |
15320 | 84 static int isOntop; |
15327 | 85 static int isRootwin; |
15289 | 86 |
15731 | 87 static float winAlpha = 1; |
15289 | 88 static int int_pause = 0; |
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 | 93 { |
28837 | 94 "Mac OS X Core Video", |
29210 | 95 "corevideo", |
15289 | 96 "Nicolas Plourde <nicolas.plourde@gmail.com>", |
97 "" | |
98 }; | |
99 | |
29210 | 100 LIBVO_EXTERN(corevideo) |
15289 | 101 |
102 static void draw_alpha(int x0, int y0, int w, int h, unsigned char *src, unsigned char *srca, int stride) | |
103 { | |
104 switch (image_format) | |
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 | 111 vo_draw_alpha_rgb32(w,h,src,srca,stride,image_data+4*(y0*image_width+x0),4*image_width); |
112 break; | |
113 case IMGFMT_YUY2: | |
114 vo_draw_alpha_yuy2(w,h,src,srca,stride,image_data + (x0 + y0 * image_width) * 2,image_width*2); | |
115 break; | |
116 } | |
117 } | |
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 | 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 | 124 screen_array = [NSScreen screens]; |
31740 | 125 if(screen_id >= (int)[screen_array count]) |
15728 | 126 { |
29210 | 127 mp_msg(MSGT_VO, MSGL_INFO, "[vo_corevideo] Device ID %d does not exist, falling back to main device\n", screen_id); |
28306 | 128 screen_id = -1; |
15728 | 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 | 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 | 169 |
15289 | 170 //misc mplayer setup |
171 image_width = width; | |
172 image_height = height; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
173 switch (image_format) |
15289 | 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 | 180 image_depth = 32; |
181 break; | |
16385 | 182 case IMGFMT_YUY2: |
15289 | 183 image_depth = 16; |
184 break; | |
185 } | |
186 image_bytes = (image_depth + 7) / 8; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
187 |
16385 | 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 | 196 image_datas[0] = image_data; |
197 if (vo_doublebuffering) | |
198 image_datas[1] = malloc(image_width*image_height*image_bytes); | |
199 image_page = 0; | |
25120
9b4ca4dc1294
Fix a memory leak when working in shared_buffer mode.
ulion
parents:
25114
diff
changeset
|
200 |
16385 | 201 vo_fs = flags & VOFLAG_FULLSCREEN; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
202 |
16385 | 203 //config OpenGL View |
204 [mpGLView config]; | |
205 [mpGLView reshape]; | |
206 } | |
207 else | |
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 | 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 | 216 { |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
217 mp_msg(MSGT_VO, MSGL_FATAL, |
29210 | 218 "[vo_corevideo] failed to open shared memory. Error: %s\n", strerror(errno)); |
16385 | 219 return 1; |
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 | 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 | 229 return 1; |
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 | 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 | 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 | 256 } |
15289 | 257 return 0; |
258 } | |
259 | |
260 static void check_events(void) | |
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 | 264 } |
265 | |
266 static void draw_osd(void) | |
267 { | |
268 vo_draw_text(image_width, image_height, draw_alpha); | |
269 } | |
270 | |
271 static void flip_page(void) | |
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 | 279 [mpGLView render]; |
25180 | 280 if (vo_doublebuffering) { |
281 image_page = 1 - image_page; | |
282 image_data = image_datas[image_page]; | |
283 } | |
25114
bed4188998ca
Move the setCurrentTexture call into flip_page(), fix osd flicker problem.
ulion
parents:
25078
diff
changeset
|
284 } |
15289 | 285 } |
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 | 288 { |
289 return 0; | |
290 } | |
291 | |
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 | 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 | 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 | 302 return 0; |
303 } | |
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 | 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 | 308 image_format = format; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
309 |
15289 | 310 switch(format) |
311 { | |
312 case IMGFMT_YUY2: | |
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 | 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 | 327 } |
328 return 0; | |
329 } | |
330 | |
331 static void uninit(void) | |
332 { | |
21551 | 333 SetSystemUIMode( kUIModeNormal, 0); |
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 | 338 if(mpGLView) |
339 { | |
25136 | 340 NSAutoreleasePool *finalPool; |
24742
0bef706332b5
Fix deallocate bug which sometimes causes a crash when reinitializing.
nplourde
parents:
24698
diff
changeset
|
341 mpGLView = nil; |
21551 | 342 [autoreleasepool release]; |
25136 | 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 | 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 | 350 } |
351 | |
29603 | 352 static const opt_t subopts[] = { |
28306 | 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 | 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 | 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 | 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 | 369 "\n-vo corevideo command line help:\n" |
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 | 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 | 383 |
15289 | 384 autoreleasepool = [[NSAutoreleasePool alloc] init]; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
385 |
28204 | 386 if (!buffer_name) |
387 buffer_name = strdup(DEFAULT_BUFFER_NAME); | |
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 | 391 if(!shared_buffer) |
16144 | 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 | 399 if(!mpGLView) |
400 { | |
401 mpGLView = [[MPlayerOpenGLView alloc] initWithFrame:NSMakeRect(0, 0, 100, 100) pixelFormat:[MPlayerOpenGLView defaultPixelFormat]]; | |
402 [mpGLView autorelease]; | |
403 } | |
31758 | 404 // Install an event handler so the Quit menu entry works |
405 // The proper way using NSApp setDelegate: and | |
406 // applicationShouldTerminate: does not work, | |
407 // probably NSApplication never installs its handler. | |
408 [[NSAppleEventManager sharedAppleEventManager] | |
409 setEventHandler:mpGLView | |
410 andSelector:@selector(handleQuitEvent:withReplyEvent:) | |
411 forEventClass:kCoreEventClass | |
412 andEventID:kAEQuitApplication]; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
413 |
16385 | 414 [mpGLView display]; |
415 [mpGLView preinit]; | |
16144 | 416 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
417 |
15289 | 418 return 0; |
419 } | |
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 | 422 { |
423 switch (request) | |
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 | 428 case VOCTRL_QUERY_FORMAT: return query_format(*(uint32_t*)data); |
429 case VOCTRL_ONTOP: vo_ontop = !vo_ontop; if(!shared_buffer){ [mpGLView ontop]; } else { [mplayerosxProto ontop]; } return VO_TRUE; | |
430 case VOCTRL_ROOTWIN: vo_rootwin = !vo_rootwin; [mpGLView rootwin]; return VO_TRUE; | |
431 case VOCTRL_FULLSCREEN: vo_fs = !vo_fs; if(!shared_buffer){ [mpGLView fullscreen: NO]; } else { [mplayerosxProto toggleFullscreen]; } return VO_TRUE; | |
15289 | 432 case VOCTRL_GET_PANSCAN: return VO_TRUE; |
15611 | 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 | 435 } |
436 return VO_NOTIMPL; | |
437 } | |
438 | |
439 ////////////////////////////////////////////////////////////////////////// | |
440 // NSOpenGLView Subclass | |
441 ////////////////////////////////////////////////////////////////////////// | |
15611 | 442 @implementation MPlayerOpenGLView |
24076 | 443 - (void) preinit |
15289 | 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 | 449 //init menu |
450 [self initMenu]; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
451 |
15726 | 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 | 454 styleMask:NSTitledWindowMask|NSTexturedBackgroundWindowMask|NSClosableWindowMask|NSMiniaturizableWindowMask|NSResizableWindowMask |
455 backing:NSBackingStoreBuffered defer:NO]; | |
456 | |
16144 | 457 [window autorelease]; |
15726 | 458 [window setDelegate:mpGLView]; |
459 [window setContentView:mpGLView]; | |
460 [window setInitialFirstResponder:mpGLView]; | |
461 [window setAcceptsMouseMovedEvents:YES]; | |
31742 | 462 [window setTitle:@"MPlayer - The Movie Player"]; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
463 |
15726 | 464 isFullscreen = 0; |
15855 | 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 | 489 } |
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 | 500 - (void) config |
15726 | 501 { |
30001 | 502 NSRect visibleFrame; |
15289 | 503 CVReturn error = kCVReturnSuccess; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
504 |
15728 | 505 //config window |
30001 | 506 [window setContentSize:NSMakeSize(vo_dwidth, vo_dheight)]; |
507 | |
508 // Use visibleFrame to position the window taking the menu bar and dock into account. | |
509 // Also flip vo_dy since the screen origin is in the bottom left on OSX. | |
31743 | 510 update_screen_info(); |
511 visibleFrame = [screen_handle visibleFrame]; | |
30001 | 512 [window setFrameTopLeftPoint:NSMakePoint( |
513 visibleFrame.origin.x + vo_dx, | |
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 | 517 error = CVPixelBufferCreateWithBytes(NULL, image_width, image_height, pixelFormat, image_datas[0], image_width*image_bytes, NULL, NULL, NULL, &frameBuffers[0]); |
15289 | 518 if(error != kCVReturnSuccess) |
29210 | 519 mp_msg(MSGT_VO, MSGL_ERR,"[vo_corevideo] Failed to create Pixel Buffer(%d)\n", error); |
25180 | 520 if (vo_doublebuffering) { |
521 error = CVPixelBufferCreateWithBytes(NULL, image_width, image_height, pixelFormat, image_datas[1], image_width*image_bytes, NULL, NULL, NULL, &frameBuffers[1]); | |
522 if(error != kCVReturnSuccess) | |
29210 | 523 mp_msg(MSGT_VO, MSGL_ERR,"[vo_corevideo] Failed to create Pixel Double Buffer(%d)\n", error); |
25180 | 524 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
525 |
25180 | 526 error = CVOpenGLTextureCacheCreateTextureFromImage(NULL, textureCache, frameBuffers[image_page], 0, &texture); |
15289 | 527 if(error != kCVReturnSuccess) |
29210 | 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 | 530 //show window |
531 [window makeKeyAndOrderFront:mpGLView]; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
532 |
15726 | 533 if(vo_rootwin) |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
534 [mpGLView rootwin]; |
15726 | 535 |
536 if(vo_fs) | |
537 [mpGLView fullscreen: NO]; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
538 |
15726 | 539 if(vo_ontop) |
540 [mpGLView ontop]; | |
15289 | 541 } |
542 | |
543 /* | |
15570 | 544 Init Menu |
545 */ | |
546 - (void)initMenu | |
547 { | |
21395 | 548 NSMenu *menu, *aspectMenu; |
15570 | 549 NSMenuItem *menuItem; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
550 |
15570 | 551 [NSApp setMainMenu:[[NSMenu alloc] init]]; |
552 | |
553 //Create Movie Menu | |
554 menu = [[NSMenu alloc] initWithTitle:@"Movie"]; | |
555 menuItem = [[NSMenuItem alloc] initWithTitle:@"Half Size" action:@selector(menuAction:) keyEquivalent:@"0"]; [menu addItem:menuItem]; | |
556 kHalfScreenCmd = menuItem; | |
557 menuItem = [[NSMenuItem alloc] initWithTitle:@"Normal Size" action:@selector(menuAction:) keyEquivalent:@"1"]; [menu addItem:menuItem]; | |
558 kNormalScreenCmd = menuItem; | |
559 menuItem = [[NSMenuItem alloc] initWithTitle:@"Double Size" action:@selector(menuAction:) keyEquivalent:@"2"]; [menu addItem:menuItem]; | |
560 kDoubleScreenCmd = menuItem; | |
561 menuItem = [[NSMenuItem alloc] initWithTitle:@"Full Size" action:@selector(menuAction:) keyEquivalent:@"f"]; [menu addItem:menuItem]; | |
562 kFullScreenCmd = menuItem; | |
31738 | 563 menuItem = [NSMenuItem separatorItem]; [menu addItem:menuItem]; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
564 |
31742 | 565 aspectMenu = [[NSMenu alloc] initWithTitle:@"Aspect Ratio"]; |
566 menuItem = [[NSMenuItem alloc] initWithTitle:@"Keep" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem]; | |
567 if(vo_keepaspect) [menuItem setState:NSOnState]; | |
568 kKeepAspectCmd = menuItem; | |
569 menuItem = [[NSMenuItem alloc] initWithTitle:@"Pan-Scan" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem]; | |
570 if(vo_panscan) [menuItem setState:NSOnState]; | |
571 kPanScanCmd = menuItem; | |
572 menuItem = [NSMenuItem separatorItem]; [aspectMenu addItem:menuItem]; | |
573 menuItem = [[NSMenuItem alloc] initWithTitle:@"Original" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem]; | |
574 kAspectOrgCmd = menuItem; | |
575 menuItem = [[NSMenuItem alloc] initWithTitle:@"4:3" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem]; | |
576 kAspectFullCmd = menuItem; | |
577 menuItem = [[NSMenuItem alloc] initWithTitle:@"16:9" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem]; | |
578 kAspectWideCmd = menuItem; | |
579 menuItem = [[NSMenuItem alloc] initWithTitle:@"Aspect Ratio" action:nil keyEquivalent:@""]; | |
580 [menuItem setSubmenu:aspectMenu]; | |
581 [menu addItem:menuItem]; | |
582 [aspectMenu release]; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
583 |
15570 | 584 //Add to menubar |
585 menuItem = [[NSMenuItem alloc] initWithTitle:@"Movie" action:nil keyEquivalent:@""]; | |
586 [menuItem setSubmenu:menu]; | |
587 [[NSApp mainMenu] addItem:menuItem]; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
588 |
15570 | 589 //Create Window Menu |
590 menu = [[NSMenu alloc] initWithTitle:@"Window"]; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
591 |
15570 | 592 menuItem = [[NSMenuItem alloc] initWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@"m"]; [menu addItem:menuItem]; |
593 menuItem = [[NSMenuItem alloc] initWithTitle:@"Zoom" action:@selector(performZoom:) keyEquivalent:@""]; [menu addItem:menuItem]; | |
594 | |
595 //Add to menubar | |
596 menuItem = [[NSMenuItem alloc] initWithTitle:@"Window" action:nil keyEquivalent:@""]; | |
597 [menuItem setSubmenu:menu]; | |
598 [[NSApp mainMenu] addItem:menuItem]; | |
599 [NSApp setWindowsMenu:menu]; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
600 |
15570 | 601 [menu release]; |
602 [menuItem release]; | |
603 } | |
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 | 623 /* |
624 Menu Action | |
625 */ | |
626 - (void)menuAction:(id)sender | |
627 { | |
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 | 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 | 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 | 634 if(sender == kFullScreenCmd) |
635 { | |
31736 | 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 | 638 } |
639 | |
640 if(sender == kKeepAspectCmd) | |
641 { | |
31736 | 642 vo_keepaspect = !vo_keepaspect; |
15570 | 643 if(vo_keepaspect) |
644 [kKeepAspectCmd setState:NSOnState]; | |
645 else | |
646 [kKeepAspectCmd setState:NSOffState]; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
647 |
15909 | 648 [self reshape]; |
15570 | 649 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
650 |
15570 | 651 if(sender == kPanScanCmd) |
652 { | |
31736 | 653 vo_panscan = !vo_panscan; |
15570 | 654 if(vo_panscan) |
655 [kPanScanCmd setState:NSOnState]; | |
656 else | |
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 | 660 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
661 |
15570 | 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 | 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 | 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 | 670 } |
671 | |
672 /* | |
15289 | 673 Setup OpenGL |
674 */ | |
675 - (void)prepareOpenGL | |
676 { | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
677 glEnable(GL_BLEND); |
15289 | 678 glDisable(GL_DEPTH_TEST); |
679 glDepthMask(GL_FALSE); | |
680 glDisable(GL_CULL_FACE); | |
681 [self reshape]; | |
682 } | |
683 | |
684 /* | |
685 reshape OpenGL viewport | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
686 */ |
15289 | 687 - (void)reshape |
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 | 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 | 695 glViewport(0, 0, frame.size.width, frame.size.height); |
696 glMatrixMode(GL_PROJECTION); | |
697 glLoadIdentity(); | |
698 glOrtho(0, frame.size.width, frame.size.height, 0, -1.0, 1.0); | |
699 glMatrixMode(GL_MODELVIEW); | |
700 glLoadIdentity(); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
701 |
15729 | 702 //set texture frame |
15289 | 703 if(vo_keepaspect) |
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 | 708 } |
709 else | |
710 { | |
15729 | 711 textureFrame = frame; |
15289 | 712 } |
713 } | |
714 | |
715 /* | |
716 Render frame | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
717 */ |
15289 | 718 - (void) render |
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 | 722 glEnable(CVOpenGLTextureGetTarget(texture)); |
723 glBindTexture(CVOpenGLTextureGetTarget(texture), CVOpenGLTextureGetName(texture)); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
724 |
15289 | 725 glColor3f(1,1,1); |
726 glBegin(GL_QUADS); | |
15729 | 727 glTexCoord2f(upperLeft[0], upperLeft[1]); glVertex2i( textureFrame.origin.x-(vo_panscan_x >> 1), textureFrame.origin.y-(vo_panscan_y >> 1)); |
25424 | 728 glTexCoord2f(lowerLeft[0], lowerLeft[1]); glVertex2i(textureFrame.origin.x-(vo_panscan_x >> 1), NSMaxY(textureFrame)+(vo_panscan_y >> 1)); |
729 glTexCoord2f(lowerRight[0], lowerRight[1]); glVertex2i(NSMaxX(textureFrame)+(vo_panscan_x >> 1), NSMaxY(textureFrame)+(vo_panscan_y >> 1)); | |
730 glTexCoord2f(upperRight[0], upperRight[1]); glVertex2i(NSMaxX(textureFrame)+(vo_panscan_x >> 1), textureFrame.origin.y-(vo_panscan_y >> 1)); | |
15289 | 731 glEnd(); |
15339 | 732 glDisable(CVOpenGLTextureGetTarget(texture)); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
733 |
15339 | 734 //render resize box |
735 if(!isFullscreen) | |
736 { | |
737 NSRect frame = [self frame]; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
738 |
15339 | 739 glBegin(GL_LINES); |
740 glColor4f(0.2, 0.2, 0.2, 0.5); | |
741 glVertex2i(frame.size.width-1, frame.size.height-1); glVertex2i(frame.size.width-1, frame.size.height-1); | |
742 glVertex2i(frame.size.width-1, frame.size.height-5); glVertex2i(frame.size.width-5, frame.size.height-1); | |
743 glVertex2i(frame.size.width-1, frame.size.height-9); glVertex2i(frame.size.width-9, frame.size.height-1); | |
744 | |
745 glColor4f(0.4, 0.4, 0.4, 0.5); | |
746 glVertex2i(frame.size.width-1, frame.size.height-2); glVertex2i(frame.size.width-2, frame.size.height-1); | |
747 glVertex2i(frame.size.width-1, frame.size.height-6); glVertex2i(frame.size.width-6, frame.size.height-1); | |
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 | 750 glColor4f(0.6, 0.6, 0.6, 0.5); |
751 glVertex2i(frame.size.width-1, frame.size.height-3); glVertex2i(frame.size.width-3, frame.size.height-1); | |
752 glVertex2i(frame.size.width-1, frame.size.height-7); glVertex2i(frame.size.width-7, frame.size.height-1); | |
753 glVertex2i(frame.size.width-1, frame.size.height-11); glVertex2i(frame.size.width-11, frame.size.height-1); | |
754 glEnd(); | |
755 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
756 |
15289 | 757 glFlush(); |
758 } | |
759 | |
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 | 763 - (void) setCurrentTexture |
764 { | |
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 | 768 error = CVOpenGLTextureCacheCreateTextureFromImage(NULL, textureCache, frameBuffers[image_page], 0, &texture); |
15289 | 769 if(error != kCVReturnSuccess) |
29210 | 770 mp_msg(MSGT_VO, MSGL_ERR,"[vo_corevideo] Failed to create OpenGL texture(%d)\n", error); |
15289 | 771 |
772 CVOpenGLTextureGetCleanTexCoords(texture, lowerLeft, lowerRight, upperRight, upperLeft); | |
773 } | |
774 | |
775 /* | |
776 redraw win rect | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
777 */ |
15289 | 778 - (void) drawRect: (NSRect *) bounds |
779 { | |
780 [self render]; | |
781 } | |
782 | |
783 /* | |
784 Toggle Fullscreen | |
785 */ | |
786 - (void) fullscreen: (BOOL) animate | |
787 { | |
788 static NSRect old_frame; | |
789 static NSRect old_view_frame; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
790 |
15573 | 791 panscan_calc(); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
792 |
15289 | 793 //go fullscreen |
794 if(vo_fs) | |
795 { | |
15327 | 796 if(!isRootwin) |
797 { | |
15882 | 798 SetSystemUIMode( kUIModeAllHidden, kUIOptionAutoShowMenuBar); |
18057 | 799 CGDisplayHideCursor(kCGDirectMainDisplay); |
15327 | 800 mouseHide = YES; |
801 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
802 |
15289 | 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 | 805 |
15728 | 806 [window setFrame:screen_frame display:YES animate:animate]; //zoom-in window with nice useless sfx |
15289 | 807 old_view_frame = [self bounds]; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
808 |
15289 | 809 //fix origin for multi screen setup |
15728 | 810 screen_frame.origin.x = 0; |
811 screen_frame.origin.y = 0; | |
812 [self setFrame:screen_frame]; | |
15289 | 813 [self setNeedsDisplay:YES]; |
814 [window setHasShadow:NO]; | |
815 isFullscreen = 1; | |
816 } | |
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 | 821 isFullscreen = 0; |
18057 | 822 CGDisplayShowCursor(kCGDirectMainDisplay); |
15289 | 823 mouseHide = NO; |
824 | |
825 //revert window to previous setting | |
826 [self setFrame:old_view_frame]; | |
827 [self setNeedsDisplay:YES]; | |
16081
72c352edce8f
restore window shadow when quitting fullscreen mode
nplourde
parents:
15909
diff
changeset
|
828 [window setHasShadow:YES]; |
15289 | 829 [window setFrame:old_frame display:YES animate:animate];//zoom-out window with nice useless sfx |
830 } | |
831 } | |
832 | |
833 /* | |
834 Toggle ontop | |
835 */ | |
836 - (void) ontop | |
837 { | |
15320 | 838 if(vo_ontop) |
839 { | |
840 [window setLevel:NSScreenSaverWindowLevel]; | |
841 isOntop = YES; | |
842 } | |
843 else | |
844 { | |
845 [window setLevel:NSNormalWindowLevel]; | |
846 isOntop = NO; | |
847 } | |
15289 | 848 } |
849 | |
850 /* | |
851 Toggle panscan | |
852 */ | |
853 - (void) panscan | |
854 { | |
15331 | 855 panscan_calc(); |
15289 | 856 } |
857 | |
858 /* | |
15327 | 859 Toggle rootwin |
860 */ | |
861 - (void) rootwin | |
862 { | |
863 if(vo_rootwin) | |
864 { | |
865 [window setLevel:CGWindowLevelForKey(kCGDesktopWindowLevelKey)]; | |
866 [window orderBack:self]; | |
867 isRootwin = YES; | |
868 } | |
869 else | |
870 { | |
871 [window setLevel:NSNormalWindowLevel]; | |
872 isRootwin = NO; | |
873 } | |
874 } | |
875 | |
876 /* | |
15289 | 877 Check event for new event |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
878 */ |
15289 | 879 - (void) check_events |
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 | 904 if (event == nil) |
905 return; | |
15289 | 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 | 908 // on Leopard, we have trouble to get the play window automatically focused |
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 | 917 } |
918 | |
919 /* | |
15731 | 920 From NSView, respond to key equivalents. |
921 */ | |
922 - (BOOL)performKeyEquivalent:(NSEvent *)theEvent | |
923 { | |
924 switch([theEvent keyCode]) | |
31742 | 925 { |
15731 | 926 case 0x21: [window setAlphaValue: winAlpha-=0.05]; return YES; |
927 case 0x1e: [window setAlphaValue: winAlpha+=0.05]; return YES; | |
31742 | 928 } |
15731 | 929 return NO; |
930 } | |
931 | |
932 /* | |
15289 | 933 Process key event |
934 */ | |
935 - (void) keyDown: (NSEvent *) theEvent | |
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 | 939 mplayer_put_key(key); |
940 } | |
941 | |
942 /* | |
943 Process mouse button event | |
944 */ | |
945 - (void) mouseMoved: (NSEvent *) theEvent | |
946 { | |
15327 | 947 if(isFullscreen && !isRootwin) |
15289 | 948 { |
18057 | 949 CGDisplayShowCursor(kCGDirectMainDisplay); |
15289 | 950 mouseHide = NO; |
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 | 953 NSPoint p =[self convertPoint:[theEvent locationInWindow] fromView:nil]; |
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 | 957 } |
958 } | |
15289 | 959 } |
960 | |
961 - (void) mouseDown: (NSEvent *) theEvent | |
962 { | |
963 [self mouseEvent: theEvent]; | |
964 } | |
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 | 971 - (void) rightMouseDown: (NSEvent *) theEvent |
972 { | |
973 [self mouseEvent: theEvent]; | |
974 } | |
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 | 981 - (void) otherMouseDown: (NSEvent *) theEvent |
982 { | |
983 [self mouseEvent: theEvent]; | |
984 } | |
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 | 991 - (void) scrollWheel: (NSEvent *) theEvent |
992 { | |
993 if([theEvent deltaY] > 0) | |
994 mplayer_put_key(MOUSE_BTN3); | |
995 else | |
996 mplayer_put_key(MOUSE_BTN4); | |
997 } | |
998 | |
999 - (void) mouseEvent: (NSEvent *) theEvent | |
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 | 1003 int buttonNumber = [theEvent buttonNumber]; |
1004 // Fix to mplayer defined button order: left, middle, right | |
1005 if (buttonNumber == 1) | |
1006 buttonNumber = 2; | |
25423 | 1007 else if (buttonNumber == 2) |
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 | 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 | 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 | 1022 } |
1023 } | |
1024 | |
1025 /* | |
1026 NSResponder | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
1027 */ |
15289 | 1028 - (BOOL) acceptsFirstResponder |
1029 { | |
1030 return YES; | |
1031 } | |
1032 | |
1033 - (BOOL) becomeFirstResponder | |
1034 { | |
1035 return YES; | |
1036 } | |
1037 | |
1038 - (BOOL) resignFirstResponder | |
1039 { | |
1040 return YES; | |
1041 } | |
15325 | 1042 |
31756
8e043273075d
Change window-closing handling so it works properly if the
reimar
parents:
31745
diff
changeset
|
1043 - (BOOL)windowShouldClose:(id)sender |
15325 | 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 | 1050 } |
31758 | 1051 |
1052 - (void)handleQuitEvent:(NSAppleEventDescriptor*)e withReplyEvent:(NSAppleEventDescriptor*)r | |
1053 { | |
1054 mplayer_put_key(KEY_CLOSE_WIN); | |
1055 } | |
15325 | 1056 @end |