annotate libvo/vo_quartz.c @ 12423:22448c365725

Removed unused debug code.
author nplourde
date Wed, 05 May 2004 00:30:30 +0000
parents f1a9dcdfab5d
children 09f8724dd0b0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
1 /*
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
2 vo_quartz.c
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
3
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
4 by Nicolas Plourde <nicolasplourde@hotmail.com>
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
5
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
6 Copyright (c) Nicolas Plourde - April 2004
12414
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
7
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
8 YUV support Copyright (C) 2004 Romain Dolbeau <romain@dolbeau.org>
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
9
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
10 MPlayer Mac OSX Quartz video out module.
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
11
12414
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
12 todo: -Redo event handling.
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
13 -Choose fullscreen display device.
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
14 -Fullscreen antialiasing.
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
15 -resize black bar without CGContext
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
16 -rootwin
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
17 -non-blocking event
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
18 -(add sugestion here)
12414
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
19
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
20 Direct YUV support is functional, and is now enabled
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
21 by default. To constrain what format should be used,
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
22 use the format=XXX video filter (i.e. -vf format=uyvy).
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
23 */
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
24
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
25 //SYS
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
26 #include <stdio.h>
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
27
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
28 //OSX
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
29 #include <Carbon/Carbon.h>
12414
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
30 #include <QuickTime/QuickTime.h>
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
31
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
32 //MPLAYER
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
33 #include "config.h"
12414
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
34 #include "fastmemcpy.h"
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
35 #include "video_out.h"
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
36 #include "video_out_internal.h"
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
37 #include "aspect.h"
12414
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
38 #include "mp_msg.h"
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
39 #include "m_option.h"
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
40
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
41 #include "../input/input.h"
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
42 #include "../input/mouse.h"
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
43
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
44 #include "vo_quartz.h"
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
45
12414
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
46 #define QUARTZ_ENABLE_YUV
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
47
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
48 static vo_info_t info =
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
49 {
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
50 "Mac OSX (Quartz)",
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
51 "quartz",
12414
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
52 "Nicolas Plourde <nicolasplourde@hotmail.com>, Romain Dolbeau <romain@dolbeau.org>",
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
53 ""
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
54 };
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
55
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
56 LIBVO_EXTERN(quartz)
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
57
12414
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
58 static uint32_t image_width;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
59 static uint32_t image_height;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
60 static uint32_t image_depth;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
61 static uint32_t image_format;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
62 static uint32_t image_size;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
63 static uint32_t image_buffer_size;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
64
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
65 #ifdef QUARTZ_ENABLE_YUV
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
66 static CodecType image_qtcodec;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
67 static PlanarPixmapInfoYUV420 *P;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
68 static struct {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
69 ImageSequence seqId;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
70 ImageDescriptionHandle desc;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
71 Handle extension_colr;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
72 Handle extension_fiel;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
73 Handle extension_clap;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
74 Handle extension_pasp;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
75 MatrixRecord matrix;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
76 } yuv_qt_stuff;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
77 static DecompressorComponent mycodec;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
78 static ComponentInstance myopenedcodec;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
79 static int EnterMoviesDone = 0;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
80 #endif
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
81 char *image_data;
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
82
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
83 extern int vo_ontop;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
84 extern int vo_fs;
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
85
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
86 int int_pause = 0;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
87 float winAlpha = 1;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
88
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
89 int device_width, device_height;
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
90
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
91 WindowRef theWindow;
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
92
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
93 GWorldPtr imgGWorld;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
94
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
95 Rect imgRect;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
96 Rect dstRect;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
97 Rect winRect;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
98
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
99 CGContextRef context;
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
100
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
101 #include "../osdep/keycodes.h"
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
102 extern void mplayer_put_key(int code);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
103
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
104 extern void vo_draw_text(int dxs,int dys,void (*draw_alpha)(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride));
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
105
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
106 //PROTOTYPE/////////////////////////////////////////////////////////////////
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
107 void window_resized();
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
108 void window_ontop();
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
109 void window_fullscreen();
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
110
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
111 static OSStatus MainWindowEventHandler(EventHandlerCallRef nextHandler, EventRef event, void *userData);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
112 static OSStatus MainKeyboardEventHandler(EventHandlerCallRef nextHandler, EventRef event, void *userData);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
113 static OSStatus MainMouseEventHandler(EventHandlerCallRef nextHandler, EventRef event, void *userData);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
114
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
115 static void draw_alpha(int x0, int y0, int w, int h, unsigned char *src, unsigned char *srca, int stride)
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
116 {
12414
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
117 switch (image_format) {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
118 case IMGFMT_RGB32:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
119 vo_draw_alpha_rgb32(w,h,src,srca,stride,image_data+4*(y0*imgRect.right+x0),4*imgRect.right);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
120 break;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
121 #ifdef QUARTZ_ENABLE_YUV
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
122 case IMGFMT_YV12:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
123 case IMGFMT_IYUV:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
124 case IMGFMT_I420:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
125 vo_draw_alpha_yv12(w,h,src,srca,stride,
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
126 ((char*)P) + P->componentInfoY.offset + x0 + y0 * image_width,
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
127 image_width);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
128 break;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
129 case IMGFMT_UYVY:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
130 //vo_draw_alpha_uyvy(w,h,src,srca,stride,((char*)P) + (x0 + y0 * image_width) * 2,image_width*2);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
131 break;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
132 case IMGFMT_YUY2:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
133 vo_draw_alpha_yuy2(w,h,src,srca,stride,((char*)P) + (x0 + y0 * image_width) * 2,image_width*2);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
134 break;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
135 #endif
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
136 }
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
137 }
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
138
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
139 //default window event handler
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
140 static OSStatus MainWindowEventHandler(EventHandlerCallRef nextHandler, EventRef event, void *userData)
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
141 {
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
142 OSStatus err = noErr;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
143 WindowRef window;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
144 Rect rectPort = {0,0,0,0};
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
145 OSStatus result = eventNotHandledErr;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
146 UInt32 class = GetEventClass (event);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
147 UInt32 kind = GetEventKind (event);
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
148
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
149 GetEventParameter(event, kEventParamDirectObject, typeWindowRef, NULL, sizeof(WindowRef), NULL, &window);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
150 if(window)
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
151 {
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
152 GetWindowPortBounds (window, &rectPort);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
153 }
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
154
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
155 switch (kind)
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
156 {
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
157 //close window
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
158 case kEventWindowClosed:
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
159 HideWindow(window);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
160 mplayer_put_key(KEY_ESC);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
161 break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
162
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
163 //resize window
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
164 case kEventWindowBoundsChanged:
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
165 window_resized();
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
166 flip_page();
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
167 break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
168
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
169 default:
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
170 err = eventNotHandledErr;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
171 break;
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
172 }
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
173
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
174 return err;
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
175 }
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
176
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
177 //keyboard event handler
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
178 static OSStatus MainKeyboardEventHandler(EventHandlerCallRef nextHandler, EventRef event, void *userData)
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
179 {
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
180 OSStatus err = noErr;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
181 UInt32 macKeyCode;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
182
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
183 GetEventParameter(event, kEventParamKeyCode, typeUInt32, NULL, sizeof(macKeyCode), NULL, &macKeyCode);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
184
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
185 switch (GetEventKind (event))
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
186 {
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
187 case kEventRawKeyDown:
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
188 {
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
189 switch(macKeyCode)
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
190 {
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
191 case QZ_RETURN: mplayer_put_key(KEY_ENTER);break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
192 case QZ_ESCAPE: mplayer_put_key(KEY_ESC);break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
193 case QZ_q: mplayer_put_key('q');break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
194 case QZ_F1: mplayer_put_key(KEY_F+1);break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
195 case QZ_F2: mplayer_put_key(KEY_F+2);break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
196 case QZ_F3: mplayer_put_key(KEY_F+3);break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
197 case QZ_F4: mplayer_put_key(KEY_F+4);break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
198 case QZ_F5: mplayer_put_key(KEY_F+5);break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
199 case QZ_F6: mplayer_put_key(KEY_F+6);break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
200 case QZ_F7: mplayer_put_key(KEY_F+7);break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
201 case QZ_F8: mplayer_put_key(KEY_F+8);break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
202 case QZ_F9: mplayer_put_key(KEY_F+9);break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
203 case QZ_F10: mplayer_put_key(KEY_F+10);break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
204 case QZ_F11: mplayer_put_key(KEY_F+11);break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
205 case QZ_F12: mplayer_put_key(KEY_F+12);break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
206 case QZ_o: mplayer_put_key('o');break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
207 case QZ_SPACE: mplayer_put_key(' ');break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
208 case QZ_p: mplayer_put_key('p');break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
209 //case QZ_7: mplayer_put_key(shift_key?'/':'7');
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
210 //case QZ_PLUS: mplayer_put_key(shift_key?'*':'+');
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
211 case QZ_KP_PLUS: mplayer_put_key('+');break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
212 case QZ_MINUS:
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
213 case QZ_KP_MINUS: mplayer_put_key('-');break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
214 case QZ_TAB: mplayer_put_key('\t');break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
215 case QZ_PAGEUP: mplayer_put_key(KEY_PAGE_UP);break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
216 case QZ_PAGEDOWN: mplayer_put_key(KEY_PAGE_DOWN);break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
217 case QZ_UP: mplayer_put_key(KEY_UP);break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
218 case QZ_DOWN: mplayer_put_key(KEY_DOWN);break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
219 case QZ_LEFT: mplayer_put_key(KEY_LEFT);break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
220 case QZ_RIGHT: mplayer_put_key(KEY_RIGHT);break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
221 //case QZ_LESS: mplayer_put_key(shift_key?'>':'<'); break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
222 //case QZ_GREATER: mplayer_put_key('>'); break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
223 //case QZ_ASTERISK:
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
224 case QZ_KP_MULTIPLY: mplayer_put_key('*'); break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
225 case QZ_SLASH:
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
226 case QZ_KP_DIVIDE: mplayer_put_key('/'); break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
227 case QZ_KP0: mplayer_put_key(KEY_KP0); break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
228 case QZ_KP1: mplayer_put_key(KEY_KP1); break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
229 case QZ_KP2: mplayer_put_key(KEY_KP2); break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
230 case QZ_KP3: mplayer_put_key(KEY_KP3); break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
231 case QZ_KP4: mplayer_put_key(KEY_KP4); break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
232 case QZ_KP5: mplayer_put_key(KEY_KP5); break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
233 case QZ_KP6: mplayer_put_key(KEY_KP6); break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
234 case QZ_KP7: mplayer_put_key(KEY_KP7); break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
235 case QZ_KP8: mplayer_put_key(KEY_KP8); break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
236 case QZ_KP9: mplayer_put_key(KEY_KP9); break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
237 case QZ_KP_PERIOD: mplayer_put_key(KEY_KPDEC); break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
238 case QZ_KP_ENTER: mplayer_put_key(KEY_KPENTER); break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
239 case QZ_LEFTBRACKET: SetWindowAlpha(theWindow, winAlpha-=0.05);break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
240 case QZ_RIGHTBRACKET: SetWindowAlpha(theWindow, winAlpha+=0.05);break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
241 case QZ_f: mplayer_put_key('f'); break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
242 case QZ_t: mplayer_put_key('T'); break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
243 default:
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
244 break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
245 }
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
246 }
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
247 break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
248 default:
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
249 err = eventNotHandledErr;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
250 break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
251 }
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
252
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
253 return err;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
254 }
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
255
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
256 //Mouse event handler
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
257 static OSStatus MainMouseEventHandler(EventHandlerCallRef nextHandler, EventRef event, void *userData)
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
258 {
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
259 OSStatus err = noErr;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
260 WindowPtr tmpWin;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
261 Point mousePos;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
262
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
263 GetEventParameter(event, kEventParamMouseLocation, typeQDPoint, 0, sizeof(Point), 0, &mousePos);
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
264
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
265 switch (GetEventKind (event))
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
266 {
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
267 case kEventMouseDown:
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
268 {
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
269 short part = FindWindow(mousePos,&tmpWin);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
270
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
271 if(part == inMenuBar)
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
272 {
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
273 MenuSelect(mousePos);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
274 }
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
275 }
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
276 break;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
277 default:
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
278 err = eventNotHandledErr;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
279 break;
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
280 }
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
281
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
282 HiliteMenu(0);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
283 return err;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
284 }
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
285
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
286 static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t flags, char *title, uint32_t format)
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
287 {
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
288 WindowAttributes windowAttrs;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
289 CFStringRef titleKey;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
290 CFStringRef windowTitle;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
291 OSStatus result;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
292 GDHandle deviceHdl;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
293 Rect deviceRect;
12414
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
294 OSErr qterr;
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
295
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
296 //Get Main device info///////////////////////////////////////////////////
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
297 deviceHdl = GetMainDevice();
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
298 deviceRect = (*deviceHdl)->gdRect;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
299
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
300 device_width = deviceRect.right;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
301 device_height = deviceRect.bottom;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
302
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
303 //misc mplayer setup/////////////////////////////////////////////////////
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
304 image_width = width;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
305 image_height = height;
12414
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
306 switch (image_format)
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
307 {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
308 case IMGFMT_RGB32:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
309 image_depth = IMGFMT_RGB_DEPTH(format);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
310 break;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
311 #ifdef QUARTZ_ENABLE_YUV
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
312 case IMGFMT_YV12:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
313 case IMGFMT_IYUV:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
314 case IMGFMT_I420:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
315 case IMGFMT_UYVY:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
316 case IMGFMT_YUY2:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
317 image_depth = 16;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
318 break;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
319 #endif
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
320 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
321 image_size = ((image_width*image_height*image_depth)+7)/8;
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
322
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
323 vo_fs = flags & VOFLAG_FULLSCREEN;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
324
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
325 //get movie aspect
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
326 aspect_save_orig(width,height);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
327 aspect_save_prescale(d_width,d_height);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
328 aspect_save_screenres(device_width, device_height);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
329
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
330 aspect(&d_width,&d_height,A_NOZOOM);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
331
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
332 //Create player window//////////////////////////////////////////////////
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
333 windowAttrs = kWindowStandardDocumentAttributes
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
334 | kWindowStandardHandlerAttribute
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
335 | kWindowLiveResizeAttribute;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
336
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
337 SetRect(&winRect, 0, 0, d_width, d_height);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
338 SetRect(&dstRect, 0, 0, d_width, d_height);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
339 SetRect(&imgRect, 0, 0, image_width, image_height);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
340
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
341 CreateNewWindow(kDocumentWindowClass, windowAttrs, &winRect, &theWindow);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
342
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
343 //Set window title
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
344 titleKey = CFSTR("MPlayer");
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
345 windowTitle = CFCopyLocalizedString(titleKey, NULL);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
346 result = SetWindowTitleWithCFString(theWindow, windowTitle);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
347 CFRelease(titleKey);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
348 CFRelease(windowTitle);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
349
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
350 //Install event handler
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
351 const EventTypeSpec winEvents[] = { { kEventClassWindow, kEventWindowClosed }, { kEventClassWindow, kEventWindowBoundsChanged } };
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
352 const EventTypeSpec keyEvents[] = { { kEventClassKeyboard, kEventRawKeyDown } };
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
353 const EventTypeSpec mouseEvents[] = { { kEventClassMouse, kEventMouseDown } };
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
354
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
355 InstallWindowEventHandler (theWindow, NewEventHandlerUPP (MainWindowEventHandler), GetEventTypeCount(winEvents), winEvents, theWindow, NULL);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
356 InstallWindowEventHandler (theWindow, NewEventHandlerUPP (MainKeyboardEventHandler), GetEventTypeCount(keyEvents), keyEvents, theWindow, NULL);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
357 InstallApplicationEventHandler (NewEventHandlerUPP (MainMouseEventHandler), GetEventTypeCount(mouseEvents), mouseEvents, 0, NULL);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
358
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
359 //Show window
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
360 RepositionWindow(theWindow, NULL, kWindowCascadeOnMainScreen);
12414
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
361 #ifdef QUARTZ_ENABLE_YUV
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
362 if (!(IMGFMT_IS_RGB(image_format))) {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
363 if (!EnterMoviesDone) {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
364 qterr = EnterMovies();
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
365 EnterMoviesDone = 1;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
366 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
367 else
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
368 qterr = 0;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
369 mp_msg(MSGT_VO, MSGL_INFO, "\nQuartz: EnterMovies\n");
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
370 if (qterr) {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
371 mp_msg(MSGT_VO, MSGL_FATAL, "Quartz error: EnterMovies (%d)\n", qterr);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
372 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
373
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
374 {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
375 ComponentDescription cd2;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
376 Handle h1 = NewHandleClear(4);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
377 Handle h2 = NewHandleClear(4);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
378 char ch1[256], ch2[256];
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
379
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
380 qterr = FindCodec(image_qtcodec, bestSpeedCodec, NULL, &mycodec);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
381 if (qterr) {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
382 mp_msg(MSGT_VO, MSGL_FATAL, "Quartz error: FindCodec (%d)\n", qterr);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
383 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
384 qterr = GetComponentInfo(mycodec, &cd2, h1, h2, NULL);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
385 if (qterr) {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
386 mp_msg(MSGT_VO, MSGL_FATAL, "Quartz error: GetComponentInfo (%d)\n", qterr);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
387 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
388 memcpy(ch1, &((unsigned char*)(*h1))[1], ((unsigned char*)(*h1))[0]);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
389 ch1[((unsigned char*)(*h1))[0]] = '\0';
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
390 memcpy(ch2, &((unsigned char*)(*h2))[1], ((unsigned char*)(*h2))[0]);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
391 ch2[((unsigned char*)(*h2))[0]] = '\0';
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
392 DisposeHandle(h1);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
393 DisposeHandle(h2);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
394 mp_msg(MSGT_VO, MSGL_INFO, "Quartz: QuickTime FindCodec reports component %.4s %.4s %.4s, %s, %s, [flags: 0x%08x, mask: 0x%08x]\n",
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
395 &cd2.componentType,
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
396 &cd2.componentSubType,
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
397 &cd2.componentManufacturer,
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
398 ch1,
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
399 ch2,
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
400 cd2.componentFlags,
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
401 cd2.componentFlagsMask);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
402
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
403 {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
404 CodecInfo ci;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
405 qterr = GetCodecInfo(&ci, 'imdc', mycodec);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
406 if (qterr) {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
407 mp_msg(MSGT_VO, MSGL_FATAL, "Quartz error: GetCodecInfo (%d)\n", qterr);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
408 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
409 mp_msg(MSGT_VO, MSGL_INFO, "Quartz: CodecInfo:\n\tname: %s\n\tvendor: %.4s\n\tversion/revision: %d/%d\n\tdecompressFlags: 0x%08x\n\tcompressFlags: 0x%08x\n\tformatFlags: 0x%08x\n", ch1, &ci.vendor, ci.version, ci.revisionLevel, ci.decompressFlags, ci.compressFlags, ci.formatFlags);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
410 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
411 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
412 yuv_qt_stuff.desc = (ImageDescriptionHandle)NewHandleClear( sizeof(ImageDescription) );
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
413 yuv_qt_stuff.extension_colr = NewHandleClear(sizeof(NCLCColorInfoImageDescriptionExtension));
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
414 ((NCLCColorInfoImageDescriptionExtension*)(*yuv_qt_stuff.extension_colr))->colorParamType = kVideoColorInfoImageDescriptionExtensionType;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
415 ((NCLCColorInfoImageDescriptionExtension*)(*yuv_qt_stuff.extension_colr))->primaries = 2;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
416 ((NCLCColorInfoImageDescriptionExtension*)(*yuv_qt_stuff.extension_colr))->transferFunction = 2;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
417 ((NCLCColorInfoImageDescriptionExtension*)(*yuv_qt_stuff.extension_colr))->matrix = 2;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
418 yuv_qt_stuff.extension_fiel = NewHandleClear(sizeof(FieldInfoImageDescriptionExtension));
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
419 ((FieldInfoImageDescriptionExtension*)(*yuv_qt_stuff.extension_fiel))->fieldCount = 1;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
420 ((FieldInfoImageDescriptionExtension*)(*yuv_qt_stuff.extension_fiel))->fieldOrderings = 0;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
421 yuv_qt_stuff.extension_clap = NewHandleClear(sizeof(CleanApertureImageDescriptionExtension));
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
422 ((CleanApertureImageDescriptionExtension*)(*yuv_qt_stuff.extension_clap))->cleanApertureWidthN = image_width;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
423 ((CleanApertureImageDescriptionExtension*)(*yuv_qt_stuff.extension_clap))->cleanApertureWidthD = 1;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
424 ((CleanApertureImageDescriptionExtension*)(*yuv_qt_stuff.extension_clap))->cleanApertureHeightN = image_height;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
425 ((CleanApertureImageDescriptionExtension*)(*yuv_qt_stuff.extension_clap))->cleanApertureHeightD = 1;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
426 ((CleanApertureImageDescriptionExtension*)(*yuv_qt_stuff.extension_clap))->horizOffN = 0;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
427 ((CleanApertureImageDescriptionExtension*)(*yuv_qt_stuff.extension_clap))->horizOffD = 1;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
428 ((CleanApertureImageDescriptionExtension*)(*yuv_qt_stuff.extension_clap))->vertOffN = 0;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
429 ((CleanApertureImageDescriptionExtension*)(*yuv_qt_stuff.extension_clap))->vertOffD = 1;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
430 yuv_qt_stuff.extension_pasp = NewHandleClear(sizeof(PixelAspectRatioImageDescriptionExtension));
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
431 ((PixelAspectRatioImageDescriptionExtension*)(*yuv_qt_stuff.extension_pasp))->hSpacing = 1;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
432 ((PixelAspectRatioImageDescriptionExtension*)(*yuv_qt_stuff.extension_pasp))->vSpacing = 1;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
433
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
434 (*yuv_qt_stuff.desc)->idSize = sizeof(ImageDescription);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
435 (*yuv_qt_stuff.desc)->cType = image_qtcodec;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
436 (*yuv_qt_stuff.desc)->version = 2;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
437 (*yuv_qt_stuff.desc)->revisionLevel = 0;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
438 (*yuv_qt_stuff.desc)->vendor = 'mpla';
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
439 (*yuv_qt_stuff.desc)->width = image_width;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
440 (*yuv_qt_stuff.desc)->height = image_height;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
441 (*yuv_qt_stuff.desc)->hRes = Long2Fix(72);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
442 (*yuv_qt_stuff.desc)->vRes = Long2Fix(72);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
443 (*yuv_qt_stuff.desc)->temporalQuality = 0;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
444 (*yuv_qt_stuff.desc)->spatialQuality = codecLosslessQuality;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
445 (*yuv_qt_stuff.desc)->frameCount = 1;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
446 (*yuv_qt_stuff.desc)->dataSize = 0;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
447 (*yuv_qt_stuff.desc)->depth = 24;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
448 (*yuv_qt_stuff.desc)->clutID = -1;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
449
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
450 qterr = AddImageDescriptionExtension(yuv_qt_stuff.desc, yuv_qt_stuff.extension_colr, kColorInfoImageDescriptionExtension);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
451 if (qterr) {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
452 mp_msg(MSGT_VO, MSGL_FATAL, "Quartz error: AddImageDescriptionExtension [colr] (%d)\n", qterr);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
453 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
454 qterr = AddImageDescriptionExtension(yuv_qt_stuff.desc, yuv_qt_stuff.extension_fiel, kFieldInfoImageDescriptionExtension);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
455 if (qterr) {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
456 mp_msg(MSGT_VO, MSGL_FATAL, "Quartz error: AddImageDescriptionExtension [fiel] (%d)\n", qterr);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
457 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
458 qterr = AddImageDescriptionExtension(yuv_qt_stuff.desc, yuv_qt_stuff.extension_clap, kCleanApertureImageDescriptionExtension);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
459 if (qterr) {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
460 mp_msg(MSGT_VO, MSGL_FATAL, "Quartz error: AddImageDescriptionExtension [clap] (%d)\n", qterr);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
461 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
462 qterr = AddImageDescriptionExtension(yuv_qt_stuff.desc, yuv_qt_stuff.extension_pasp, kCleanApertureImageDescriptionExtension);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
463 if (qterr) {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
464 mp_msg(MSGT_VO, MSGL_FATAL, "Quartz error: AddImageDescriptionExtension [pasp] (%d)\n", qterr);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
465 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
466
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
467 SetPort(GetWindowPort(theWindow));
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
468 SetIdentityMatrix(&yuv_qt_stuff.matrix);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
469 if ((d_width != width) || (d_height != height)) {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
470 ScaleMatrix(&yuv_qt_stuff.matrix,
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
471 FixDiv(Long2Fix(d_width),Long2Fix(width)),
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
472 FixDiv(Long2Fix(d_height),Long2Fix(height)),
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
473 0,
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
474 0);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
475 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
476 P = calloc(sizeof(PlanarPixmapInfoYUV420) + image_size, 1);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
477 switch (image_format) {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
478 case IMGFMT_YV12:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
479 case IMGFMT_IYUV:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
480 case IMGFMT_I420:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
481 P->componentInfoY.offset = sizeof(PlanarPixmapInfoYUV420);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
482 P->componentInfoCb.offset = P->componentInfoY.offset + image_size / 2;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
483 P->componentInfoCr.offset = P->componentInfoCb.offset + image_size / 4;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
484 P->componentInfoY.rowBytes = image_width;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
485 P->componentInfoCb.rowBytes = image_width / 2;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
486 P->componentInfoCr.rowBytes = image_width / 2;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
487 image_buffer_size = image_size + sizeof(PlanarPixmapInfoYUV420);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
488 break;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
489 case IMGFMT_UYVY:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
490 case IMGFMT_YUY2:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
491 image_buffer_size = image_size;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
492 break;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
493 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
494 mp_msg(MSGT_VO, MSGL_INFO, "Quartz: DecompressSequenceBeginS\n");
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
495 mp_msg(MSGT_VO, MSGL_INFO, "Quartz: width=%d, height=%d, d_width=%d, d_height=%d\n",
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
496 width, height, d_width, d_height);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
497 myopenedcodec = OpenComponent(mycodec);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
498
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
499 qterr = DecompressSequenceBeginS(&yuv_qt_stuff.seqId,
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
500 yuv_qt_stuff.desc,
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
501 P,
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
502 image_buffer_size,
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
503 GetWindowPort(theWindow),
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
504 NULL, // GDHandle
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
505 NULL, // srcRect
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
506 ((d_width != width) || (d_height != height)) ?
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
507 &yuv_qt_stuff.matrix : NULL,
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
508 srcCopy,
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
509 NULL, // mask,
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
510 0, //codecFlagUseImageBuffer,
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
511 codecLosslessQuality,
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
512 bestSpeedCodec);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
513 //mycodec); // some codec reported by FindCodec() won't work (?)
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
514 //myopenedcodec); // doesn't seem to help, either
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
515 if (qterr) {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
516 mp_msg(MSGT_VO, MSGL_FATAL, "Quartz error: DecompressSequenceBeginS (%d)\n", qterr);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
517 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
518 mp_msg(MSGT_VO, MSGL_INFO, "Quartz: DecompressSequenceBeginS done\n");
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
519 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
520 #endif /* QUARTZ_ENABLE_YUV */
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
521
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
522 ShowWindow (theWindow);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
523
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
524 if(vo_fs)
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
525 window_fullscreen();
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
526
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
527 if(vo_ontop)
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
528 window_ontop();
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
529
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
530 return 0;
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
531 }
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
532
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
533 static void check_events(void)
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
534 {
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
535 EventRef theEvent;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
536 EventTargetRef theTarget;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
537 OSStatus theErr;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
538
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
539 //Get event
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
540 theTarget = GetEventDispatcherTarget();
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
541 theErr = ReceiveNextEvent(0, 0, kEventDurationNoWait,true, &theEvent);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
542 if(theErr == noErr && theEvent != NULL)
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
543 {
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
544 SendEventToEventTarget (theEvent, theTarget);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
545 ReleaseEvent(theEvent);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
546 }
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
547
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
548 //update activity every 30 seconds to prevent
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
549 //screensaver from starting up.
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
550 DateTimeRec d;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
551 unsigned long curTime;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
552 static unsigned long lastTime = 0;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
553
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
554 GetTime(&d);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
555 DateToSeconds( &d, &curTime);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
556
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
557 if( ( (curTime - lastTime) >= 30) || (lastTime == 0))
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
558 {
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
559 UpdateSystemActivity(UsrActivity);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
560 lastTime = curTime;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
561 }
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
562 }
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
563
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
564 static void draw_osd(void)
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
565 {
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
566 vo_draw_text(image_width,image_height,draw_alpha);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
567 }
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
568
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
569 static void flip_page(void)
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
570 {
12414
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
571 switch (image_format) {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
572 case IMGFMT_RGB32:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
573 {
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
574 OSStatus error;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
575 CGrafPtr oldPort,deskPort;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
576 GDHandle oldGDevice;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
577 OSStatus lockPixelsError;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
578 Boolean canLockPixels;
12414
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
579
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
580 GetGWorld (&oldPort, &oldGDevice);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
581 SetGWorld(GetWindowPort(theWindow), GetMainDevice());
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
582
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
583 CGrafPtr windowPort = GetWindowPort(theWindow);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
584
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
585 lockPixelsError = LockPortBits(windowPort);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
586
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
587 if (lockPixelsError == noErr)
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
588 canLockPixels = true;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
589 else
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
590 canLockPixels = false;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
591
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
592 if (canLockPixels)
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
593 {
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
594 CopyBits( GetPortBitMapForCopyBits (imgGWorld), GetPortBitMapForCopyBits (windowPort), &imgRect, &dstRect, srcCopy, 0 );
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
595 lockPixelsError = UnlockPortBits(windowPort);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
596 }
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
597
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
598 RgnHandle theVisibleRegion;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
599
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
600 if (QDIsPortBuffered(windowPort))
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
601 {
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
602 theVisibleRegion = NewRgn();
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
603 GetPortVisibleRegion(windowPort, theVisibleRegion);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
604 QDFlushPortBuffer(windowPort, theVisibleRegion);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
605 DisposeRgn(theVisibleRegion);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
606 }
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
607
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
608 SetGWorld(oldPort, oldGDevice);
12414
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
609 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
610 break;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
611 #ifdef QUARTZ_ENABLE_YUV
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
612 case IMGFMT_YV12:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
613 case IMGFMT_IYUV:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
614 case IMGFMT_I420:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
615 case IMGFMT_UYVY:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
616 case IMGFMT_YUY2:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
617 if (EnterMoviesDone) {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
618 OSErr qterr;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
619 CodecFlags flags = 0;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
620 qterr = DecompressSequenceFrameWhen(yuv_qt_stuff.seqId,
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
621 P,
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
622 image_buffer_size,
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
623 0, //codecFlagUseImageBuffer,
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
624 &flags,
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
625 NULL,
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
626 NULL);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
627 if (qterr) {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
628 mp_msg(MSGT_VO, MSGL_FATAL, "Quartz error: DecompressSequenceFrameWhen in flip_page (%d) flags:0x%08x\n", qterr, flags);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
629 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
630 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
631 break;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
632 #endif
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
633 }
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
634 }
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
635
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
636 static uint32_t draw_slice(uint8_t *src[], int stride[], int w,int h,int x,int y)
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
637 {
12414
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
638 #ifdef QUARTZ_ENABLE_YUV
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
639 switch (image_format) {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
640 case IMGFMT_YV12:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
641 case IMGFMT_I420:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
642 memcpy_pic(((char*)P) + P->componentInfoY.offset + x + image_width * y, src[0],
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
643 w, h, image_width, stride[0]);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
644 x=x/2;y=y/2;w=w/2;h=h/2;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
645 memcpy_pic(((char*)P) + P->componentInfoCb.offset + x + image_width / 2 * y, src[1],
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
646 w, h, image_width / 2, stride[1]);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
647 memcpy_pic(((char*)P) + P->componentInfoCr.offset + x + image_width / 2 * y, src[2],
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
648 w, h, image_width / 2, stride[2]);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
649 return 0;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
650
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
651 case IMGFMT_IYUV:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
652 memcpy_pic(((char*)P) + P->componentInfoY.offset + x + image_width * y, src[0],
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
653 w, h, image_width, stride[0]);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
654 x=x/2;y=y/2;w=w/2;h=h/2;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
655 memcpy_pic(((char*)P) + P->componentInfoCr.offset + x + image_width / 2 * y, src[1],
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
656 w, h, image_width / 2, stride[1]);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
657 memcpy_pic(((char*)P) + P->componentInfoCb.offset + x + image_width / 2 * y, src[2],
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
658 w, h, image_width / 2, stride[2]);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
659 return 0;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
660 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
661 #endif
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
662 return -1;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
663 }
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
664
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
665 static uint32_t draw_frame(uint8_t *src[])
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
666 {
12414
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
667 switch (image_format) {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
668 case IMGFMT_RGB32:
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
669 image_data = src[0];
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
670 DisposeGWorld(imgGWorld);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
671 NewGWorldFromPtr (&imgGWorld, k32ARGBPixelFormat, &imgRect, 0, 0, 0, image_data, image_width * 4);
12414
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
672 return 0;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
673 #ifdef QUARTZ_ENABLE_YUV
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
674 case IMGFMT_UYVY:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
675 case IMGFMT_YUY2:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
676 memcpy_pic(((char*)P), src[0], image_width * 2, image_height, image_width * 2, image_width * 2);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
677 return 0;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
678 #endif
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
679 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
680 return -1;
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
681 }
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
682
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
683 static uint32_t query_format(uint32_t format)
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
684 {
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
685 image_format = format;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
686
12414
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
687 if (format == IMGFMT_RGB32)
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
688 return VFCAP_CSP_SUPPORTED | VFCAP_OSD | VFCAP_SWSCALE | VFCAP_CSP_SUPPORTED_BY_HW;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
689
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
690 #ifdef QUARTZ_ENABLE_YUV
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
691 image_qtcodec = 0;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
692
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
693 if ((format == IMGFMT_YV12) || (format == IMGFMT_IYUV) || (format == IMGFMT_I420)) {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
694 image_qtcodec = kMpegYUV420CodecType; //kYUV420CodecType ?;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
695 return VFCAP_CSP_SUPPORTED | VFCAP_OSD | VFCAP_SWSCALE | VFCAP_ACCEPT_STRIDE;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
696 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
697
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
698 if (format == IMGFMT_YUY2) {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
699 image_qtcodec = kComponentVideoUnsigned;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
700 return VFCAP_CSP_SUPPORTED | VFCAP_OSD | VFCAP_SWSCALE;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
701 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
702
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
703 if (format == IMGFMT_UYVY) {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
704 image_qtcodec = k422YpCbCr8CodecType;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
705 return VFCAP_CSP_SUPPORTED | VFCAP_OSD | VFCAP_SWSCALE;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
706 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
707 #endif
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
708
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
709 return 0;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
710 }
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
711
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
712 static void uninit(void)
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
713 {
12414
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
714 switch (image_format) {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
715 case IMGFMT_YV12:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
716 case IMGFMT_IYUV:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
717 case IMGFMT_I420:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
718 case IMGFMT_UYVY:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
719 case IMGFMT_YUY2:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
720 {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
721 OSErr qterr;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
722 if (EnterMoviesDone) {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
723 qterr = CDSequenceEnd(yuv_qt_stuff.seqId);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
724 if (qterr) {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
725 mp_msg(MSGT_VO, MSGL_FATAL, "Quartz error: CDSequenceEnd (%d)\n", qterr);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
726 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
727 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
728 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
729 break;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
730 default:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
731 break;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
732 }
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
733 ShowMenuBar();
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
734 }
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
735
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
736 static uint32_t preinit(const char *arg)
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
737 {
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
738 return 0;
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
739 }
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
740
12414
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
741 #ifdef QUARTZ_ENABLE_YUV
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
742 static uint32_t draw_yuv_image(mp_image_t *mpi) {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
743 // ATM we're only called for planar IMGFMT
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
744 // drawing is done directly in P
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
745 // and displaying is in flip_page.
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
746 return VO_TRUE;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
747 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
748
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
749 static uint32_t get_yuv_image(mp_image_t *mpi) {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
750 if(mpi->type!=MP_IMGTYPE_EXPORT) return VO_FALSE;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
751
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
752 if(mpi->imgfmt!=image_format) return VO_FALSE;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
753
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
754 if(mpi->flags&MP_IMGFLAG_PLANAR){
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
755 if (mpi->num_planes != 3) {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
756 mp_msg(MSGT_VO, MSGL_ERR, "Quartz error: only 3 planes allowed in get_yuv_image for planar (%d) \n", mpi->num_planes);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
757 return VO_FALSE;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
758 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
759
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
760 mpi->planes[0]=((char*)P) + P->componentInfoY.offset;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
761 mpi->stride[0]=image_width;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
762 mpi->width=image_width;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
763
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
764 if(mpi->flags&MP_IMGFLAG_SWAPPED){
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
765 // I420
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
766 mpi->planes[1]=((char*)P) + P->componentInfoCb.offset;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
767 mpi->planes[2]=((char*)P) + P->componentInfoCr.offset;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
768 mpi->stride[1]=image_width/2;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
769 mpi->stride[2]=image_width/2;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
770 } else {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
771 // YV12
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
772 mpi->planes[1]=((char*)P) + P->componentInfoCr.offset;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
773 mpi->planes[2]=((char*)P) + P->componentInfoCb.offset;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
774 mpi->stride[1]=image_width/2;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
775 mpi->stride[2]=image_width/2;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
776 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
777 mpi->flags|=MP_IMGFLAG_DIRECT;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
778 return VO_TRUE;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
779 } else { // doesn't work yet
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
780 if (mpi->num_planes != 1) {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
781 mp_msg(MSGT_VO, MSGL_ERR, "Quartz error: only 1 plane allowed in get_yuv_image for packed (%d) \n", mpi->num_planes);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
782 return VO_FALSE;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
783 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
784
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
785 mpi->planes[0] = (char*)P;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
786 mpi->stride[0] = image_width * 2;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
787 mpi->width=image_width;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
788 mpi->flags|=MP_IMGFLAG_DIRECT;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
789 return VO_TRUE;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
790 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
791 return VO_FALSE;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
792 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
793 #endif /* QUARTZ_ENABLE_YUV */
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
794
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
795 static uint32_t control(uint32_t request, void *data, ...)
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
796 {
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
797 switch (request)
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
798 {
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
799 case VOCTRL_PAUSE: return (int_pause=1);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
800 case VOCTRL_RESUME: return (int_pause=0);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
801 case VOCTRL_FULLSCREEN: window_fullscreen(); return VO_TRUE;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
802 case VOCTRL_ONTOP: window_ontop(); return VO_TRUE;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
803 case VOCTRL_QUERY_FORMAT: return query_format(*((uint32_t*)data));
12414
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
804 #ifdef QUARTZ_ENABLE_YUV
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
805 case VOCTRL_GET_IMAGE:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
806 switch (image_format) {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
807 case IMGFMT_YV12:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
808 case IMGFMT_IYUV:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
809 case IMGFMT_I420:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
810 //case IMGFMT_UYVY:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
811 //case IMGFMT_YUY2:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
812 return get_yuv_image(data);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
813 break;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
814 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
815 case VOCTRL_DRAW_IMAGE:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
816 switch (image_format) {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
817 case IMGFMT_YV12:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
818 case IMGFMT_IYUV:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
819 case IMGFMT_I420:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
820 //case IMGFMT_UYVY:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
821 //case IMGFMT_YUY2:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
822 return draw_yuv_image(data);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
823 break;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
824 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
825 #endif
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
826 }
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
827 return VO_NOTIMPL;
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
828 }
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
829
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
830 void window_resized()
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
831 {
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
832 float aspectX;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
833 float aspectY;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
834
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
835 int padding;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
836
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
837 uint32_t d_width;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
838 uint32_t d_height;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
839
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
840 GetWindowPortBounds(theWindow, &winRect);
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
841
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
842 aspect( &d_width, &d_height, A_NOZOOM);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
843
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
844 aspectX = (float)((float)winRect.right/(float)d_width);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
845 aspectY = (float)((float)winRect.bottom/(float)d_height);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
846
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
847 if((d_height*aspectX)>winRect.bottom)
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
848 {
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
849 padding = (winRect.right - d_width*aspectY)/2;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
850 SetRect(&dstRect, padding, 0, d_width*aspectY+padding, d_height*aspectY);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
851 }
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
852 else
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
853 {
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
854 padding = (winRect.bottom - d_height*aspectX)/2;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
855 SetRect(&dstRect, 0, padding, (d_width*aspectX), d_height*aspectX+padding);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
856 }
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
857
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
858 //create a graphic context for the window
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
859 SetPortBounds(GetWindowPort(theWindow), &winRect);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
860 CreateCGContextForPort(GetWindowPort(theWindow),&context);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
861
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
862 //fill background with black
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
863 CGRect winBounds = CGRectMake( winRect.top, winRect.left, winRect.right, winRect.bottom);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
864 CGContextSetRGBFillColor(context, 0.0, 0.0, 0.0, 1.0);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
865 CGContextFillRect(context, winBounds);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
866 CGContextFlush(context);
12414
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
867
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
868
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
869 switch (image_format) {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
870 #ifdef QUARTZ_ENABLE_YUV
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
871 case IMGFMT_YV12:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
872 case IMGFMT_IYUV:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
873 case IMGFMT_I420:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
874 case IMGFMT_UYVY:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
875 case IMGFMT_YUY2:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
876 {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
877 long scale_X = FixDiv(Long2Fix(dstRect.right - dstRect.left),Long2Fix(image_width));
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
878 long scale_Y = FixDiv(Long2Fix(dstRect.bottom - dstRect.top),Long2Fix(image_height));
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
879
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
880 SetIdentityMatrix(&yuv_qt_stuff.matrix);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
881 if (((dstRect.right - dstRect.left) != image_width) ||
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
882 ((dstRect.bottom - dstRect.right) != image_height)) {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
883 ScaleMatrix(&yuv_qt_stuff.matrix,
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
884 scale_X,
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
885 scale_Y,
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
886 0,
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
887 0);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
888
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
889 if (padding > 0) {
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
890 TranslateMatrix(&yuv_qt_stuff.matrix,
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
891 Long2Fix(dstRect.left),
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
892 Long2Fix(dstRect.top));
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
893 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
894 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
895 SetDSequenceMatrix(yuv_qt_stuff.seqId, &yuv_qt_stuff.matrix);
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
896 break;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
897 }
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
898 #endif
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
899 default:
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
900 break;
f1a9dcdfab5d Add yuv csp support
nplourde
parents: 12296
diff changeset
901 }
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
902 }
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
903
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
904 void window_ontop()
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
905 {
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
906 if(!vo_ontop)
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
907 SetWindowClass( theWindow, kUtilityWindowClass);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
908 else
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
909 SetWindowClass( theWindow, kDocumentWindowClass);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
910
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
911 vo_ontop = (!(vo_ontop));
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
912 }
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
913
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
914 void window_fullscreen()
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
915 {
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
916 static Rect oldRect;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
917 static Ptr *restoreState = nil;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
918 short width=640;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
919 short height=480;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
920 RGBColor black={0,0,0};
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
921 GDHandle deviceHdl;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
922 Rect deviceRect;
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
923
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
924 //go fullscreen
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
925 if(!vo_fs)
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
926 {
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
927 //BeginFullScreen( &restoreState,nil,&width,&height,nil,&black,nil);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
928 HideMenuBar();
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
929
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
930 //Get Main device info///////////////////////////////////////////////////
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
931 deviceHdl = GetMainDevice();
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
932 deviceRect = (*deviceHdl)->gdRect;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
933
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
934 device_width = deviceRect.right;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
935 device_height = deviceRect.bottom;
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
936
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
937 //save old window size
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
938 GetWindowPortBounds(theWindow, &oldRect);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
939
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
940 //hide mouse cursor
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
941 HideCursor();
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
942
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
943 //go fullscreen
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
944 ChangeWindowAttributes(theWindow, 0, kWindowResizableAttribute);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
945 MoveWindow (theWindow, 0, 0, 1);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
946 SizeWindow(theWindow, device_width, device_height,1);
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
947
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
948 vo_fs = 1;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
949 }
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
950 else //go back to windowed mode
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
951 {
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
952 //EndFullScreen( restoreState,0);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
953 ShowMenuBar();
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
954
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
955 //Get Main device info///////////////////////////////////////////////////
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
956 deviceHdl = GetMainDevice();
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
957 deviceRect = (*deviceHdl)->gdRect;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
958
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
959 device_width = deviceRect.right;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
960 device_height = deviceRect.bottom;
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
961
12296
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
962 //show mouse cursor
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
963 ShowCursor();
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
964
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
965 //revert window to previous setting
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
966 ChangeWindowAttributes(theWindow, kWindowResizableAttribute, 0);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
967 SizeWindow(theWindow, oldRect.right, oldRect.bottom,1);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
968 RepositionWindow(theWindow, NULL, kWindowCascadeOnMainScreen);
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
969
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
970 vo_fs = 0;
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
971 }
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
972
1da74cbaf324 Add Fullscreen, Ontop and OSD support
nplourde
parents: 12120
diff changeset
973 window_resized();
12120
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
974 }
56e4423f16be Quartz/MacOSX video output module by Nicolas Plourde
alex
parents:
diff changeset
975