|
2 | 2 | import struct
|
3 | 3 | import traceback
|
4 | 4 |
|
| 5 | +LOCAL_SET_PREFIX = bytearray([0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53]) |
| 6 | +CLASS_ID_PREFIX = bytearray([0x06, 0x0e, 0x2b, 0x34, 0x02, 0x06]) |
| 7 | + |
5 | 8 | class AUID(object):
|
6 | 9 | """
|
7 | 10 | A higher performance UUID class that is more specialized for AAF.
|
@@ -30,6 +33,56 @@ def __init__(self, hex=None, bytes_le=None, bytes_be=None, int=None):
|
30 | 33 | raise TypeError('one of the hex, bytes_le, bytes_be '
|
31 | 34 | 'or int arguments must be given')
|
32 | 35 |
|
| 36 | + @staticmethod |
| 37 | + def from_mxf_label(klv_data): |
| 38 | + a = AUID(bytes_le=bytearray(16)) |
| 39 | + a.bytes_le[8:] = klv_data[:8] |
| 40 | + |
| 41 | + d1 = 0 |
| 42 | + d1 += klv_data[8] << 24 |
| 43 | + d1 += klv_data[9] << 16 |
| 44 | + d1 += klv_data[10] << 8 |
| 45 | + d1 += klv_data[11] |
| 46 | + a.data1 = d1 |
| 47 | + |
| 48 | + d2 = 0 |
| 49 | + d2 += klv_data[12] << 8 |
| 50 | + d2 += klv_data[13] |
| 51 | + a.data2 = d2 |
| 52 | + |
| 53 | + d3 = 0 |
| 54 | + d3 += klv_data[14] << 8 |
| 55 | + d3 += klv_data[15] |
| 56 | + a.data3 = d3 |
| 57 | + |
| 58 | + if klv_data[:6] == LOCAL_SET_PREFIX: |
| 59 | + a.bytes_le[13] = 0x06 |
| 60 | + |
| 61 | + return a |
| 62 | + |
| 63 | + def to_mxf_label(self): |
| 64 | + key = bytearray(16) |
| 65 | + key[0:8] = self.bytes_le[8:] |
| 66 | + |
| 67 | + d1 = self.data1 |
| 68 | + key[8] = (d1 >> 24) & 0xFF |
| 69 | + key[9] = (d1 >> 16) & 0xFF |
| 70 | + key[10] = (d1 >> 8) & 0xFF |
| 71 | + key[11] = d1 & 0xFF |
| 72 | + |
| 73 | + d2 = self.data2 |
| 74 | + key[12] = (d2 >> 8) & 0xFF |
| 75 | + key[13] = d2 & 0xFF |
| 76 | + |
| 77 | + d3 = self.data3 |
| 78 | + key[14] = (d3 >> 8) & 0xFF |
| 79 | + key[15] = d3 & 0xFF |
| 80 | + |
| 81 | + if key[:6] == CLASS_ID_PREFIX: |
| 82 | + key[5] = 0x53 |
| 83 | + |
| 84 | + return key |
| 85 | + |
33 | 86 | @property
|
34 | 87 | def bytes_be(self):
|
35 | 88 | return bytearray(self.bytes_le[4-1::-1] + self.bytes_le[6-1:4-1:-1] +
|
@@ -84,18 +137,30 @@ def data1(self):
|
84 | 137 | value += self.bytes_le[3] << 24
|
85 | 138 | return value
|
86 | 139 |
|
| 140 | + @data1.setter |
| 141 | + def data1(self, value): |
| 142 | + self.bytes_le[0:4] = struct.pack(b"<I", value) |
| 143 | + |
87 | 144 | @property
|
88 | 145 | def data2(self):
|
89 | 146 | value = self.bytes_le[4]
|
90 | 147 | value += self.bytes_le[5] << 8
|
91 | 148 | return value
|
92 | 149 |
|
| 150 | + @data2.setter |
| 151 | + def data2(self, value): |
| 152 | + self.bytes_le[4:6] = struct.pack(b"<H", value) |
| 153 | + |
93 | 154 | @property
|
94 | 155 | def data3(self):
|
95 | 156 | value = self.bytes_le[6]
|
96 | 157 | value += self.bytes_le[7] << 8
|
97 | 158 | return value
|
98 | 159 |
|
| 160 | + @data3.setter |
| 161 | + def data3(self, value): |
| 162 | + self.bytes_le[6:8] = struct.pack(b"<H", value) |
| 163 | + |
99 | 164 | @property
|
100 | 165 | def data4(self):
|
101 | 166 | return self.bytes_le[8:]
|
|
0 commit comments