Skip to content

Commit c1d681c

Browse files
committed
Translate mxf labels to auid correctly
1 parent 5073e4d commit c1d681c

File tree

2 files changed

+144
-79
lines changed

2 files changed

+144
-79
lines changed

src/aaf2/auid.py

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
import struct
33
import traceback
44

5+
LOCAL_SET_PREFIX = bytearray([0x06, 0x0e, 0x2b, 0x34, 0x02, 0x53])
6+
CLASS_ID_PREFIX = bytearray([0x06, 0x0e, 0x2b, 0x34, 0x02, 0x06])
7+
58
class AUID(object):
69
"""
710
A higher performance UUID class that is more specialized for AAF.
@@ -30,6 +33,57 @@ def __init__(self, hex=None, bytes_le=None, bytes_be=None, int=None):
3033
raise TypeError('one of the hex, bytes_le, bytes_be '
3134
'or int arguments must be given')
3235

36+
@staticmethod
37+
def from_mxf_label(klv_data):
38+
klv_data = bytearray(klv_data)
39+
a = AUID(bytes_le=bytearray(16))
40+
a.bytes_le[8:] = klv_data[:8]
41+
42+
d1 = 0
43+
d1 += klv_data[8] << 24
44+
d1 += klv_data[9] << 16
45+
d1 += klv_data[10] << 8
46+
d1 += klv_data[11]
47+
a.data1 = d1
48+
49+
d2 = 0
50+
d2 += klv_data[12] << 8
51+
d2 += klv_data[13]
52+
a.data2 = d2
53+
54+
d3 = 0
55+
d3 += klv_data[14] << 8
56+
d3 += klv_data[15]
57+
a.data3 = d3
58+
59+
if klv_data[:6] == LOCAL_SET_PREFIX:
60+
a.bytes_le[13] = 0x06
61+
62+
return a
63+
64+
def to_mxf_label(self):
65+
key = bytearray(16)
66+
key[0:8] = self.bytes_le[8:]
67+
68+
d1 = self.data1
69+
key[8] = (d1 >> 24) & 0xFF
70+
key[9] = (d1 >> 16) & 0xFF
71+
key[10] = (d1 >> 8) & 0xFF
72+
key[11] = d1 & 0xFF
73+
74+
d2 = self.data2
75+
key[12] = (d2 >> 8) & 0xFF
76+
key[13] = d2 & 0xFF
77+
78+
d3 = self.data3
79+
key[14] = (d3 >> 8) & 0xFF
80+
key[15] = d3 & 0xFF
81+
82+
if key[:6] == CLASS_ID_PREFIX:
83+
key[5] = 0x53
84+
85+
return key
86+
3387
@property
3488
def bytes_be(self):
3589
return bytearray(self.bytes_le[4-1::-1] + self.bytes_le[6-1:4-1:-1] +
@@ -84,18 +138,30 @@ def data1(self):
84138
value += self.bytes_le[3] << 24
85139
return value
86140

141+
@data1.setter
142+
def data1(self, value):
143+
self.bytes_le[0:4] = struct.pack(b"<I", value)
144+
87145
@property
88146
def data2(self):
89147
value = self.bytes_le[4]
90148
value += self.bytes_le[5] << 8
91149
return value
92150

151+
@data2.setter
152+
def data2(self, value):
153+
self.bytes_le[4:6] = struct.pack(b"<H", value)
154+
93155
@property
94156
def data3(self):
95157
value = self.bytes_le[6]
96158
value += self.bytes_le[7] << 8
97159
return value
98160

161+
@data3.setter
162+
def data3(self, value):
163+
self.bytes_le[6:8] = struct.pack(b"<H", value)
164+
99165
@property
100166
def data4(self):
101167
return self.bytes_le[8:]

0 commit comments

Comments
 (0)