annotate libvo/vo_corevideo.m @ 34697:ac6b38cd0d45

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