Skip to content

Commit 3054ebf

Browse files
committed
Implement dept-first recursive parser
1 parent a7335d6 commit 3054ebf

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

gpmf/parse.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
# TODO: Implement GPMF parsing
2-
# see https://github.com/gopro/gpmf-parser#gmfp-deeper-dive for format details
1+
"""Parses the FOURCC data in GPMF stream into fields"""
32
import construct
43

54
TYPES = construct.Enum(
@@ -32,5 +31,14 @@
3231
"data" / construct.Aligned(4, construct.Bytes(construct.this.size * construct.this.repeat))
3332
)
3433

35-
def recursive():
36-
pass
34+
35+
def recursive(data, parents=tuple()):
36+
"""Recursive parser returns depth-first traversing generator yielding fields and list of their parent keys"""
37+
elements = FOURCC[:].parse(data)
38+
for element in elements:
39+
if element.type == 0:
40+
subparents = parents + (element.key,)
41+
for subyield in recursive(element.data, subparents):
42+
yield subyield
43+
else:
44+
yield (element, parents)

0 commit comments

Comments
 (0)