annotate libvo/vo_corevideo.m @ 31254:e888e262e3f0

Remove colorspace conversion code from -vo yuv4mpeg, -vf scale should be able to handle this just as well (or better) including interlaced. If not, this needs to be fixed there instead of duplicating code.
author reimar
date Sat, 05 Jun 2010 06:45:01 +0000
parents b40e41324173
children 3bb00f5abe8e
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"
ca9badc94740 #include appropriate headers instead of locally declaring function prototypes.
diego
parents: 28051
diff changeset
43 #include "libvo/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];
29177
1dfd99eb3280 Fix a signedness issue that caused a warning to be wrongfully printed at runtime.
gpoirier
parents: 29170
diff changeset
125 if(screen_id < (int)[screen_array count])
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
126 {
28306
19cf626f188a fix device_id option after r28165
gpoirier
parents: 28204
diff changeset
127 screen_handle = [screen_array objectAtIndex:(screen_id < 0 ? 0 : screen_id)];
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
128 }
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
129 else
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
130 {
29210
779281d8cd80 Rename macosx video output driver to corevideo.
diego
parents: 29177
diff changeset
131 mp_msg(MSGT_VO, MSGL_INFO, "[vo_corevideo] Device ID %d does not exist, falling back to main device\n", screen_id);
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
132 screen_handle = [screen_array objectAtIndex:0];
28306
19cf626f188a fix device_id option after r28165
gpoirier
parents: 28204
diff changeset
133 screen_id = -1;
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
134 }
29564
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
135
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
136 screen_frame = ![mpGLView window] || screen_id >= 0 ? [screen_handle frame] : [[[mpGLView window] screen] frame];
25414
5c03a9bdf220 Record screen size and display size in vo_ variables.
ulion
parents: 25413
diff changeset
137 vo_screenwidth = screen_frame.size.width;
5c03a9bdf220 Record screen size and display size in vo_ variables.
ulion
parents: 25413
diff changeset
138 vo_screenheight = screen_frame.size.height;
29564
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
139 xinerama_x = xinerama_y = 0;
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
140 aspect_save_screenres(vo_screenwidth, vo_screenheight);
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
141 }
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
142
29573
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
143 static void free_file_specific(void)
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
144 {
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
145 if(shared_buffer)
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
146 {
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
147 [mplayerosxProto stop];
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
148 mplayerosxProto = nil;
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
149 [mplayerosxProxy release];
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
150 mplayerosxProxy = nil;
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
151
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
152 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
153 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
154
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
155 if (shm_unlink(buffer_name) == -1)
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
156 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
157 } else {
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
158 free(image_datas[0]);
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
159 if (vo_doublebuffering)
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
160 free(image_datas[1]);
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
161 image_datas[0] = NULL;
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
162 image_datas[1] = NULL;
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
163 image_data = NULL;
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 }
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
166
29564
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
167 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
168 {
29573
2b14be337eaf Fix some of the major memleaks of vo_corevideo with -fixed-vo
reimar
parents: 29567
diff changeset
169 free_file_specific();
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
170
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
171 //misc mplayer setup
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
172 image_width = width;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
173 image_height = height;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
174 switch (image_format)
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
175 {
30974
bd964ca1f6fa Fix RGB support for corevideo: corevideo can only support
reimar
parents: 30973
diff changeset
176 case IMGFMT_RGB24:
bd964ca1f6fa Fix RGB support for corevideo: corevideo can only support
reimar
parents: 30973
diff changeset
177 image_depth = 24;
bd964ca1f6fa Fix RGB support for corevideo: corevideo can only support
reimar
parents: 30973
diff changeset
178 break;
bd964ca1f6fa Fix RGB support for corevideo: corevideo can only support
reimar
parents: 30973
diff changeset
179 case IMGFMT_ARGB:
bd964ca1f6fa Fix RGB support for corevideo: corevideo can only support
reimar
parents: 30973
diff changeset
180 case IMGFMT_BGRA:
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
181 image_depth = 32;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
182 break;
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
183 case IMGFMT_YUY2:
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
184 image_depth = 16;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
185 break;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
186 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
187 image_bytes = (image_depth + 7) / 8;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
188
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
189 if(!shared_buffer)
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
190 {
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
191 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
192
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_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
194 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
195
25120
9b4ca4dc1294 Fix a memory leak when working in shared_buffer mode.
ulion
parents: 25114
diff changeset
196 image_data = malloc(image_width*image_height*image_bytes);
25180
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
197 image_datas[0] = image_data;
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
198 if (vo_doublebuffering)
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
199 image_datas[1] = malloc(image_width*image_height*image_bytes);
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
200 image_page = 0;
25120
9b4ca4dc1294 Fix a memory leak when working in shared_buffer mode.
ulion
parents: 25114
diff changeset
201
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
202 vo_fs = flags & VOFLAG_FULLSCREEN;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
203
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
204 //config OpenGL View
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
205 [mpGLView config];
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
206 [mpGLView reshape];
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
28180
781ef511a767 Add an option to vo_macosx to set a custom buffer_name.
gpoirier
parents: 28130
diff changeset
349 if (buffer_name) free(buffer_name);
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 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
405
16385
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
406 [mpGLView display];
35b310d35aa0 mplayer osx shared video buffer
nplourde
parents: 16171
diff changeset
407 [mpGLView preinit];
16144
6ea7c0735fce properly release window
nplourde
parents: 16081
diff changeset
408 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
409
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
410 return 0;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
411 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
412
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 16145
diff changeset
413 static int control(uint32_t request, void *data, ...)
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
414 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
415 switch (request)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
416 {
30972
886527159cae Implement VOCTRL_DRAW_IMAGE instead of the deprecated draw_frame, avoiding
reimar
parents: 30922
diff changeset
417 case VOCTRL_DRAW_IMAGE: return draw_image(data);
26755
46f0b4d34fa1 cosmetics: Remove useless parentheses from from return statements.
diego
parents: 25468
diff changeset
418 case VOCTRL_PAUSE: return int_pause = 1;
46f0b4d34fa1 cosmetics: Remove useless parentheses from from return statements.
diego
parents: 25468
diff changeset
419 case VOCTRL_RESUME: return int_pause = 0;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
420 case VOCTRL_QUERY_FORMAT: return query_format(*((uint32_t*)data));
25157
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
421 case VOCTRL_ONTOP: vo_ontop = (!(vo_ontop)); if(!shared_buffer){ [mpGLView ontop]; } else { [mplayerosxProto ontop]; } return VO_TRUE;
15611
2f77a2da1d82 Function name cleanup
nplourde
parents: 15610
diff changeset
422 case VOCTRL_ROOTWIN: vo_rootwin = (!(vo_rootwin)); [mpGLView rootwin]; return VO_TRUE;
25157
cf3b6015735d Set protocol for the vo proxy used in shared-buffer mode.
ulion
parents: 25137
diff changeset
423 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
424 case VOCTRL_GET_PANSCAN: return VO_TRUE;
15611
2f77a2da1d82 Function name cleanup
nplourde
parents: 15610
diff changeset
425 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
426 case VOCTRL_UPDATE_SCREENINFO: update_screen_info(); return VO_TRUE;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
427 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
428 return VO_NOTIMPL;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
429 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
430
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
431 //////////////////////////////////////////////////////////////////////////
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
432 // NSOpenGLView Subclass
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
433 //////////////////////////////////////////////////////////////////////////
15611
2f77a2da1d82 Function name cleanup
nplourde
parents: 15610
diff changeset
434 @implementation MPlayerOpenGLView
24076
7ac48ed8c394 Functions that do not return a value must be void
reimar
parents: 24074
diff changeset
435 - (void) preinit
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
436 {
29575
0e182921966b Make glContext a local variable, it is not needed outside the function
reimar
parents: 29574
diff changeset
437 NSOpenGLContext *glContext;
29566
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
438 GLint swapInterval = 1;
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
439 CVReturn error;
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
440
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
441 //init menu
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
442 [self initMenu];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
443
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
444 //create window
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
445 window = [[NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, 100, 100)
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
446 styleMask:NSTitledWindowMask|NSTexturedBackgroundWindowMask|NSClosableWindowMask|NSMiniaturizableWindowMask|NSResizableWindowMask
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
447 backing:NSBackingStoreBuffered defer:NO];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
448
16144
6ea7c0735fce properly release window
nplourde
parents: 16081
diff changeset
449 [window autorelease];
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
450 [window setDelegate:mpGLView];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
451 [window setContentView:mpGLView];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
452 [window setInitialFirstResponder:mpGLView];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
453 [window setAcceptsMouseMovedEvents:YES];
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
454 [window setTitle:@"MPlayer - The Movie Player"];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
455
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
456 isFullscreen = 0;
15855
1ca8b5873c3f keep window size when changing aspect
nplourde
parents: 15854
diff changeset
457 winSizeMult = 1;
29566
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
458
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
459 //create OpenGL Context
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
460 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
461
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
462 [self setOpenGLContext:glContext];
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
463 [glContext setValues:&swapInterval forParameter:NSOpenGLCPSwapInterval];
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
464 [glContext setView:self];
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
465 [glContext makeCurrentContext];
29575
0e182921966b Make glContext a local variable, it is not needed outside the function
reimar
parents: 29574
diff changeset
466 [glContext release];
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 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
469 if(error != kCVReturnSuccess)
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
470 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
471 }
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
472
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
473 - (void) releaseVideoSpecific
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
474 {
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
475 CVPixelBufferRelease(frameBuffers[0]);
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
476 frameBuffers[0] = NULL;
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
477 CVPixelBufferRelease(frameBuffers[1]);
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
478 frameBuffers[1] = NULL;
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
479 CVOpenGLTextureRelease(texture);
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
480 texture = NULL;
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
481 }
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
482
29574
0aa36133f638 Add a dealloc function to corevideo to reduce the memleaks from
reimar
parents: 29573
diff changeset
483 - (void) dealloc
0aa36133f638 Add a dealloc function to corevideo to reduce the memleaks from
reimar
parents: 29573
diff changeset
484 {
0aa36133f638 Add a dealloc function to corevideo to reduce the memleaks from
reimar
parents: 29573
diff changeset
485 [self releaseVideoSpecific];
0aa36133f638 Add a dealloc function to corevideo to reduce the memleaks from
reimar
parents: 29573
diff changeset
486 CVOpenGLTextureCacheRelease(textureCache);
0aa36133f638 Add a dealloc function to corevideo to reduce the memleaks from
reimar
parents: 29573
diff changeset
487 textureCache = NULL;
0aa36133f638 Add a dealloc function to corevideo to reduce the memleaks from
reimar
parents: 29573
diff changeset
488 [self setOpenGLContext:nil];
0aa36133f638 Add a dealloc function to corevideo to reduce the memleaks from
reimar
parents: 29573
diff changeset
489 [super dealloc];
0aa36133f638 Add a dealloc function to corevideo to reduce the memleaks from
reimar
parents: 29573
diff changeset
490 }
0aa36133f638 Add a dealloc function to corevideo to reduce the memleaks from
reimar
parents: 29573
diff changeset
491
24076
7ac48ed8c394 Functions that do not return a value must be void
reimar
parents: 24074
diff changeset
492 - (void) config
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
493 {
30001
444f843a54ec Add support for -geometry to corevideo.
adrian
parents: 30000
diff changeset
494 NSRect visibleFrame;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
495 CVReturn error = kCVReturnSuccess;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
496
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
497 //config window
30001
444f843a54ec Add support for -geometry to corevideo.
adrian
parents: 30000
diff changeset
498 [window setContentSize:NSMakeSize(vo_dwidth, vo_dheight)];
444f843a54ec Add support for -geometry to corevideo.
adrian
parents: 30000
diff changeset
499
444f843a54ec Add support for -geometry to corevideo.
adrian
parents: 30000
diff changeset
500 // 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
501 // Also flip vo_dy since the screen origin is in the bottom left on OSX.
444f843a54ec Add support for -geometry to corevideo.
adrian
parents: 30000
diff changeset
502 if (screen_id < 0)
444f843a54ec Add support for -geometry to corevideo.
adrian
parents: 30000
diff changeset
503 visibleFrame = [[[mpGLView window] screen] visibleFrame];
444f843a54ec Add support for -geometry to corevideo.
adrian
parents: 30000
diff changeset
504 else
444f843a54ec Add support for -geometry to corevideo.
adrian
parents: 30000
diff changeset
505 visibleFrame = [[[NSScreen screens] objectAtIndex:screen_id] visibleFrame];
444f843a54ec Add support for -geometry to corevideo.
adrian
parents: 30000
diff changeset
506 [window setFrameTopLeftPoint:NSMakePoint(
444f843a54ec Add support for -geometry to corevideo.
adrian
parents: 30000
diff changeset
507 visibleFrame.origin.x + vo_dx,
444f843a54ec Add support for -geometry to corevideo.
adrian
parents: 30000
diff changeset
508 visibleFrame.origin.y + visibleFrame.size.height - vo_dy)];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
509
29566
b128ce47771d Reduce vo_corevideo memleaks by initializing static context etc. only once
reimar
parents: 29564
diff changeset
510 [self releaseVideoSpecific];
25180
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
511 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
512 if(error != kCVReturnSuccess)
29210
779281d8cd80 Rename macosx video output driver to corevideo.
diego
parents: 29177
diff changeset
513 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
514 if (vo_doublebuffering) {
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
515 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
516 if(error != kCVReturnSuccess)
29210
779281d8cd80 Rename macosx video output driver to corevideo.
diego
parents: 29177
diff changeset
517 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
518 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
519
25180
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
520 error = CVOpenGLTextureCacheCreateTextureFromImage(NULL, textureCache, frameBuffers[image_page], 0, &texture);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
521 if(error != kCVReturnSuccess)
29210
779281d8cd80 Rename macosx video output driver to corevideo.
diego
parents: 29177
diff changeset
522 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
523
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
524 //show window
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
525 [window makeKeyAndOrderFront:mpGLView];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
526
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
527 if(vo_rootwin)
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
528 [mpGLView rootwin];
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
529
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
530 if(vo_fs)
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
531 [mpGLView fullscreen: NO];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
532
15726
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
533 if(vo_ontop)
25ee208c6da9 do not realloc window while playing playlist
nplourde
parents: 15657
diff changeset
534 [mpGLView ontop];
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
535 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
536
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
537 /*
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
538 Init Menu
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
539 */
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
540 - (void)initMenu
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
541 {
21395
dd05dd9e3e7b Fix declarations vs statements warning.
diego
parents: 18878
diff changeset
542 NSMenu *menu, *aspectMenu;
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
543 NSMenuItem *menuItem;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
544
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
545 [NSApp setMainMenu:[[NSMenu alloc] init]];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
546
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
547 //Create Movie Menu
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
548 menu = [[NSMenu alloc] initWithTitle:@"Movie"];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
549 menuItem = [[NSMenuItem alloc] initWithTitle:@"Half Size" action:@selector(menuAction:) keyEquivalent:@"0"]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
550 kHalfScreenCmd = menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
551 menuItem = [[NSMenuItem alloc] initWithTitle:@"Normal Size" action:@selector(menuAction:) keyEquivalent:@"1"]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
552 kNormalScreenCmd = menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
553 menuItem = [[NSMenuItem alloc] initWithTitle:@"Double Size" action:@selector(menuAction:) keyEquivalent:@"2"]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
554 kDoubleScreenCmd = menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
555 menuItem = [[NSMenuItem alloc] initWithTitle:@"Full Size" action:@selector(menuAction:) keyEquivalent:@"f"]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
556 kFullScreenCmd = menuItem;
15909
b1bc923b38fe resize video after keep aspect menu item toggle
nplourde
parents: 15902
diff changeset
557 menuItem = (NSMenuItem *)[NSMenuItem separatorItem]; [menu addItem:menuItem];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
558
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
559 aspectMenu = [[NSMenu alloc] initWithTitle:@"Aspect Ratio"];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
560 menuItem = [[NSMenuItem alloc] initWithTitle:@"Keep" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
561 if(vo_keepaspect) [menuItem setState:NSOnState];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
562 kKeepAspectCmd = menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
563 menuItem = [[NSMenuItem alloc] initWithTitle:@"Pan-Scan" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
564 if(vo_panscan) [menuItem setState:NSOnState];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
565 kPanScanCmd = menuItem;
15909
b1bc923b38fe resize video after keep aspect menu item toggle
nplourde
parents: 15902
diff changeset
566 menuItem = (NSMenuItem *)[NSMenuItem separatorItem]; [aspectMenu addItem:menuItem];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
567 menuItem = [[NSMenuItem alloc] initWithTitle:@"Original" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
568 kAspectOrgCmd = menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
569 menuItem = [[NSMenuItem alloc] initWithTitle:@"4:3" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
570 kAspectFullCmd = menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
571 menuItem = [[NSMenuItem alloc] initWithTitle:@"16:9" action:@selector(menuAction:) keyEquivalent:@""]; [aspectMenu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
572 kAspectWideCmd = menuItem;
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
573 menuItem = [[NSMenuItem alloc] initWithTitle:@"Aspect Ratio" action:nil keyEquivalent:@""];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
574 [menuItem setSubmenu:aspectMenu];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
575 [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
576 [aspectMenu release];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
577
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
578 //Add to menubar
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
579 menuItem = [[NSMenuItem alloc] initWithTitle:@"Movie" action:nil keyEquivalent:@""];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
580 [menuItem setSubmenu:menu];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
581 [[NSApp mainMenu] addItem:menuItem];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
582
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
583 //Create Window Menu
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
584 menu = [[NSMenu alloc] initWithTitle:@"Window"];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
585
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
586 menuItem = [[NSMenuItem alloc] initWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@"m"]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
587 menuItem = [[NSMenuItem alloc] initWithTitle:@"Zoom" action:@selector(performZoom:) keyEquivalent:@""]; [menu addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
588
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
589 //Add to menubar
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
590 menuItem = [[NSMenuItem alloc] initWithTitle:@"Window" action:nil keyEquivalent:@""];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
591 [menuItem setSubmenu:menu];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
592 [[NSApp mainMenu] addItem:menuItem];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
593 [NSApp setWindowsMenu:menu];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
594
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
595 [menu release];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
596 [menuItem release];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
597 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
598
29604
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
599 - (void)set_winSizeMult:(float)mult
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
600 {
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
601 NSRect frame;
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
602 int d_width, d_height;
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
603 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
604
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
605 if (isFullscreen) {
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
606 vo_fs = !vo_fs;
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
607 [self fullscreen:NO];
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
608 }
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
609
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
610 winSizeMult = mult;
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
611 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
612 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
613 [window setContentSize: frame.size];
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
614 [self reshape];
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
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
617 /*
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
618 Menu Action
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
619 */
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
620 - (void)menuAction:(id)sender
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
621 {
15731
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
622 if(sender == kQuitCmd)
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
623 {
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
624 mplayer_put_key(KEY_ESC);
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
625 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
626
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
627 if(sender == kHalfScreenCmd)
29604
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
628 [self set_winSizeMult: 0.5];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
629 if(sender == kNormalScreenCmd)
29604
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
630 [self set_winSizeMult: 1];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
631 if(sender == kDoubleScreenCmd)
29604
cd056d688db8 Factor out duplicated code to set play video scaled by a certain factor.
reimar
parents: 29603
diff changeset
632 [self set_winSizeMult: 2];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
633 if(sender == kFullScreenCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
634 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
635 vo_fs = (!(vo_fs));
21546
253a1e98bfe3 vo_macosx.m disable window animation when going to fullscreen
nplourde
parents: 21395
diff changeset
636 [self fullscreen:NO];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
637 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
638
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
639 if(sender == kKeepAspectCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
640 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
641 vo_keepaspect = (!(vo_keepaspect));
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
642 if(vo_keepaspect)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
643 [kKeepAspectCmd setState:NSOnState];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
644 else
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
645 [kKeepAspectCmd setState:NSOffState];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
646
15909
b1bc923b38fe resize video after keep aspect menu item toggle
nplourde
parents: 15902
diff changeset
647 [self reshape];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
648 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
649
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
650 if(sender == kPanScanCmd)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
651 {
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
652 vo_panscan = (!(vo_panscan));
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
653 if(vo_panscan)
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
654 [kPanScanCmd setState:NSOnState];
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
655 else
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
656 [kPanScanCmd setState:NSOffState];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
657
15902
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
658 [self panscan];
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
659 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
660
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
661 if(sender == kAspectOrgCmd)
29564
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
662 change_movie_aspect(-1);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
663
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
664 if(sender == kAspectFullCmd)
29564
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
665 change_movie_aspect(4.0f/3.0f);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
666
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
667 if(sender == kAspectWideCmd)
29564
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
668 change_movie_aspect(16.0f/9.0f);
15570
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
669 }
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
670
f197f4a60b20 create menu
nplourde
parents: 15339
diff changeset
671 /*
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
672 Setup OpenGL
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
673 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
674 - (void)prepareOpenGL
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
675 {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
676 glEnable(GL_BLEND);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
677 glDisable(GL_DEPTH_TEST);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
678 glDepthMask(GL_FALSE);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
679 glDisable(GL_CULL_FACE);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
680 [self reshape];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
681 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
682
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
683 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
684 reshape OpenGL viewport
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
685 */
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
686 - (void)reshape
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
687 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
688 uint32_t d_width;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
689 uint32_t d_height;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
690
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
691 NSRect frame = [self frame];
29564
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
692 vo_dwidth = frame.size.width;
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
693 vo_dheight = frame.size.height;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
694
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
695 glViewport(0, 0, frame.size.width, frame.size.height);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
696 glMatrixMode(GL_PROJECTION);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
697 glLoadIdentity();
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
698 glOrtho(0, frame.size.width, frame.size.height, 0, -1.0, 1.0);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
699 glMatrixMode(GL_MODELVIEW);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
700 glLoadIdentity();
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
701
15729
55aaeb7b6aae new texture frame
nplourde
parents: 15728
diff changeset
702 //set texture frame
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
703 if(vo_keepaspect)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
704 {
29564
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
705 aspect( (int *)&d_width, (int *)&d_height, A_WINZOOM);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
706
29564
4ae3d2d7946e Use MPlayer's standard aspect handling functions in corevideo
reimar
parents: 29533
diff changeset
707 textureFrame = NSMakeRect((vo_dwidth - d_width) / 2, (vo_dheight - d_height) / 2, d_width, d_height);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
708 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
709 else
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
710 {
15729
55aaeb7b6aae new texture frame
nplourde
parents: 15728
diff changeset
711 textureFrame = frame;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
712 }
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 Render frame
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
717 */
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
718 - (void) render
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
719 {
21395
dd05dd9e3e7b Fix declarations vs statements warning.
diego
parents: 18878
diff changeset
720 int curTime;
dd05dd9e3e7b Fix declarations vs statements warning.
diego
parents: 18878
diff changeset
721
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
722 glClear(GL_COLOR_BUFFER_BIT);
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
723
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
724 glEnable(CVOpenGLTextureGetTarget(texture));
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
725 glBindTexture(CVOpenGLTextureGetTarget(texture), CVOpenGLTextureGetName(texture));
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
726
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
727 glColor3f(1,1,1);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
728 glBegin(GL_QUADS);
15729
55aaeb7b6aae new texture frame
nplourde
parents: 15728
diff changeset
729 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
730 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
731 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
732 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
733 glEnd();
15339
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
734 glDisable(CVOpenGLTextureGetTarget(texture));
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
735
15339
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
736 //render resize box
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
737 if(!isFullscreen)
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
738 {
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
739 NSRect frame = [self frame];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
740
15339
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
741 glBegin(GL_LINES);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
742 glColor4f(0.2, 0.2, 0.2, 0.5);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
743 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
744 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
745 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
746
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
747 glColor4f(0.4, 0.4, 0.4, 0.5);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
748 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
749 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
750 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
751
15339
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
752 glColor4f(0.6, 0.6, 0.6, 0.5);
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
753 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
754 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
755 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
756 glEnd();
606d1aac2d85 draw resize box
nplourde
parents: 15331
diff changeset
757 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
758
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
759 glFlush();
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
760
28010
0a0f63090e60 factorize mouse hiding and screensaver disabling code
gpoirier
parents: 28001
diff changeset
761 curTime = TickCount()/60;
0a0f63090e60 factorize mouse hiding and screensaver disabling code
gpoirier
parents: 28001
diff changeset
762
28837
e5171567fe6c cosmetics: spelling fixes
diego
parents: 28836
diff changeset
763 //automatically hide mouse cursor (and future on-screen control?)
15327
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
764 if(isFullscreen && !mouseHide && !isRootwin)
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
765 {
28010
0a0f63090e60 factorize mouse hiding and screensaver disabling code
gpoirier
parents: 28001
diff changeset
766 if( ((curTime - lastMouseHide) >= 5) || (lastMouseHide == 0) )
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
767 {
18057
0e7291ee4b6b Replace deprecated function
nplourde
parents: 17725
diff changeset
768 CGDisplayHideCursor(kCGDirectMainDisplay);
28010
0a0f63090e60 factorize mouse hiding and screensaver disabling code
gpoirier
parents: 28001
diff changeset
769 mouseHide = TRUE;
0a0f63090e60 factorize mouse hiding and screensaver disabling code
gpoirier
parents: 28001
diff changeset
770 lastMouseHide = curTime;
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
771 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
772 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
773
17725
d7dd016cb97a update activity every 30 sec
nplourde
parents: 17546
diff changeset
774 //update activity every 30 seconds to prevent
17546
d878e3e313eb let osx sleep if video is paused
nplourde
parents: 17358
diff changeset
775 //screensaver from starting up.
28010
0a0f63090e60 factorize mouse hiding and screensaver disabling code
gpoirier
parents: 28001
diff changeset
776 if( ((curTime - lastScreensaverUpdate) >= 30) || (lastScreensaverUpdate == 0) )
17546
d878e3e313eb let osx sleep if video is paused
nplourde
parents: 17358
diff changeset
777 {
d878e3e313eb let osx sleep if video is paused
nplourde
parents: 17358
diff changeset
778 UpdateSystemActivity(UsrActivity);
28010
0a0f63090e60 factorize mouse hiding and screensaver disabling code
gpoirier
parents: 28001
diff changeset
779 lastScreensaverUpdate = curTime;
17546
d878e3e313eb let osx sleep if video is paused
nplourde
parents: 17358
diff changeset
780 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
781 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
782
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
783 /*
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
784 Create OpenGL texture from current frame & set texco
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
785 */
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
786 - (void) setCurrentTexture
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
787 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
788 CVReturn error = kCVReturnSuccess;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
789
29137
0f6fc0df2c23 fix a memory leak leading to ~80 bytes being leaked at each call to flip_page.
gpoirier
parents: 28837
diff changeset
790 CVOpenGLTextureRelease(texture);
25180
48fe4b6e3bab Support double buffering, fix osd flicker.
ulion
parents: 25179
diff changeset
791 error = CVOpenGLTextureCacheCreateTextureFromImage(NULL, textureCache, frameBuffers[image_page], 0, &texture);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
792 if(error != kCVReturnSuccess)
29210
779281d8cd80 Rename macosx video output driver to corevideo.
diego
parents: 29177
diff changeset
793 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
794
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
795 CVOpenGLTextureGetCleanTexCoords(texture, lowerLeft, lowerRight, upperRight, upperLeft);
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
796 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
797
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
798 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
799 redraw win rect
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
800 */
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
801 - (void) drawRect: (NSRect *) bounds
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
802 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
803 [self render];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
804 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
805
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
806 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
807 Toggle Fullscreen
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
808 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
809 - (void) fullscreen: (BOOL) animate
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
810 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
811 static NSRect old_frame;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
812 static NSRect old_view_frame;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
813
15573
5db3dd72c876 Fix pan-scan in fullscreen mode
nplourde
parents: 15571
diff changeset
814 panscan_calc();
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
815
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
816 //go fullscreen
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
817 if(vo_fs)
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
818 {
15327
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
819 if(!isRootwin)
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
820 {
15882
77aa290c726a fix fullscreen menubar item behaviour
nplourde
parents: 15855
diff changeset
821 SetSystemUIMode( kUIModeAllHidden, kUIOptionAutoShowMenuBar);
18057
0e7291ee4b6b Replace deprecated function
nplourde
parents: 17725
diff changeset
822 CGDisplayHideCursor(kCGDirectMainDisplay);
15327
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
823 mouseHide = YES;
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
824 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
825
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
826 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
827 update_screen_info();
25413
8368ae92c092 screen_frame is only used for fullscreen mode.
ulion
parents: 25180
diff changeset
828
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
829 [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
830 old_view_frame = [self bounds];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
831
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
832 //fix origin for multi screen setup
15728
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
833 screen_frame.origin.x = 0;
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
834 screen_frame.origin.y = 0;
caa1d0aeffd5 device_id flag force fullscreen device
nplourde
parents: 15727
diff changeset
835 [self setFrame:screen_frame];
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
836 [self setNeedsDisplay:YES];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
837 [window setHasShadow:NO];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
838 isFullscreen = 1;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
839 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
840 else
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
841 {
15902
16534910f0fb fix various window resizing bug with menu option
nplourde
parents: 15882
diff changeset
842 SetSystemUIMode( kUIModeNormal, 0);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
843
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
844 isFullscreen = 0;
18057
0e7291ee4b6b Replace deprecated function
nplourde
parents: 17725
diff changeset
845 CGDisplayShowCursor(kCGDirectMainDisplay);
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
846 mouseHide = NO;
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
847
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
848 //revert window to previous setting
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
849 [self setFrame:old_view_frame];
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
850 [self setNeedsDisplay:YES];
16081
72c352edce8f restore window shadow when quitting fullscreen mode
nplourde
parents: 15909
diff changeset
851 [window setHasShadow:YES];
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
852 [window setFrame:old_frame display:YES animate:animate];//zoom-out window with nice useless sfx
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
853 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
854 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
855
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
856 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
857 Toggle ontop
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
858 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
859 - (void) ontop
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
860 {
15320
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
861 if(vo_ontop)
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
862 {
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
863 [window setLevel:NSScreenSaverWindowLevel];
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
864 isOntop = YES;
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
865 }
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
866 else
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
867 {
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
868 [window setLevel:NSNormalWindowLevel];
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
869 isOntop = NO;
f743828642fd add ontop
nplourde
parents: 15289
diff changeset
870 }
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
871 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
872
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
873 /*
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
874 Toggle panscan
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
875 */
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
876 - (void) panscan
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
877 {
15331
7746903599b2 enable panscan
nplourde
parents: 15327
diff changeset
878 panscan_calc();
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
879 }
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
880
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
881 /*
15327
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
882 Toggle rootwin
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
883 */
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
884 - (void) rootwin
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
885 {
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
886 if(vo_rootwin)
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
887 {
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
888 [window setLevel:CGWindowLevelForKey(kCGDesktopWindowLevelKey)];
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
889 [window orderBack:self];
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
890 isRootwin = YES;
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
891 }
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
892 else
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
893 {
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
894 [window setLevel:NSNormalWindowLevel];
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
895 isRootwin = NO;
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
896 }
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
897 }
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
898
8e21844c8a4c enable rootwin
nplourde
parents: 15325
diff changeset
899 /*
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
900 Check event for new event
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29210
diff changeset
901 */
15289
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
902 - (void) check_events
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
903 {
e985d786c5f1 macosx core video module
nplourde
parents:
diff changeset
904 event = [NSApp nextEventMatchingMask:NSAnyEventMask untilDate:[NSDate dateWithTimeIntervalSinceNow:0.0001] 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])
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
926 {
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;
532a351962fb set window alpha
nplourde
parents: 15729
diff changeset
929 }
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
5bd11a72dc58 close button exit mplayer with esc key
nplourde
parents: 15320
diff changeset
1044 - (void)windowWillClose:(NSNotification *)aNotification
5bd11a72dc58 close button exit mplayer with esc key
nplourde
parents: 15320
diff changeset
1045 {
21551
c35115c05c64 vo_macosx, fix crash when closing window
nplourde
parents: 21546
diff changeset
1046 mpGLView = NULL;
15325
5bd11a72dc58 close button exit mplayer with esc key
nplourde
parents: 15320
diff changeset
1047 mplayer_put_key(KEY_ESC);
5bd11a72dc58 close button exit mplayer with esc key
nplourde
parents: 15320
diff changeset
1048 }
5bd11a72dc58 close button exit mplayer with esc key
nplourde
parents: 15320
diff changeset
1049 @end