Mercurial > mplayer.hg
annotate libvo/vo_corevideo.m @ 34697:ac6b38cd0d45
Rename sub window video window.
It was a bad idea to name the video window "sub window" at the time
the GUI was written. The term "sub window" does make sense from the
programmer's point of view, but it doesn't make any sense at all from
the user's point of view, because the sub window simply is the window
where the video will be displayed.
Moreover, since the term "sub" is generally short for "subtitles",
the renaming makes the code much easier to understand.
author | ib |
---|---|
date | Sat, 03 Mar 2012 16:45:15 +0000 |
parents | 1237a0a79119 |
children | 5ed9693f8071 |
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]; | |
34299 | 206 [[mpGLView window] setTitle:[NSString stringWithCString:vo_wintitle ? vo_wintitle : title]]; |
16385 | 207 } |
208 else | |
209 { | |
29567
349de9bdfcce
Make shm_fd a local variable and close it when we need it no longer, thus
reimar
parents:
29566
diff
changeset
|
210 int shm_fd; |
29210 | 211 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
|
212 "named \"%s\"\n",buffer_name); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
213 |
28016
3b8e66828e10
use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents:
28010
diff
changeset
|
214 // create shared memory |
28180
781ef511a767
Add an option to vo_macosx to set a custom buffer_name.
gpoirier
parents:
28130
diff
changeset
|
215 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
|
216 if (shm_fd == -1) |
16385 | 217 { |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
218 mp_msg(MSGT_VO, MSGL_FATAL, |
29210 | 219 "[vo_corevideo] failed to open shared memory. Error: %s\n", strerror(errno)); |
16385 | 220 return 1; |
221 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
222 |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
223 |
28016
3b8e66828e10
use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents:
28010
diff
changeset
|
224 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
|
225 { |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
226 mp_msg(MSGT_VO, MSGL_FATAL, |
29210 | 227 "[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
|
228 close(shm_fd); |
28180
781ef511a767
Add an option to vo_macosx to set a custom buffer_name.
gpoirier
parents:
28130
diff
changeset
|
229 shm_unlink(buffer_name); |
16385 | 230 return 1; |
231 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
232 |
28016
3b8e66828e10
use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents:
28010
diff
changeset
|
233 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
|
234 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
|
235 close(shm_fd); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
236 |
28016
3b8e66828e10
use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents:
28010
diff
changeset
|
237 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
|
238 { |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
239 mp_msg(MSGT_VO, MSGL_FATAL, |
29210 | 240 "[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
|
241 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
|
242 return 1; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
243 } |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
244 |
28837 | 245 //connect to mplayerosx |
28180
781ef511a767
Add an option to vo_macosx to set a custom buffer_name.
gpoirier
parents:
28130
diff
changeset
|
246 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
|
247 if ([mplayerosxProxy conformsToProtocol:@protocol(MPlayerOSXVOProto)]) { |
cf3b6015735d
Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents:
25137
diff
changeset
|
248 [mplayerosxProxy setProtocolForProxy:@protocol(MPlayerOSXVOProto)]; |
cf3b6015735d
Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents:
25137
diff
changeset
|
249 mplayerosxProto = (id <MPlayerOSXVOProto>)mplayerosxProxy; |
29564
4ae3d2d7946e
Use MPlayer's standard aspect handling functions in corevideo
reimar
parents:
29533
diff
changeset
|
250 [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
|
251 } |
cf3b6015735d
Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents:
25137
diff
changeset
|
252 else { |
cf3b6015735d
Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents:
25137
diff
changeset
|
253 [mplayerosxProxy release]; |
cf3b6015735d
Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents:
25137
diff
changeset
|
254 mplayerosxProxy = nil; |
cf3b6015735d
Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents:
25137
diff
changeset
|
255 mplayerosxProto = nil; |
cf3b6015735d
Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents:
25137
diff
changeset
|
256 } |
16385 | 257 } |
15289 | 258 return 0; |
259 } | |
260 | |
261 static void check_events(void) | |
262 { | |
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
|
263 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
|
264 [mpGLView check_events]; |
15289 | 265 } |
266 | |
267 static void draw_osd(void) | |
268 { | |
269 vo_draw_text(image_width, image_height, draw_alpha); | |
270 } | |
271 | |
272 static void flip_page(void) | |
273 { | |
29271
82b6fbc72099
When used with shared_buffer, autorelease in each flip_page so objects don't accumulate until exit.
adrian
parents:
29263
diff
changeset
|
274 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
|
275 NSAutoreleasePool *pool = [NSAutoreleasePool new]; |
25157
cf3b6015735d
Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents:
25137
diff
changeset
|
276 [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
|
277 [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
|
278 } else { |
25114
bed4188998ca
Move the setCurrentTexture call into flip_page(), fix osd flicker problem.
ulion
parents:
25078
diff
changeset
|
279 [mpGLView setCurrentTexture]; |
16385 | 280 [mpGLView render]; |
25180 | 281 if (vo_doublebuffering) { |
282 image_page = 1 - image_page; | |
283 image_data = image_datas[image_page]; | |
284 } | |
25114
bed4188998ca
Move the setCurrentTexture call into flip_page(), fix osd flicker problem.
ulion
parents:
25078
diff
changeset
|
285 } |
15289 | 286 } |
287 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
16145
diff
changeset
|
288 static int draw_slice(uint8_t *src[], int stride[], int w,int h,int x,int y) |
15289 | 289 { |
290 return 0; | |
291 } | |
292 | |
293 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
16145
diff
changeset
|
294 static int draw_frame(uint8_t *src[]) |
15289 | 295 { |
30972
886527159cae
Implement VOCTRL_DRAW_IMAGE instead of the deprecated draw_frame, avoiding
reimar
parents:
30922
diff
changeset
|
296 return 0; |
886527159cae
Implement VOCTRL_DRAW_IMAGE instead of the deprecated draw_frame, avoiding
reimar
parents:
30922
diff
changeset
|
297 } |
15289 | 298 |
30972
886527159cae
Implement VOCTRL_DRAW_IMAGE instead of the deprecated draw_frame, avoiding
reimar
parents:
30922
diff
changeset
|
299 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
|
300 { |
886527159cae
Implement VOCTRL_DRAW_IMAGE instead of the deprecated draw_frame, avoiding
reimar
parents:
30922
diff
changeset
|
301 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
|
302 |
15289 | 303 return 0; |
304 } | |
305 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
16145
diff
changeset
|
306 static int query_format(uint32_t format) |
15289 | 307 { |
30974
bd964ca1f6fa
Fix RGB support for corevideo: corevideo can only support
reimar
parents:
30973
diff
changeset
|
308 const int supportflags = VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_OSD | VFCAP_HWSCALE_UP | VFCAP_HWSCALE_DOWN; |
15289 | 309 image_format = format; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
310 |
15289 | 311 switch(format) |
312 { | |
313 case IMGFMT_YUY2: | |
314 pixelFormat = kYUVSPixelFormat; | |
30974
bd964ca1f6fa
Fix RGB support for corevideo: corevideo can only support
reimar
parents:
30973
diff
changeset
|
315 return supportflags; |
bd964ca1f6fa
Fix RGB support for corevideo: corevideo can only support
reimar
parents:
30973
diff
changeset
|
316 |
bd964ca1f6fa
Fix RGB support for corevideo: corevideo can only support
reimar
parents:
30973
diff
changeset
|
317 case IMGFMT_RGB24: |
bd964ca1f6fa
Fix RGB support for corevideo: corevideo can only support
reimar
parents:
30973
diff
changeset
|
318 pixelFormat = k24RGBPixelFormat; |
bd964ca1f6fa
Fix RGB support for corevideo: corevideo can only support
reimar
parents:
30973
diff
changeset
|
319 return supportflags; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
320 |
30974
bd964ca1f6fa
Fix RGB support for corevideo: corevideo can only support
reimar
parents:
30973
diff
changeset
|
321 case IMGFMT_ARGB: |
15289 | 322 pixelFormat = k32ARGBPixelFormat; |
30974
bd964ca1f6fa
Fix RGB support for corevideo: corevideo can only support
reimar
parents:
30973
diff
changeset
|
323 return supportflags; |
bd964ca1f6fa
Fix RGB support for corevideo: corevideo can only support
reimar
parents:
30973
diff
changeset
|
324 |
bd964ca1f6fa
Fix RGB support for corevideo: corevideo can only support
reimar
parents:
30973
diff
changeset
|
325 case IMGFMT_BGRA: |
bd964ca1f6fa
Fix RGB support for corevideo: corevideo can only support
reimar
parents:
30973
diff
changeset
|
326 pixelFormat = k32BGRAPixelFormat; |
bd964ca1f6fa
Fix RGB support for corevideo: corevideo can only support
reimar
parents:
30973
diff
changeset
|
327 return supportflags; |
15289 | 328 } |
329 return 0; | |
330 } | |
331 | |
332 static void uninit(void) | |
333 { | |
21551 | 334 SetSystemUIMode( kUIModeNormal, 0); |
335 CGDisplayShowCursor(kCGDirectMainDisplay); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
336 |
29573
2b14be337eaf
Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents:
29567
diff
changeset
|
337 free_file_specific(); |
2b14be337eaf
Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents:
29567
diff
changeset
|
338 |
21551 | 339 if(mpGLView) |
340 { | |
25136 | 341 NSAutoreleasePool *finalPool; |
24742
0bef706332b5
Fix deallocate bug which sometimes causes a crash when reinitializing.
nplourde
parents:
24698
diff
changeset
|
342 mpGLView = nil; |
21551 | 343 [autoreleasepool release]; |
25136 | 344 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
|
345 [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
|
346 [finalPool release]; |
21551 | 347 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
348 |
32537
8fa2f43cb760
Remove most of the NULL pointer check before free all over the code
cboesch
parents:
32471
diff
changeset
|
349 free(buffer_name); |
28180
781ef511a767
Add an option to vo_macosx to set a custom buffer_name.
gpoirier
parents:
28130
diff
changeset
|
350 buffer_name = NULL; |
15289 | 351 } |
352 | |
29603 | 353 static const opt_t subopts[] = { |
28306 | 354 {"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
|
355 {"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
|
356 {"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
|
357 {NULL} |
b5898cb411da
Replace vo_macosx's custom options parsing with a subopt_parse()-based one
gpoirier
parents:
28077
diff
changeset
|
358 }; |
b5898cb411da
Replace vo_macosx's custom options parsing with a subopt_parse()-based one
gpoirier
parents:
28077
diff
changeset
|
359 |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
16145
diff
changeset
|
360 static int preinit(const char *arg) |
15289 | 361 { |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
362 |
28130
b5898cb411da
Replace vo_macosx's custom options parsing with a subopt_parse()-based one
gpoirier
parents:
28077
diff
changeset
|
363 // set defaults |
28306 | 364 screen_id = -1; |
28130
b5898cb411da
Replace vo_macosx's custom options parsing with a subopt_parse()-based one
gpoirier
parents:
28077
diff
changeset
|
365 shared_buffer = false; |
28204 | 366 buffer_name = NULL; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
367 |
28130
b5898cb411da
Replace vo_macosx's custom options parsing with a subopt_parse()-based one
gpoirier
parents:
28077
diff
changeset
|
368 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
|
369 mp_msg(MSGT_VO, MSGL_FATAL, |
29210 | 370 "\n-vo corevideo command line help:\n" |
371 "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
|
372 "\nOptions:\n" |
b5898cb411da
Replace vo_macosx's custom options parsing with a subopt_parse()-based one
gpoirier
parents:
28077
diff
changeset
|
373 " device_id=<0-...>\n" |
28837 | 374 " 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
|
375 " shared_buffer\n" |
b5898cb411da
Replace vo_macosx's custom options parsing with a subopt_parse()-based one
gpoirier
parents:
28077
diff
changeset
|
376 " 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
|
377 " buffer_name=<name>\n" |
781ef511a767
Add an option to vo_macosx to set a custom buffer_name.
gpoirier
parents:
28130
diff
changeset
|
378 " 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
|
379 " 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
|
380 " 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
|
381 "\n" ); |
b5898cb411da
Replace vo_macosx's custom options parsing with a subopt_parse()-based one
gpoirier
parents:
28077
diff
changeset
|
382 return -1; |
b5898cb411da
Replace vo_macosx's custom options parsing with a subopt_parse()-based one
gpoirier
parents:
28077
diff
changeset
|
383 } |
15728 | 384 |
15289 | 385 autoreleasepool = [[NSAutoreleasePool alloc] init]; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
386 |
28204 | 387 if (!buffer_name) |
388 buffer_name = strdup(DEFAULT_BUFFER_NAME); | |
389 else | |
28180
781ef511a767
Add an option to vo_macosx to set a custom buffer_name.
gpoirier
parents:
28130
diff
changeset
|
390 shared_buffer = true; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
391 |
16385 | 392 if(!shared_buffer) |
16144 | 393 { |
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
|
394 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
|
395 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
|
396 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
|
397 |
30922
7e3b047c51e7
Refactor OS X foreground process setting into a separate function.
diego
parents:
30001
diff
changeset
|
398 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
|
399 |
16385 | 400 if(!mpGLView) |
401 { | |
402 mpGLView = [[MPlayerOpenGLView alloc] initWithFrame:NSMakeRect(0, 0, 100, 100) pixelFormat:[MPlayerOpenGLView defaultPixelFormat]]; | |
403 [mpGLView autorelease]; | |
404 } | |
31758 | 405 // Install an event handler so the Quit menu entry works |
406 // The proper way using NSApp setDelegate: and | |
407 // applicationShouldTerminate: does not work, | |
408 // probably NSApplication never installs its handler. | |
409 [[NSAppleEventManager sharedAppleEventManager] | |
410 setEventHandler:mpGLView | |
411 andSelector:@selector(handleQuitEvent:withReplyEvent:) | |
412 forEventClass:kCoreEventClass | |
413 andEventID:kAEQuitApplication]; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
414 |
16385 | 415 [mpGLView display]; |
416 [mpGLView preinit]; | |
16144 | 417 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
418 |
15289 | 419 return 0; |
420 } | |
421 | |
33330
ad12e6080ed1
Fix compilation for OSX due to r33392 - control() vaarg removal.
iive
parents:
32537
diff
changeset
|
422 static int control(uint32_t request, void *data) |
15289 | 423 { |
424 switch (request) | |
425 { | |
30972
886527159cae
Implement VOCTRL_DRAW_IMAGE instead of the deprecated draw_frame, avoiding
reimar
parents:
30922
diff
changeset
|
426 case VOCTRL_DRAW_IMAGE: return draw_image(data); |
26755
46f0b4d34fa1
cosmetics: Remove useless parentheses from from return statements.
diego
parents:
25468
diff
changeset
|
427 case VOCTRL_PAUSE: return int_pause = 1; |
46f0b4d34fa1
cosmetics: Remove useless parentheses from from return statements.
diego
parents:
25468
diff
changeset
|
428 case VOCTRL_RESUME: return int_pause = 0; |
31737 | 429 case VOCTRL_QUERY_FORMAT: return query_format(*(uint32_t*)data); |
430 case VOCTRL_ONTOP: vo_ontop = !vo_ontop; if(!shared_buffer){ [mpGLView ontop]; } else { [mplayerosxProto ontop]; } return VO_TRUE; | |
431 case VOCTRL_ROOTWIN: vo_rootwin = !vo_rootwin; [mpGLView rootwin]; return VO_TRUE; | |
432 case VOCTRL_FULLSCREEN: vo_fs = !vo_fs; if(!shared_buffer){ [mpGLView fullscreen: NO]; } else { [mplayerosxProto toggleFullscreen]; } return VO_TRUE; | |
15289 | 433 case VOCTRL_GET_PANSCAN: return VO_TRUE; |
15611 | 434 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
|
435 case VOCTRL_UPDATE_SCREENINFO: update_screen_info(); return VO_TRUE; |
15289 | 436 } |
437 return VO_NOTIMPL; | |
438 } | |
439 | |
440 ////////////////////////////////////////////////////////////////////////// | |
441 // NSOpenGLView Subclass | |
442 ////////////////////////////////////////////////////////////////////////// | |
15611 | 443 @implementation MPlayerOpenGLView |
24076 | 444 - (void) preinit |
15289 | 445 { |
29575
0e182921966b
Make glContext a local variable, it is not needed outside the function
reimar
parents:
29574
diff
changeset
|
446 NSOpenGLContext *glContext; |
29566
b128ce47771d
Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents:
29564
diff
changeset
|
447 GLint swapInterval = 1; |
b128ce47771d
Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents:
29564
diff
changeset
|
448 CVReturn error; |
b128ce47771d
Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents:
29564
diff
changeset
|
449 |
15726 | 450 //init menu |
451 [self initMenu]; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
452 |
15726 | 453 //create window |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
454 window = [[NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, 100, 100) |
15726 | 455 styleMask:NSTitledWindowMask|NSTexturedBackgroundWindowMask|NSClosableWindowMask|NSMiniaturizableWindowMask|NSResizableWindowMask |
456 backing:NSBackingStoreBuffered defer:NO]; | |
457 | |
16144 | 458 [window autorelease]; |
15726 | 459 [window setDelegate:mpGLView]; |
460 [window setContentView:mpGLView]; | |
461 [window setInitialFirstResponder:mpGLView]; | |
462 [window setAcceptsMouseMovedEvents:YES]; | |
31742 | 463 [window setTitle:@"MPlayer - The Movie Player"]; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
464 |
15726 | 465 isFullscreen = 0; |
15855 | 466 winSizeMult = 1; |
29566
b128ce47771d
Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents:
29564
diff
changeset
|
467 |
b128ce47771d
Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents:
29564
diff
changeset
|
468 //create OpenGL Context |
b128ce47771d
Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents:
29564
diff
changeset
|
469 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
|
470 |
b128ce47771d
Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents:
29564
diff
changeset
|
471 [self setOpenGLContext:glContext]; |
b128ce47771d
Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents:
29564
diff
changeset
|
472 [glContext setValues:&swapInterval forParameter:NSOpenGLCPSwapInterval]; |
b128ce47771d
Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents:
29564
diff
changeset
|
473 [glContext setView:self]; |
b128ce47771d
Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents:
29564
diff
changeset
|
474 [glContext makeCurrentContext]; |
29575
0e182921966b
Make glContext a local variable, it is not needed outside the function
reimar
parents:
29574
diff
changeset
|
475 [glContext release]; |
29566
b128ce47771d
Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents:
29564
diff
changeset
|
476 |
b128ce47771d
Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents:
29564
diff
changeset
|
477 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
|
478 if(error != kCVReturnSuccess) |
b128ce47771d
Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents:
29564
diff
changeset
|
479 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
|
480 } |
b128ce47771d
Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents:
29564
diff
changeset
|
481 |
b128ce47771d
Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents:
29564
diff
changeset
|
482 - (void) releaseVideoSpecific |
b128ce47771d
Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents:
29564
diff
changeset
|
483 { |
b128ce47771d
Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents:
29564
diff
changeset
|
484 CVPixelBufferRelease(frameBuffers[0]); |
b128ce47771d
Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents:
29564
diff
changeset
|
485 frameBuffers[0] = NULL; |
b128ce47771d
Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents:
29564
diff
changeset
|
486 CVPixelBufferRelease(frameBuffers[1]); |
b128ce47771d
Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents:
29564
diff
changeset
|
487 frameBuffers[1] = NULL; |
b128ce47771d
Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents:
29564
diff
changeset
|
488 CVOpenGLTextureRelease(texture); |
b128ce47771d
Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents:
29564
diff
changeset
|
489 texture = NULL; |
15726 | 490 } |
491 | |
29574
0aa36133f638
Add a dealloc function to corevideo to reduce the memleaks from
reimar
parents:
29573
diff
changeset
|
492 - (void) dealloc |
0aa36133f638
Add a dealloc function to corevideo to reduce the memleaks from
reimar
parents:
29573
diff
changeset
|
493 { |
0aa36133f638
Add a dealloc function to corevideo to reduce the memleaks from
reimar
parents:
29573
diff
changeset
|
494 [self releaseVideoSpecific]; |
0aa36133f638
Add a dealloc function to corevideo to reduce the memleaks from
reimar
parents:
29573
diff
changeset
|
495 CVOpenGLTextureCacheRelease(textureCache); |
0aa36133f638
Add a dealloc function to corevideo to reduce the memleaks from
reimar
parents:
29573
diff
changeset
|
496 textureCache = NULL; |
0aa36133f638
Add a dealloc function to corevideo to reduce the memleaks from
reimar
parents:
29573
diff
changeset
|
497 [self setOpenGLContext:nil]; |
0aa36133f638
Add a dealloc function to corevideo to reduce the memleaks from
reimar
parents:
29573
diff
changeset
|
498 [super dealloc]; |
0aa36133f638
Add a dealloc function to corevideo to reduce the memleaks from
reimar
parents:
29573
diff
changeset
|
499 } |
0aa36133f638
Add a dealloc function to corevideo to reduce the memleaks from
reimar
parents:
29573
diff
changeset
|
500 |
24076 | 501 - (void) config |
15726 | 502 { |
30001 | 503 NSRect visibleFrame; |
15289 | 504 CVReturn error = kCVReturnSuccess; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
505 |
15728 | 506 //config window |
30001 | 507 [window setContentSize:NSMakeSize(vo_dwidth, vo_dheight)]; |
508 | |
509 // Use visibleFrame to position the window taking the menu bar and dock into account. | |
510 // Also flip vo_dy since the screen origin is in the bottom left on OSX. | |
31743 | 511 update_screen_info(); |
512 visibleFrame = [screen_handle visibleFrame]; | |
30001 | 513 [window setFrameTopLeftPoint:NSMakePoint( |
514 visibleFrame.origin.x + vo_dx, | |
515 visibleFrame.origin.y + visibleFrame.size.height - vo_dy)]; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
516 |
29566
b128ce47771d
Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents:
29564
diff
changeset
|
517 [self releaseVideoSpecific]; |
25180 | 518 error = CVPixelBufferCreateWithBytes(NULL, image_width, image_height, pixelFormat, image_datas[0], image_width*image_bytes, NULL, NULL, NULL, &frameBuffers[0]); |
15289 | 519 if(error != kCVReturnSuccess) |
29210 | 520 mp_msg(MSGT_VO, MSGL_ERR,"[vo_corevideo] Failed to create Pixel Buffer(%d)\n", error); |
25180 | 521 if (vo_doublebuffering) { |
522 error = CVPixelBufferCreateWithBytes(NULL, image_width, image_height, pixelFormat, image_datas[1], image_width*image_bytes, NULL, NULL, NULL, &frameBuffers[1]); | |
523 if(error != kCVReturnSuccess) | |
29210 | 524 mp_msg(MSGT_VO, MSGL_ERR,"[vo_corevideo] Failed to create Pixel Double Buffer(%d)\n", error); |
25180 | 525 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
526 |
25180 | 527 error = CVOpenGLTextureCacheCreateTextureFromImage(NULL, textureCache, frameBuffers[image_page], 0, &texture); |
15289 | 528 if(error != kCVReturnSuccess) |
29210 | 529 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
|
530 |
15728 | 531 //show window |
532 [window makeKeyAndOrderFront:mpGLView]; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
533 |
15726 | 534 if(vo_rootwin) |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
535 [mpGLView rootwin]; |
15726 | 536 |
537 if(vo_fs) | |
538 [mpGLView fullscreen: NO]; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
539 |
15726 | 540 if(vo_ontop) |
541 [mpGLView ontop]; | |
15289 | 542 } |
543 | |
544 /* | |
15570 | 545 Init Menu |
546 */ | |
547 - (void)initMenu | |
548 { | |
21395 | 549 NSMenu *menu, *aspectMenu; |
15570 | 550 NSMenuItem *menuItem; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
551 |
15570 | 552 [NSApp setMainMenu:[[NSMenu alloc] init]]; |
553 | |
554 //Create Movie Menu | |
555 menu = [[NSMenu alloc] initWithTitle:@"Movie"]; | |
556 menuItem = [[NSMenuItem alloc] initWithTitle:@"Half Size" action:@selector(menuAction:) keyEquivalent:@"0"]; [menu addItem:menuItem]; | |
557 kHalfScreenCmd = menuItem; | |
558 menuItem = [[NSMenuItem alloc] initWithTitle:@"Normal Size" action:@selector(menuAction:) keyEquivalent:@"1"]; [menu addItem:menuItem]; | |
559 kNormalScreenCmd = menuItem; | |
560 menuItem = [[NSMenuItem alloc] initWithTitle:@"Double Size" action:@selector(menuAction:) keyEquivalent:@"2"]; [menu addItem:menuItem]; | |
561 kDoubleScreenCmd = menuItem; | |
562 menuItem = [[NSMenuItem alloc] initWithTitle:@"Full Size" action:@selector(menuAction:) keyEquivalent:@"f"]; [menu addItem:menuItem]; | |
563 kFullScreenCmd = menuItem; | |
31738 | 564 menuItem = [NSMenuItem separatorItem]; [menu addItem:menuItem]; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
565 |
31742 | 566 aspectMenu = [[NSMenu alloc] initWithTitle:@"Aspect Ratio"]; |
567 menuItem = [[NSMenuItem alloc] initWithTitle:@"Keep" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem]; | |
568 if(vo_keepaspect) [menuItem setState:NSOnState]; | |
569 kKeepAspectCmd = menuItem; | |
570 menuItem = [[NSMenuItem alloc] initWithTitle:@"Pan-Scan" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem]; | |
571 if(vo_panscan) [menuItem setState:NSOnState]; | |
572 kPanScanCmd = menuItem; | |
573 menuItem = [NSMenuItem separatorItem]; [aspectMenu addItem:menuItem]; | |
574 menuItem = [[NSMenuItem alloc] initWithTitle:@"Original" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem]; | |
575 kAspectOrgCmd = menuItem; | |
576 menuItem = [[NSMenuItem alloc] initWithTitle:@"4:3" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem]; | |
577 kAspectFullCmd = menuItem; | |
578 menuItem = [[NSMenuItem alloc] initWithTitle:@"16:9" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem]; | |
579 kAspectWideCmd = menuItem; | |
580 menuItem = [[NSMenuItem alloc] initWithTitle:@"Aspect Ratio" action:nil keyEquivalent:@""]; | |
581 [menuItem setSubmenu:aspectMenu]; | |
582 [menu addItem:menuItem]; | |
583 [aspectMenu release]; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
584 |
15570 | 585 //Add to menubar |
586 menuItem = [[NSMenuItem alloc] initWithTitle:@"Movie" action:nil keyEquivalent:@""]; | |
587 [menuItem setSubmenu:menu]; | |
588 [[NSApp mainMenu] addItem:menuItem]; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
589 |
15570 | 590 //Create Window Menu |
591 menu = [[NSMenu alloc] initWithTitle:@"Window"]; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
592 |
15570 | 593 menuItem = [[NSMenuItem alloc] initWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@"m"]; [menu addItem:menuItem]; |
594 menuItem = [[NSMenuItem alloc] initWithTitle:@"Zoom" action:@selector(performZoom:) keyEquivalent:@""]; [menu addItem:menuItem]; | |
595 | |
596 //Add to menubar | |
597 menuItem = [[NSMenuItem alloc] initWithTitle:@"Window" action:nil keyEquivalent:@""]; | |
598 [menuItem setSubmenu:menu]; | |
599 [[NSApp mainMenu] addItem:menuItem]; | |
600 [NSApp setWindowsMenu:menu]; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
601 |
15570 | 602 [menu release]; |
603 [menuItem release]; | |
604 } | |
605 | |
29604
cd056d688db8
Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents:
29603
diff
changeset
|
606 - (void)set_winSizeMult:(float)mult |
cd056d688db8
Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents:
29603
diff
changeset
|
607 { |
cd056d688db8
Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents:
29603
diff
changeset
|
608 NSRect frame; |
cd056d688db8
Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents:
29603
diff
changeset
|
609 int d_width, d_height; |
cd056d688db8
Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents:
29603
diff
changeset
|
610 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
|
611 |
cd056d688db8
Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents:
29603
diff
changeset
|
612 if (isFullscreen) { |
cd056d688db8
Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents:
29603
diff
changeset
|
613 vo_fs = !vo_fs; |
cd056d688db8
Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents:
29603
diff
changeset
|
614 [self fullscreen:NO]; |
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 |
cd056d688db8
Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents:
29603
diff
changeset
|
617 winSizeMult = mult; |
cd056d688db8
Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents:
29603
diff
changeset
|
618 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
|
619 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
|
620 [window setContentSize: frame.size]; |
cd056d688db8
Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents:
29603
diff
changeset
|
621 [self reshape]; |
cd056d688db8
Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents:
29603
diff
changeset
|
622 } |
cd056d688db8
Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents:
29603
diff
changeset
|
623 |
15570 | 624 /* |
625 Menu Action | |
626 */ | |
627 - (void)menuAction:(id)sender | |
628 { | |
629 if(sender == kHalfScreenCmd) | |
29604
cd056d688db8
Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents:
29603
diff
changeset
|
630 [self set_winSizeMult: 0.5]; |
15570 | 631 if(sender == kNormalScreenCmd) |
29604
cd056d688db8
Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents:
29603
diff
changeset
|
632 [self set_winSizeMult: 1]; |
15570 | 633 if(sender == kDoubleScreenCmd) |
29604
cd056d688db8
Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents:
29603
diff
changeset
|
634 [self set_winSizeMult: 2]; |
15570 | 635 if(sender == kFullScreenCmd) |
636 { | |
31736 | 637 vo_fs = !vo_fs; |
21546
253a1e98bfe3
vo_macosx.m disable window animation when going to fullscreen
nplourde
parents:
21395
diff
changeset
|
638 [self fullscreen:NO]; |
15570 | 639 } |
640 | |
641 if(sender == kKeepAspectCmd) | |
642 { | |
31736 | 643 vo_keepaspect = !vo_keepaspect; |
15570 | 644 if(vo_keepaspect) |
645 [kKeepAspectCmd setState:NSOnState]; | |
646 else | |
647 [kKeepAspectCmd setState:NSOffState]; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
648 |
15909 | 649 [self reshape]; |
15570 | 650 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
651 |
15570 | 652 if(sender == kPanScanCmd) |
653 { | |
31736 | 654 vo_panscan = !vo_panscan; |
15570 | 655 if(vo_panscan) |
656 [kPanScanCmd setState:NSOnState]; | |
657 else | |
658 [kPanScanCmd setState:NSOffState]; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
659 |
15902
16534910f0fb
fix various window resizing bug with menu option
nplourde
parents:
15882
diff
changeset
|
660 [self panscan]; |
15570 | 661 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
662 |
15570 | 663 if(sender == kAspectOrgCmd) |
29564
4ae3d2d7946e
Use MPlayer's standard aspect handling functions in corevideo
reimar
parents:
29533
diff
changeset
|
664 change_movie_aspect(-1); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
665 |
15570 | 666 if(sender == kAspectFullCmd) |
29564
4ae3d2d7946e
Use MPlayer's standard aspect handling functions in corevideo
reimar
parents:
29533
diff
changeset
|
667 change_movie_aspect(4.0f/3.0f); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
668 |
15570 | 669 if(sender == kAspectWideCmd) |
29564
4ae3d2d7946e
Use MPlayer's standard aspect handling functions in corevideo
reimar
parents:
29533
diff
changeset
|
670 change_movie_aspect(16.0f/9.0f); |
15570 | 671 } |
672 | |
673 /* | |
15289 | 674 Setup OpenGL |
675 */ | |
676 - (void)prepareOpenGL | |
677 { | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
678 glEnable(GL_BLEND); |
15289 | 679 glDisable(GL_DEPTH_TEST); |
680 glDepthMask(GL_FALSE); | |
681 glDisable(GL_CULL_FACE); | |
682 [self reshape]; | |
683 } | |
684 | |
685 /* | |
686 reshape OpenGL viewport | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
687 */ |
15289 | 688 - (void)reshape |
689 { | |
31739
923b5da53f65
Declare variables with proper types to avoid dangerous pointer casts.
reimar
parents:
31738
diff
changeset
|
690 int d_width, d_height; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
691 |
15289 | 692 NSRect frame = [self frame]; |
29564
4ae3d2d7946e
Use MPlayer's standard aspect handling functions in corevideo
reimar
parents:
29533
diff
changeset
|
693 vo_dwidth = frame.size.width; |
4ae3d2d7946e
Use MPlayer's standard aspect handling functions in corevideo
reimar
parents:
29533
diff
changeset
|
694 vo_dheight = frame.size.height; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
695 |
15289 | 696 glViewport(0, 0, frame.size.width, frame.size.height); |
697 glMatrixMode(GL_PROJECTION); | |
698 glLoadIdentity(); | |
699 glOrtho(0, frame.size.width, frame.size.height, 0, -1.0, 1.0); | |
700 glMatrixMode(GL_MODELVIEW); | |
701 glLoadIdentity(); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
702 |
15729 | 703 //set texture frame |
15289 | 704 if(vo_keepaspect) |
705 { | |
31739
923b5da53f65
Declare variables with proper types to avoid dangerous pointer casts.
reimar
parents:
31738
diff
changeset
|
706 aspect(&d_width, &d_height, A_WINZOOM); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
707 |
29564
4ae3d2d7946e
Use MPlayer's standard aspect handling functions in corevideo
reimar
parents:
29533
diff
changeset
|
708 textureFrame = NSMakeRect((vo_dwidth - d_width) / 2, (vo_dheight - d_height) / 2, d_width, d_height); |
15289 | 709 } |
710 else | |
711 { | |
15729 | 712 textureFrame = frame; |
15289 | 713 } |
714 } | |
715 | |
716 /* | |
717 Render frame | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
718 */ |
15289 | 719 - (void) render |
720 { | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
721 glClear(GL_COLOR_BUFFER_BIT); |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
722 |
15289 | 723 glEnable(CVOpenGLTextureGetTarget(texture)); |
724 glBindTexture(CVOpenGLTextureGetTarget(texture), CVOpenGLTextureGetName(texture)); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
725 |
15289 | 726 glColor3f(1,1,1); |
727 glBegin(GL_QUADS); | |
15729 | 728 glTexCoord2f(upperLeft[0], upperLeft[1]); glVertex2i( textureFrame.origin.x-(vo_panscan_x >> 1), textureFrame.origin.y-(vo_panscan_y >> 1)); |
25424 | 729 glTexCoord2f(lowerLeft[0], lowerLeft[1]); glVertex2i(textureFrame.origin.x-(vo_panscan_x >> 1), NSMaxY(textureFrame)+(vo_panscan_y >> 1)); |
730 glTexCoord2f(lowerRight[0], lowerRight[1]); glVertex2i(NSMaxX(textureFrame)+(vo_panscan_x >> 1), NSMaxY(textureFrame)+(vo_panscan_y >> 1)); | |
731 glTexCoord2f(upperRight[0], upperRight[1]); glVertex2i(NSMaxX(textureFrame)+(vo_panscan_x >> 1), textureFrame.origin.y-(vo_panscan_y >> 1)); | |
15289 | 732 glEnd(); |
15339 | 733 glDisable(CVOpenGLTextureGetTarget(texture)); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
734 |
15339 | 735 //render resize box |
736 if(!isFullscreen) | |
737 { | |
738 NSRect frame = [self frame]; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
739 |
15339 | 740 glBegin(GL_LINES); |
741 glColor4f(0.2, 0.2, 0.2, 0.5); | |
742 glVertex2i(frame.size.width-1, frame.size.height-1); glVertex2i(frame.size.width-1, frame.size.height-1); | |
743 glVertex2i(frame.size.width-1, frame.size.height-5); glVertex2i(frame.size.width-5, frame.size.height-1); | |
744 glVertex2i(frame.size.width-1, frame.size.height-9); glVertex2i(frame.size.width-9, frame.size.height-1); | |
745 | |
746 glColor4f(0.4, 0.4, 0.4, 0.5); | |
747 glVertex2i(frame.size.width-1, frame.size.height-2); glVertex2i(frame.size.width-2, frame.size.height-1); | |
748 glVertex2i(frame.size.width-1, frame.size.height-6); glVertex2i(frame.size.width-6, frame.size.height-1); | |
749 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
|
750 |
15339 | 751 glColor4f(0.6, 0.6, 0.6, 0.5); |
752 glVertex2i(frame.size.width-1, frame.size.height-3); glVertex2i(frame.size.width-3, frame.size.height-1); | |
753 glVertex2i(frame.size.width-1, frame.size.height-7); glVertex2i(frame.size.width-7, frame.size.height-1); | |
754 glVertex2i(frame.size.width-1, frame.size.height-11); glVertex2i(frame.size.width-11, frame.size.height-1); | |
755 glEnd(); | |
756 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
757 |
15289 | 758 glFlush(); |
759 } | |
760 | |
761 /* | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
762 Create OpenGL texture from current frame & set texco |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
763 */ |
15289 | 764 - (void) setCurrentTexture |
765 { | |
766 CVReturn error = kCVReturnSuccess; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
767 |
29137
0f6fc0df2c23
fix a memory leak leading to ~80 bytes being leaked at each call to flip_page.
gpoirier
parents:
28837
diff
changeset
|
768 CVOpenGLTextureRelease(texture); |
25180 | 769 error = CVOpenGLTextureCacheCreateTextureFromImage(NULL, textureCache, frameBuffers[image_page], 0, &texture); |
15289 | 770 if(error != kCVReturnSuccess) |
29210 | 771 mp_msg(MSGT_VO, MSGL_ERR,"[vo_corevideo] Failed to create OpenGL texture(%d)\n", error); |
15289 | 772 |
773 CVOpenGLTextureGetCleanTexCoords(texture, lowerLeft, lowerRight, upperRight, upperLeft); | |
774 } | |
775 | |
776 /* | |
777 redraw win rect | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
778 */ |
15289 | 779 - (void) drawRect: (NSRect *) bounds |
780 { | |
781 [self render]; | |
782 } | |
783 | |
784 /* | |
785 Toggle Fullscreen | |
786 */ | |
787 - (void) fullscreen: (BOOL) animate | |
788 { | |
789 static NSRect old_frame; | |
790 static NSRect old_view_frame; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
791 |
15573 | 792 panscan_calc(); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
793 |
15289 | 794 //go fullscreen |
795 if(vo_fs) | |
796 { | |
15327 | 797 if(!isRootwin) |
798 { | |
15882 | 799 SetSystemUIMode( kUIModeAllHidden, kUIOptionAutoShowMenuBar); |
18057 | 800 CGDisplayHideCursor(kCGDirectMainDisplay); |
15327 | 801 mouseHide = YES; |
802 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
803 |
15289 | 804 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
|
805 update_screen_info(); |
25413 | 806 |
15728 | 807 [window setFrame:screen_frame display:YES animate:animate]; //zoom-in window with nice useless sfx |
15289 | 808 old_view_frame = [self bounds]; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
809 |
15289 | 810 //fix origin for multi screen setup |
15728 | 811 screen_frame.origin.x = 0; |
812 screen_frame.origin.y = 0; | |
813 [self setFrame:screen_frame]; | |
15289 | 814 [self setNeedsDisplay:YES]; |
815 [window setHasShadow:NO]; | |
816 isFullscreen = 1; | |
817 } | |
818 else | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
819 { |
15902
16534910f0fb
fix various window resizing bug with menu option
nplourde
parents:
15882
diff
changeset
|
820 SetSystemUIMode( kUIModeNormal, 0); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
821 |
15289 | 822 isFullscreen = 0; |
18057 | 823 CGDisplayShowCursor(kCGDirectMainDisplay); |
15289 | 824 mouseHide = NO; |
825 | |
826 //revert window to previous setting | |
827 [self setFrame:old_view_frame]; | |
828 [self setNeedsDisplay:YES]; | |
16081
72c352edce8f
restore window shadow when quitting fullscreen mode
nplourde
parents:
15909
diff
changeset
|
829 [window setHasShadow:YES]; |
15289 | 830 [window setFrame:old_frame display:YES animate:animate];//zoom-out window with nice useless sfx |
831 } | |
832 } | |
833 | |
834 /* | |
835 Toggle ontop | |
836 */ | |
837 - (void) ontop | |
838 { | |
15320 | 839 if(vo_ontop) |
840 { | |
841 [window setLevel:NSScreenSaverWindowLevel]; | |
842 isOntop = YES; | |
843 } | |
844 else | |
845 { | |
846 [window setLevel:NSNormalWindowLevel]; | |
847 isOntop = NO; | |
848 } | |
15289 | 849 } |
850 | |
851 /* | |
852 Toggle panscan | |
853 */ | |
854 - (void) panscan | |
855 { | |
15331 | 856 panscan_calc(); |
15289 | 857 } |
858 | |
859 /* | |
15327 | 860 Toggle rootwin |
861 */ | |
862 - (void) rootwin | |
863 { | |
864 if(vo_rootwin) | |
865 { | |
866 [window setLevel:CGWindowLevelForKey(kCGDesktopWindowLevelKey)]; | |
867 [window orderBack:self]; | |
868 isRootwin = YES; | |
869 } | |
870 else | |
871 { | |
872 [window setLevel:NSNormalWindowLevel]; | |
873 isRootwin = NO; | |
874 } | |
875 } | |
876 | |
877 /* | |
15289 | 878 Check event for new event |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
879 */ |
15289 | 880 - (void) check_events |
881 { | |
31760
dc95a7191375
Move variable into the only function where it is used.
reimar
parents:
31759
diff
changeset
|
882 NSEvent *event; |
31759
a320b893f660
Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents:
31758
diff
changeset
|
883 int curTime = TickCount()/60; |
a320b893f660
Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents:
31758
diff
changeset
|
884 |
a320b893f660
Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents:
31758
diff
changeset
|
885 //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
|
886 if(isFullscreen && !mouseHide && !isRootwin) |
a320b893f660
Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents:
31758
diff
changeset
|
887 { |
a320b893f660
Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents:
31758
diff
changeset
|
888 if(curTime - lastMouseHide >= 5 || lastMouseHide == 0) |
a320b893f660
Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents:
31758
diff
changeset
|
889 { |
a320b893f660
Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents:
31758
diff
changeset
|
890 CGDisplayHideCursor(kCGDirectMainDisplay); |
a320b893f660
Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents:
31758
diff
changeset
|
891 mouseHide = TRUE; |
a320b893f660
Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents:
31758
diff
changeset
|
892 lastMouseHide = curTime; |
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 |
a320b893f660
Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents:
31758
diff
changeset
|
896 //update activity every 30 seconds to prevent |
a320b893f660
Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents:
31758
diff
changeset
|
897 //screensaver from starting up. |
a320b893f660
Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents:
31758
diff
changeset
|
898 if(curTime - lastScreensaverUpdate >= 30 || lastScreensaverUpdate == 0) |
a320b893f660
Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents:
31758
diff
changeset
|
899 { |
a320b893f660
Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents:
31758
diff
changeset
|
900 UpdateSystemActivity(UsrActivity); |
a320b893f660
Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents:
31758
diff
changeset
|
901 lastScreensaverUpdate = curTime; |
a320b893f660
Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents:
31758
diff
changeset
|
902 } |
a320b893f660
Move mouse hiding code to check_events, this allows mouse hiding
reimar
parents:
31758
diff
changeset
|
903 |
31757
83423e6b288e
Simplify check_events: avoid seemingly pointless untilDate argument.
reimar
parents:
31756
diff
changeset
|
904 event = [NSApp nextEventMatchingMask:NSAnyEventMask untilDate:nil inMode:NSEventTrackingRunLoopMode dequeue:YES]; |
25178 | 905 if (event == nil) |
906 return; | |
15289 | 907 [NSApp sendEvent:event]; |
25179
6e8b40d412f0
Fix play window not get actived problem on Leopard.
ulion
parents:
25178
diff
changeset
|
908 // Without SDL's bootstrap code (include SDL.h in mplayer.c), |
28837 | 909 // on Leopard, we have trouble to get the play window automatically focused |
910 // 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
|
911 #ifndef CONFIG_SDL |
25179
6e8b40d412f0
Fix play window not get actived problem on Leopard.
ulion
parents:
25178
diff
changeset
|
912 if (isLeopardOrLater && [event type] == NSAppKitDefined |
6e8b40d412f0
Fix play window not get actived problem on Leopard.
ulion
parents:
25178
diff
changeset
|
913 && [event subtype] == NSApplicationActivatedEventType) { |
6e8b40d412f0
Fix play window not get actived problem on Leopard.
ulion
parents:
25178
diff
changeset
|
914 [window makeMainWindow]; |
6e8b40d412f0
Fix play window not get actived problem on Leopard.
ulion
parents:
25178
diff
changeset
|
915 [window makeKeyAndOrderFront:mpGLView]; |
6e8b40d412f0
Fix play window not get actived problem on Leopard.
ulion
parents:
25178
diff
changeset
|
916 } |
6e8b40d412f0
Fix play window not get actived problem on Leopard.
ulion
parents:
25178
diff
changeset
|
917 #endif |
15289 | 918 } |
919 | |
920 /* | |
15731 | 921 From NSView, respond to key equivalents. |
922 */ | |
923 - (BOOL)performKeyEquivalent:(NSEvent *)theEvent | |
924 { | |
925 switch([theEvent keyCode]) | |
31742 | 926 { |
15731 | 927 case 0x21: [window setAlphaValue: winAlpha-=0.05]; return YES; |
928 case 0x1e: [window setAlphaValue: winAlpha+=0.05]; return YES; | |
31742 | 929 } |
15731 | 930 return NO; |
931 } | |
932 | |
933 /* | |
15289 | 934 Process key event |
935 */ | |
936 - (void) keyDown: (NSEvent *) theEvent | |
937 { | |
29533
9c8f8e375823
Reuse the osx_common convert_key function to convert OSX keycodes to MPlayer
reimar
parents:
29272
diff
changeset
|
938 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
|
939 if (key != -1) |
15289 | 940 mplayer_put_key(key); |
941 } | |
942 | |
943 /* | |
944 Process mouse button event | |
945 */ | |
946 - (void) mouseMoved: (NSEvent *) theEvent | |
947 { | |
15327 | 948 if(isFullscreen && !isRootwin) |
15289 | 949 { |
18057 | 950 CGDisplayShowCursor(kCGDirectMainDisplay); |
15289 | 951 mouseHide = NO; |
952 } | |
25468
a77c438fedf7
Do not send mouse movements events in root win mode.
ulion
parents:
25446
diff
changeset
|
953 if (enable_mouse_movements && !isRootwin) { |
25446 | 954 NSPoint p =[self convertPoint:[theEvent locationInWindow] fromView:nil]; |
955 if ([self mouse:p inRect:textureFrame]) { | |
31049
b40e41324173
Avoid duplicating mouse-movement command-generation code.
reimar
parents:
31047
diff
changeset
|
956 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
|
957 vo_fs ? [self frame].size.height - p.y : NSMaxY(textureFrame) - p.y); |
25446 | 958 } |
959 } | |
15289 | 960 } |
961 | |
962 - (void) mouseDown: (NSEvent *) theEvent | |
963 { | |
964 [self mouseEvent: theEvent]; | |
965 } | |
966 | |
24077
9ce03980ed0c
added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents:
24076
diff
changeset
|
967 - (void) mouseUp: (NSEvent *) theEvent |
9ce03980ed0c
added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents:
24076
diff
changeset
|
968 { |
9ce03980ed0c
added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents:
24076
diff
changeset
|
969 [self mouseEvent: theEvent]; |
9ce03980ed0c
added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents:
24076
diff
changeset
|
970 } |
9ce03980ed0c
added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents:
24076
diff
changeset
|
971 |
15289 | 972 - (void) rightMouseDown: (NSEvent *) theEvent |
973 { | |
974 [self mouseEvent: theEvent]; | |
975 } | |
976 | |
24077
9ce03980ed0c
added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents:
24076
diff
changeset
|
977 - (void) rightMouseUp: (NSEvent *) theEvent |
9ce03980ed0c
added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents:
24076
diff
changeset
|
978 { |
9ce03980ed0c
added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents:
24076
diff
changeset
|
979 [self mouseEvent: theEvent]; |
9ce03980ed0c
added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents:
24076
diff
changeset
|
980 } |
9ce03980ed0c
added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents:
24076
diff
changeset
|
981 |
15289 | 982 - (void) otherMouseDown: (NSEvent *) theEvent |
983 { | |
984 [self mouseEvent: theEvent]; | |
985 } | |
986 | |
24077
9ce03980ed0c
added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents:
24076
diff
changeset
|
987 - (void) otherMouseUp: (NSEvent *) theEvent |
9ce03980ed0c
added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents:
24076
diff
changeset
|
988 { |
9ce03980ed0c
added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents:
24076
diff
changeset
|
989 [self mouseEvent: theEvent]; |
9ce03980ed0c
added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents:
24076
diff
changeset
|
990 } |
9ce03980ed0c
added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents:
24076
diff
changeset
|
991 |
15289 | 992 - (void) scrollWheel: (NSEvent *) theEvent |
993 { | |
994 if([theEvent deltaY] > 0) | |
995 mplayer_put_key(MOUSE_BTN3); | |
996 else | |
997 mplayer_put_key(MOUSE_BTN4); | |
998 } | |
999 | |
1000 - (void) mouseEvent: (NSEvent *) theEvent | |
1001 { | |
24077
9ce03980ed0c
added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents:
24076
diff
changeset
|
1002 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
|
1003 { |
25422 | 1004 int buttonNumber = [theEvent buttonNumber]; |
1005 // Fix to mplayer defined button order: left, middle, right | |
1006 if (buttonNumber == 1) | |
1007 buttonNumber = 2; | |
25423 | 1008 else if (buttonNumber == 2) |
1009 buttonNumber = 1; | |
24077
9ce03980ed0c
added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents:
24076
diff
changeset
|
1010 switch([theEvent type]) |
9ce03980ed0c
added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents:
24076
diff
changeset
|
1011 { |
9ce03980ed0c
added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents:
24076
diff
changeset
|
1012 case NSLeftMouseDown: |
9ce03980ed0c
added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents:
24076
diff
changeset
|
1013 case NSRightMouseDown: |
9ce03980ed0c
added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents:
24076
diff
changeset
|
1014 case NSOtherMouseDown: |
25422 | 1015 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
|
1016 break; |
9ce03980ed0c
added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents:
24076
diff
changeset
|
1017 case NSLeftMouseUp: |
9ce03980ed0c
added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents:
24076
diff
changeset
|
1018 case NSRightMouseUp: |
9ce03980ed0c
added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents:
24076
diff
changeset
|
1019 case NSOtherMouseUp: |
25422 | 1020 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
|
1021 break; |
9ce03980ed0c
added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents:
24076
diff
changeset
|
1022 } |
15289 | 1023 } |
1024 } | |
1025 | |
1026 /* | |
1027 NSResponder | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
29210
diff
changeset
|
1028 */ |
15289 | 1029 - (BOOL) acceptsFirstResponder |
1030 { | |
1031 return YES; | |
1032 } | |
1033 | |
1034 - (BOOL) becomeFirstResponder | |
1035 { | |
1036 return YES; | |
1037 } | |
1038 | |
1039 - (BOOL) resignFirstResponder | |
1040 { | |
1041 return YES; | |
1042 } | |
15325 | 1043 |
31756
8e043273075d
Change window-closing handling so it works properly if the
reimar
parents:
31745
diff
changeset
|
1044 - (BOOL)windowShouldClose:(id)sender |
15325 | 1045 { |
31735
3bb00f5abe8e
Send KEY_CLOSE_WIN instead of KEY_ESC when the user requested
reimar
parents:
31049
diff
changeset
|
1046 mplayer_put_key(KEY_CLOSE_WIN); |
31756
8e043273075d
Change window-closing handling so it works properly if the
reimar
parents:
31745
diff
changeset
|
1047 // 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
|
1048 // otherwise we are in trouble if the |
8e043273075d
Change window-closing handling so it works properly if the
reimar
parents:
31745
diff
changeset
|
1049 // KEY_CLOSE_WIN handler is disabled |
8e043273075d
Change window-closing handling so it works properly if the
reimar
parents:
31745
diff
changeset
|
1050 return NO; |
15325 | 1051 } |
31758 | 1052 |
1053 - (void)handleQuitEvent:(NSAppleEventDescriptor*)e withReplyEvent:(NSAppleEventDescriptor*)r | |
1054 { | |
1055 mplayer_put_key(KEY_CLOSE_WIN); | |
1056 } | |
15325 | 1057 @end |