annotate libvo/vo_quartz.c @ 12582:162c80b2d432

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