Mercurial > mplayer.hg
annotate libmpcodecs/vd_qtvideo.c @ 31570:0f48a746def1
Move declaration to where it is actually used.
author | reimar |
---|---|
date | Mon, 05 Jul 2010 19:32:12 +0000 |
parents | 8df8a7c20f46 |
children | 56e3df9c8aaa |
rev | line source |
---|---|
30421
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
1 /* |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
2 * This file is part of MPlayer. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
3 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
4 * MPlayer is free software; you can redistribute it and/or modify |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
5 * it under the terms of the GNU General Public License as published by |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
6 * the Free Software Foundation; either version 2 of the License, or |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
7 * (at your option) any later version. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
8 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
9 * MPlayer is distributed in the hope that it will be useful, |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
12 * GNU General Public License for more details. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
13 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
14 * You should have received a copy of the GNU General Public License along |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
15 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
17 */ |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
29263
diff
changeset
|
18 |
8160 | 19 #include <stdio.h> |
20 #include <stdlib.h> | |
21263
db9754cebfab
Move #include <QuickTime/ImageCodec.h> before internal headers
uau
parents:
18771
diff
changeset
|
21 #include <inttypes.h> |
8160 | 22 |
23 #include "config.h" | |
28196
504aa3e3076a
Reorder #includes and #ifdefs to avoid warnings and excessive #ifdeffery.
diego
parents:
27432
diff
changeset
|
24 #include "mp_msg.h" |
504aa3e3076a
Reorder #includes and #ifdefs to avoid warnings and excessive #ifdeffery.
diego
parents:
27432
diff
changeset
|
25 #include "mpbswap.h" |
504aa3e3076a
Reorder #includes and #ifdefs to avoid warnings and excessive #ifdeffery.
diego
parents:
27432
diff
changeset
|
26 #include "vd_internal.h" |
8160 | 27 |
27388
ac03760f7fcc
Rename all preprocessor directives related to Apple / Mac OS X.
diego
parents:
26754
diff
changeset
|
28 #ifdef CONFIG_QUICKTIME |
21263
db9754cebfab
Move #include <QuickTime/ImageCodec.h> before internal headers
uau
parents:
18771
diff
changeset
|
29 #include <QuickTime/ImageCodec.h> |
db9754cebfab
Move #include <QuickTime/ImageCodec.h> before internal headers
uau
parents:
18771
diff
changeset
|
30 #define dump_ImageDescription(x) |
28196
504aa3e3076a
Reorder #includes and #ifdefs to avoid warnings and excessive #ifdeffery.
diego
parents:
27432
diff
changeset
|
31 #else |
504aa3e3076a
Reorder #includes and #ifdefs to avoid warnings and excessive #ifdeffery.
diego
parents:
27432
diff
changeset
|
32 #include "loader/ldt_keeper.h" |
504aa3e3076a
Reorder #includes and #ifdefs to avoid warnings and excessive #ifdeffery.
diego
parents:
27432
diff
changeset
|
33 #include "loader/qtx/qtxsdk/components.h" |
31348
8df8a7c20f46
Replace forward declarations by proper loader/wine/winbase.h #include.
diego
parents:
30870
diff
changeset
|
34 #include "loader/wine/winbase.h" |
22577
a033e5519802
Include loader/ prefix in #include path everywhere.
diego
parents:
21264
diff
changeset
|
35 #include "loader/wine/windef.h" |
8451 | 36 #endif |
37 | |
30504
cc27da5d7286
Mark all ad_info_t/vd_info_t structure declarations as const.
diego
parents:
30421
diff
changeset
|
38 static const vd_info_t info = { |
8160 | 39 "Quicktime Video decoder", |
40 "qtvideo", | |
41 "A'rpi", | |
12194
81f8e4f97b38
printf -> mp_msg, error msg when qtmlClient.dll is missing
faust3
parents:
9502
diff
changeset
|
42 "Sascha Sommer", |
8160 | 43 "win32" |
44 }; | |
45 | |
46 LIBVD_EXTERN(qtvideo) | |
47 | |
30857
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
48 static mp_image_t* mpi; |
8160 | 49 static Rect OutBufferRect; //the dimensions of our GWorld |
50 | |
51 static GWorldPtr OutBufferGWorld = NULL;//a GWorld is some kind of description for a drawing environment | |
52 static ImageDescriptionHandle framedescHandle; | |
30857
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
53 static ImageSequence imageSeq; |
8160 | 54 |
27388
ac03760f7fcc
Rename all preprocessor directives related to Apple / Mac OS X.
diego
parents:
26754
diff
changeset
|
55 #ifndef CONFIG_QUICKTIME |
28196
504aa3e3076a
Reorder #includes and #ifdefs to avoid warnings and excessive #ifdeffery.
diego
parents:
27432
diff
changeset
|
56 static HINSTANCE qtime_qts; // handle to the preloaded quicktime.qts |
504aa3e3076a
Reorder #includes and #ifdefs to avoid warnings and excessive #ifdeffery.
diego
parents:
27432
diff
changeset
|
57 static HMODULE handler; |
8160 | 58 static OSErr (*InitializeQTML)(long flags); |
59 static OSErr (*EnterMovies)(void); | |
30869 | 60 static void (*ExitMovies)(void); |
30857
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
61 static OSErr (*DecompressSequenceBegin)(ImageSequence *seqID, |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
62 ImageDescriptionHandle desc, |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
63 CGrafPtr port, |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
64 /*GDHandle*/void* gdh, |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
65 const Rect *srcRect, |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
66 MatrixRecordPtr matrix, |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
67 short mode, |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
68 RgnHandle mask, |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
69 CodecFlags flags, |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
70 CodecQ accuracy, |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
71 DecompressorComponent codec); |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
72 static OSErr (*DecompressSequenceFrameS)(ImageSequence seqID, |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
73 Ptr data, |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
74 long dataSize, |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
75 CodecFlags inFlags, |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
76 CodecFlags *outFlags, |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
77 ICMCompletionProcRecordPtr asyncCompletionProc); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28198
diff
changeset
|
78 static PixMapHandle (*GetGWorldPixMap)(GWorldPtr offscreenGWorld); |
8160 | 79 static OSErr (*QTNewGWorldFromPtr)(GWorldPtr *gw, |
80 OSType pixelFormat, | |
81 const Rect *boundsRect, | |
82 CTabHandle cTable, | |
83 /*GDHandle*/void* aGDevice, //unused anyway | |
84 GWorldFlags flags, | |
85 void *baseAddr, | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28198
diff
changeset
|
86 long rowBytes); |
30812 | 87 static Handle (*NewHandleClear)(Size byteCount); |
30857
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
88 static void (*DisposeHandle)(Handle h); |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
89 static void (*DisposeGWorld)(GWorldPtr offscreenGWorld); |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
90 static OSErr (*CDSequenceEnd)(ImageSequence seqID); |
27388
ac03760f7fcc
Rename all preprocessor directives related to Apple / Mac OS X.
diego
parents:
26754
diff
changeset
|
91 #endif /* #ifndef CONFIG_QUICKTIME */ |
8160 | 92 |
93 // to set/get/query special features/parameters | |
94 static int control(sh_video_t *sh,int cmd,void* arg,...){ | |
95 return CONTROL_UNKNOWN; | |
96 } | |
97 | |
98 // init driver | |
99 static int init(sh_video_t *sh){ | |
30812 | 100 OSErr result = 1; |
8160 | 101 |
30857
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
102 if (sh->ImageDesc == NULL) { |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
103 mp_msg(MSGT_DECVIDEO,MSGL_ERR,"sh->ImageDesc not set, cannot use binary QuickTime codecs (try -demuxer mov?)\n"); |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
104 return 0; |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
105 } |
9502
241bba8f60e8
MACOSX support patch, based on Dan Christiansens work
alex
parents:
9405
diff
changeset
|
106 |
30857
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
107 #ifndef CONFIG_QUICKTIME |
9405
a4444e7ee56a
real cygwin support by Sascha Sommer <saschasommer@freenet.de>
alex
parents:
8473
diff
changeset
|
108 #ifdef WIN32_LOADER |
8270 | 109 Setup_LDT_Keeper(); |
110 #endif | |
111 | |
14528
860f06087aac
preload quicktime.qts, this allows us to ignore the hardcoded path inside the dlls so that quicktime.qts doesn't need to be in the windows system dir, patch by Gianluigi Tiesi <mplayer at netfarm.it>, comments by myself
faust3
parents:
13606
diff
changeset
|
112 //preload quicktime.qts to avoid the problems caused by the hardcoded path inside the dll |
860f06087aac
preload quicktime.qts, this allows us to ignore the hardcoded path inside the dlls so that quicktime.qts doesn't need to be in the windows system dir, patch by Gianluigi Tiesi <mplayer at netfarm.it>, comments by myself
faust3
parents:
13606
diff
changeset
|
113 qtime_qts = LoadLibraryA("QuickTime.qts"); |
860f06087aac
preload quicktime.qts, this allows us to ignore the hardcoded path inside the dlls so that quicktime.qts doesn't need to be in the windows system dir, patch by Gianluigi Tiesi <mplayer at netfarm.it>, comments by myself
faust3
parents:
13606
diff
changeset
|
114 if(!qtime_qts){ |
860f06087aac
preload quicktime.qts, this allows us to ignore the hardcoded path inside the dlls so that quicktime.qts doesn't need to be in the windows system dir, patch by Gianluigi Tiesi <mplayer at netfarm.it>, comments by myself
faust3
parents:
13606
diff
changeset
|
115 mp_msg(MSGT_DECVIDEO,MSGL_ERR,"unable to load QuickTime.qts\n" ); |
860f06087aac
preload quicktime.qts, this allows us to ignore the hardcoded path inside the dlls so that quicktime.qts doesn't need to be in the windows system dir, patch by Gianluigi Tiesi <mplayer at netfarm.it>, comments by myself
faust3
parents:
13606
diff
changeset
|
116 return 0; |
860f06087aac
preload quicktime.qts, this allows us to ignore the hardcoded path inside the dlls so that quicktime.qts doesn't need to be in the windows system dir, patch by Gianluigi Tiesi <mplayer at netfarm.it>, comments by myself
faust3
parents:
13606
diff
changeset
|
117 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28198
diff
changeset
|
118 |
8160 | 119 handler = LoadLibraryA("qtmlClient.dll"); |
12194
81f8e4f97b38
printf -> mp_msg, error msg when qtmlClient.dll is missing
faust3
parents:
9502
diff
changeset
|
120 if(!handler){ |
81f8e4f97b38
printf -> mp_msg, error msg when qtmlClient.dll is missing
faust3
parents:
9502
diff
changeset
|
121 mp_msg(MSGT_DECVIDEO,MSGL_ERR,"unable to load qtmlClient.dll\n"); |
81f8e4f97b38
printf -> mp_msg, error msg when qtmlClient.dll is missing
faust3
parents:
9502
diff
changeset
|
122 return 0; |
81f8e4f97b38
printf -> mp_msg, error msg when qtmlClient.dll is missing
faust3
parents:
9502
diff
changeset
|
123 } |
8160 | 124 |
8451 | 125 InitializeQTML = (OSErr (*)(long))GetProcAddress(handler, "InitializeQTML"); |
126 EnterMovies = (OSErr (*)(void))GetProcAddress(handler, "EnterMovies"); | |
30869 | 127 ExitMovies = (void (*)(void))GetProcAddress(handler, "ExitMovies"); |
30857
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
128 DecompressSequenceBegin = (OSErr (*)(ImageSequence*,ImageDescriptionHandle,CGrafPtr,void *,const Rect *,MatrixRecordPtr,short,RgnHandle,CodecFlags,CodecQ,DecompressorComponent))GetProcAddress(handler, "DecompressSequenceBegin"); |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
129 DecompressSequenceFrameS = (OSErr (*)(ImageSequence,Ptr,long,CodecFlags,CodecFlags*,ICMCompletionProcRecordPtr))GetProcAddress(handler, "DecompressSequenceFrameS"); |
8451 | 130 GetGWorldPixMap = (PixMapHandle (*)(GWorldPtr))GetProcAddress(handler, "GetGWorldPixMap"); |
131 QTNewGWorldFromPtr = (OSErr(*)(GWorldPtr *,OSType,const Rect *,CTabHandle,void*,GWorldFlags,void *,long))GetProcAddress(handler, "QTNewGWorldFromPtr"); | |
132 NewHandleClear = (OSErr(*)(Size))GetProcAddress(handler, "NewHandleClear"); | |
30857
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
133 DisposeHandle = (void (*)(Handle))GetProcAddress(handler, "DisposeHandle"); |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
134 DisposeGWorld = (void (*)(GWorldPtr))GetProcAddress(handler, "DisposeGWorld"); |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
135 CDSequenceEnd = (OSErr (*)(ImageSequence))GetProcAddress(handler, "CDSequenceEnd"); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28198
diff
changeset
|
136 |
30857
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
137 if(!InitializeQTML || !EnterMovies || !DecompressSequenceBegin || !DecompressSequenceFrameS){ |
12194
81f8e4f97b38
printf -> mp_msg, error msg when qtmlClient.dll is missing
faust3
parents:
9502
diff
changeset
|
138 mp_msg(MSGT_DECVIDEO,MSGL_ERR,"invalid qtmlClient.dll!\n"); |
8160 | 139 return 0; |
140 } | |
141 | |
30857
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
142 result=InitializeQTML(kInitializeQTMLDisableDirectSound | |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
143 kInitializeQTMLUseGDIFlag | |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
144 kInitializeQTMLDisableDDClippers); |
30812 | 145 mp_msg(MSGT_DECVIDEO,MSGL_DBG2,"InitializeQTML returned %d\n",result); |
27388
ac03760f7fcc
Rename all preprocessor directives related to Apple / Mac OS X.
diego
parents:
26754
diff
changeset
|
146 #endif /* CONFIG_QUICKTIME */ |
8160 | 147 |
30857
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
148 result=EnterMovies(); |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
149 mp_msg(MSGT_DECVIDEO,MSGL_DBG2,"EnterMovies returned %d\n",result); |
8160 | 150 |
151 //make a yuy2 gworld | |
152 OutBufferRect.top=0; | |
153 OutBufferRect.left=0; | |
154 OutBufferRect.right=sh->disp_w; | |
155 OutBufferRect.bottom=sh->disp_h; | |
156 | |
157 //Fill the imagedescription for our SVQ3 frame | |
158 //we can probably get this from Demuxer | |
8471 | 159 if(!sh->ImageDesc) sh->ImageDesc=(sh->bih+1); // hack for SVQ3-in-AVI |
12194
81f8e4f97b38
printf -> mp_msg, error msg when qtmlClient.dll is missing
faust3
parents:
9502
diff
changeset
|
160 mp_msg(MSGT_DECVIDEO,MSGL_DBG2,"ImageDescription size: %d\n",((ImageDescription*)(sh->ImageDesc))->idSize); |
8301 | 161 framedescHandle=(ImageDescriptionHandle)NewHandleClear(((ImageDescription*)(sh->ImageDesc))->idSize); |
162 memcpy(*framedescHandle,sh->ImageDesc,((ImageDescription*)(sh->ImageDesc))->idSize); | |
8471 | 163 dump_ImageDescription(*framedescHandle); |
8160 | 164 |
30857
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
165 (**framedescHandle).cType = bswap_32(sh->format); |
13188 | 166 sh->context = (void *)kYUVSPixelFormat; |
8282 | 167 { |
168 int imgfmt = sh->codec->outfmt[sh->outfmtidx]; | |
169 int qt_imgfmt; | |
170 switch(imgfmt) | |
171 { | |
172 case IMGFMT_YUY2: | |
173 qt_imgfmt = kYUVSPixelFormat; | |
174 break; | |
175 case IMGFMT_YVU9: | |
8301 | 176 qt_imgfmt = 0x73797639; //kYVU9PixelFormat; |
177 break; | |
178 case IMGFMT_YV12: | |
179 qt_imgfmt = 0x79343230; | |
8282 | 180 break; |
181 case IMGFMT_UYVY: | |
30857
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
182 qt_imgfmt = k2vuyPixelFormat; |
8282 | 183 break; |
184 case IMGFMT_YVYU: | |
185 qt_imgfmt = kYVYU422PixelFormat; | |
186 imgfmt = IMGFMT_YUY2; | |
187 break; | |
188 case IMGFMT_RGB16: | |
189 qt_imgfmt = k16LE555PixelFormat; | |
190 break; | |
191 case IMGFMT_BGR24: | |
192 qt_imgfmt = k24BGRPixelFormat; | |
193 break; | |
194 case IMGFMT_BGR32: | |
195 qt_imgfmt = k32BGRAPixelFormat; | |
196 break; | |
197 case IMGFMT_RGB32: | |
198 qt_imgfmt = k32RGBAPixelFormat; | |
199 break; | |
200 default: | |
12194
81f8e4f97b38
printf -> mp_msg, error msg when qtmlClient.dll is missing
faust3
parents:
9502
diff
changeset
|
201 mp_msg(MSGT_DECVIDEO,MSGL_ERR,"Unknown requested csp\n"); |
26754
63630c09e237
cosmetics: Remove pointless parentheses from return calls.
diego
parents:
26542
diff
changeset
|
202 return 0; |
8282 | 203 } |
17366 | 204 mp_msg(MSGT_DECVIDEO,MSGL_DBG2,"imgfmt: %s qt_imgfmt: %.4s\n", vo_format_name(imgfmt), (char *)&qt_imgfmt); |
13188 | 205 sh->context = (void *)qt_imgfmt; |
8282 | 206 if(!mpcodecs_config_vo(sh,sh->disp_w,sh->disp_h,imgfmt)) return 0; |
207 } | |
8160 | 208 |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28198
diff
changeset
|
209 mpi=mpcodecs_get_image(sh, MP_IMGTYPE_STATIC, MP_IMGFLAG_PRESERVE, |
8160 | 210 sh->disp_w, sh->disp_h); |
30857
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
211 if(!mpi) return 0; |
30614
ed516abd6137
Fix the stack crash(SYS3171) on OS/2 when playing qtaudio/qtvideo.
komh
parents:
30504
diff
changeset
|
212 |
8160 | 213 result = QTNewGWorldFromPtr( |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28198
diff
changeset
|
214 &OutBufferGWorld, |
13188 | 215 (OSType)sh->context, |
8160 | 216 &OutBufferRect, //we should benchmark if yvu9 is faster for svq3, too |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28198
diff
changeset
|
217 0, |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28198
diff
changeset
|
218 0, |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28198
diff
changeset
|
219 0, |
8160 | 220 mpi->planes[0], |
221 mpi->stride[0]); | |
30857
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
222 if (result) { |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
223 mp_msg(MSGT_DECVIDEO,MSGL_ERR,"QTNewGWorldFromPtr result=%d\n",result); |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
224 return 0; |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
225 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28198
diff
changeset
|
226 |
30857
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
227 result = DecompressSequenceBegin(&imageSeq, framedescHandle, (CGrafPtr)OutBufferGWorld, |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
228 NULL, NULL, NULL, srcCopy, NULL, 0, |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
229 codecNormalQuality, 0); |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
230 if(result) { |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
231 mp_msg(MSGT_DECVIDEO,MSGL_ERR,"DecompressSequenceBegin result=%d\n",result); |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
232 return 0; |
8430 | 233 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28198
diff
changeset
|
234 |
30857
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
235 return 1; |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
236 } |
8160 | 237 |
30857
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
238 // uninit driver |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
239 static void uninit(sh_video_t *sh){ |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
240 if(OutBufferGWorld) { |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
241 DisposeGWorld(OutBufferGWorld); |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
242 OutBufferGWorld = NULL; |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
243 } |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
244 if(framedescHandle) { |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
245 DisposeHandle((Handle)framedescHandle); |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
246 framedescHandle = NULL; |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
247 } |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
248 if(imageSeq) { |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
249 CDSequenceEnd(imageSeq); |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
250 imageSeq = 0; |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
251 } |
30869 | 252 ExitMovies(); |
8160 | 253 } |
254 | |
30857
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
255 // decode a frame |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
256 static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags){ |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
257 OSErr result = 1; |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
258 CodecFlags ignore; |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
259 |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
260 if(len<=0) return NULL; // skipped frame |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
261 |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
262 #ifdef WIN32_LOADER |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
263 Setup_FS_Segment(); |
8160 | 264 #endif |
265 | |
30857
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
266 result = DecompressSequenceFrameS(imageSeq, data, len, 0, &ignore, NULL); |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
267 if(result) { |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
268 mp_msg(MSGT_DECVIDEO,MSGL_ERR,"DecompressSequenceFrameS result=0x%d\n",result); |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
269 return NULL; |
8321
ca24204fb547
SVQ1 support (ugly hack... - really we need 'syuv' support in swscaler :))
arpi
parents:
8301
diff
changeset
|
270 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28198
diff
changeset
|
271 |
30857
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
272 if((int)sh->context==0x73797639){ // Sorenson 16-bit YUV -> std YVU9 |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
273 int i; |
8321
ca24204fb547
SVQ1 support (ugly hack... - really we need 'syuv' support in swscaler :))
arpi
parents:
8301
diff
changeset
|
274 |
30857
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
275 PixMap dstPixMap = **GetGWorldPixMap(OutBufferGWorld); |
77ce62f13d42
Use the high-level QuickTime decoding APIs (DecompressSequenceFrameS and
sesse
parents:
30812
diff
changeset
|
276 short *src0=(short *)((char*)dstPixMap.baseAddr+0x20); |
8321
ca24204fb547
SVQ1 support (ugly hack... - really we need 'syuv' support in swscaler :))
arpi
parents:
8301
diff
changeset
|
277 |
ca24204fb547
SVQ1 support (ugly hack... - really we need 'syuv' support in swscaler :))
arpi
parents:
8301
diff
changeset
|
278 for(i=0;i<mpi->h;i++){ |
ca24204fb547
SVQ1 support (ugly hack... - really we need 'syuv' support in swscaler :))
arpi
parents:
8301
diff
changeset
|
279 int x; |
ca24204fb547
SVQ1 support (ugly hack... - really we need 'syuv' support in swscaler :))
arpi
parents:
8301
diff
changeset
|
280 unsigned char* dst=mpi->planes[0]+i*mpi->stride[0]; |
ca24204fb547
SVQ1 support (ugly hack... - really we need 'syuv' support in swscaler :))
arpi
parents:
8301
diff
changeset
|
281 unsigned short* src=src0+i*((mpi->w+15)&(~15)); |
ca24204fb547
SVQ1 support (ugly hack... - really we need 'syuv' support in swscaler :))
arpi
parents:
8301
diff
changeset
|
282 for(x=0;x<mpi->w;x++) dst[x]=src[x]; |
ca24204fb547
SVQ1 support (ugly hack... - really we need 'syuv' support in swscaler :))
arpi
parents:
8301
diff
changeset
|
283 } |
ca24204fb547
SVQ1 support (ugly hack... - really we need 'syuv' support in swscaler :))
arpi
parents:
8301
diff
changeset
|
284 src0+=((mpi->w+15)&(~15))*((mpi->h+15)&(~15)); |
ca24204fb547
SVQ1 support (ugly hack... - really we need 'syuv' support in swscaler :))
arpi
parents:
8301
diff
changeset
|
285 for(i=0;i<mpi->h/4;i++){ |
ca24204fb547
SVQ1 support (ugly hack... - really we need 'syuv' support in swscaler :))
arpi
parents:
8301
diff
changeset
|
286 int x; |
ca24204fb547
SVQ1 support (ugly hack... - really we need 'syuv' support in swscaler :))
arpi
parents:
8301
diff
changeset
|
287 unsigned char* dst=mpi->planes[1]+i*mpi->stride[1]; |
ca24204fb547
SVQ1 support (ugly hack... - really we need 'syuv' support in swscaler :))
arpi
parents:
8301
diff
changeset
|
288 unsigned short* src=src0+i*(((mpi->w+63)&(~63))/4); |
ca24204fb547
SVQ1 support (ugly hack... - really we need 'syuv' support in swscaler :))
arpi
parents:
8301
diff
changeset
|
289 for(x=0;x<mpi->w/4;x++) dst[x]=src[x]; |
ca24204fb547
SVQ1 support (ugly hack... - really we need 'syuv' support in swscaler :))
arpi
parents:
8301
diff
changeset
|
290 src+=((mpi->w+63)&(~63))/4; |
ca24204fb547
SVQ1 support (ugly hack... - really we need 'syuv' support in swscaler :))
arpi
parents:
8301
diff
changeset
|
291 } |
ca24204fb547
SVQ1 support (ugly hack... - really we need 'syuv' support in swscaler :))
arpi
parents:
8301
diff
changeset
|
292 src0+=(((mpi->w+63)&(~63))/4)*(((mpi->h+63)&(~63))/4); |
ca24204fb547
SVQ1 support (ugly hack... - really we need 'syuv' support in swscaler :))
arpi
parents:
8301
diff
changeset
|
293 for(i=0;i<mpi->h/4;i++){ |
ca24204fb547
SVQ1 support (ugly hack... - really we need 'syuv' support in swscaler :))
arpi
parents:
8301
diff
changeset
|
294 int x; |
ca24204fb547
SVQ1 support (ugly hack... - really we need 'syuv' support in swscaler :))
arpi
parents:
8301
diff
changeset
|
295 unsigned char* dst=mpi->planes[2]+i*mpi->stride[2]; |
ca24204fb547
SVQ1 support (ugly hack... - really we need 'syuv' support in swscaler :))
arpi
parents:
8301
diff
changeset
|
296 unsigned short* src=src0+i*(((mpi->w+63)&(~63))/4); |
ca24204fb547
SVQ1 support (ugly hack... - really we need 'syuv' support in swscaler :))
arpi
parents:
8301
diff
changeset
|
297 for(x=0;x<mpi->w/4;x++) dst[x]=src[x]; |
ca24204fb547
SVQ1 support (ugly hack... - really we need 'syuv' support in swscaler :))
arpi
parents:
8301
diff
changeset
|
298 src+=((mpi->w+63)&(~63))/4; |
ca24204fb547
SVQ1 support (ugly hack... - really we need 'syuv' support in swscaler :))
arpi
parents:
8301
diff
changeset
|
299 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28198
diff
changeset
|
300 |
8321
ca24204fb547
SVQ1 support (ugly hack... - really we need 'syuv' support in swscaler :))
arpi
parents:
8301
diff
changeset
|
301 } |
ca24204fb547
SVQ1 support (ugly hack... - really we need 'syuv' support in swscaler :))
arpi
parents:
8301
diff
changeset
|
302 |
ca24204fb547
SVQ1 support (ugly hack... - really we need 'syuv' support in swscaler :))
arpi
parents:
8301
diff
changeset
|
303 |
8160 | 304 return mpi; |
305 } |