ยปCore Development>Code coverage>Lib/plat-mac/Carbon/MediaDescr.py

Python code coverage for Lib/plat-mac/Carbon/MediaDescr.py

#countcontent
1n/a# Parsers/generators for QuickTime media descriptions
2n/aimport struct
3n/a
4n/aError = 'MediaDescr.Error'
5n/a
6n/aclass _MediaDescriptionCodec:
7n/a def __init__(self, trunc, size, names, fmt):
8n/a self.trunc = trunc
9n/a self.size = size
10n/a self.names = names
11n/a self.fmt = fmt
12n/a
13n/a def decode(self, data):
14n/a if self.trunc:
15n/a data = data[:self.size]
16n/a values = struct.unpack(self.fmt, data)
17n/a if len(values) != len(self.names):
18n/a raise Error, ('Format length does not match number of names')
19n/a rv = {}
20n/a for i in range(len(values)):
21n/a name = self.names[i]
22n/a value = values[i]
23n/a if type(name) == type(()):
24n/a name, cod, dec = name
25n/a value = dec(value)
26n/a rv[name] = value
27n/a return rv
28n/a
29n/a def encode(self, dict):
30n/a list = [self.fmt]
31n/a for name in self.names:
32n/a if type(name) == type(()):
33n/a name, cod, dec = name
34n/a else:
35n/a cod = dec = None
36n/a value = dict[name]
37n/a if cod:
38n/a value = cod(value)
39n/a list.append(value)
40n/a rv = struct.pack(*list)
41n/a return rv
42n/a
43n/a# Helper functions
44n/adef _tofixed(float):
45n/a hi = int(float)
46n/a lo = int(float*0x10000) & 0xffff
47n/a return (hi<<16)|lo
48n/a
49n/adef _fromfixed(fixed):
50n/a hi = (fixed >> 16) & 0xffff
51n/a lo = (fixed & 0xffff)
52n/a return hi + (lo / float(0x10000))
53n/a
54n/adef _tostr31(str):
55n/a return chr(len(str)) + str + '\0'*(31-len(str))
56n/a
57n/adef _fromstr31(str31):
58n/a return str31[1:1+ord(str31[0])]
59n/a
60n/aSampleDescription = _MediaDescriptionCodec(
61n/a 1, # May be longer, truncate
62n/a 16, # size
63n/a ('descSize', 'dataFormat', 'resvd1', 'resvd2', 'dataRefIndex'), # Attributes
64n/a "l4slhh" # Format
65n/a)
66n/a
67n/aSoundDescription = _MediaDescriptionCodec(
68n/a 1,
69n/a 36,
70n/a ('descSize', 'dataFormat', 'resvd1', 'resvd2', 'dataRefIndex',
71n/a 'version', 'revlevel', 'vendor', 'numChannels', 'sampleSize',
72n/a 'compressionID', 'packetSize', ('sampleRate', _tofixed, _fromfixed)),
73n/a "l4slhhhh4shhhhl" # Format
74n/a)
75n/a
76n/aSoundDescriptionV1 = _MediaDescriptionCodec(
77n/a 1,
78n/a 52,
79n/a ('descSize', 'dataFormat', 'resvd1', 'resvd2', 'dataRefIndex',
80n/a 'version', 'revlevel', 'vendor', 'numChannels', 'sampleSize',
81n/a 'compressionID', 'packetSize', ('sampleRate', _tofixed, _fromfixed), 'samplesPerPacket',
82n/a 'bytesPerPacket', 'bytesPerFrame', 'bytesPerSample'),
83n/a "l4slhhhh4shhhhlllll" # Format
84n/a)
85n/a
86n/aImageDescription = _MediaDescriptionCodec(
87n/a 1, # May be longer, truncate
88n/a 86, # size
89n/a ('idSize', 'cType', 'resvd1', 'resvd2', 'dataRefIndex', 'version',
90n/a 'revisionLevel', 'vendor', 'temporalQuality', 'spatialQuality',
91n/a 'width', 'height', ('hRes', _tofixed, _fromfixed), ('vRes', _tofixed, _fromfixed),
92n/a 'dataSize', 'frameCount', ('name', _tostr31, _fromstr31),
93n/a 'depth', 'clutID'),
94n/a 'l4slhhhh4sllhhlllh32shh',
95n/a)
96n/a
97n/a# XXXX Others, like TextDescription and such, remain to be done.