annotate libvo/vo_macosx.m @ 19170:7e689bb31c07

Add simple edit list support to mov demuxer, it supports delay of audio and video tracks at the beginning of the file. E.g. video starts at 0.0s audio at 4.0s. It uses mplayers a/v-delay to achieve sync so please use with -framedrop for fastest sync. More Details in my mail to dev-eng from 2006-07-22.
author atmos4
date Sun, 23 Jul 2006 22:34:02 +0000
parents 3bf0d70b4c7f
children dd05dd9e3e7b
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>
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
12 #include <sys/shm.h>
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
13
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
14 //MPLAYER
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
15 #include "config.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
16 #include "fastmemcpy.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
17 #include "video_out.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
18 #include "video_out_internal.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
19 #include "aspect.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
20 #include "mp_msg.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
21 #include "m_option.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
22
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
23 #include "input/input.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
24 #include "input/mouse.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
25
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
26 #include "osdep/keycodes.h"
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
27
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
28 //Cocoa
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
29 NSProxy *mplayerosxProxy;
15611
2f77a2da1d82 Function name cleanup
nplourde
parents: 15610
diff changeset
30 MPlayerOpenGLView *mpGLView;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
31 NSAutoreleasePool *autoreleasepool;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
32 OSType pixelFormat;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
33
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
34 //shared memory
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
35 int shm_id;
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
36 struct shmid_ds shm_desc;
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
37 BOOL shared_buffer = false;
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
38
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
39 //Screen
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
40 int screen_id;
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
41 BOOL screen_force;
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
42 NSRect screen_frame;
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
43 NSScreen *screen_handle;
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
44 NSArray *screen_array;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
45
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
46 //image
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
47 unsigned char *image_data;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
48 static uint32_t image_width;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
49 static uint32_t image_height;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
50 static uint32_t image_depth;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
51 static uint32_t image_bytes;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
52 static uint32_t image_format;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
53
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
54 //vo
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
55 extern int vo_rootwin;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
56 extern int vo_ontop;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
57 extern int vo_fs;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
58 static int isFullscreen;
15320
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
59 static int isOntop;
15327
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
60 static int isRootwin;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
61 extern float monitor_aspect;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
62 extern int vo_keepaspect;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
63 extern float movie_aspect;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
64 static float old_movie_aspect;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
65 extern float vo_panscan;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
66
15731
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
67 static float winAlpha = 1;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
68 static int int_pause = 0;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
69
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
70 static vo_info_t info =
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
71 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
72 "Mac OSX Core Video",
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
73 "macosx",
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
74 "Nicolas Plourde <nicolas.plourde@gmail.com>",
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
75 ""
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
76 };
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
77
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
78 LIBVO_EXTERN(macosx)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
79
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
80 extern void mplayer_put_key(int code);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
81 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
82
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
83 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
84 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
85 switch (image_format)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
86 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
87 case IMGFMT_RGB32:
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
88 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
89 break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
90 case IMGFMT_YUY2:
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
91 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
92 break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
93 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
94 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
95
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 16145
diff changeset
96 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
97 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
98 int i;
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
99
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
100 //init screen
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
101 screen_array = [NSScreen screens];
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
102 if(screen_id < [screen_array count])
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
103 {
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
104 screen_handle = [screen_array objectAtIndex:screen_id];
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
105 }
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
106 else
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
107 {
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
108 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
109 screen_handle = [screen_array objectAtIndex:0];
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
110 screen_id = 0;
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
111 }
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
112 screen_frame = [screen_handle frame];
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
113
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
114 //misc mplayer setup
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
115 image_width = width;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
116 image_height = height;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
117 switch (image_format)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
118 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
119 case IMGFMT_BGR32:
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
120 case IMGFMT_RGB32:
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
121 image_depth = 32;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
122 break;
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
123 case IMGFMT_YUY2:
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
124 image_depth = 16;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
125 break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
126 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
127 image_bytes = (image_depth + 7) / 8;
18878
3bf0d70b4c7f rm unnecesary casts from void* - part 2
reynaldo
parents: 18057
diff changeset
128 image_data = malloc(image_width*image_height*image_bytes);
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
129
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
130 if(!shared_buffer)
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
131 {
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
132 monitor_aspect = (float)screen_frame.size.width/(float)screen_frame.size.height;
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
133
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
134 //set aspect
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
135 panscan_init();
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
136 aspect_save_orig(width,height);
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
137 aspect_save_prescale(d_width,d_height);
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
138 aspect_save_screenres(screen_frame.size.width, screen_frame.size.height);
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
139 aspect((int *)&d_width,(int *)&d_height,A_NOZOOM);
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
140
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
141 movie_aspect = (float)d_width/(float)d_height;
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
142 old_movie_aspect = movie_aspect;
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
143
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
144 vo_fs = flags & VOFLAG_FULLSCREEN;
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
145
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
146 //config OpenGL View
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
147 [mpGLView config];
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
148 [mpGLView reshape];
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
149 }
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
150 else
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
151 {
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
152 movie_aspect = (float)d_width/(float)d_height;
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
153
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
154 shm_id = shmget(9849, image_width*image_height*image_bytes, IPC_CREAT | 0666);
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
155 if (shm_id == -1)
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
156 {
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
157 perror("vo_mplayer shmget: ");
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
158 return 1;
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
159 }
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
160
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
161 image_data = shmat(shm_id, NULL, 0);
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
162 if (!image_data)
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
163 {
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
164 perror("vo_mplayer shmat: ");
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
165 return 1;
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
166 }
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
167
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
168 //connnect to mplayerosx
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
169 mplayerosxProxy=[NSConnection rootProxyForConnectionWithRegisteredName:@"mplayerosx" host:nil];
18057
0e7291ee4b6b Replace deprecated function
nplourde
parents: 17725
diff changeset
170 [mplayerosxProxy startWithWidth: image_width withHeight: image_height withBytes: image_bytes withAspect:(int)(movie_aspect*100)];
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
171 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
172 return 0;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
173 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
174
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
175 static void check_events(void)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
176 {
15611
2f77a2da1d82 Function name cleanup
nplourde
parents: 15610
diff changeset
177 [mpGLView check_events];
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
178 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
179
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
180 static void draw_osd(void)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
181 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
182 vo_draw_text(image_width, image_height, draw_alpha);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
183 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
184
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
185 static void flip_page(void)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
186 {
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
187 if(shared_buffer)
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
188 [mplayerosxProxy render];
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
189 else
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
190 [mpGLView render];
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
191 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
192
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 16145
diff changeset
193 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
194 {
15611
2f77a2da1d82 Function name cleanup
nplourde
parents: 15610
diff changeset
195 [mpGLView setCurrentTexture];
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
196 return 0;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
197 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
198
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
199
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 16145
diff changeset
200 static int draw_frame(uint8_t *src[])
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
201 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
202 switch (image_format)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
203 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
204 case IMGFMT_BGR32:
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
205 case IMGFMT_RGB32:
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
206 memcpy(image_data, src[0], image_width*image_height*image_bytes);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
207 break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
208
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
209 case IMGFMT_YUY2:
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
210 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
211 break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
212 }
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
213
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
214 if(!shared_buffer)
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
215 [mpGLView setCurrentTexture];
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
216
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
217 return 0;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
218 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
219
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 16145
diff changeset
220 static int query_format(uint32_t format)
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
221 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
222 image_format = format;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
223
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
224 switch(format)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
225 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
226 case IMGFMT_YUY2:
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
227 pixelFormat = kYUVSPixelFormat;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
228 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
229
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
230 case IMGFMT_RGB32:
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
231 case IMGFMT_BGR32:
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
232 pixelFormat = k32ARGBPixelFormat;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
233 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
234 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
235 return 0;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
236 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
237
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
238 static void uninit(void)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
239 {
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
240 if(shared_buffer)
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
241 {
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
242 [mplayerosxProxy stop];
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
243
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
244 if (shmdt(image_data) == -1)
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
245 mp_msg(MSGT_VO, MSGL_FATAL, "uninit: shmdt failed\n");
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
246
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
247 if (shmctl(shm_id, IPC_RMID, &shm_desc) == -1)
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
248 mp_msg(MSGT_VO, MSGL_FATAL, "uninit: shmctl failed\n");
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
249 }
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
250
16145
b010355f31dc exit kiosk mode and show mouse cursor in uninit
nplourde
parents: 16144
diff changeset
251 SetSystemUIMode( kUIModeNormal, 0);
18057
0e7291ee4b6b Replace deprecated function
nplourde
parents: 17725
diff changeset
252 CGDisplayShowCursor(kCGDirectMainDisplay);
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
253
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
254 [autoreleasepool release];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
255 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
256
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 16145
diff changeset
257 static int preinit(const char *arg)
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
258 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
259 int parse_err = 0;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
260
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
261 if(arg)
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
262 {
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
263 char *parse_pos = (char *)&arg[0];
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
264 while (parse_pos[0] && !parse_err)
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
265 {
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
266 if (strncmp (parse_pos, "device_id=", 10) == 0)
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
267 {
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
268 parse_pos = &parse_pos[10];
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
269 screen_id = strtol(parse_pos, &parse_pos, 0);
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
270 screen_force = YES;
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
271 }
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
272 if (strncmp (parse_pos, "shared_buffer", 13) == 0)
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
273 {
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
274 parse_pos = &parse_pos[13];
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
275 shared_buffer = YES;
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
276 }
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
277 if (parse_pos[0] == ':') parse_pos = &parse_pos[1];
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
278 else if (parse_pos[0]) parse_err = 1;
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
279 }
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
280 }
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
281
15737
0c3939433cef set nsapp and setup cocoa with NSApplicationLoad
nplourde
parents: 15736
diff changeset
282 NSApplicationLoad();
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
283 autoreleasepool = [[NSAutoreleasePool alloc] init];
15737
0c3939433cef set nsapp and setup cocoa with NSApplicationLoad
nplourde
parents: 15736
diff changeset
284 NSApp = [NSApplication sharedApplication];
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
285
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
286 if(!shared_buffer)
16144
6ea7c0735fce properly release window
nplourde
parents: 16081
diff changeset
287 {
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
288 #if !defined (MACOSX_FINDER_SUPPORT) || !defined (HAVE_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
289 //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
290 //it uses an Apple private function to request foreground operation
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
291 void CPSEnableForegroundOperation(ProcessSerialNumber* psn);
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
292 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
293 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
294
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
295 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
296 {
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
297 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
298 {
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
299 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
300 {
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
301 CPSEnableForegroundOperation(&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
302 }
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
303 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
304 }
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
305 }
22ec2e9cb530 do not give focus to vo_macosx in shared buffer mode. Patch by Hector Chu<hectorchu@gmail.com>
nplourde
parents: 16385
diff changeset
306 #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
307
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
308 if(!mpGLView)
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
309 {
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
310 mpGLView = [[MPlayerOpenGLView alloc] initWithFrame:NSMakeRect(0, 0, 100, 100) pixelFormat:[MPlayerOpenGLView defaultPixelFormat]];
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
311 [mpGLView autorelease];
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
312 }
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
313
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
314 [mpGLView display];
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
315 [mpGLView preinit];
16144
6ea7c0735fce properly release window
nplourde
parents: 16081
diff changeset
316 }
6ea7c0735fce properly release window
nplourde
parents: 16081
diff changeset
317
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
318 return 0;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
319 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
320
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 16145
diff changeset
321 static int control(uint32_t request, void *data, ...)
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
322 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
323 switch (request)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
324 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
325 case VOCTRL_PAUSE: return (int_pause=1);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
326 case VOCTRL_RESUME: return (int_pause=0);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
327 case VOCTRL_QUERY_FORMAT: return query_format(*((uint32_t*)data));
15611
2f77a2da1d82 Function name cleanup
nplourde
parents: 15610
diff changeset
328 case VOCTRL_ONTOP: vo_ontop = (!(vo_ontop)); [mpGLView ontop]; return VO_TRUE;
2f77a2da1d82 Function name cleanup
nplourde
parents: 15610
diff changeset
329 case VOCTRL_ROOTWIN: vo_rootwin = (!(vo_rootwin)); [mpGLView rootwin]; return VO_TRUE;
2f77a2da1d82 Function name cleanup
nplourde
parents: 15610
diff changeset
330 case VOCTRL_FULLSCREEN: vo_fs = (!(vo_fs)); [mpGLView fullscreen: YES]; return VO_TRUE;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
331 case VOCTRL_GET_PANSCAN: return VO_TRUE;
15611
2f77a2da1d82 Function name cleanup
nplourde
parents: 15610
diff changeset
332 case VOCTRL_SET_PANSCAN: [mpGLView panscan]; return VO_TRUE;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
333 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
334 return VO_NOTIMPL;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
335 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
336
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
337 //////////////////////////////////////////////////////////////////////////
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
338 // NSOpenGLView Subclass
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
339 //////////////////////////////////////////////////////////////////////////
15611
2f77a2da1d82 Function name cleanup
nplourde
parents: 15610
diff changeset
340 @implementation MPlayerOpenGLView
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
341 - (id) preinit
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
342 {
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
343 //init menu
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
344 [self initMenu];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
345
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
346 //create window
15747
fbf14e1ab725 osx 10.3 dont like to have a window init with no size
nplourde
parents: 15737
diff changeset
347 window = [[NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, 100, 100)
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
348 styleMask:NSTitledWindowMask|NSTexturedBackgroundWindowMask|NSClosableWindowMask|NSMiniaturizableWindowMask|NSResizableWindowMask
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
349 backing:NSBackingStoreBuffered defer:NO];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
350
16144
6ea7c0735fce properly release window
nplourde
parents: 16081
diff changeset
351 [window autorelease];
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
352 [window setDelegate:mpGLView];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
353 [window setContentView:mpGLView];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
354 [window setInitialFirstResponder:mpGLView];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
355 [window setAcceptsMouseMovedEvents:YES];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
356 [window setTitle:@"MPlayer - The Movie Player"];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
357
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
358 isFullscreen = 0;
15855
1ca8b5873c3f keep window size when changing aspect
nplourde
parents: 15854
diff changeset
359 winSizeMult = 1;
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
360 }
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
361
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
362 - (id) config
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
363 {
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
364 uint32_t d_width;
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
365 uint32_t d_height;
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
366
15610
9a4d9b7c8dd6 Sync swap with VBL.
nplourde
parents: 15573
diff changeset
367 long swapInterval = 1;
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
368
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
369 NSRect frame;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
370 CVReturn error = kCVReturnSuccess;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
371
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
372 //config window
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
373 aspect((int *)&d_width, (int *)&d_height,A_NOZOOM);
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
374 frame = NSMakeRect(0, 0, d_width, d_height);
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
375 [window setContentSize: frame.size];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
376
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
377 //create OpenGL Context
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
378 glContext = [[NSOpenGLContext alloc] initWithFormat:[NSOpenGLView defaultPixelFormat] shareContext:nil];
15647
0968fd3d5675 Pure cosmetic
nplourde
parents: 15612
diff changeset
379
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
380 [self setOpenGLContext:glContext];
15647
0968fd3d5675 Pure cosmetic
nplourde
parents: 15612
diff changeset
381 [glContext setValues:&swapInterval forParameter:NSOpenGLCPSwapInterval];
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
382 [glContext setView:self];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
383 [glContext makeCurrentContext];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
384
15647
0968fd3d5675 Pure cosmetic
nplourde
parents: 15612
diff changeset
385 error = CVPixelBufferCreateWithBytes( NULL, image_width, image_height, pixelFormat, image_data, image_width*image_bytes, NULL, NULL, NULL, &currentFrameBuffer);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
386 if(error != kCVReturnSuccess)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
387 mp_msg(MSGT_VO, MSGL_ERR,"Failed to create Pixel Buffer(%d)\n", error);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
388
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
389 error = CVOpenGLTextureCacheCreate(NULL, 0, [glContext CGLContextObj], [[self pixelFormat] CGLPixelFormatObj], 0, &textureCache);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
390 if(error != kCVReturnSuccess)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
391 mp_msg(MSGT_VO, MSGL_ERR,"Failed to create OpenGL texture Cache(%d)\n", error);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
392
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
393 error = CVOpenGLTextureCacheCreateTextureFromImage( NULL, textureCache, currentFrameBuffer, 0, &texture);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
394 if(error != kCVReturnSuccess)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
395 mp_msg(MSGT_VO, MSGL_ERR,"Failed to create OpenGL texture(%d)\n", error);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
396
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
397 //show window
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
398 [window center];
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
399 [window makeKeyAndOrderFront:mpGLView];
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
400
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
401 if(vo_rootwin)
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
402 [mpGLView rootwin];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
403
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
404 if(vo_fs)
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
405 [mpGLView fullscreen: NO];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
406
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
407 if(vo_ontop)
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
408 [mpGLView ontop];
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
409 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
410
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
411 /*
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
412 Init Menu
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
413 */
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
414 - (void)initMenu
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
415 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
416 NSMenu *menu;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
417 NSMenuItem *menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
418
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
419 [NSApp setMainMenu:[[NSMenu alloc] init]];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
420
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
421 //Create Movie Menu
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
422 menu = [[NSMenu alloc] initWithTitle:@"Movie"];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
423 menuItem = [[NSMenuItem alloc] initWithTitle:@"Half Size" action:@selector(menuAction:) keyEquivalent:@"0"]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
424 kHalfScreenCmd = menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
425 menuItem = [[NSMenuItem alloc] initWithTitle:@"Normal Size" action:@selector(menuAction:) keyEquivalent:@"1"]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
426 kNormalScreenCmd = menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
427 menuItem = [[NSMenuItem alloc] initWithTitle:@"Double Size" action:@selector(menuAction:) keyEquivalent:@"2"]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
428 kDoubleScreenCmd = menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
429 menuItem = [[NSMenuItem alloc] initWithTitle:@"Full Size" action:@selector(menuAction:) keyEquivalent:@"f"]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
430 kFullScreenCmd = menuItem;
15909
b1bc923b38fe resize video after keep aspect menu item toggle
nplourde
parents: 15902
diff changeset
431 menuItem = (NSMenuItem *)[NSMenuItem separatorItem]; [menu addItem:menuItem];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
432
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
433 NSMenu *aspectMenu;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
434 aspectMenu = [[NSMenu alloc] initWithTitle:@"Aspect Ratio"];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
435 menuItem = [[NSMenuItem alloc] initWithTitle:@"Keep" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
436 if(vo_keepaspect) [menuItem setState:NSOnState];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
437 kKeepAspectCmd = menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
438 menuItem = [[NSMenuItem alloc] initWithTitle:@"Pan-Scan" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
439 if(vo_panscan) [menuItem setState:NSOnState];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
440 kPanScanCmd = menuItem;
15909
b1bc923b38fe resize video after keep aspect menu item toggle
nplourde
parents: 15902
diff changeset
441 menuItem = (NSMenuItem *)[NSMenuItem separatorItem]; [aspectMenu addItem:menuItem];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
442 menuItem = [[NSMenuItem alloc] initWithTitle:@"Original" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
443 kAspectOrgCmd = menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
444 menuItem = [[NSMenuItem alloc] initWithTitle:@"4:3" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
445 kAspectFullCmd = menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
446 menuItem = [[NSMenuItem alloc] initWithTitle:@"16:9" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
447 kAspectWideCmd = menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
448 menuItem = [[NSMenuItem alloc] initWithTitle:@"Aspect Ratio" action:nil keyEquivalent:@""];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
449 [menuItem setSubmenu:aspectMenu];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
450 [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
451 [aspectMenu release];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
452
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
453 //Add to menubar
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
454 menuItem = [[NSMenuItem alloc] initWithTitle:@"Movie" action:nil keyEquivalent:@""];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
455 [menuItem setSubmenu:menu];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
456 [[NSApp mainMenu] addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
457
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
458 //Create Window Menu
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
459 menu = [[NSMenu alloc] initWithTitle:@"Window"];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
460
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
461 menuItem = [[NSMenuItem alloc] initWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@"m"]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
462 menuItem = [[NSMenuItem alloc] initWithTitle:@"Zoom" action:@selector(performZoom:) keyEquivalent:@""]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
463
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
464 //Add to menubar
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
465 menuItem = [[NSMenuItem alloc] initWithTitle:@"Window" action:nil keyEquivalent:@""];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
466 [menuItem setSubmenu:menu];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
467 [[NSApp mainMenu] addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
468 [NSApp setWindowsMenu:menu];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
469
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
470 [menu release];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
471 [menuItem release];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
472 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
473
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
474 /*
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
475 Menu Action
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
476 */
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
477 - (void)menuAction:(id)sender
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
478 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
479 uint32_t d_width;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
480 uint32_t d_height;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
481 NSRect frame;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
482
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
483 aspect((int *)&d_width, (int *)&d_height,A_NOZOOM);
15731
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
484
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
485 if(sender == kQuitCmd)
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
486 {
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
487 mplayer_put_key(KEY_ESC);
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
488 }
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
489
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
490 if(sender == kHalfScreenCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
491 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
492 if(isFullscreen) {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
493 vo_fs = (!(vo_fs)); [self fullscreen:YES];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
494 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
495
15855
1ca8b5873c3f keep window size when changing aspect
nplourde
parents: 15854
diff changeset
496 winSizeMult = 0.5;
1ca8b5873c3f keep window size when changing aspect
nplourde
parents: 15854
diff changeset
497 frame.size.width = (d_width*winSizeMult);
1ca8b5873c3f keep window size when changing aspect
nplourde
parents: 15854
diff changeset
498 frame.size.height = ((d_width/movie_aspect)*winSizeMult);
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
499 [window setContentSize: frame.size];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
500 [self reshape];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
501 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
502 if(sender == kNormalScreenCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
503 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
504 if(isFullscreen) {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
505 vo_fs = (!(vo_fs)); [self fullscreen:YES];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
506 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
507
15855
1ca8b5873c3f keep window size when changing aspect
nplourde
parents: 15854
diff changeset
508 winSizeMult = 1;
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
509 frame.size.width = d_width;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
510 frame.size.height = d_width/movie_aspect;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
511 [window setContentSize: frame.size];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
512 [self reshape];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
513 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
514 if(sender == kDoubleScreenCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
515 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
516 if(isFullscreen) {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
517 vo_fs = (!(vo_fs)); [self fullscreen:YES];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
518 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
519
15855
1ca8b5873c3f keep window size when changing aspect
nplourde
parents: 15854
diff changeset
520 winSizeMult = 2;
1ca8b5873c3f keep window size when changing aspect
nplourde
parents: 15854
diff changeset
521 frame.size.width = d_width*winSizeMult;
1ca8b5873c3f keep window size when changing aspect
nplourde
parents: 15854
diff changeset
522 frame.size.height = (d_width/movie_aspect)*winSizeMult;
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
523 [window setContentSize: frame.size];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
524 [self reshape];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
525 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
526 if(sender == kFullScreenCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
527 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
528 vo_fs = (!(vo_fs));
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
529 [self fullscreen:YES];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
530 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
531
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
532 if(sender == kKeepAspectCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
533 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
534 vo_keepaspect = (!(vo_keepaspect));
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
535 if(vo_keepaspect)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
536 [kKeepAspectCmd setState:NSOnState];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
537 else
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
538 [kKeepAspectCmd setState:NSOffState];
15909
b1bc923b38fe resize video after keep aspect menu item toggle
nplourde
parents: 15902
diff changeset
539
b1bc923b38fe resize video after keep aspect menu item toggle
nplourde
parents: 15902
diff changeset
540 [self reshape];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
541 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
542
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
543 if(sender == kPanScanCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
544 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
545 vo_panscan = (!(vo_panscan));
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
546 if(vo_panscan)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
547 [kPanScanCmd setState:NSOnState];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
548 else
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
549 [kPanScanCmd setState:NSOffState];
15902
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
550
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
551 [self panscan];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
552 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
553
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
554 if(sender == kAspectOrgCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
555 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
556 movie_aspect = old_movie_aspect;
15902
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
557
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
558 if(isFullscreen)
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
559 {
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
560 [self reshape];
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
561 }
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
562 else
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
563 {
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
564 frame.size.width = d_width*winSizeMult;
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
565 frame.size.height = (d_width/movie_aspect)*winSizeMult;
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
566 [window setContentSize: frame.size];
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
567 [self reshape];
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
568 }
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
569 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
571 if(sender == kAspectFullCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
572 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
573 movie_aspect = 4.0f/3.0f;
15882
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
574
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
575 if(isFullscreen)
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
576 {
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
577 [self reshape];
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
578 }
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
579 else
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
580 {
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
581 frame.size.width = d_width*winSizeMult;
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
582 frame.size.height = (d_width/movie_aspect)*winSizeMult;
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
583 [window setContentSize: frame.size];
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
584 [self reshape];
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
585 }
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
586 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
587
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
588 if(sender == kAspectWideCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
589 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
590 movie_aspect = 16.0f/9.0f;
15882
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
591
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
592 if(isFullscreen)
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
593 {
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
594 [self reshape];
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
595 }
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
596 else
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
597 {
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
598 frame.size.width = d_width*winSizeMult;
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
599 frame.size.height = (d_width/movie_aspect)*winSizeMult;
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
600 [window setContentSize: frame.size];
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
601 [self reshape];
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
602 }
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
603 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
604 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
605
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
606 /*
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
607 Setup OpenGL
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
608 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
609 - (void)prepareOpenGL
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
610 {
15339
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
611 glEnable(GL_BLEND);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
612 glDisable(GL_DEPTH_TEST);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
613 glDepthMask(GL_FALSE);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
614 glDisable(GL_CULL_FACE);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
615 [self reshape];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
616 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
617
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
618 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
619 reshape OpenGL viewport
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
620 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
621 - (void)reshape
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
622 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
623 uint32_t d_width;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
624 uint32_t d_height;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
625 float aspectX;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
626 float aspectY;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
627 int padding = 0;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
628
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
629 NSRect frame = [self frame];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
630
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
631 glViewport(0, 0, frame.size.width, frame.size.height);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
632 glMatrixMode(GL_PROJECTION);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
633 glLoadIdentity();
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
634 glOrtho(0, frame.size.width, frame.size.height, 0, -1.0, 1.0);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
635 glMatrixMode(GL_MODELVIEW);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
636 glLoadIdentity();
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
637
15729
55aaeb7b6aae new texture frame
nplourde
parents: 15728
diff changeset
638 //set texture frame
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
639 if(vo_keepaspect)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
640 {
15571
ab43da229a76 fix signess warning
nplourde
parents: 15570
diff changeset
641 aspect( (int *)&d_width, (int *)&d_height, A_NOZOOM);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
642 d_height = ((float)d_width/movie_aspect);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
643
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
644 aspectX = (float)((float)frame.size.width/(float)d_width);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
645 aspectY = (float)((float)(frame.size.height)/(float)d_height);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
646
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
647 if((d_height*aspectX)>(frame.size.height))
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
648 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
649 padding = (frame.size.width - d_width*aspectY)/2;
15729
55aaeb7b6aae new texture frame
nplourde
parents: 15728
diff changeset
650 textureFrame = NSMakeRect(padding, 0, d_width*aspectY+padding, d_height*aspectY);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
651 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
652 else
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
653 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
654 padding = ((frame.size.height) - d_height*aspectX)/2;
15729
55aaeb7b6aae new texture frame
nplourde
parents: 15728
diff changeset
655 textureFrame = NSMakeRect(0, padding, d_width*aspectX, d_height*aspectX+padding);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
656 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
657 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
658 else
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
659 {
15729
55aaeb7b6aae new texture frame
nplourde
parents: 15728
diff changeset
660 textureFrame = frame;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
661 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
662 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
663
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
664 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
665 Render frame
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
666 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
667 - (void) render
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
668 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
669 glClear(GL_COLOR_BUFFER_BIT);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
670
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
671 glEnable(CVOpenGLTextureGetTarget(texture));
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
672 glBindTexture(CVOpenGLTextureGetTarget(texture), CVOpenGLTextureGetName(texture));
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
673
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
674 glColor3f(1,1,1);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
675 glBegin(GL_QUADS);
15729
55aaeb7b6aae new texture frame
nplourde
parents: 15728
diff changeset
676 glTexCoord2f(upperLeft[0], upperLeft[1]); glVertex2i( textureFrame.origin.x-(vo_panscan_x >> 1), textureFrame.origin.y-(vo_panscan_y >> 1));
55aaeb7b6aae new texture frame
nplourde
parents: 15728
diff changeset
677 glTexCoord2f(lowerLeft[0], lowerLeft[1]); glVertex2i( textureFrame.origin.x-(vo_panscan_x >> 1), textureFrame.size.height+(vo_panscan_y >> 1));
55aaeb7b6aae new texture frame
nplourde
parents: 15728
diff changeset
678 glTexCoord2f(lowerRight[0], lowerRight[1]); glVertex2i( textureFrame.size.width+(vo_panscan_x >> 1), textureFrame.size.height+(vo_panscan_y >> 1));
55aaeb7b6aae new texture frame
nplourde
parents: 15728
diff changeset
679 glTexCoord2f(upperRight[0], upperRight[1]); glVertex2i( textureFrame.size.width+(vo_panscan_x >> 1), textureFrame.origin.y-(vo_panscan_y >> 1));
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
680 glEnd();
15339
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
681 glDisable(CVOpenGLTextureGetTarget(texture));
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
682
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
683 //render resize box
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
684 if(!isFullscreen)
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
685 {
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
686 NSRect frame = [self frame];
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
687
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
688 glBegin(GL_LINES);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
689 glColor4f(0.2, 0.2, 0.2, 0.5);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
690 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
691 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
692 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
693
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
694 glColor4f(0.4, 0.4, 0.4, 0.5);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
695 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
696 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
697 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
698
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
699 glColor4f(0.6, 0.6, 0.6, 0.5);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
700 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
701 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
702 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
703 glEnd();
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
704 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
705
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
706 glFlush();
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
707
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
708 //auto hide mouse cursor and futur on-screen control?
15327
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
709 if(isFullscreen && !mouseHide && !isRootwin)
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
710 {
18057
0e7291ee4b6b Replace deprecated function
nplourde
parents: 17725
diff changeset
711 int curTime = TickCount()/60;
0e7291ee4b6b Replace deprecated function
nplourde
parents: 17725
diff changeset
712 static int lastTime = 0;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
713
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
714 if( ((curTime - lastTime) >= 5) || (lastTime == 0) )
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
715 {
18057
0e7291ee4b6b Replace deprecated function
nplourde
parents: 17725
diff changeset
716 CGDisplayHideCursor(kCGDirectMainDisplay);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
717 mouseHide = YES;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
718 lastTime = curTime;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
719 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
720 }
17546
d878e3e313eb let osx sleep if video is paused
nplourde
parents: 17358
diff changeset
721
17725
d7dd016cb97a update activity every 30 sec
nplourde
parents: 17546
diff changeset
722 //update activity every 30 seconds to prevent
17546
d878e3e313eb let osx sleep if video is paused
nplourde
parents: 17358
diff changeset
723 //screensaver from starting up.
18057
0e7291ee4b6b Replace deprecated function
nplourde
parents: 17725
diff changeset
724 int curTime = TickCount()/60;
0e7291ee4b6b Replace deprecated function
nplourde
parents: 17725
diff changeset
725 static int lastTime = 0;
0e7291ee4b6b Replace deprecated function
nplourde
parents: 17725
diff changeset
726
0e7291ee4b6b Replace deprecated function
nplourde
parents: 17725
diff changeset
727 if( ((curTime - lastTime) >= 30) || (lastTime == 0) )
17546
d878e3e313eb let osx sleep if video is paused
nplourde
parents: 17358
diff changeset
728 {
d878e3e313eb let osx sleep if video is paused
nplourde
parents: 17358
diff changeset
729 UpdateSystemActivity(UsrActivity);
d878e3e313eb let osx sleep if video is paused
nplourde
parents: 17358
diff changeset
730 lastTime = curTime;
d878e3e313eb let osx sleep if video is paused
nplourde
parents: 17358
diff changeset
731 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
732 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
733
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
734 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
735 Create OpenGL texture from current frame & set texco
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
736 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
737 - (void) setCurrentTexture
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
738 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
739 CVReturn error = kCVReturnSuccess;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
740
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
741 error = CVOpenGLTextureCacheCreateTextureFromImage (NULL, textureCache, currentFrameBuffer, 0, &texture);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
742 if(error != kCVReturnSuccess)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
743 mp_msg(MSGT_VO, MSGL_ERR,"Failed to create OpenGL texture(%d)\n", error);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
744
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
745 CVOpenGLTextureGetCleanTexCoords(texture, lowerLeft, lowerRight, upperRight, upperLeft);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
746 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
747
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
748 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
749 redraw win rect
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
750 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
751 - (void) drawRect: (NSRect *) bounds
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
752 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
753 [self render];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
754 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
755
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
756 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
757 Toggle Fullscreen
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
758 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
759 - (void) fullscreen: (BOOL) animate
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
760 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
761 static NSRect old_frame;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
762 static NSRect old_view_frame;
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
763
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
764 if(screen_force)
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
765 screen_frame = [screen_handle frame];
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
766 else
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
767 screen_frame = [[window screen] frame];
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
768
15573
5db3dd72c876 Fix pan-scan in fullscreen mode
nplourde
parents: 15571
diff changeset
769 panscan_calc();
5db3dd72c876 Fix pan-scan in fullscreen mode
nplourde
parents: 15571
diff changeset
770
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
771 //go fullscreen
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
772 if(vo_fs)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
773 {
15327
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
774 if(!isRootwin)
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
775 {
15882
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
776 SetSystemUIMode( kUIModeAllHidden, kUIOptionAutoShowMenuBar);
18057
0e7291ee4b6b Replace deprecated function
nplourde
parents: 17725
diff changeset
777 CGDisplayHideCursor(kCGDirectMainDisplay);
15327
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
778 mouseHide = YES;
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
779 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
780
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
781 old_frame = [window frame]; //save main window size & position
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
782 [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
783 old_view_frame = [self bounds];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
784
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
785 //fix origin for multi screen setup
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
786 screen_frame.origin.x = 0;
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
787 screen_frame.origin.y = 0;
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
788 [self setFrame:screen_frame];
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
789 [self setNeedsDisplay:YES];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
790 [window setHasShadow:NO];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
791 isFullscreen = 1;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
792 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
793 else
15882
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
794 {
15902
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
795 SetSystemUIMode( kUIModeNormal, 0);
15882
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
796
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
797 isFullscreen = 0;
18057
0e7291ee4b6b Replace deprecated function
nplourde
parents: 17725
diff changeset
798 CGDisplayShowCursor(kCGDirectMainDisplay);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
799 mouseHide = NO;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
800
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
801 //revert window to previous setting
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
802 [self setFrame:old_view_frame];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
803 [self setNeedsDisplay:YES];
16081
72c352edce8f restore window shadow when quitting fullscreen mode
nplourde
parents: 15909
diff changeset
804 [window setHasShadow:YES];
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
805 [window setFrame:old_frame display:YES animate:animate];//zoom-out window with nice useless sfx
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
806 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
807 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
808
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
809 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
810 Toggle ontop
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
811 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
812 - (void) ontop
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
813 {
15320
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
814 if(vo_ontop)
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
815 {
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
816 [window setLevel:NSScreenSaverWindowLevel];
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
817 isOntop = YES;
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
818 }
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
819 else
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
820 {
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
821 [window setLevel:NSNormalWindowLevel];
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
822 isOntop = NO;
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
823 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
824 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
825
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
826 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
827 Toggle panscan
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
828 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
829 - (void) panscan
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
830 {
15331
7746903599b2 enable panscan
nplourde
parents: 15327
diff changeset
831 panscan_calc();
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
832 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
833
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
834 /*
15327
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
835 Toggle rootwin
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
836 */
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
837 - (void) rootwin
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
838 {
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
839 if(vo_rootwin)
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
840 {
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
841 [window setLevel:CGWindowLevelForKey(kCGDesktopWindowLevelKey)];
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
842 [window orderBack:self];
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
843 isRootwin = YES;
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
844 }
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
845 else
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
846 {
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
847 [window setLevel:NSNormalWindowLevel];
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
848 isRootwin = NO;
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
849 }
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
850 }
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
851
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
852 /*
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
853 Check event for new event
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
854 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
855 - (void) check_events
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
856 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
857 event = [NSApp nextEventMatchingMask:NSAnyEventMask untilDate:[NSDate dateWithTimeIntervalSinceNow:0.0001] inMode:NSEventTrackingRunLoopMode dequeue:YES];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
858 [NSApp sendEvent:event];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
859 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
860
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
861 /*
15731
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
862 From NSView, respond to key equivalents.
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
863 */
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
864 - (BOOL)performKeyEquivalent:(NSEvent *)theEvent
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
865 {
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
866 switch([theEvent keyCode])
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
867 {
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
868 case 0x21: [window setAlphaValue: winAlpha-=0.05]; return YES;
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
869 case 0x1e: [window setAlphaValue: winAlpha+=0.05]; return YES;
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
870 }
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
871 return NO;
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
872 }
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
873
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
874 /*
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
875 Process key event
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
876 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
877 - (void) keyDown: (NSEvent *) theEvent
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
878 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
879 unsigned int key;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
880
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
881 switch([theEvent keyCode])
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
882 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
883 case 0x34:
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
884 case 0x24: key = KEY_ENTER; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
885 case 0x35: key = KEY_ESC; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
886 case 0x33: key = KEY_BACKSPACE; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
887 case 0x3A: key = KEY_BACKSPACE; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
888 case 0x3B: key = KEY_BACKSPACE; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
889 case 0x38: key = KEY_BACKSPACE; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
890 case 0x7A: key = KEY_F+1; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
891 case 0x78: key = KEY_F+2; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
892 case 0x63: key = KEY_F+3; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
893 case 0x76: key = KEY_F+4; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
894 case 0x60: key = KEY_F+5; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
895 case 0x61: key = KEY_F+6; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
896 case 0x62: key = KEY_F+7; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
897 case 0x64: key = KEY_F+8; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
898 case 0x65: key = KEY_F+9; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
899 case 0x6D: key = KEY_F+10; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
900 case 0x67: key = KEY_F+11; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
901 case 0x6F: key = KEY_F+12; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
902 case 0x72: key = KEY_INSERT; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
903 case 0x75: key = KEY_DELETE; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
904 case 0x73: key = KEY_HOME; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
905 case 0x77: key = KEY_END; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
906 case 0x45: key = '+'; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
907 case 0x4E: key = '-'; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
908 case 0x30: key = KEY_TAB; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
909 case 0x74: key = KEY_PAGE_UP; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
910 case 0x79: key = KEY_PAGE_DOWN; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
911 case 0x7B: key = KEY_LEFT; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
912 case 0x7C: key = KEY_RIGHT; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
913 case 0x7D: key = KEY_DOWN; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
914 case 0x7E: key = KEY_UP; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
915 case 0x43: key = '*'; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
916 case 0x4B: key = '/'; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
917 case 0x4C: key = KEY_BACKSPACE; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
918 case 0x41: key = KEY_KPDEC; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
919 case 0x52: key = KEY_KP0; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
920 case 0x53: key = KEY_KP1; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
921 case 0x54: key = KEY_KP2; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
922 case 0x55: key = KEY_KP3; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
923 case 0x56: key = KEY_KP4; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
924 case 0x57: key = KEY_KP5; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
925 case 0x58: key = KEY_KP6; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
926 case 0x59: key = KEY_KP7; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
927 case 0x5B: key = KEY_KP8; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
928 case 0x5C: key = KEY_KP9; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
929 default: key = *[[theEvent characters] UTF8String]; break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
930 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
931 mplayer_put_key(key);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
932 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
933
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
934 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
935 Process mouse button event
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
936 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
937 - (void) mouseMoved: (NSEvent *) theEvent
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
938 {
15327
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
939 if(isFullscreen && !isRootwin)
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
940 {
18057
0e7291ee4b6b Replace deprecated function
nplourde
parents: 17725
diff changeset
941 CGDisplayShowCursor(kCGDirectMainDisplay);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
942 mouseHide = NO;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
943 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
944 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
945
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
946 - (void) mouseDown: (NSEvent *) theEvent
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
947 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
948 [self mouseEvent: theEvent];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
949 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
950
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
951 - (void) rightMouseDown: (NSEvent *) theEvent
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
952 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
953 [self mouseEvent: theEvent];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
954 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
955
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
956 - (void) otherMouseDown: (NSEvent *) theEvent
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
957 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
958 [self mouseEvent: theEvent];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
959 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
960
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
961 - (void) scrollWheel: (NSEvent *) theEvent
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
962 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
963 if([theEvent deltaY] > 0)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
964 mplayer_put_key(MOUSE_BTN3);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
965 else
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
966 mplayer_put_key(MOUSE_BTN4);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
967 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
968
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
969 - (void) mouseEvent: (NSEvent *) theEvent
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
970 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
971 switch( [theEvent buttonNumber] )
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
972 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
973 case 0: mplayer_put_key(MOUSE_BTN0);break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
974 case 1: mplayer_put_key(MOUSE_BTN1);break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
975 case 2: mplayer_put_key(MOUSE_BTN2);break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
976 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
977 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
978
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
979 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
980 NSResponder
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
981 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
982 - (BOOL) acceptsFirstResponder
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
983 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
984 return YES;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
985 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
986
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
987 - (BOOL) becomeFirstResponder
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
988 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
989 return YES;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
990 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
991
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
992 - (BOOL) resignFirstResponder
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
993 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
994 return YES;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
995 }
15325
5bd11a72dc58 close button exit mplayer with esc key
nplourde
parents: 15320
diff changeset
996
5bd11a72dc58 close button exit mplayer with esc key
nplourde
parents: 15320
diff changeset
997 - (void)windowWillClose:(NSNotification *)aNotification
5bd11a72dc58 close button exit mplayer with esc key
nplourde
parents: 15320
diff changeset
998 {
5bd11a72dc58 close button exit mplayer with esc key
nplourde
parents: 15320
diff changeset
999 mplayer_put_key(KEY_ESC);
5bd11a72dc58 close button exit mplayer with esc key
nplourde
parents: 15320
diff changeset
1000 }
5bd11a72dc58 close button exit mplayer with esc key
nplourde
parents: 15320
diff changeset
1001 @end