Skip to content

Commit 658f60f

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

File tree

2 files changed

+139
-72
lines changed

2 files changed

+139
-72
lines changed

src/aaf2/auid.py

Lines changed: 65 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,56 @@ 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+
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+
3386
@property
3487
def bytes_be(self):
3588
return bytearray(self.bytes_le[4-1::-1] + self.bytes_le[6-1:4-1:-1] +
@@ -84,18 +137,30 @@ def data1(self):
84137
value += self.bytes_le[3] << 24
85138
return value
86139

140+
@data1.setter
141+
def data1(self, value):
142+
self.bytes_le[0:4] = struct.pack(b"<I", value)
143+
87144
@property
88145
def data2(self):
89146
value = self.bytes_le[4]
90147
value += self.bytes_le[5] << 8
91148
return value
92149

150+
@data2.setter
151+
def data2(self, value):
152+
self.bytes_le[4:6] = struct.pack(b"<H", value)
153+
93154
@property
94155
def data3(self):
95156
value = self.bytes_le[6]
96157
value += self.bytes_le[7] << 8
97158
return value
98159

160+
@data3.setter
161+
def data3(self, value):
162+
self.bytes_le[6:8] = struct.pack(b"<H", value)
163+
99164
@property
100165
def data4(self):
101166
return self.bytes_le[8:]

0 commit comments

Comments
 (0)