blob: b32fc6bb2b4e2c9d53549ef83c2764625f5cf6f9 [file] [log] [blame]
Jack Jansencb4eaad1995-11-30 15:03:59 +00001# Scan an Apple header file, generating a Python file of generator calls.
2
Jack Jansen0c4d9471998-04-17 14:07:56 +00003import sys
4import os
Jack Jansenaaebdd62002-08-05 15:39:30 +00005from bgenlocations import TOOLBOXDIR, BGENDIR
Jack Jansen0c4d9471998-04-17 14:07:56 +00006sys.path.append(BGENDIR)
Jack Jansencb4eaad1995-11-30 15:03:59 +00007from scantools import Scanner
8
9LONG = "QuickTime"
10SHORT = "qt"
Jack Jansen2e5e6442004-01-09 23:18:47 +000011HEADERFILES= (
12 "Movies.h",
13 "ImageCompression.h",
14 "QuickTimeComponents.h",
15# "ImageCodec.h" -- seems not too useful, and difficult.
16 "MediaHandlers.h"
17 )
Jack Jansen007b8eb2004-01-03 17:23:27 +000018OBJECTS = ("Movie", "Track", "Media", "UserData", "TimeBase", "MovieController",
19 "IdleManager", "SGOutput")
Jack Jansencb4eaad1995-11-30 15:03:59 +000020
21def main():
Jack Jansen007b8eb2004-01-03 17:23:27 +000022 input = HEADERFILES
Jack Jansencb4eaad1995-11-30 15:03:59 +000023 output = SHORT + "gen.py"
Jack Jansen46d9e791996-04-12 16:29:23 +000024 defsoutput = TOOLBOXDIR + LONG + ".py"
Jack Jansencb4eaad1995-11-30 15:03:59 +000025 scanner = MyScanner(input, output, defsoutput)
26 scanner.scan()
27 scanner.close()
Jack Jansen007b8eb2004-01-03 17:23:27 +000028 scanner.gentypetest(SHORT+"typetest.py")
Jack Jansen87eea882002-08-15 21:48:16 +000029 print "=== Testing definitions output code ==="
30 execfile(defsoutput, {}, {})
Jack Jansencb4eaad1995-11-30 15:03:59 +000031 print "=== Done scanning and generating, now importing the generated code... ==="
32 exec "import " + SHORT + "support"
33 print "=== Done. It's up to you to compile it now! ==="
34
35class MyScanner(Scanner):
36
37 def destination(self, type, name, arglist):
38 classname = "Function"
39 listname = "functions"
40 if arglist:
41 t, n, m = arglist[0]
Jack Jansen453ced51995-11-30 17:42:08 +000042 if t in OBJECTS and m == "InMode":
Jack Jansencb4eaad1995-11-30 15:03:59 +000043 classname = "Method"
Jack Jansen453ced51995-11-30 17:42:08 +000044 listname = t + "_methods"
Jack Jansencb4eaad1995-11-30 15:03:59 +000045 return classname, listname
46
Jack Jansen21f96871998-02-20 16:02:09 +000047 def writeinitialdefs(self):
48 self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n")
Jack Jansen007b8eb2004-01-03 17:23:27 +000049 self.defsfile.write("xmlIdentifierUnrecognized = -1\n")
Jack Jansen21f96871998-02-20 16:02:09 +000050
Jack Jansencb4eaad1995-11-30 15:03:59 +000051 def makeblacklistnames(self):
52 return [
Jack Jansen007b8eb2004-01-03 17:23:27 +000053 "xmlIdentifierUnrecognized", # const with incompatible definition
Jack Jansencb4eaad1995-11-30 15:03:59 +000054 "DisposeMovie", # Done on python-object disposal
Jack Jansen453ced51995-11-30 17:42:08 +000055 "DisposeMovieTrack", # ditto
56 "DisposeTrackMedia", # ditto
57 "DisposeUserData", # ditto
Jack Jansenb2006391998-04-23 13:22:44 +000058# "DisposeTimeBase", # ditto
Jack Jansen9cfea101995-12-09 14:05:56 +000059 "DisposeMovieController", # ditto
Jack Jansen68a0ee01997-09-01 15:38:24 +000060
Jack Jansen453ced51995-11-30 17:42:08 +000061 # The following 4 use 'void *' in an uncontrolled way
62 # TBD when I've read the manual...
63 "GetUserDataItem",
64 "SetUserDataItem",
65 "SetTextSampleData",
Jack Jansene0cf87b1997-04-09 15:53:46 +000066 "BeginFullScreen",
Jack Jansen453ced51995-11-30 17:42:08 +000067 # bgen gets the argument in/out wrong..
68 "AddTextSample",
69 "AddTESample",
70 "AddHiliteSample",
71 "HiliteTextSample",
Jack Jansen1c4e6141998-04-21 15:23:55 +000072
73 "MakeTrackTimeTable", # Uses long * return?
74 "MakeMediaTimeTable", # ditto
Jack Jansena05ac601999-12-12 21:41:51 +000075## "VideoMediaGetStallCount", # Undefined in CW Pro 3 library
Jack Jansen6c7e3262002-12-12 10:31:54 +000076 # OS8 only:
77 'SpriteMediaGetIndImageProperty', # XXXX Why isn't this in carbon?
78 'CheckQuickTimeRegistration',
79 'SetMovieAnchorDataRef',
80 'GetMovieAnchorDataRef',
81 'GetMovieLoadState',
82 'OpenADataHandler',
83 'MovieMediaGetCurrentMovieProperty',
84 'MovieMediaGetCurrentTrackProperty',
85 'MovieMediaGetChildMovieDataReference',
86 'MovieMediaSetChildMovieDataReference',
87 'MovieMediaLoadChildMovieFromDataReference',
88 'Media3DGetViewObject',
Jack Jansencb4eaad1995-11-30 15:03:59 +000089
Jack Jansen06778242004-01-02 23:51:22 +000090 # these are ImageCompression blacklists
91 "GraphicsExportGetInputPtr",
Jack Jansen007b8eb2004-01-03 17:23:27 +000092
93 # QuickTimeComponents
94 # These two need some help: the first returns a point to a databuffer that
95 # the second disposes. Generate manually?
96 "VDCompressDone",
97 "VDReleaseCompressBuffer",
98 "QTVideoOutputGetGWorldParameters", # How useful is this?
Jack Jansen2e5e6442004-01-09 23:18:47 +000099
100 # MediaHandlers
101 "MediaMakeMediaTimeTable", # just lazy
102 "MediaGetSampleDataPointer", # funny output pointer
Jack Jansen6c7e3262002-12-12 10:31:54 +0000103 ]
Jack Jansen8d929ae2000-06-21 22:07:06 +0000104
Jack Jansencb4eaad1995-11-30 15:03:59 +0000105 def makeblacklisttypes(self):
106 return [
Jack Jansen453ced51995-11-30 17:42:08 +0000107 # I don't think we want to do these
108 "QTSyncTaskPtr",
109 # We dont do callbacks yet, so no need for these
Jack Jansencb4eaad1995-11-30 15:03:59 +0000110 "QTCallBack",
Jack Jansen453ced51995-11-30 17:42:08 +0000111 # Skipped for now, due to laziness
Jack Jansencb4eaad1995-11-30 15:03:59 +0000112 "TrackEditState",
113 "MovieEditState",
Jack Jansencb4eaad1995-11-30 15:03:59 +0000114 "MatrixRecord",
115 "MatrixRecord_ptr",
Jack Jansen453ced51995-11-30 17:42:08 +0000116 "SampleReferencePtr",
Jack Jansen1c4e6141998-04-21 15:23:55 +0000117 "QTTweener",
Jack Jansen59f7dc92004-01-02 23:27:42 +0000118 "QTErrorReplacementPtr",
119 "QTRestrictionSet",
120 "QTUUID",
121 "QTUUID_ptr",
Jack Jansen68a0ee01997-09-01 15:38:24 +0000122
Jack Jansen453ced51995-11-30 17:42:08 +0000123 # Routine pointers, not yet.
124 "MoviesErrorUPP",
125 "MoviePreviewCallOutUPP",
126 "MovieDrawingCompleteUPP",
Jack Jansencb4eaad1995-11-30 15:03:59 +0000127 "QTCallBackUPP",
128 "TextMediaUPP",
129 "MovieProgressUPP",
130 "MovieRgnCoverUPP",
131 "MCActionFilterUPP",
132 "MCActionFilterWithRefConUPP",
Jack Jansen453ced51995-11-30 17:42:08 +0000133 "GetMovieUPP",
134 "ModalFilterUPP",
Jack Jansene0cf87b1997-04-09 15:53:46 +0000135 "TrackTransferUPP",
Jack Jansen723ad8a2000-12-12 22:10:21 +0000136 "MoviePrePrerollCompleteUPP",
137 "MovieExecuteWiredActionsUPP",
138 "QTBandwidthNotificationUPP",
139 "DoMCActionUPP",
Jack Jansen59f7dc92004-01-02 23:27:42 +0000140 "QTNextTaskNeededSoonerCallbackUPP",
Jack Jansen723ad8a2000-12-12 22:10:21 +0000141
142 "SampleReference64Ptr", # Don't know what this does, yet
143 "QTRuntimeSpriteDescPtr",
144 "QTBandwidthReference",
145 "QTScheduledBandwidthReference",
Jack Jansen4a8c54e1997-02-24 13:56:59 +0000146 "QTAtomContainer",
147 "SpriteWorld",
148 "Sprite",
Jack Jansen06778242004-01-02 23:51:22 +0000149
150 # these are ImageCompression blacklists
151 "ICMDataUPP",
152 "ICMFlushUPP",
153 "ICMCompletionUPP",
154 "ICMProgressUPP",
155 "StdPixUPP",
156 "QDPixUPP",
157 "ICMAlignmentUPP",
158 "ICMCursorShieldedUPP",
159 "ICMMemoryDisposedUPP",
160 "ICMConvertDataFormatUPP",
161 "ModalFilterYDUPP",
162 "FileFilterUPP",
163
164 "CodecNameSpecListPtr",
165 "CodecInfo",
166 "ImageSequence",
167 "MatrixRecordPtr",
168 "ICMDataProcRecordPtr",
169 "OpenCPicParams",
170 "ICMProgressProcRecordPtr",
171 "ICMAlignmentProcRecordPtr",
172 "ICMPixelFormatInfoPtr",
173 "ImageSequenceDataSource",
174 "ConstStrFileNameParam",
175 "ImageTranscodeSequence",
176 "ImageFieldSequence",
177 "Fract",
178 "PixMapPtr",
179 "GWorldFlags",
180 "void_ptr", # XXX Being lazy, this one is doable.
Jack Jansen007b8eb2004-01-03 17:23:27 +0000181
182 # These are from QuickTimeComponents
183 "CDataHandlerUPP",
184 "CharDataHandlerUPP",
185 "CommentHandlerUPP",
186 "DataHCompletionUPP",
187 "'MovieExportGetDataUPP",
188 "MovieExportGetPropertyUPP",
189 "PreprocessInstructionHandlerUPP",
190 "SGModalFilterUPP",
191 "StartDocumentHandlerUPP",
192 "StartElementHandlerUPP",
193 "VdigIntUPP",
194 "SGDataUPP",
195 "EndDocumentHandlerUPP",
196 "EndElementHandlerUPP",
197 "VideoBottles", # Record full of UPPs
198
199 "SCParams",
200 "ICMCompletionProcRecordPtr",
201 "DataHVolumeList",
202 "DigitizerInfo",
203 "SGCompressInfo",
204 "SeqGrabExtendedFrameInfoPtr",
205 "SeqGrabFrameInfoPtr",
206 "TCTextOptionsPtr",
207 "SGCompressInfo_ptr",
208 "SGDeviceList",
209 "TextDisplayData",
210 "TimeCodeDef",
211 "TimeCodeRecord",
212 "TweenRecord",
213 "VDGamRecPtr",
214 "ToneDescription", # XXXX Just lazy: this one is easy.
215 "XMLDoc",
216 "UInt64", # XXXX lazy
217 "UInt64_ptr", # XXXX lazy
Jack Jansen2e5e6442004-01-09 23:18:47 +0000218
219 # From MediaHandlers
220 "ActionsUPP",
221 "PrePrerollCompleteUPP",
222 "CodecComponentHandle", # Difficult: handle containing list of components.
223 "GetMovieCompleteParams", # Immense struct
224 "LevelMeterInfoPtr", # Lazy. Also: can be an output parameter!!
225 "MediaEQSpectrumBandsRecordPtr", # ditto
Jack Jansencb4eaad1995-11-30 15:03:59 +0000226 ]
227
228 def makerepairinstructions(self):
229 return [
Jack Jansen453ced51995-11-30 17:42:08 +0000230 ([('FSSpec', '*', 'OutMode')], [('FSSpec_ptr', '*', 'InMode')]),
Jack Jansen9cfea101995-12-09 14:05:56 +0000231
232 # Movie controller creation
233 ([('ComponentInstance', 'NewMovieController', 'ReturnMode')],
234 [('MovieController', '*', 'ReturnMode')]),
235
236 # NewMovieFromFile
237 ([('short', 'resId', 'OutMode'), ('StringPtr', 'resName', 'InMode')],
Jack Jansene0cf87b1997-04-09 15:53:46 +0000238 [('short', 'resId', 'InOutMode'), ('dummyStringPtr', 'resName', 'InMode')]),
Jack Jansen9cfea101995-12-09 14:05:56 +0000239
Jack Jansen4a8c54e1997-02-24 13:56:59 +0000240 # MCDoAction and more
241 ([('void', '*', 'OutMode')], [('mcactionparams', '*', 'InMode')]),
242
Jack Jansen1b7a70f2000-03-03 17:06:13 +0000243 # SetTimeBaseZero. Does not handle NULLs, unfortunately
244 ([('TimeRecord', 'zero', 'OutMode')], [('TimeRecord', 'zero', 'InMode')]),
245
246 # ConvertTime and ConvertTimeScale
247 ([('TimeRecord', 'inout', 'OutMode')], [('TimeRecord', 'inout', 'InOutMode')]),
Jack Jansenb9fa1a92003-02-04 15:35:07 +0000248 ([('TimeRecord', 'theTime', 'OutMode')], [('TimeRecord', 'theTime', 'InOutMode')]),
Jack Jansen1b7a70f2000-03-03 17:06:13 +0000249
250 # AddTime and SubtractTime
251 ([('TimeRecord', 'dst', 'OutMode')], [('TimeRecord', 'dst', 'InOutMode')]),
Jack Jansen620a7662001-12-18 15:39:38 +0000252
253 # Funny definitions
254 ([('char_ptr', '*', 'InMode')], [('stringptr', '*', 'InMode')]),
255 ([('FSSpecPtr', '*', 'InMode')], [('FSSpec_ptr', '*', 'InMode')]),
256 ([('unsigned_char', 'swfVersion', 'OutMode')], [('UInt8', 'swfVersion', 'OutMode')]),
Jack Jansencb4eaad1995-11-30 15:03:59 +0000257 ]
258
259if __name__ == "__main__":
260 main()