diff --git a/go.mod b/go.mod index d8207850d..bfd148b19 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,7 @@ require ( codeberg.org/gruf/go-mutexes v1.1.4 codeberg.org/gruf/go-runners v1.3.1 codeberg.org/gruf/go-store/v2 v2.0.10 - github.com/abema/go-mp4 v0.8.0 + github.com/abema/go-mp4 v0.9.0 github.com/buckket/go-blurhash v1.1.0 github.com/coreos/go-oidc/v3 v3.4.0 github.com/cornelk/hashmap v1.0.8 diff --git a/go.sum b/go.sum index a79de0990..1e6fa7848 100644 --- a/go.sum +++ b/go.sum @@ -110,8 +110,8 @@ github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030I github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/abema/go-mp4 v0.8.0 h1:JHYkOvTfBpTnqJHiFFOXe8d6wiFy5MtDnA10fgccNqY= -github.com/abema/go-mp4 v0.8.0/go.mod h1:vPl9t5ZK7K0x68jh12/+ECWBCXoWuIDtNgPtU2f04ws= +github.com/abema/go-mp4 v0.9.0 h1:WFkzn0J8uYTQ2MIWfgCaFHRB3VDkird5JncIjuuKjGI= +github.com/abema/go-mp4 v0.9.0/go.mod h1:vPl9t5ZK7K0x68jh12/+ECWBCXoWuIDtNgPtU2f04ws= github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU= github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= github.com/andybalholm/brotli v1.0.0/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= diff --git a/vendor/github.com/abema/go-mp4/box_types.go b/vendor/github.com/abema/go-mp4/box_types.go index d662dddbe..1126d643b 100644 --- a/vendor/github.com/abema/go-mp4/box_types.go +++ b/vendor/github.com/abema/go-mp4/box_types.go @@ -591,6 +591,24 @@ type DecoderConfigDescriptor struct { AvgBitrate uint32 `mp4:"6,size=32"` } +/*************************** fiel ****************************/ + +func BoxTypeFiel() BoxType { return StrToBoxType("fiel") } + +func init() { + AddBoxDef(&Fiel{}) +} + +type Fiel struct { + Box + FieldCount uint8 `mp4:"0,size=8"` + FieldOrdering uint8 `mp4:"1,size=8"` +} + +func (Fiel) GetType() BoxType { + return BoxTypeFiel() +} + /************************ free, skip *************************/ func BoxTypeFree() BoxType { return StrToBoxType("free") } @@ -768,6 +786,85 @@ func (hdlr *Hdlr) OnReadName(r bitio.ReadSeeker, leftBits uint64, ctx Context) ( return leftBits, true, nil } +/*************************** hvcC ****************************/ + +func BoxTypeHvcC() BoxType { return StrToBoxType("hvcC") } + +func init() { + AddBoxDef(&HvcC{}) +} + +type HEVCNalu struct { + BaseCustomFieldObject + Length uint16 `mp4:"0,size=16"` + NALUnit []byte `mp4:"1,size=8,len=dynamic"` +} + +func (s HEVCNalu) GetFieldLength(name string, ctx Context) uint { + switch name { + case "NALUnit": + return uint(s.Length) + } + return 0 +} + +type HEVCNaluArray struct { + BaseCustomFieldObject + Completeness bool `mp4:"0,size=1"` + Reserved bool `mp4:"1,size=1"` + NaluType uint8 `mp4:"2,size=6"` + NumNalus uint16 `mp4:"3,size=16"` + Nalus []HEVCNalu `mp4:"4,len=dynamic"` +} + +func (a HEVCNaluArray) GetFieldLength(name string, ctx Context) uint { + switch name { + case "Nalus": + return uint(a.NumNalus) + } + return 0 +} + +type HvcC struct { + Box + ConfigurationVersion uint8 `mp4:"0,size=8"` + GeneralProfileSpace uint8 `mp4:"1,size=2"` + GeneralTierFlag bool `mp4:"2,size=1"` + GeneralProfileIdc uint8 `mp4:"3,size=5"` + GeneralProfileCompatibility [32]bool `mp4:"4,size=1"` + GeneralConstraintIndicator [6]uint8 `mp4:"5,size=8"` + GeneralLevelIdc uint8 `mp4:"6,size=8"` + Reserved1 uint8 `mp4:"7,size=4,const=15"` + MinSpatialSegmentationIdc uint16 `mp4:"8,size=12"` + Reserved2 uint8 `mp4:"9,size=6,const=63"` + ParallelismType uint8 `mp4:"10,size=2"` + Reserved3 uint8 `mp4:"11,size=6,const=63"` + ChromaFormatIdc uint8 `mp4:"12,size=2"` + Reserved4 uint8 `mp4:"13,size=5,const=31"` + BitDepthLumaMinus8 uint8 `mp4:"14,size=3"` + Reserved5 uint8 `mp4:"15,size=5,const=31"` + BitDepthChromaMinus8 uint8 `mp4:"16,size=3"` + AvgFrameRate uint16 `mp4:"17,size=16"` + ConstantFrameRate uint8 `mp4:"18,size=2"` + NumTemporalLayers uint8 `mp4:"19,size=2"` + TemporalIdNested uint8 `mp4:"20,size=2"` + LengthSizeMinusOne uint8 `mp4:"21,size=2"` + NumOfNaluArrays uint8 `mp4:"22,size=8"` + NaluArrays []HEVCNaluArray `mp4:"23,len=dynamic"` +} + +func (HvcC) GetType() BoxType { + return BoxTypeHvcC() +} + +func (hvcc HvcC) GetFieldLength(name string, ctx Context) uint { + switch name { + case "NaluArrays": + return uint(hvcc.NumOfNaluArrays) + } + return 0 +} + /*************************** ilst ****************************/ func BoxTypeIlst() BoxType { return StrToBoxType("ilst") } @@ -1450,6 +1547,7 @@ func (*Saiz) GetType() BoxType { func BoxTypeAvc1() BoxType { return StrToBoxType("avc1") } func BoxTypeEncv() BoxType { return StrToBoxType("encv") } +func BoxTypeHev1() BoxType { return StrToBoxType("hev1") } func BoxTypeMp4a() BoxType { return StrToBoxType("mp4a") } func BoxTypeEnca() BoxType { return StrToBoxType("enca") } func BoxTypeAvcC() BoxType { return StrToBoxType("avcC") } @@ -1458,6 +1556,7 @@ func BoxTypePasp() BoxType { return StrToBoxType("pasp") } func init() { AddAnyTypeBoxDef(&VisualSampleEntry{}, BoxTypeAvc1()) AddAnyTypeBoxDef(&VisualSampleEntry{}, BoxTypeEncv()) + AddAnyTypeBoxDef(&VisualSampleEntry{}, BoxTypeHev1()) AddAnyTypeBoxDef(&AudioSampleEntry{}, BoxTypeMp4a()) AddAnyTypeBoxDef(&AudioSampleEntry{}, BoxTypeEnca()) AddAnyTypeBoxDef(&AVCDecoderConfiguration{}, BoxTypeAvcC()) diff --git a/vendor/modules.txt b/vendor/modules.txt index e92f460fe..45bbade5a 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -66,7 +66,7 @@ codeberg.org/gruf/go-sched codeberg.org/gruf/go-store/v2/kv codeberg.org/gruf/go-store/v2/storage codeberg.org/gruf/go-store/v2/util -# github.com/abema/go-mp4 v0.8.0 +# github.com/abema/go-mp4 v0.9.0 ## explicit; go 1.14 github.com/abema/go-mp4 github.com/abema/go-mp4/bitio