annotate libvo/vo_macosx.m @ 28041:211c23dac000

Treat audio output objects the same as everything else in the build system, i.e. have lines that conditionally enable each in the Makefile and corresponding variables set from configure.
author diego
date Wed, 03 Dec 2008 12:05:47 +0000
parents 3b8e66828e10
children 9e739bdb049c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
2 vo_macosx.m
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
3 by Nicolas Plourde <nicolasplourde@gmail.com>
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
4
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
5 MPlayer Mac OSX video out module.
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
6 Copyright (c) Nicolas Plourde - 2005
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
7 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
8
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
9 #import "vo_macosx.h"
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
10 #include <sys/types.h>
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
11 #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
12 #include <sys/mman.h>
27988
84bad10e6d8d Allow vo_macosx to be compiled in 64-bits mode:
gpoirier
parents: 27397
diff changeset
13 #include <CoreServices/CoreServices.h>
84bad10e6d8d Allow vo_macosx to be compiled in 64-bits mode:
gpoirier
parents: 27397
diff changeset
14 //special workaround for Apple bug #6267445
84bad10e6d8d Allow vo_macosx to be compiled in 64-bits mode:
gpoirier
parents: 27397
diff changeset
15 //(OSServices Power API disabled in OSServices.h for 64bit systems)
84bad10e6d8d Allow vo_macosx to be compiled in 64-bits mode:
gpoirier
parents: 27397
diff changeset
16 #ifndef __POWER__
84bad10e6d8d Allow vo_macosx to be compiled in 64-bits mode:
gpoirier
parents: 27397
diff changeset
17 #include <CoreServices/../Frameworks/OSServices.framework/Headers/Power.h>
84bad10e6d8d Allow vo_macosx to be compiled in 64-bits mode:
gpoirier
parents: 27397
diff changeset
18 #endif
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
19
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
20 //MPLAYER
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
21 #include "config.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
22 #include "fastmemcpy.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
23 #include "video_out.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
24 #include "video_out_internal.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
25 #include "aspect.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
26 #include "mp_msg.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
27 #include "m_option.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
28
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
29 #include "input/input.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
30 #include "input/mouse.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
31
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
32 #include "osdep/keycodes.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
33
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
34 //Cocoa
25157
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
35 NSDistantObject *mplayerosxProxy;
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
36 id <MPlayerOSXVOProto> mplayerosxProto;
15611
2f77a2da1d82 Function name cleanup
nplourde
parents: 15610
diff changeset
37 MPlayerOpenGLView *mpGLView;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
38 NSAutoreleasePool *autoreleasepool;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
39 OSType pixelFormat;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
40
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
41 //shared memory
28016
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
42 int shm_fd;
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
43 BOOL shared_buffer = false;
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
44
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
45 //Screen
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
46 int screen_id;
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
47 BOOL screen_force;
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
48 NSRect screen_frame;
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
49 NSScreen *screen_handle;
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
50 NSArray *screen_array;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
51
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
52 //image
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
53 unsigned char *image_data;
25180
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
54 // For double buffering
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
55 static uint8_t image_page = 0;
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
56 static unsigned char *image_datas[2];
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
57
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
58 static uint32_t image_width;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
59 static uint32_t image_height;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
60 static uint32_t image_depth;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
61 static uint32_t image_bytes;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
62 static uint32_t image_format;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
63
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
64 //vo
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
65 static int isFullscreen;
15320
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
66 static int isOntop;
15327
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
67 static int isRootwin;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
68 extern float monitor_aspect;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
69 extern float movie_aspect;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
70 static float old_movie_aspect;
25446
8dfc8a3b4152 Support send mouse movements commands to mplayer.
ulion
parents: 25424
diff changeset
71 extern int enable_mouse_movements;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
72
15731
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
73 static float winAlpha = 1;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
74 static int int_pause = 0;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
75
25179
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
76 static BOOL isLeopardOrLater;
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
77
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
78 static vo_info_t info =
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
79 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
80 "Mac OSX Core Video",
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
81 "macosx",
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
82 "Nicolas Plourde <nicolas.plourde@gmail.com>",
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
83 ""
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
84 };
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
85
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
86 LIBVO_EXTERN(macosx)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
87
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
88 extern void mplayer_put_key(int code);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
89 extern void vo_draw_text(int dxs,int dys,void (*draw_alpha)(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride));
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
90
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
91 static void draw_alpha(int x0, int y0, int w, int h, unsigned char *src, unsigned char *srca, int stride)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
92 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
93 switch (image_format)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
94 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
95 case IMGFMT_RGB32:
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
96 vo_draw_alpha_rgb32(w,h,src,srca,stride,image_data+4*(y0*image_width+x0),4*image_width);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
97 break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
98 case IMGFMT_YUY2:
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
99 vo_draw_alpha_yuy2(w,h,src,srca,stride,image_data + (x0 + y0 * image_width) * 2,image_width*2);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
100 break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
101 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
102 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
103
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 16145
diff changeset
104 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)
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
105 {
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
106
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
107 //init screen
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
108 screen_array = [NSScreen screens];
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
109 if(screen_id < [screen_array count])
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
110 {
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
111 screen_handle = [screen_array objectAtIndex:screen_id];
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
112 }
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
113 else
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
114 {
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
115 mp_msg(MSGT_VO, MSGL_FATAL, "Get device error: Device ID %d do not exist, falling back to main device.\n", screen_id);
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
116 screen_handle = [screen_array objectAtIndex:0];
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
117 screen_id = 0;
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
118 }
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
119 screen_frame = [screen_handle frame];
25414
5c03a9bdf220 Record screen size and display size in vo_ variables.
ulion
parents: 25413
diff changeset
120 vo_screenwidth = screen_frame.size.width;
5c03a9bdf220 Record screen size and display size in vo_ variables.
ulion
parents: 25413
diff changeset
121 vo_screenheight = screen_frame.size.height;
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
122
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
123 //misc mplayer setup
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
124 image_width = width;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
125 image_height = height;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
126 switch (image_format)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
127 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
128 case IMGFMT_BGR32:
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
129 case IMGFMT_RGB32:
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
130 image_depth = 32;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
131 break;
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
132 case IMGFMT_YUY2:
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
133 image_depth = 16;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
134 break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
135 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
136 image_bytes = (image_depth + 7) / 8;
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
137
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
138 if(!shared_buffer)
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
139 {
25120
9b4ca4dc1294 Fix a memory leak when working in shared_buffer mode.
ulion
parents: 25114
diff changeset
140 image_data = malloc(image_width*image_height*image_bytes);
25180
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
141 image_datas[0] = image_data;
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
142 if (vo_doublebuffering)
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
143 image_datas[1] = malloc(image_width*image_height*image_bytes);
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
144 image_page = 0;
25120
9b4ca4dc1294 Fix a memory leak when working in shared_buffer mode.
ulion
parents: 25114
diff changeset
145
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
146 monitor_aspect = (float)screen_frame.size.width/(float)screen_frame.size.height;
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
147
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
148 //set aspect
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
149 panscan_init();
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
150 aspect_save_orig(width,height);
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
151 aspect_save_prescale(d_width,d_height);
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
152 aspect_save_screenres(screen_frame.size.width, screen_frame.size.height);
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
153 aspect((int *)&d_width,(int *)&d_height,A_NOZOOM);
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
154
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
155 movie_aspect = (float)d_width/(float)d_height;
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
156 old_movie_aspect = movie_aspect;
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
157
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
158 vo_fs = flags & VOFLAG_FULLSCREEN;
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
159
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
160 //config OpenGL View
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
161 [mpGLView config];
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
162 [mpGLView reshape];
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
163 }
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
164 else
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
165 {
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
166 movie_aspect = (float)d_width/(float)d_height;
28016
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
167
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
168 // create shared memory
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
169 shm_fd = shm_open("mplayerosx", O_CREAT | O_RDWR, S_IRUSR | S_IWUSR);
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
170 if (shm_fd == -1)
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
171 {
28016
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
172 mp_msg(MSGT_VO, MSGL_FATAL,
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
173 "vo_macosx: failed to open shared memory. Error: %s\n", strerror(errno));
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
174 return 1;
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
175 }
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
176
28016
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
177
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
178 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
179 {
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
180 mp_msg(MSGT_VO, MSGL_FATAL,
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
181 "vo_macosx: failed to size shared memory, possibly already in use. Error: %s\n", strerror(errno));
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
182 shm_unlink("mplayerosx");
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
183 return 1;
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
184 }
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
185
28016
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
186 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
187 PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0);
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
188
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
189 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
190 {
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
191 mp_msg(MSGT_VO, MSGL_FATAL,
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
192 "vo_macosx: failed to map shared memory. Error: %s\n", strerror(errno));
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
193 shm_unlink("mplayerosx");
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
194 return 1;
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
195 }
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
196
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
197 //connnect to mplayerosx
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
198 mplayerosxProxy=[NSConnection rootProxyForConnectionWithRegisteredName:@"mplayerosx" host:nil];
25157
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
199 if ([mplayerosxProxy conformsToProtocol:@protocol(MPlayerOSXVOProto)]) {
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
200 [mplayerosxProxy setProtocolForProxy:@protocol(MPlayerOSXVOProto)];
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
201 mplayerosxProto = (id <MPlayerOSXVOProto>)mplayerosxProxy;
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
202 [mplayerosxProto startWithWidth: image_width withHeight: image_height withBytes: image_bytes withAspect:(int)(movie_aspect*100)];
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
203 }
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
204 else {
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
205 [mplayerosxProxy release];
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
206 mplayerosxProxy = nil;
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
207 mplayerosxProto = nil;
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
208 }
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
209 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
210 return 0;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
211 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
212
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
213 static void check_events(void)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
214 {
15611
2f77a2da1d82 Function name cleanup
nplourde
parents: 15610
diff changeset
215 [mpGLView check_events];
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
216 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
217
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
218 static void draw_osd(void)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
219 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
220 vo_draw_text(image_width, image_height, draw_alpha);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
221 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
222
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
223 static void flip_page(void)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
224 {
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
225 if(shared_buffer)
25157
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
226 [mplayerosxProto render];
25114
bed4188998ca Move the setCurrentTexture call into flip_page(), fix osd flicker problem.
ulion
parents: 25078
diff changeset
227 else {
bed4188998ca Move the setCurrentTexture call into flip_page(), fix osd flicker problem.
ulion
parents: 25078
diff changeset
228 [mpGLView setCurrentTexture];
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
229 [mpGLView render];
25180
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
230 if (vo_doublebuffering) {
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
231 image_page = 1 - image_page;
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
232 image_data = image_datas[image_page];
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
233 }
25114
bed4188998ca Move the setCurrentTexture call into flip_page(), fix osd flicker problem.
ulion
parents: 25078
diff changeset
234 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
235 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
236
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 16145
diff changeset
237 static int draw_slice(uint8_t *src[], int stride[], int w,int h,int x,int y)
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
238 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
239 return 0;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
240 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
241
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
242
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 16145
diff changeset
243 static int draw_frame(uint8_t *src[])
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
244 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
245 switch (image_format)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
246 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
247 case IMGFMT_BGR32:
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
248 case IMGFMT_RGB32:
23457
a124f3abc1ec Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents: 23381
diff changeset
249 fast_memcpy(image_data, src[0], image_width*image_height*image_bytes);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
250 break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
251
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
252 case IMGFMT_YUY2:
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
253 memcpy_pic(image_data, src[0], image_width * 2, image_height, image_width * 2, image_width * 2);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
254 break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
255 }
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
256
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
257 return 0;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
258 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
259
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 16145
diff changeset
260 static int query_format(uint32_t format)
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
261 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
262 image_format = format;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
263
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
264 switch(format)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
265 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
266 case IMGFMT_YUY2:
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
267 pixelFormat = kYUVSPixelFormat;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
268 return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_OSD | VFCAP_HWSCALE_UP | VFCAP_HWSCALE_DOWN;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
269
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
270 case IMGFMT_RGB32:
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
271 case IMGFMT_BGR32:
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
272 pixelFormat = k32ARGBPixelFormat;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
273 return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_OSD | VFCAP_HWSCALE_UP | VFCAP_HWSCALE_DOWN;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
274 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
275 return 0;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
276 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
277
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
278 static void uninit(void)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
279 {
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
280 if(shared_buffer)
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
281 {
25157
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
282 [mplayerosxProto stop];
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
283 mplayerosxProto = nil;
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
284 [mplayerosxProxy release];
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
285 mplayerosxProxy = nil;
28016
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
286
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
287 if (munmap(image_data, 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
288 mp_msg(MSGT_VO, MSGL_FATAL, "uninit: munmap failed. Error: %s\n", strerror(errno));
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
289
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
290 if (shm_unlink("mplayerosx") == -1)
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
291 mp_msg(MSGT_VO, MSGL_FATAL, "uninit: shm_unlink failed. Error: %s\n", strerror(errno));
3b8e66828e10 use mmap instead of shmat for MPlayerOSX, patch by Adrian Stutz<adrian@sttz.ch>
nplourde
parents: 28010
diff changeset
292
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
293 }
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
294
21551
c35115c05c64 vo_macosx, fix crash when closing window
nplourde
parents: 21546
diff changeset
295 SetSystemUIMode( kUIModeNormal, 0);
c35115c05c64 vo_macosx, fix crash when closing window
nplourde
parents: 21546
diff changeset
296 CGDisplayShowCursor(kCGDirectMainDisplay);
c35115c05c64 vo_macosx, fix crash when closing window
nplourde
parents: 21546
diff changeset
297
c35115c05c64 vo_macosx, fix crash when closing window
nplourde
parents: 21546
diff changeset
298 if(mpGLView)
c35115c05c64 vo_macosx, fix crash when closing window
nplourde
parents: 21546
diff changeset
299 {
25136
e029d2fcd20f Fix warning:
ulion
parents: 25121
diff changeset
300 NSAutoreleasePool *finalPool;
24742
0bef706332b5 Fix deallocate bug which sometimes causes a crash when reinitializing.
nplourde
parents: 24698
diff changeset
301 mpGLView = nil;
21551
c35115c05c64 vo_macosx, fix crash when closing window
nplourde
parents: 21546
diff changeset
302 [autoreleasepool release];
25136
e029d2fcd20f Fix warning:
ulion
parents: 25121
diff changeset
303 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
304 [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
305 [finalPool release];
21551
c35115c05c64 vo_macosx, fix crash when closing window
nplourde
parents: 21546
diff changeset
306 }
25121
786b99c1ff94 Fix memory leak of image_data.
ulion
parents: 25120
diff changeset
307 if (!shared_buffer)
786b99c1ff94 Fix memory leak of image_data.
ulion
parents: 25120
diff changeset
308 {
25180
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
309 free(image_datas[0]);
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
310 if (vo_doublebuffering)
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
311 free(image_datas[1]);
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
312 image_datas[0] = NULL;
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
313 image_datas[1] = NULL;
25121
786b99c1ff94 Fix memory leak of image_data.
ulion
parents: 25120
diff changeset
314 image_data = NULL;
786b99c1ff94 Fix memory leak of image_data.
ulion
parents: 25120
diff changeset
315 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
316 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
317
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 16145
diff changeset
318 static int preinit(const char *arg)
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
319 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
320 int parse_err = 0;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
321
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
322 if(arg)
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
323 {
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
324 char *parse_pos = (char *)&arg[0];
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
325 while (parse_pos[0] && !parse_err)
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
326 {
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
327 if (strncmp (parse_pos, "device_id=", 10) == 0)
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
328 {
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
329 parse_pos = &parse_pos[10];
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
330 screen_id = strtol(parse_pos, &parse_pos, 0);
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
331 screen_force = YES;
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
332 }
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
333 if (strncmp (parse_pos, "shared_buffer", 13) == 0)
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
334 {
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
335 parse_pos = &parse_pos[13];
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
336 shared_buffer = YES;
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
337 }
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
338 if (parse_pos[0] == ':') parse_pos = &parse_pos[1];
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
339 else if (parse_pos[0]) parse_err = 1;
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
340 }
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
341 }
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
342
15737
0c3939433cef set nsapp and setup cocoa with NSApplicationLoad
nplourde
parents: 15736
diff changeset
343 NSApplicationLoad();
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
344 autoreleasepool = [[NSAutoreleasePool alloc] init];
15737
0c3939433cef set nsapp and setup cocoa with NSApplicationLoad
nplourde
parents: 15736
diff changeset
345 NSApp = [NSApplication sharedApplication];
25179
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
346 isLeopardOrLater = floor(NSAppKitVersionNumber) > 824;
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
347
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
348 if(!shared_buffer)
16144
6ea7c0735fce properly release window
nplourde
parents: 16081
diff changeset
349 {
27397
d47744b95b78 Give a CONFIG_ prefix to preprocessor directives that lacked one and
diego
parents: 27394
diff changeset
350 #if !defined (CONFIG_MACOSX_FINDER) || !defined (CONFIG_SDL)
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
351 //this chunk of code is heavily based off SDL_macosx.m from SDL
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
352 ProcessSerialNumber myProc, frProc;
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
353 Boolean sameProc;
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
354
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
355 if (GetFrontProcess(&frProc) == noErr)
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
356 {
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
357 if (GetCurrentProcess(&myProc) == noErr)
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
358 {
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
359 if (SameProcess(&frProc, &myProc, &sameProc) == noErr && !sameProc)
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
360 {
27988
84bad10e6d8d Allow vo_macosx to be compiled in 64-bits mode:
gpoirier
parents: 27397
diff changeset
361 TransformProcessType(&myProc, kProcessTransformToForegroundApplication);
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
362 }
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
363 SetFrontProcess(&myProc);
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
364 }
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
365 }
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
366 #endif
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
367
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
368 if(!mpGLView)
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
369 {
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
370 mpGLView = [[MPlayerOpenGLView alloc] initWithFrame:NSMakeRect(0, 0, 100, 100) pixelFormat:[MPlayerOpenGLView defaultPixelFormat]];
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
371 [mpGLView autorelease];
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
372 }
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
373
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
374 [mpGLView display];
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
375 [mpGLView preinit];
16144
6ea7c0735fce properly release window
nplourde
parents: 16081
diff changeset
376 }
6ea7c0735fce properly release window
nplourde
parents: 16081
diff changeset
377
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
378 return 0;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
379 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
380
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 16145
diff changeset
381 static int control(uint32_t request, void *data, ...)
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
382 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
383 switch (request)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
384 {
26755
46f0b4d34fa1 cosmetics: Remove useless parentheses from from return statements.
diego
parents: 25468
diff changeset
385 case VOCTRL_PAUSE: return int_pause = 1;
46f0b4d34fa1 cosmetics: Remove useless parentheses from from return statements.
diego
parents: 25468
diff changeset
386 case VOCTRL_RESUME: return int_pause = 0;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
387 case VOCTRL_QUERY_FORMAT: return query_format(*((uint32_t*)data));
25157
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
388 case VOCTRL_ONTOP: vo_ontop = (!(vo_ontop)); if(!shared_buffer){ [mpGLView ontop]; } else { [mplayerosxProto ontop]; } return VO_TRUE;
15611
2f77a2da1d82 Function name cleanup
nplourde
parents: 15610
diff changeset
389 case VOCTRL_ROOTWIN: vo_rootwin = (!(vo_rootwin)); [mpGLView rootwin]; return VO_TRUE;
25157
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
390 case VOCTRL_FULLSCREEN: vo_fs = (!(vo_fs)); if(!shared_buffer){ [mpGLView fullscreen: NO]; } else { [mplayerosxProto toggleFullscreen]; } return VO_TRUE;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
391 case VOCTRL_GET_PANSCAN: return VO_TRUE;
15611
2f77a2da1d82 Function name cleanup
nplourde
parents: 15610
diff changeset
392 case VOCTRL_SET_PANSCAN: [mpGLView panscan]; return VO_TRUE;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
393 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
394 return VO_NOTIMPL;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
395 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
396
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
397 //////////////////////////////////////////////////////////////////////////
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
398 // NSOpenGLView Subclass
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
399 //////////////////////////////////////////////////////////////////////////
15611
2f77a2da1d82 Function name cleanup
nplourde
parents: 15610
diff changeset
400 @implementation MPlayerOpenGLView
24076
7ac48ed8c394 Functions that do not return a value must be void
reimar
parents: 24074
diff changeset
401 - (void) preinit
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
402 {
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
403 //init menu
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
404 [self initMenu];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
405
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
406 //create window
15747
fbf14e1ab725 osx 10.3 dont like to have a window init with no size
nplourde
parents: 15737
diff changeset
407 window = [[NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, 100, 100)
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
408 styleMask:NSTitledWindowMask|NSTexturedBackgroundWindowMask|NSClosableWindowMask|NSMiniaturizableWindowMask|NSResizableWindowMask
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
409 backing:NSBackingStoreBuffered defer:NO];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
410
16144
6ea7c0735fce properly release window
nplourde
parents: 16081
diff changeset
411 [window autorelease];
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
412 [window setDelegate:mpGLView];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
413 [window setContentView:mpGLView];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
414 [window setInitialFirstResponder:mpGLView];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
415 [window setAcceptsMouseMovedEvents:YES];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
416 [window setTitle:@"MPlayer - The Movie Player"];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
417
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
418 isFullscreen = 0;
15855
1ca8b5873c3f keep window size when changing aspect
nplourde
parents: 15854
diff changeset
419 winSizeMult = 1;
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
420 }
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
421
24076
7ac48ed8c394 Functions that do not return a value must be void
reimar
parents: 24074
diff changeset
422 - (void) config
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
423 {
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
424 uint32_t d_width;
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
425 uint32_t d_height;
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
426
25137
6f2f5c2dea52 Fix warning on Leopard, tested ok on Tiger:
ulion
parents: 25136
diff changeset
427 GLint swapInterval = 1;
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
428
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
429 NSRect frame;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
430 CVReturn error = kCVReturnSuccess;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
431
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
432 //config window
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
433 aspect((int *)&d_width, (int *)&d_height,A_NOZOOM);
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
434 frame = NSMakeRect(0, 0, d_width, d_height);
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
435 [window setContentSize: frame.size];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
436
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
437 //create OpenGL Context
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
438 glContext = [[NSOpenGLContext alloc] initWithFormat:[NSOpenGLView defaultPixelFormat] shareContext:nil];
15647
0968fd3d5675 Pure cosmetic
nplourde
parents: 15612
diff changeset
439
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
440 [self setOpenGLContext:glContext];
15647
0968fd3d5675 Pure cosmetic
nplourde
parents: 15612
diff changeset
441 [glContext setValues:&swapInterval forParameter:NSOpenGLCPSwapInterval];
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
442 [glContext setView:self];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
443 [glContext makeCurrentContext];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
444
25180
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
445 error = CVPixelBufferCreateWithBytes(NULL, image_width, image_height, pixelFormat, image_datas[0], image_width*image_bytes, NULL, NULL, NULL, &frameBuffers[0]);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
446 if(error != kCVReturnSuccess)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
447 mp_msg(MSGT_VO, MSGL_ERR,"Failed to create Pixel Buffer(%d)\n", error);
25180
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
448 if (vo_doublebuffering) {
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
449 error = CVPixelBufferCreateWithBytes(NULL, image_width, image_height, pixelFormat, image_datas[1], image_width*image_bytes, NULL, NULL, NULL, &frameBuffers[1]);
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
450 if(error != kCVReturnSuccess)
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
451 mp_msg(MSGT_VO, MSGL_ERR,"Failed to create Pixel Double Buffer(%d)\n", error);
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
452 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
453
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
454 error = CVOpenGLTextureCacheCreate(NULL, 0, [glContext CGLContextObj], [[self pixelFormat] CGLPixelFormatObj], 0, &textureCache);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
455 if(error != kCVReturnSuccess)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
456 mp_msg(MSGT_VO, MSGL_ERR,"Failed to create OpenGL texture Cache(%d)\n", error);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
457
25180
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
458 error = CVOpenGLTextureCacheCreateTextureFromImage(NULL, textureCache, frameBuffers[image_page], 0, &texture);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
459 if(error != kCVReturnSuccess)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
460 mp_msg(MSGT_VO, MSGL_ERR,"Failed to create OpenGL texture(%d)\n", error);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
461
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
462 //show window
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
463 [window center];
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
464 [window makeKeyAndOrderFront:mpGLView];
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
465
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
466 if(vo_rootwin)
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
467 [mpGLView rootwin];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
468
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
469 if(vo_fs)
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
470 [mpGLView fullscreen: NO];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
471
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
472 if(vo_ontop)
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
473 [mpGLView ontop];
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
474 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
475
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
476 /*
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
477 Init Menu
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
478 */
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
479 - (void)initMenu
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
480 {
21395
dd05dd9e3e7b Fix declarations vs statements warning.
diego
parents: 18878
diff changeset
481 NSMenu *menu, *aspectMenu;
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
482 NSMenuItem *menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
483
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
484 [NSApp setMainMenu:[[NSMenu alloc] init]];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
485
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
486 //Create Movie Menu
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
487 menu = [[NSMenu alloc] initWithTitle:@"Movie"];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
488 menuItem = [[NSMenuItem alloc] initWithTitle:@"Half Size" action:@selector(menuAction:) keyEquivalent:@"0"]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
489 kHalfScreenCmd = menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
490 menuItem = [[NSMenuItem alloc] initWithTitle:@"Normal Size" action:@selector(menuAction:) keyEquivalent:@"1"]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
491 kNormalScreenCmd = menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
492 menuItem = [[NSMenuItem alloc] initWithTitle:@"Double Size" action:@selector(menuAction:) keyEquivalent:@"2"]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
493 kDoubleScreenCmd = menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
494 menuItem = [[NSMenuItem alloc] initWithTitle:@"Full Size" action:@selector(menuAction:) keyEquivalent:@"f"]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
495 kFullScreenCmd = menuItem;
15909
b1bc923b38fe resize video after keep aspect menu item toggle
nplourde
parents: 15902
diff changeset
496 menuItem = (NSMenuItem *)[NSMenuItem separatorItem]; [menu addItem:menuItem];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
497
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
498 aspectMenu = [[NSMenu alloc] initWithTitle:@"Aspect Ratio"];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
499 menuItem = [[NSMenuItem alloc] initWithTitle:@"Keep" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
500 if(vo_keepaspect) [menuItem setState:NSOnState];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
501 kKeepAspectCmd = menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
502 menuItem = [[NSMenuItem alloc] initWithTitle:@"Pan-Scan" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
503 if(vo_panscan) [menuItem setState:NSOnState];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
504 kPanScanCmd = menuItem;
15909
b1bc923b38fe resize video after keep aspect menu item toggle
nplourde
parents: 15902
diff changeset
505 menuItem = (NSMenuItem *)[NSMenuItem separatorItem]; [aspectMenu addItem:menuItem];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
506 menuItem = [[NSMenuItem alloc] initWithTitle:@"Original" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
507 kAspectOrgCmd = menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
508 menuItem = [[NSMenuItem alloc] initWithTitle:@"4:3" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
509 kAspectFullCmd = menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
510 menuItem = [[NSMenuItem alloc] initWithTitle:@"16:9" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
511 kAspectWideCmd = menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
512 menuItem = [[NSMenuItem alloc] initWithTitle:@"Aspect Ratio" action:nil keyEquivalent:@""];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
513 [menuItem setSubmenu:aspectMenu];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
514 [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
515 [aspectMenu release];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
516
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
517 //Add to menubar
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
518 menuItem = [[NSMenuItem alloc] initWithTitle:@"Movie" action:nil keyEquivalent:@""];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
519 [menuItem setSubmenu:menu];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
520 [[NSApp mainMenu] addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
521
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
522 //Create Window Menu
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
523 menu = [[NSMenu alloc] initWithTitle:@"Window"];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
524
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
525 menuItem = [[NSMenuItem alloc] initWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@"m"]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
526 menuItem = [[NSMenuItem alloc] initWithTitle:@"Zoom" action:@selector(performZoom:) keyEquivalent:@""]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
527
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
528 //Add to menubar
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
529 menuItem = [[NSMenuItem alloc] initWithTitle:@"Window" action:nil keyEquivalent:@""];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
530 [menuItem setSubmenu:menu];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
531 [[NSApp mainMenu] addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
532 [NSApp setWindowsMenu:menu];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
533
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
534 [menu release];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
535 [menuItem release];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
536 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
537
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
538 /*
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
539 Menu Action
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
540 */
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
541 - (void)menuAction:(id)sender
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
542 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
543 uint32_t d_width;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
544 uint32_t d_height;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
545 NSRect frame;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
546
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
547 aspect((int *)&d_width, (int *)&d_height,A_NOZOOM);
15731
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
548
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
549 if(sender == kQuitCmd)
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
550 {
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
551 mplayer_put_key(KEY_ESC);
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
552 }
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
553
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
554 if(sender == kHalfScreenCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
555 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
556 if(isFullscreen) {
21546
253a1e98bfe3 vo_macosx.m disable window animation when going to fullscreen
nplourde
parents: 21395
diff changeset
557 vo_fs = (!(vo_fs)); [self fullscreen:NO];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
558 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
559
15855
1ca8b5873c3f keep window size when changing aspect
nplourde
parents: 15854
diff changeset
560 winSizeMult = 0.5;
1ca8b5873c3f keep window size when changing aspect
nplourde
parents: 15854
diff changeset
561 frame.size.width = (d_width*winSizeMult);
1ca8b5873c3f keep window size when changing aspect
nplourde
parents: 15854
diff changeset
562 frame.size.height = ((d_width/movie_aspect)*winSizeMult);
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
563 [window setContentSize: frame.size];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
564 [self reshape];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
565 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
566 if(sender == kNormalScreenCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
567 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
568 if(isFullscreen) {
21546
253a1e98bfe3 vo_macosx.m disable window animation when going to fullscreen
nplourde
parents: 21395
diff changeset
569 vo_fs = (!(vo_fs)); [self fullscreen:NO];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
570 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
571
15855
1ca8b5873c3f keep window size when changing aspect
nplourde
parents: 15854
diff changeset
572 winSizeMult = 1;
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
573 frame.size.width = d_width;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
574 frame.size.height = d_width/movie_aspect;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
575 [window setContentSize: frame.size];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
576 [self reshape];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
577 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
578 if(sender == kDoubleScreenCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
579 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
580 if(isFullscreen) {
21546
253a1e98bfe3 vo_macosx.m disable window animation when going to fullscreen
nplourde
parents: 21395
diff changeset
581 vo_fs = (!(vo_fs)); [self fullscreen:NO];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
582 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
583
15855
1ca8b5873c3f keep window size when changing aspect
nplourde
parents: 15854
diff changeset
584 winSizeMult = 2;
1ca8b5873c3f keep window size when changing aspect
nplourde
parents: 15854
diff changeset
585 frame.size.width = d_width*winSizeMult;
1ca8b5873c3f keep window size when changing aspect
nplourde
parents: 15854
diff changeset
586 frame.size.height = (d_width/movie_aspect)*winSizeMult;
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
587 [window setContentSize: frame.size];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
588 [self reshape];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
589 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
590 if(sender == kFullScreenCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
591 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
592 vo_fs = (!(vo_fs));
21546
253a1e98bfe3 vo_macosx.m disable window animation when going to fullscreen
nplourde
parents: 21395
diff changeset
593 [self fullscreen:NO];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
594 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
595
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
596 if(sender == kKeepAspectCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
597 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
598 vo_keepaspect = (!(vo_keepaspect));
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
599 if(vo_keepaspect)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
600 [kKeepAspectCmd setState:NSOnState];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
601 else
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
602 [kKeepAspectCmd setState:NSOffState];
15909
b1bc923b38fe resize video after keep aspect menu item toggle
nplourde
parents: 15902
diff changeset
603
b1bc923b38fe resize video after keep aspect menu item toggle
nplourde
parents: 15902
diff changeset
604 [self reshape];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
605 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
606
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
607 if(sender == kPanScanCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
608 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
609 vo_panscan = (!(vo_panscan));
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
610 if(vo_panscan)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
611 [kPanScanCmd setState:NSOnState];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
612 else
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
613 [kPanScanCmd setState:NSOffState];
15902
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
614
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
615 [self panscan];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
616 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
617
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
618 if(sender == kAspectOrgCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
619 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
620 movie_aspect = old_movie_aspect;
15902
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
621
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
622 if(isFullscreen)
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
623 {
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
624 [self reshape];
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
625 }
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
626 else
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
627 {
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
628 frame.size.width = d_width*winSizeMult;
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
629 frame.size.height = (d_width/movie_aspect)*winSizeMult;
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
630 [window setContentSize: frame.size];
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
631 [self reshape];
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
632 }
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
633 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
634
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
635 if(sender == kAspectFullCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
636 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
637 movie_aspect = 4.0f/3.0f;
15882
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
638
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
639 if(isFullscreen)
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
640 {
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
641 [self reshape];
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
642 }
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
643 else
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
644 {
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
645 frame.size.width = d_width*winSizeMult;
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
646 frame.size.height = (d_width/movie_aspect)*winSizeMult;
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
647 [window setContentSize: frame.size];
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
648 [self reshape];
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
649 }
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
650 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
651
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
652 if(sender == kAspectWideCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
653 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
654 movie_aspect = 16.0f/9.0f;
15882
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
655
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
656 if(isFullscreen)
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
657 {
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
658 [self reshape];
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
659 }
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
660 else
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
661 {
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
662 frame.size.width = d_width*winSizeMult;
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
663 frame.size.height = (d_width/movie_aspect)*winSizeMult;
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
664 [window setContentSize: frame.size];
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
665 [self reshape];
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
666 }
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
667 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
668 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
669
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
670 /*
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
671 Setup OpenGL
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
672 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
673 - (void)prepareOpenGL
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
674 {
15339
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
675 glEnable(GL_BLEND);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
676 glDisable(GL_DEPTH_TEST);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
677 glDepthMask(GL_FALSE);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
678 glDisable(GL_CULL_FACE);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
679 [self reshape];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
680 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
681
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
682 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
683 reshape OpenGL viewport
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
684 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
685 - (void)reshape
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
686 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
687 uint32_t d_width;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
688 uint32_t d_height;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
689 float aspectX;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
690 float aspectY;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
691 int padding = 0;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
692
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
693 NSRect frame = [self frame];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
694
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
695 glViewport(0, 0, frame.size.width, frame.size.height);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
696 glMatrixMode(GL_PROJECTION);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
697 glLoadIdentity();
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
698 glOrtho(0, frame.size.width, frame.size.height, 0, -1.0, 1.0);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
699 glMatrixMode(GL_MODELVIEW);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
700 glLoadIdentity();
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
701
15729
55aaeb7b6aae new texture frame
nplourde
parents: 15728
diff changeset
702 //set texture frame
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
703 if(vo_keepaspect)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
704 {
15571
ab43da229a76 fix signess warning
nplourde
parents: 15570
diff changeset
705 aspect( (int *)&d_width, (int *)&d_height, A_NOZOOM);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
706 d_height = ((float)d_width/movie_aspect);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
707
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
708 aspectX = (float)((float)frame.size.width/(float)d_width);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
709 aspectY = (float)((float)(frame.size.height)/(float)d_height);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
710
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
711 if((d_height*aspectX)>(frame.size.height))
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
712 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
713 padding = (frame.size.width - d_width*aspectY)/2;
25424
cf72b0793c67 Use NSMakeRect and NSRect in correct way:
ulion
parents: 25423
diff changeset
714 textureFrame = NSMakeRect(padding, 0, d_width*aspectY, d_height*aspectY);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
715 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
716 else
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
717 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
718 padding = ((frame.size.height) - d_height*aspectX)/2;
25424
cf72b0793c67 Use NSMakeRect and NSRect in correct way:
ulion
parents: 25423
diff changeset
719 textureFrame = NSMakeRect(0, padding, d_width*aspectX, d_height*aspectX);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
720 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
721 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
722 else
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
723 {
15729
55aaeb7b6aae new texture frame
nplourde
parents: 15728
diff changeset
724 textureFrame = frame;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
725 }
25446
8dfc8a3b4152 Support send mouse movements commands to mplayer.
ulion
parents: 25424
diff changeset
726 vo_dwidth = textureFrame.size.width;
8dfc8a3b4152 Support send mouse movements commands to mplayer.
ulion
parents: 25424
diff changeset
727 vo_dheight = textureFrame.size.height;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
728 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
729
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
730 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
731 Render frame
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
732 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
733 - (void) render
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
734 {
21395
dd05dd9e3e7b Fix declarations vs statements warning.
diego
parents: 18878
diff changeset
735 int curTime;
24953
aca7d0259d90 Fix the prevent system idle code. Original code also works, but not as expected.
ulion
parents: 24742
diff changeset
736 static int lastTime = 0;
21395
dd05dd9e3e7b Fix declarations vs statements warning.
diego
parents: 18878
diff changeset
737
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
738 glClear(GL_COLOR_BUFFER_BIT);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
739
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
740 glEnable(CVOpenGLTextureGetTarget(texture));
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
741 glBindTexture(CVOpenGLTextureGetTarget(texture), CVOpenGLTextureGetName(texture));
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
742
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
743 glColor3f(1,1,1);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
744 glBegin(GL_QUADS);
15729
55aaeb7b6aae new texture frame
nplourde
parents: 15728
diff changeset
745 glTexCoord2f(upperLeft[0], upperLeft[1]); glVertex2i( textureFrame.origin.x-(vo_panscan_x >> 1), textureFrame.origin.y-(vo_panscan_y >> 1));
25424
cf72b0793c67 Use NSMakeRect and NSRect in correct way:
ulion
parents: 25423
diff changeset
746 glTexCoord2f(lowerLeft[0], lowerLeft[1]); glVertex2i(textureFrame.origin.x-(vo_panscan_x >> 1), NSMaxY(textureFrame)+(vo_panscan_y >> 1));
cf72b0793c67 Use NSMakeRect and NSRect in correct way:
ulion
parents: 25423
diff changeset
747 glTexCoord2f(lowerRight[0], lowerRight[1]); glVertex2i(NSMaxX(textureFrame)+(vo_panscan_x >> 1), NSMaxY(textureFrame)+(vo_panscan_y >> 1));
cf72b0793c67 Use NSMakeRect and NSRect in correct way:
ulion
parents: 25423
diff changeset
748 glTexCoord2f(upperRight[0], upperRight[1]); glVertex2i(NSMaxX(textureFrame)+(vo_panscan_x >> 1), textureFrame.origin.y-(vo_panscan_y >> 1));
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
749 glEnd();
15339
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
750 glDisable(CVOpenGLTextureGetTarget(texture));
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
751
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
752 //render resize box
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
753 if(!isFullscreen)
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
754 {
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
755 NSRect frame = [self frame];
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
756
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
757 glBegin(GL_LINES);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
758 glColor4f(0.2, 0.2, 0.2, 0.5);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
759 glVertex2i(frame.size.width-1, frame.size.height-1); glVertex2i(frame.size.width-1, frame.size.height-1);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
760 glVertex2i(frame.size.width-1, frame.size.height-5); glVertex2i(frame.size.width-5, frame.size.height-1);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
761 glVertex2i(frame.size.width-1, frame.size.height-9); glVertex2i(frame.size.width-9, frame.size.height-1);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
762
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
763 glColor4f(0.4, 0.4, 0.4, 0.5);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
764 glVertex2i(frame.size.width-1, frame.size.height-2); glVertex2i(frame.size.width-2, frame.size.height-1);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
765 glVertex2i(frame.size.width-1, frame.size.height-6); glVertex2i(frame.size.width-6, frame.size.height-1);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
766 glVertex2i(frame.size.width-1, frame.size.height-10); glVertex2i(frame.size.width-10, frame.size.height-1);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
767
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
768 glColor4f(0.6, 0.6, 0.6, 0.5);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
769 glVertex2i(frame.size.width-1, frame.size.height-3); glVertex2i(frame.size.width-3, frame.size.height-1);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
770 glVertex2i(frame.size.width-1, frame.size.height-7); glVertex2i(frame.size.width-7, frame.size.height-1);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
771 glVertex2i(frame.size.width-1, frame.size.height-11); glVertex2i(frame.size.width-11, frame.size.height-1);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
772 glEnd();
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
773 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
774
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
775 glFlush();
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
776
28010
0a0f63090e60 factorize mouse hiding and screensaver disabling code
gpoirier
parents: 28001
diff changeset
777 curTime = TickCount()/60;
0a0f63090e60 factorize mouse hiding and screensaver disabling code
gpoirier
parents: 28001
diff changeset
778
28001
8f31ea9bca98 typo fix + readability improvement
gpoirier
parents: 27988
diff changeset
779 //auto hide mouse cursor (and future on-screen control?)
15327
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
780 if(isFullscreen && !mouseHide && !isRootwin)
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
781 {
28010
0a0f63090e60 factorize mouse hiding and screensaver disabling code
gpoirier
parents: 28001
diff changeset
782 if( ((curTime - lastMouseHide) >= 5) || (lastMouseHide == 0) )
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
783 {
18057
0e7291ee4b6b Replace deprecated function
nplourde
parents: 17725
diff changeset
784 CGDisplayHideCursor(kCGDirectMainDisplay);
28010
0a0f63090e60 factorize mouse hiding and screensaver disabling code
gpoirier
parents: 28001
diff changeset
785 mouseHide = TRUE;
0a0f63090e60 factorize mouse hiding and screensaver disabling code
gpoirier
parents: 28001
diff changeset
786 lastMouseHide = curTime;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
787 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
788 }
17546
d878e3e313eb let osx sleep if video is paused
nplourde
parents: 17358
diff changeset
789
17725
d7dd016cb97a update activity every 30 sec
nplourde
parents: 17546
diff changeset
790 //update activity every 30 seconds to prevent
17546
d878e3e313eb let osx sleep if video is paused
nplourde
parents: 17358
diff changeset
791 //screensaver from starting up.
28010
0a0f63090e60 factorize mouse hiding and screensaver disabling code
gpoirier
parents: 28001
diff changeset
792 if( ((curTime - lastScreensaverUpdate) >= 30) || (lastScreensaverUpdate == 0) )
17546
d878e3e313eb let osx sleep if video is paused
nplourde
parents: 17358
diff changeset
793 {
d878e3e313eb let osx sleep if video is paused
nplourde
parents: 17358
diff changeset
794 UpdateSystemActivity(UsrActivity);
28010
0a0f63090e60 factorize mouse hiding and screensaver disabling code
gpoirier
parents: 28001
diff changeset
795 lastScreensaverUpdate = curTime;
17546
d878e3e313eb let osx sleep if video is paused
nplourde
parents: 17358
diff changeset
796 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
797 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
798
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
799 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
800 Create OpenGL texture from current frame & set texco
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
801 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
802 - (void) setCurrentTexture
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
803 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
804 CVReturn error = kCVReturnSuccess;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
805
25180
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
806 error = CVOpenGLTextureCacheCreateTextureFromImage(NULL, textureCache, frameBuffers[image_page], 0, &texture);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
807 if(error != kCVReturnSuccess)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
808 mp_msg(MSGT_VO, MSGL_ERR,"Failed to create OpenGL texture(%d)\n", error);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
809
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
810 CVOpenGLTextureGetCleanTexCoords(texture, lowerLeft, lowerRight, upperRight, upperLeft);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
811 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
812
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
813 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
814 redraw win rect
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
815 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
816 - (void) drawRect: (NSRect *) bounds
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
817 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
818 [self render];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
819 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
820
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
821 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
822 Toggle Fullscreen
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
823 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
824 - (void) fullscreen: (BOOL) animate
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
825 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
826 static NSRect old_frame;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
827 static NSRect old_view_frame;
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
828
15573
5db3dd72c876 Fix pan-scan in fullscreen mode
nplourde
parents: 15571
diff changeset
829 panscan_calc();
5db3dd72c876 Fix pan-scan in fullscreen mode
nplourde
parents: 15571
diff changeset
830
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
831 //go fullscreen
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
832 if(vo_fs)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
833 {
15327
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
834 if(!isRootwin)
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
835 {
15882
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
836 SetSystemUIMode( kUIModeAllHidden, kUIOptionAutoShowMenuBar);
18057
0e7291ee4b6b Replace deprecated function
nplourde
parents: 17725
diff changeset
837 CGDisplayHideCursor(kCGDirectMainDisplay);
15327
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
838 mouseHide = YES;
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
839 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
840
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
841 old_frame = [window frame]; //save main window size & position
25413
8368ae92c092 screen_frame is only used for fullscreen mode.
ulion
parents: 25180
diff changeset
842 if(screen_force)
8368ae92c092 screen_frame is only used for fullscreen mode.
ulion
parents: 25180
diff changeset
843 screen_frame = [screen_handle frame];
25414
5c03a9bdf220 Record screen size and display size in vo_ variables.
ulion
parents: 25413
diff changeset
844 else {
25413
8368ae92c092 screen_frame is only used for fullscreen mode.
ulion
parents: 25180
diff changeset
845 screen_frame = [[window screen] frame];
25414
5c03a9bdf220 Record screen size and display size in vo_ variables.
ulion
parents: 25413
diff changeset
846 vo_screenwidth = screen_frame.size.width;
5c03a9bdf220 Record screen size and display size in vo_ variables.
ulion
parents: 25413
diff changeset
847 vo_screenheight = screen_frame.size.height;
5c03a9bdf220 Record screen size and display size in vo_ variables.
ulion
parents: 25413
diff changeset
848 }
25413
8368ae92c092 screen_frame is only used for fullscreen mode.
ulion
parents: 25180
diff changeset
849
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
850 [window setFrame:screen_frame display:YES animate:animate]; //zoom-in window with nice useless sfx
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
851 old_view_frame = [self bounds];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
852
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
853 //fix origin for multi screen setup
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
854 screen_frame.origin.x = 0;
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
855 screen_frame.origin.y = 0;
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
856 [self setFrame:screen_frame];
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
857 [self setNeedsDisplay:YES];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
858 [window setHasShadow:NO];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
859 isFullscreen = 1;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
860 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
861 else
15882
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
862 {
15902
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
863 SetSystemUIMode( kUIModeNormal, 0);
15882
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
864
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
865 isFullscreen = 0;
18057
0e7291ee4b6b Replace deprecated function
nplourde
parents: 17725
diff changeset
866 CGDisplayShowCursor(kCGDirectMainDisplay);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
867 mouseHide = NO;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
868
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
869 //revert window to previous setting
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
870 [self setFrame:old_view_frame];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
871 [self setNeedsDisplay:YES];
16081
72c352edce8f restore window shadow when quitting fullscreen mode
nplourde
parents: 15909
diff changeset
872 [window setHasShadow:YES];
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
873 [window setFrame:old_frame display:YES animate:animate];//zoom-out window with nice useless sfx
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
874 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
875 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
876
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
877 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
878 Toggle ontop
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
879 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
880 - (void) ontop
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
881 {
15320
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
882 if(vo_ontop)
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
883 {
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
884 [window setLevel:NSScreenSaverWindowLevel];
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
885 isOntop = YES;
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
886 }
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
887 else
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
888 {
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
889 [window setLevel:NSNormalWindowLevel];
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
890 isOntop = NO;
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
891 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
892 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
893
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
894 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
895 Toggle panscan
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
896 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
897 - (void) panscan
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
898 {
15331
7746903599b2 enable panscan
nplourde
parents: 15327
diff changeset
899 panscan_calc();
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
900 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
901
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
902 /*
15327
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
903 Toggle rootwin
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
904 */
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
905 - (void) rootwin
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
906 {
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
907 if(vo_rootwin)
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
908 {
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
909 [window setLevel:CGWindowLevelForKey(kCGDesktopWindowLevelKey)];
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
910 [window orderBack:self];
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
911 isRootwin = YES;
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
912 }
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
913 else
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
914 {
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
915 [window setLevel:NSNormalWindowLevel];
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
916 isRootwin = NO;
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
917 }
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
918 }
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
919
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
920 /*
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
921 Check event for new event
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
922 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
923 - (void) check_events
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
924 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
925 event = [NSApp nextEventMatchingMask:NSAnyEventMask untilDate:[NSDate dateWithTimeIntervalSinceNow:0.0001] inMode:NSEventTrackingRunLoopMode dequeue:YES];
25178
e9d23081b4ab Ignore empty event.
ulion
parents: 25157
diff changeset
926 if (event == nil)
e9d23081b4ab Ignore empty event.
ulion
parents: 25157
diff changeset
927 return;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
928 [NSApp sendEvent:event];
25179
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
929 // Without SDL's bootstrap code (include SDL.h in mplayer.c),
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
930 // on Leopard, we got trouble to get the play window auto focused
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
931 // when app is actived. Following code fix this problem.
27370
14c5017f40d2 Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents: 26755
diff changeset
932 #ifndef CONFIG_SDL
25179
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
933 if (isLeopardOrLater && [event type] == NSAppKitDefined
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
934 && [event subtype] == NSApplicationActivatedEventType) {
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
935 [window makeMainWindow];
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
936 [window makeKeyAndOrderFront:mpGLView];
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
937 }
6e8b40d412f0 Fix play window not get actived problem on Leopard.
ulion
parents: 25178
diff changeset
938 #endif
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
939 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
940
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
941 /*
15731
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
942 From NSView, respond to key equivalents.
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
943 */
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
944 - (BOOL)performKeyEquivalent:(NSEvent *)theEvent
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
945 {
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
946 switch([theEvent keyCode])
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
947 {
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
948 case 0x21: [window setAlphaValue: winAlpha-=0.05]; return YES;
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
949 case 0x1e: [window setAlphaValue: winAlpha+=0.05]; return YES;
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
950 }
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
951 return NO;
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
952 }
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
953
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
954 /*
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
955 Process key event
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
956 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
957 - (void) keyDown: (NSEvent *) theEvent
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
958 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
959 unsigned int key;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
960
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
961 switch([theEvent keyCode])
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
962 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
963 case 0x34:
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
964 case 0x24: key = KEY_ENTER; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
965 case 0x35: key = KEY_ESC; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
966 case 0x33: key = KEY_BACKSPACE; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
967 case 0x3A: key = KEY_BACKSPACE; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
968 case 0x3B: key = KEY_BACKSPACE; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
969 case 0x38: key = KEY_BACKSPACE; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
970 case 0x7A: key = KEY_F+1; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
971 case 0x78: key = KEY_F+2; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
972 case 0x63: key = KEY_F+3; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
973 case 0x76: key = KEY_F+4; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
974 case 0x60: key = KEY_F+5; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
975 case 0x61: key = KEY_F+6; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
976 case 0x62: key = KEY_F+7; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
977 case 0x64: key = KEY_F+8; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
978 case 0x65: key = KEY_F+9; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
979 case 0x6D: key = KEY_F+10; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
980 case 0x67: key = KEY_F+11; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
981 case 0x6F: key = KEY_F+12; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
982 case 0x72: key = KEY_INSERT; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
983 case 0x75: key = KEY_DELETE; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
984 case 0x73: key = KEY_HOME; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
985 case 0x77: key = KEY_END; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
986 case 0x45: key = '+'; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
987 case 0x4E: key = '-'; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
988 case 0x30: key = KEY_TAB; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
989 case 0x74: key = KEY_PAGE_UP; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
990 case 0x79: key = KEY_PAGE_DOWN; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
991 case 0x7B: key = KEY_LEFT; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
992 case 0x7C: key = KEY_RIGHT; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
993 case 0x7D: key = KEY_DOWN; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
994 case 0x7E: key = KEY_UP; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
995 case 0x43: key = '*'; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
996 case 0x4B: key = '/'; break;
24107
d4adc8503dd5 100l typo: ENTER --> KPENTER
diego
parents: 24106
diff changeset
997 case 0x4C: key = KEY_KPENTER; break;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
998 case 0x41: key = KEY_KPDEC; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
999 case 0x52: key = KEY_KP0; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1000 case 0x53: key = KEY_KP1; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1001 case 0x54: key = KEY_KP2; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1002 case 0x55: key = KEY_KP3; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1003 case 0x56: key = KEY_KP4; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1004 case 0x57: key = KEY_KP5; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1005 case 0x58: key = KEY_KP6; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1006 case 0x59: key = KEY_KP7; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1007 case 0x5B: key = KEY_KP8; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1008 case 0x5C: key = KEY_KP9; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1009 default: key = *[[theEvent characters] UTF8String]; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1010 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1011 mplayer_put_key(key);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1012 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1013
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1014 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1015 Process mouse button event
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1016 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1017 - (void) mouseMoved: (NSEvent *) theEvent
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1018 {
15327
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
1019 if(isFullscreen && !isRootwin)
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1020 {
18057
0e7291ee4b6b Replace deprecated function
nplourde
parents: 17725
diff changeset
1021 CGDisplayShowCursor(kCGDirectMainDisplay);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1022 mouseHide = NO;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1023 }
25468
a77c438fedf7 Do not send mouse movements events in root win mode.
ulion
parents: 25446
diff changeset
1024 if (enable_mouse_movements && !isRootwin) {
25446
8dfc8a3b4152 Support send mouse movements commands to mplayer.
ulion
parents: 25424
diff changeset
1025 NSPoint p =[self convertPoint:[theEvent locationInWindow] fromView:nil];
8dfc8a3b4152 Support send mouse movements commands to mplayer.
ulion
parents: 25424
diff changeset
1026 if ([self mouse:p inRect:textureFrame]) {
8dfc8a3b4152 Support send mouse movements commands to mplayer.
ulion
parents: 25424
diff changeset
1027 char cmdstr[40];
8dfc8a3b4152 Support send mouse movements commands to mplayer.
ulion
parents: 25424
diff changeset
1028 snprintf(cmdstr, sizeof(cmdstr), "set_mouse_pos %i %i",
8dfc8a3b4152 Support send mouse movements commands to mplayer.
ulion
parents: 25424
diff changeset
1029 (int)(vo_fs ? p.x : (p.x - textureFrame.origin.x)),
8dfc8a3b4152 Support send mouse movements commands to mplayer.
ulion
parents: 25424
diff changeset
1030 (int)(vo_fs ? [self frame].size.height - p.y: (NSMaxY(textureFrame) - p.y)));
8dfc8a3b4152 Support send mouse movements commands to mplayer.
ulion
parents: 25424
diff changeset
1031 mp_input_queue_cmd(mp_input_parse_cmd(cmdstr));
8dfc8a3b4152 Support send mouse movements commands to mplayer.
ulion
parents: 25424
diff changeset
1032 }
8dfc8a3b4152 Support send mouse movements commands to mplayer.
ulion
parents: 25424
diff changeset
1033 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1034 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1035
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1036 - (void) mouseDown: (NSEvent *) theEvent
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1037 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1038 [self mouseEvent: theEvent];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1039 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1040
24077
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1041 - (void) mouseUp: (NSEvent *) theEvent
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1042 {
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1043 [self mouseEvent: theEvent];
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1044 }
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1045
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1046 - (void) rightMouseDown: (NSEvent *) theEvent
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1047 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1048 [self mouseEvent: theEvent];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1049 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1050
24077
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1051 - (void) rightMouseUp: (NSEvent *) theEvent
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1052 {
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1053 [self mouseEvent: theEvent];
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1054 }
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1055
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1056 - (void) otherMouseDown: (NSEvent *) theEvent
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1057 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1058 [self mouseEvent: theEvent];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1059 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1060
24077
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1061 - (void) otherMouseUp: (NSEvent *) theEvent
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1062 {
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1063 [self mouseEvent: theEvent];
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1064 }
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1065
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1066 - (void) scrollWheel: (NSEvent *) theEvent
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1067 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1068 if([theEvent deltaY] > 0)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1069 mplayer_put_key(MOUSE_BTN3);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1070 else
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1071 mplayer_put_key(MOUSE_BTN4);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1072 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1073
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1074 - (void) mouseEvent: (NSEvent *) theEvent
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1075 {
24077
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1076 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
1077 {
25422
31bc1206890c Fix mouse button mapping:
ulion
parents: 25414
diff changeset
1078 int buttonNumber = [theEvent buttonNumber];
31bc1206890c Fix mouse button mapping:
ulion
parents: 25414
diff changeset
1079 // Fix to mplayer defined button order: left, middle, right
31bc1206890c Fix mouse button mapping:
ulion
parents: 25414
diff changeset
1080 if (buttonNumber == 1)
31bc1206890c Fix mouse button mapping:
ulion
parents: 25414
diff changeset
1081 buttonNumber = 2;
25423
875d77cb7bbc Fix wrong code in last commit.
ulion
parents: 25422
diff changeset
1082 else if (buttonNumber == 2)
875d77cb7bbc Fix wrong code in last commit.
ulion
parents: 25422
diff changeset
1083 buttonNumber = 1;
24077
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1084 switch([theEvent type])
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1085 {
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1086 case NSLeftMouseDown:
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1087 case NSRightMouseDown:
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1088 case NSOtherMouseDown:
25422
31bc1206890c Fix mouse button mapping:
ulion
parents: 25414
diff changeset
1089 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
1090 break;
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1091 case NSLeftMouseUp:
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1092 case NSRightMouseUp:
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1093 case NSOtherMouseUp:
25422
31bc1206890c Fix mouse button mapping:
ulion
parents: 25414
diff changeset
1094 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
1095 break;
9ce03980ed0c added double click support in vo_macosx. Patch by Ulion <ulion2002@gmail.com>
nplourde
parents: 24076
diff changeset
1096 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1097 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1098 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1099
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1100 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1101 NSResponder
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1102 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1103 - (BOOL) acceptsFirstResponder
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1104 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1105 return YES;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1106 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1107
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1108 - (BOOL) becomeFirstResponder
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1109 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1110 return YES;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1111 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1112
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1113 - (BOOL) resignFirstResponder
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1114 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1115 return YES;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
1116 }
15325
5bd11a72dc58 close button exit mplayer with esc key
nplourde
parents: 15320
diff changeset
1117
5bd11a72dc58 close button exit mplayer with esc key
nplourde
parents: 15320
diff changeset
1118 - (void)windowWillClose:(NSNotification *)aNotification
5bd11a72dc58 close button exit mplayer with esc key
nplourde
parents: 15320
diff changeset
1119 {
21551
c35115c05c64 vo_macosx, fix crash when closing window
nplourde
parents: 21546
diff changeset
1120 mpGLView = NULL;
15325
5bd11a72dc58 close button exit mplayer with esc key
nplourde
parents: 15320
diff changeset
1121 mplayer_put_key(KEY_ESC);
5bd11a72dc58 close button exit mplayer with esc key
nplourde
parents: 15320
diff changeset
1122 }
5bd11a72dc58 close button exit mplayer with esc key
nplourde
parents: 15320
diff changeset
1123 @end