Skip to content

Commit

Permalink
matroska: Update ebml_matroska.xml and allow unknown ids
Browse files Browse the repository at this point in the history
Update spec from https://raw.githubusercontent.com/ietf-wg-cellar/matroska-specification/master/ebml_matroska.xml
Allow unknown ids, decodeas "unknown" type with just binary data
Change "type" field to just a string, there is no type id number.
Make all type field symbols consistently lowercase
  • Loading branch information
wader committed Jun 6, 2022
1 parent 5fbd54a commit c92f4f1
Show file tree
Hide file tree
Showing 15 changed files with 2,319 additions and 1,821 deletions.
6 changes: 4 additions & 2 deletions format/matroska/ebml/ebml.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ import "github.com/wader/fq/pkg/scalar"
type Type int

const (
Integer Type = iota
Unknown Type = iota
Integer
Uinteger
Float
String
Expand All @@ -16,11 +17,12 @@ const (
)

var TypeNames = map[Type]string{
Unknown: "unknown",
Integer: "integer",
Uinteger: "uinteger",
Float: "float",
String: "string",
UTF8: "UTF8",
UTF8: "utf8",
Date: "data",
Binary: "binary",
Master: "master",
Expand Down
1,433 changes: 853 additions & 580 deletions format/matroska/ebml_matroska/ebml_matroska.xml

Large diffs are not rendered by default.

469 changes: 273 additions & 196 deletions format/matroska/ebml_matroska/ebml_matroska_gen.go

Large diffs are not rendered by default.

12 changes: 9 additions & 3 deletions format/matroska/matroska.go
Original file line number Diff line number Diff line change
Expand Up @@ -162,12 +162,15 @@ func decodeMaster(d *decode.D, bitsLimit int64, tag ebml.Tag, dc *decodeContext)
if !ok {
a, ok = ebml.Global[n]
if !ok {
d.Fatalf("unknown id %d", n)
a = ebml.Attribute{
Type: ebml.Unknown,
}
return scalar.S{Actual: n, ActualDisplay: scalar.NumberHex, Description: "Unknown"}, nil
}
}
return scalar.S{Actual: n, ActualDisplay: scalar.NumberHex, Sym: a.Name, Description: a.Definition}, nil
}))
d.FieldValueU("type", uint64(a.Type), scalar.Sym(ebml.TypeNames[a.Type]))
d.FieldValueStr("type", ebml.TypeNames[a.Type])

if tagID == ebml_matroska.TrackEntryID {
dc.currentTrack = &track{}
Expand Down Expand Up @@ -196,7 +199,8 @@ func decodeMaster(d *decode.D, bitsLimit int64, tag ebml.Tag, dc *decodeContext)
if tagSize > maxStringTagSize {
d.Errorf("tagSize %d > maxStringTagSize %d", tagSize, maxStringTagSize)
}
case ebml.Binary,
case ebml.Unknown,
ebml.Binary,
ebml.Date,
ebml.Master:
// nop
Expand All @@ -212,6 +216,8 @@ func decodeMaster(d *decode.D, bitsLimit int64, tag ebml.Tag, dc *decodeContext)
}

switch a.Type {
case ebml.Unknown:
d.FieldRawLen("data", int64(tagSize)*8)
case ebml.Integer:
d.FieldS("value", int(tagSize)*8, optionalMap(a.IntegerEnums))
case ebml.Uinteger:
Expand Down
208 changes: 111 additions & 97 deletions format/matroska/testdata/aac.fqtest

Large diffs are not rendered by default.

196 changes: 104 additions & 92 deletions format/matroska/testdata/av1.fqtest

Large diffs are not rendered by default.

197 changes: 104 additions & 93 deletions format/matroska/testdata/avc.fqtest

Large diffs are not rendered by default.

193 changes: 102 additions & 91 deletions format/matroska/testdata/flac.fqtest

Large diffs are not rendered by default.

198 changes: 104 additions & 94 deletions format/matroska/testdata/hevc.fqtest

Large diffs are not rendered by default.

209 changes: 112 additions & 97 deletions format/matroska/testdata/mp3.fqtest

Large diffs are not rendered by default.

195 changes: 103 additions & 92 deletions format/matroska/testdata/mpeg2.fqtest

Large diffs are not rendered by default.

224 changes: 121 additions & 103 deletions format/matroska/testdata/opus.fqtest

Large diffs are not rendered by default.

212 changes: 113 additions & 99 deletions format/matroska/testdata/vorbis.fqtest

Large diffs are not rendered by default.

194 changes: 103 additions & 91 deletions format/matroska/testdata/vp8.fqtest

Large diffs are not rendered by default.

194 changes: 103 additions & 91 deletions format/matroska/testdata/vp9.fqtest

Large diffs are not rendered by default.

0 comments on commit c92f4f1

Please sign in to comment.