mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-31 14:02:25 -05:00 
			
		
		
		
	[chore]: Bump github.com/abema/go-mp4 from 0.11.0 to 0.12.0 (#2075)
This commit is contained in:
		
					parent
					
						
							
								0242f03d36
							
						
					
				
			
			
				commit
				
					
						cc69250bbe
					
				
			
		
					 10 changed files with 551 additions and 415 deletions
				
			
		
							
								
								
									
										2
									
								
								go.mod
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								go.mod
									
										
									
									
									
								
							|  | @ -18,7 +18,7 @@ require ( | ||||||
| 	codeberg.org/gruf/go-store/v2 v2.2.2 | 	codeberg.org/gruf/go-store/v2 v2.2.2 | ||||||
| 	github.com/DmitriyVTitov/size v1.5.0 | 	github.com/DmitriyVTitov/size v1.5.0 | ||||||
| 	github.com/KimMachineGun/automemlimit v0.2.6 | 	github.com/KimMachineGun/automemlimit v0.2.6 | ||||||
| 	github.com/abema/go-mp4 v0.11.0 | 	github.com/abema/go-mp4 v0.12.0 | ||||||
| 	github.com/buckket/go-blurhash v1.1.0 | 	github.com/buckket/go-blurhash v1.1.0 | ||||||
| 	github.com/coreos/go-oidc/v3 v3.6.0 | 	github.com/coreos/go-oidc/v3 v3.6.0 | ||||||
| 	github.com/disintegration/imaging v1.6.2 | 	github.com/disintegration/imaging v1.6.2 | ||||||
|  |  | ||||||
							
								
								
									
										4
									
								
								go.sum
									
										
									
									
									
								
							
							
						
						
									
										4
									
								
								go.sum
									
										
									
									
									
								
							|  | @ -92,8 +92,8 @@ github.com/DmitriyVTitov/size v1.5.0/go.mod h1:le6rNI4CoLQV1b9gzp1+3d7hMAD/uu2Qc | ||||||
| github.com/KimMachineGun/automemlimit v0.2.6 h1:tQFriVTcIteUkV5EgU9iz03eDY36T8JU5RAjP2r6Kt0= | github.com/KimMachineGun/automemlimit v0.2.6 h1:tQFriVTcIteUkV5EgU9iz03eDY36T8JU5RAjP2r6Kt0= | ||||||
| github.com/KimMachineGun/automemlimit v0.2.6/go.mod h1:pJhTW/nWJMj6SnWSU2TEKSlCaM+1N5Mej+IfS/5/Ol0= | github.com/KimMachineGun/automemlimit v0.2.6/go.mod h1:pJhTW/nWJMj6SnWSU2TEKSlCaM+1N5Mej+IfS/5/Ol0= | ||||||
| github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= | github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= | ||||||
| github.com/abema/go-mp4 v0.11.0 h1:XJfpSmEdUBMvWnDKIiNznLGZPpeDxJ/qDdN6Ust1ADk= | github.com/abema/go-mp4 v0.12.0 h1:XI9PPt1BpjB3wFl18oFiX6C99uesx7F/X13Z+ga8bYY= | ||||||
| github.com/abema/go-mp4 v0.11.0/go.mod h1:vPl9t5ZK7K0x68jh12/+ECWBCXoWuIDtNgPtU2f04ws= | github.com/abema/go-mp4 v0.12.0/go.mod h1:vPl9t5ZK7K0x68jh12/+ECWBCXoWuIDtNgPtU2f04ws= | ||||||
| github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU= | github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU= | ||||||
| github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= | github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= | ||||||
| github.com/andybalholm/brotli v1.0.0/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= | github.com/andybalholm/brotli v1.0.0/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= | ||||||
|  |  | ||||||
							
								
								
									
										24
									
								
								vendor/github.com/abema/go-mp4/box_types_3gpp.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								vendor/github.com/abema/go-mp4/box_types_3gpp.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,24 @@ | ||||||
|  | package mp4 | ||||||
|  | 
 | ||||||
|  | var udta3GppMetaBoxTypes = []BoxType{ | ||||||
|  | 	StrToBoxType("titl"), | ||||||
|  | 	StrToBoxType("dscp"), | ||||||
|  | 	StrToBoxType("cprt"), | ||||||
|  | 	StrToBoxType("perf"), | ||||||
|  | 	StrToBoxType("auth"), | ||||||
|  | 	StrToBoxType("gnre"), | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func init() { | ||||||
|  | 	for _, bt := range udta3GppMetaBoxTypes { | ||||||
|  | 		AddAnyTypeBoxDefEx(&Udta3GppString{}, bt, isUnderUdta, 0) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type Udta3GppString struct { | ||||||
|  | 	AnyTypeBox | ||||||
|  | 	FullBox  `mp4:"0,extend"` | ||||||
|  | 	Pad      bool    `mp4:"1,size=1,hidden"` | ||||||
|  | 	Language [3]byte `mp4:"2,size=5,iso639-2"` // ISO-639-2/T language code | ||||||
|  | 	Data     []byte  `mp4:"3,size=8,string"` | ||||||
|  | } | ||||||
							
								
								
									
										44
									
								
								vendor/github.com/abema/go-mp4/box_types_av1.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								vendor/github.com/abema/go-mp4/box_types_av1.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,44 @@ | ||||||
|  | package mp4 | ||||||
|  | 
 | ||||||
|  | /*************************** av01 ****************************/ | ||||||
|  | 
 | ||||||
|  | // https://aomediacodec.github.io/av1-isobmff | ||||||
|  | 
 | ||||||
|  | func BoxTypeAv01() BoxType { return StrToBoxType("av01") } | ||||||
|  | 
 | ||||||
|  | func init() { | ||||||
|  | 	AddAnyTypeBoxDef(&VisualSampleEntry{}, BoxTypeAv01()) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /*************************** av1C ****************************/ | ||||||
|  | 
 | ||||||
|  | // https://aomediacodec.github.io/av1-isobmff | ||||||
|  | 
 | ||||||
|  | func BoxTypeAv1C() BoxType { return StrToBoxType("av1C") } | ||||||
|  | 
 | ||||||
|  | func init() { | ||||||
|  | 	AddBoxDef(&Av1C{}) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type Av1C struct { | ||||||
|  | 	Box | ||||||
|  | 	Marker                           uint8   `mp4:"0,size=1,const=1"` | ||||||
|  | 	Version                          uint8   `mp4:"1,size=7,const=1"` | ||||||
|  | 	SeqProfile                       uint8   `mp4:"2,size=3"` | ||||||
|  | 	SeqLevelIdx0                     uint8   `mp4:"3,size=5"` | ||||||
|  | 	SeqTier0                         uint8   `mp4:"4,size=1"` | ||||||
|  | 	HighBitdepth                     uint8   `mp4:"5,size=1"` | ||||||
|  | 	TwelveBit                        uint8   `mp4:"6,size=1"` | ||||||
|  | 	Monochrome                       uint8   `mp4:"7,size=1"` | ||||||
|  | 	ChromaSubsamplingX               uint8   `mp4:"8,size=1"` | ||||||
|  | 	ChromaSubsamplingY               uint8   `mp4:"9,size=1"` | ||||||
|  | 	ChromaSamplePosition             uint8   `mp4:"10,size=2"` | ||||||
|  | 	Reserved                         uint8   `mp4:"11,size=3,const=0"` | ||||||
|  | 	InitialPresentationDelayPresent  uint8   `mp4:"12,size=1"` | ||||||
|  | 	InitialPresentationDelayMinusOne uint8   `mp4:"13,size=4"` | ||||||
|  | 	ConfigOBUs                       []uint8 `mp4:"14,size=8"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (Av1C) GetType() BoxType { | ||||||
|  | 	return BoxTypeAv1C() | ||||||
|  | } | ||||||
|  | @ -1,14 +1,12 @@ | ||||||
| package mp4 | package mp4 | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"bytes" |  | ||||||
| 	"errors" | 	"errors" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"io" | 	"io" | ||||||
| 
 | 
 | ||||||
| 	"github.com/abema/go-mp4/bitio" | 	"github.com/abema/go-mp4/bitio" | ||||||
| 	"github.com/abema/go-mp4/util" | 	"github.com/abema/go-mp4/util" | ||||||
| 	"github.com/google/uuid" |  | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| /*************************** btrt ****************************/ | /*************************** btrt ****************************/ | ||||||
|  | @ -468,129 +466,6 @@ func (*Emsg) GetType() BoxType { | ||||||
| 	return BoxTypeEmsg() | 	return BoxTypeEmsg() | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*************************** esds ****************************/ |  | ||||||
| 
 |  | ||||||
| // https://developer.apple.com/library/content/documentation/QuickTime/QTFF/QTFFChap3/qtff3.html |  | ||||||
| 
 |  | ||||||
| func BoxTypeEsds() BoxType { return StrToBoxType("esds") } |  | ||||||
| 
 |  | ||||||
| func init() { |  | ||||||
| 	AddBoxDef(&Esds{}, 0) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| const ( |  | ||||||
| 	ESDescrTag            = 0x03 |  | ||||||
| 	DecoderConfigDescrTag = 0x04 |  | ||||||
| 	DecSpecificInfoTag    = 0x05 |  | ||||||
| 	SLConfigDescrTag      = 0x06 |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| // Esds is ES descripter box |  | ||||||
| type Esds struct { |  | ||||||
| 	FullBox     `mp4:"0,extend"` |  | ||||||
| 	Descriptors []Descriptor `mp4:"1,array"` |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // GetType returns the BoxType |  | ||||||
| func (*Esds) GetType() BoxType { |  | ||||||
| 	return BoxTypeEsds() |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| type Descriptor struct { |  | ||||||
| 	BaseCustomFieldObject |  | ||||||
| 	Tag                     int8                     `mp4:"0,size=8"` // must be 0x03 |  | ||||||
| 	Size                    uint32                   `mp4:"1,varint"` |  | ||||||
| 	ESDescriptor            *ESDescriptor            `mp4:"2,extend,opt=dynamic"` |  | ||||||
| 	DecoderConfigDescriptor *DecoderConfigDescriptor `mp4:"3,extend,opt=dynamic"` |  | ||||||
| 	Data                    []byte                   `mp4:"4,size=8,opt=dynamic,len=dynamic"` |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // GetFieldLength returns length of dynamic field |  | ||||||
| func (ds *Descriptor) GetFieldLength(name string, ctx Context) uint { |  | ||||||
| 	switch name { |  | ||||||
| 	case "Data": |  | ||||||
| 		return uint(ds.Size) |  | ||||||
| 	} |  | ||||||
| 	panic(fmt.Errorf("invalid name of dynamic-length field: boxType=esds fieldName=%s", name)) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func (ds *Descriptor) IsOptFieldEnabled(name string, ctx Context) bool { |  | ||||||
| 	switch ds.Tag { |  | ||||||
| 	case ESDescrTag: |  | ||||||
| 		return name == "ESDescriptor" |  | ||||||
| 	case DecoderConfigDescrTag: |  | ||||||
| 		return name == "DecoderConfigDescriptor" |  | ||||||
| 	default: |  | ||||||
| 		return name == "Data" |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // StringifyField returns field value as string |  | ||||||
| func (ds *Descriptor) StringifyField(name string, indent string, depth int, ctx Context) (string, bool) { |  | ||||||
| 	switch name { |  | ||||||
| 	case "Tag": |  | ||||||
| 		switch ds.Tag { |  | ||||||
| 		case ESDescrTag: |  | ||||||
| 			return "ESDescr", true |  | ||||||
| 		case DecoderConfigDescrTag: |  | ||||||
| 			return "DecoderConfigDescr", true |  | ||||||
| 		case DecSpecificInfoTag: |  | ||||||
| 			return "DecSpecificInfo", true |  | ||||||
| 		case SLConfigDescrTag: |  | ||||||
| 			return "SLConfigDescr", true |  | ||||||
| 		default: |  | ||||||
| 			return "", false |  | ||||||
| 		} |  | ||||||
| 	default: |  | ||||||
| 		return "", false |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| type ESDescriptor struct { |  | ||||||
| 	BaseCustomFieldObject |  | ||||||
| 	ESID                 uint16 `mp4:"0,size=16"` |  | ||||||
| 	StreamDependenceFlag bool   `mp4:"1,size=1"` |  | ||||||
| 	UrlFlag              bool   `mp4:"2,size=1"` |  | ||||||
| 	OcrStreamFlag        bool   `mp4:"3,size=1"` |  | ||||||
| 	StreamPriority       int8   `mp4:"4,size=5"` |  | ||||||
| 	DependsOnESID        uint16 `mp4:"5,size=16,opt=dynamic"` |  | ||||||
| 	URLLength            uint8  `mp4:"6,size=8,opt=dynamic"` |  | ||||||
| 	URLString            []byte `mp4:"7,size=8,len=dynamic,opt=dynamic,string"` |  | ||||||
| 	OCRESID              uint16 `mp4:"8,size=16,opt=dynamic"` |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func (esds *ESDescriptor) GetFieldLength(name string, ctx Context) uint { |  | ||||||
| 	switch name { |  | ||||||
| 	case "URLString": |  | ||||||
| 		return uint(esds.URLLength) |  | ||||||
| 	} |  | ||||||
| 	panic(fmt.Errorf("invalid name of dynamic-length field: boxType=ESDescriptor fieldName=%s", name)) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func (esds *ESDescriptor) IsOptFieldEnabled(name string, ctx Context) bool { |  | ||||||
| 	switch name { |  | ||||||
| 	case "DependsOnESID": |  | ||||||
| 		return esds.StreamDependenceFlag |  | ||||||
| 	case "URLLength", "URLString": |  | ||||||
| 		return esds.UrlFlag |  | ||||||
| 	case "OCRESID": |  | ||||||
| 		return esds.OcrStreamFlag |  | ||||||
| 	default: |  | ||||||
| 		return false |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| type DecoderConfigDescriptor struct { |  | ||||||
| 	BaseCustomFieldObject |  | ||||||
| 	ObjectTypeIndication byte   `mp4:"0,size=8"` |  | ||||||
| 	StreamType           int8   `mp4:"1,size=6"` |  | ||||||
| 	UpStream             bool   `mp4:"2,size=1"` |  | ||||||
| 	Reserved             bool   `mp4:"3,size=1"` |  | ||||||
| 	BufferSizeDB         uint32 `mp4:"4,size=24"` |  | ||||||
| 	MaxBitrate           uint32 `mp4:"5,size=32"` |  | ||||||
| 	AvgBitrate           uint32 `mp4:"6,size=32"` |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /*************************** fiel ****************************/ | /*************************** fiel ****************************/ | ||||||
| 
 | 
 | ||||||
| func BoxTypeFiel() BoxType { return StrToBoxType("fiel") } | func BoxTypeFiel() BoxType { return StrToBoxType("fiel") } | ||||||
|  | @ -865,171 +740,6 @@ func (hvcc HvcC) GetFieldLength(name string, ctx Context) uint { | ||||||
| 	return 0 | 	return 0 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*************************** ilst ****************************/ |  | ||||||
| 
 |  | ||||||
| func BoxTypeIlst() BoxType { return StrToBoxType("ilst") } |  | ||||||
| func BoxTypeData() BoxType { return StrToBoxType("data") } |  | ||||||
| 
 |  | ||||||
| var ilstMetaBoxTypes = []BoxType{ |  | ||||||
| 	StrToBoxType("----"), |  | ||||||
| 	StrToBoxType("aART"), |  | ||||||
| 	StrToBoxType("akID"), |  | ||||||
| 	StrToBoxType("apID"), |  | ||||||
| 	StrToBoxType("atID"), |  | ||||||
| 	StrToBoxType("cmID"), |  | ||||||
| 	StrToBoxType("cnID"), |  | ||||||
| 	StrToBoxType("covr"), |  | ||||||
| 	StrToBoxType("cpil"), |  | ||||||
| 	StrToBoxType("cprt"), |  | ||||||
| 	StrToBoxType("desc"), |  | ||||||
| 	StrToBoxType("disk"), |  | ||||||
| 	StrToBoxType("egid"), |  | ||||||
| 	StrToBoxType("geID"), |  | ||||||
| 	StrToBoxType("gnre"), |  | ||||||
| 	StrToBoxType("pcst"), |  | ||||||
| 	StrToBoxType("pgap"), |  | ||||||
| 	StrToBoxType("plID"), |  | ||||||
| 	StrToBoxType("purd"), |  | ||||||
| 	StrToBoxType("purl"), |  | ||||||
| 	StrToBoxType("rtng"), |  | ||||||
| 	StrToBoxType("sfID"), |  | ||||||
| 	StrToBoxType("soaa"), |  | ||||||
| 	StrToBoxType("soal"), |  | ||||||
| 	StrToBoxType("soar"), |  | ||||||
| 	StrToBoxType("soco"), |  | ||||||
| 	StrToBoxType("sonm"), |  | ||||||
| 	StrToBoxType("sosn"), |  | ||||||
| 	StrToBoxType("stik"), |  | ||||||
| 	StrToBoxType("tmpo"), |  | ||||||
| 	StrToBoxType("trkn"), |  | ||||||
| 	StrToBoxType("tven"), |  | ||||||
| 	StrToBoxType("tves"), |  | ||||||
| 	StrToBoxType("tvnn"), |  | ||||||
| 	StrToBoxType("tvsh"), |  | ||||||
| 	StrToBoxType("tvsn"), |  | ||||||
| 	{0xA9, 'A', 'R', 'T'}, |  | ||||||
| 	{0xA9, 'a', 'l', 'b'}, |  | ||||||
| 	{0xA9, 'c', 'm', 't'}, |  | ||||||
| 	{0xA9, 'c', 'o', 'm'}, |  | ||||||
| 	{0xA9, 'd', 'a', 'y'}, |  | ||||||
| 	{0xA9, 'g', 'e', 'n'}, |  | ||||||
| 	{0xA9, 'g', 'r', 'p'}, |  | ||||||
| 	{0xA9, 'n', 'a', 'm'}, |  | ||||||
| 	{0xA9, 't', 'o', 'o'}, |  | ||||||
| 	{0xA9, 'w', 'r', 't'}, |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func IsIlstMetaBoxType(boxType BoxType) bool { |  | ||||||
| 	for _, bt := range ilstMetaBoxTypes { |  | ||||||
| 		if boxType == bt { |  | ||||||
| 			return true |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return false |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func init() { |  | ||||||
| 	AddBoxDef(&Ilst{}) |  | ||||||
| 	AddBoxDefEx(&Data{}, isUnderIlstMeta) |  | ||||||
| 	for _, bt := range ilstMetaBoxTypes { |  | ||||||
| 		AddAnyTypeBoxDefEx(&IlstMetaContainer{}, bt, isIlstMetaContainer) |  | ||||||
| 	} |  | ||||||
| 	AddAnyTypeBoxDefEx(&StringData{}, StrToBoxType("mean"), isUnderIlstFreeFormat) |  | ||||||
| 	AddAnyTypeBoxDefEx(&StringData{}, StrToBoxType("name"), isUnderIlstFreeFormat) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| type Ilst struct { |  | ||||||
| 	Box |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // GetType returns the BoxType |  | ||||||
| func (*Ilst) GetType() BoxType { |  | ||||||
| 	return BoxTypeIlst() |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| type IlstMetaContainer struct { |  | ||||||
| 	AnyTypeBox |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func isIlstMetaContainer(ctx Context) bool { |  | ||||||
| 	return ctx.UnderIlst && !ctx.UnderIlstMeta |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| const ( |  | ||||||
| 	DataTypeBinary             = 0 |  | ||||||
| 	DataTypeStringUTF8         = 1 |  | ||||||
| 	DataTypeStringUTF16        = 2 |  | ||||||
| 	DataTypeStringMac          = 3 |  | ||||||
| 	DataTypeStringJPEG         = 14 |  | ||||||
| 	DataTypeSignedIntBigEndian = 21 |  | ||||||
| 	DataTypeFloat32BigEndian   = 22 |  | ||||||
| 	DataTypeFloat64BigEndian   = 23 |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| type Data struct { |  | ||||||
| 	Box |  | ||||||
| 	DataType uint32 `mp4:"0,size=32"` |  | ||||||
| 	DataLang uint32 `mp4:"1,size=32"` |  | ||||||
| 	Data     []byte `mp4:"2,size=8"` |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // GetType returns the BoxType |  | ||||||
| func (*Data) GetType() BoxType { |  | ||||||
| 	return BoxTypeData() |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func isUnderIlstMeta(ctx Context) bool { |  | ||||||
| 	return ctx.UnderIlstMeta |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // StringifyField returns field value as string |  | ||||||
| func (data *Data) StringifyField(name string, indent string, depth int, ctx Context) (string, bool) { |  | ||||||
| 	switch name { |  | ||||||
| 	case "DataType": |  | ||||||
| 		switch data.DataType { |  | ||||||
| 		case DataTypeBinary: |  | ||||||
| 			return "BINARY", true |  | ||||||
| 		case DataTypeStringUTF8: |  | ||||||
| 			return "UTF8", true |  | ||||||
| 		case DataTypeStringUTF16: |  | ||||||
| 			return "UTF16", true |  | ||||||
| 		case DataTypeStringMac: |  | ||||||
| 			return "MAC_STR", true |  | ||||||
| 		case DataTypeStringJPEG: |  | ||||||
| 			return "JPEG", true |  | ||||||
| 		case DataTypeSignedIntBigEndian: |  | ||||||
| 			return "INT", true |  | ||||||
| 		case DataTypeFloat32BigEndian: |  | ||||||
| 			return "FLOAT32", true |  | ||||||
| 		case DataTypeFloat64BigEndian: |  | ||||||
| 			return "FLOAT64", true |  | ||||||
| 		} |  | ||||||
| 	case "Data": |  | ||||||
| 		switch data.DataType { |  | ||||||
| 		case DataTypeStringUTF8: |  | ||||||
| 			return fmt.Sprintf("\"%s\"", util.EscapeUnprintables(string(data.Data))), true |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return "", false |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| type StringData struct { |  | ||||||
| 	AnyTypeBox |  | ||||||
| 	Data []byte `mp4:"0,size=8"` |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // StringifyField returns field value as string |  | ||||||
| func (sd *StringData) StringifyField(name string, indent string, depth int, ctx Context) (string, bool) { |  | ||||||
| 	if name == "Data" { |  | ||||||
| 		return fmt.Sprintf("\"%s\"", util.EscapeUnprintables(string(sd.Data))), true |  | ||||||
| 	} |  | ||||||
| 	return "", false |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func isUnderIlstFreeFormat(ctx Context) bool { |  | ||||||
| 	return ctx.UnderIlstFreeMeta |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /*************************** mdat ****************************/ | /*************************** mdat ****************************/ | ||||||
| 
 | 
 | ||||||
| func BoxTypeMdat() BoxType { return StrToBoxType("mdat") } | func BoxTypeMdat() BoxType { return StrToBoxType("mdat") } | ||||||
|  | @ -1408,64 +1118,6 @@ func (mvhd *Mvhd) GetRateInt() int16 { | ||||||
| 	return int16(mvhd.Rate >> 16) | 	return int16(mvhd.Rate >> 16) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*************************** pssh ****************************/ |  | ||||||
| 
 |  | ||||||
| func BoxTypePssh() BoxType { return StrToBoxType("pssh") } |  | ||||||
| 
 |  | ||||||
| func init() { |  | ||||||
| 	AddBoxDef(&Pssh{}, 0, 1) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Pssh is ISOBMFF pssh box type |  | ||||||
| type Pssh struct { |  | ||||||
| 	FullBox  `mp4:"0,extend"` |  | ||||||
| 	SystemID [16]byte  `mp4:"1,size=8,uuid"` |  | ||||||
| 	KIDCount uint32    `mp4:"2,size=32,nver=0"` |  | ||||||
| 	KIDs     []PsshKID `mp4:"3,nver=0,len=dynamic,size=128"` |  | ||||||
| 	DataSize int32     `mp4:"4,size=32"` |  | ||||||
| 	Data     []byte    `mp4:"5,size=8,len=dynamic"` |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| type PsshKID struct { |  | ||||||
| 	KID [16]byte `mp4:"0,size=8,uuid"` |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // GetFieldLength returns length of dynamic field |  | ||||||
| func (pssh *Pssh) GetFieldLength(name string, ctx Context) uint { |  | ||||||
| 	switch name { |  | ||||||
| 	case "KIDs": |  | ||||||
| 		return uint(pssh.KIDCount) |  | ||||||
| 	case "Data": |  | ||||||
| 		return uint(pssh.DataSize) |  | ||||||
| 	} |  | ||||||
| 	panic(fmt.Errorf("invalid name of dynamic-length field: boxType=pssh fieldName=%s", name)) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // StringifyField returns field value as string |  | ||||||
| func (pssh *Pssh) StringifyField(name string, indent string, depth int, ctx Context) (string, bool) { |  | ||||||
| 	switch name { |  | ||||||
| 	case "KIDs": |  | ||||||
| 		buf := bytes.NewBuffer(nil) |  | ||||||
| 		buf.WriteString("[") |  | ||||||
| 		for i, e := range pssh.KIDs { |  | ||||||
| 			if i != 0 { |  | ||||||
| 				buf.WriteString(", ") |  | ||||||
| 			} |  | ||||||
| 			buf.WriteString(uuid.UUID(e.KID).String()) |  | ||||||
| 		} |  | ||||||
| 		buf.WriteString("]") |  | ||||||
| 		return buf.String(), true |  | ||||||
| 
 |  | ||||||
| 	default: |  | ||||||
| 		return "", false |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // GetType returns the BoxType |  | ||||||
| func (*Pssh) GetType() BoxType { |  | ||||||
| 	return BoxTypePssh() |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /*************************** saio ****************************/ | /*************************** saio ****************************/ | ||||||
| 
 | 
 | ||||||
| func BoxTypeSaio() BoxType { return StrToBoxType("saio") } | func BoxTypeSaio() BoxType { return StrToBoxType("saio") } | ||||||
|  | @ -1608,7 +1260,7 @@ type AudioSampleEntry struct { | ||||||
| 	SampleSize    uint16    `mp4:"4,size=16,opt=dynamic"` | 	SampleSize    uint16    `mp4:"4,size=16,opt=dynamic"` | ||||||
| 	PreDefined    uint16    `mp4:"5,size=16,opt=dynamic"` | 	PreDefined    uint16    `mp4:"5,size=16,opt=dynamic"` | ||||||
| 	Reserved2     uint16    `mp4:"6,size=16,opt=dynamic,const=0"` | 	Reserved2     uint16    `mp4:"6,size=16,opt=dynamic,const=0"` | ||||||
| 	SampleRate    uint32    `mp4:"7,size=32,opt=dynamic"` | 	SampleRate    uint32    `mp4:"7,size=32,opt=dynamic"` // fixed-point 16.16 | ||||||
| 	QuickTimeData []byte    `mp4:"8,size=8,opt=dynamic,len=dynamic"` | 	QuickTimeData []byte    `mp4:"8,size=8,opt=dynamic,len=dynamic"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -1635,6 +1287,24 @@ func (ase *AudioSampleEntry) GetFieldLength(name string, ctx Context) uint { | ||||||
| 	return 0 | 	return 0 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // StringifyField returns field value as string | ||||||
|  | func (ase *AudioSampleEntry) StringifyField(name string, indent string, depth int, ctx Context) (string, bool) { | ||||||
|  | 	switch name { | ||||||
|  | 	case "SampleRate": | ||||||
|  | 		return util.FormatUnsignedFixedFloat1616(ase.SampleRate), true | ||||||
|  | 	default: | ||||||
|  | 		return "", false | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (ase *AudioSampleEntry) GetSampleRate() float64 { | ||||||
|  | 	return float64(ase.SampleRate) / (1 << 16) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (ase *AudioSampleEntry) GetSampleRateInt() uint16 { | ||||||
|  | 	return uint16(ase.SampleRate >> 16) | ||||||
|  | } | ||||||
|  | 
 | ||||||
| const ( | const ( | ||||||
| 	AVCBaselineProfile uint8 = 66  // 0x42 | 	AVCBaselineProfile uint8 = 66  // 0x42 | ||||||
| 	AVCMainProfile     uint8 = 77  // 0x4d | 	AVCMainProfile     uint8 = 77  // 0x4d | ||||||
|  | @ -2307,48 +1977,6 @@ func (*Styp) GetType() BoxType { | ||||||
| 	return BoxTypeStyp() | 	return BoxTypeStyp() | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*************************** tenc ****************************/ |  | ||||||
| 
 |  | ||||||
| func BoxTypeTenc() BoxType { return StrToBoxType("tenc") } |  | ||||||
| 
 |  | ||||||
| func init() { |  | ||||||
| 	AddBoxDef(&Tenc{}, 0, 1) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Tenc is ISOBMFF tenc box type |  | ||||||
| type Tenc struct { |  | ||||||
| 	FullBox                `mp4:"0,extend"` |  | ||||||
| 	Reserved               uint8    `mp4:"1,size=8,dec"` |  | ||||||
| 	DefaultCryptByteBlock  uint8    `mp4:"2,size=4,dec"` // always 0 on version 0 |  | ||||||
| 	DefaultSkipByteBlock   uint8    `mp4:"3,size=4,dec"` // always 0 on version 0 |  | ||||||
| 	DefaultIsProtected     uint8    `mp4:"4,size=8,dec"` |  | ||||||
| 	DefaultPerSampleIVSize uint8    `mp4:"5,size=8,dec"` |  | ||||||
| 	DefaultKID             [16]byte `mp4:"6,size=8,uuid"` |  | ||||||
| 	DefaultConstantIVSize  uint8    `mp4:"7,size=8,opt=dynamic,dec"` |  | ||||||
| 	DefaultConstantIV      []byte   `mp4:"8,size=8,opt=dynamic,len=dynamic"` |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func (tenc *Tenc) IsOptFieldEnabled(name string, ctx Context) bool { |  | ||||||
| 	switch name { |  | ||||||
| 	case "DefaultConstantIVSize", "DefaultConstantIV": |  | ||||||
| 		return tenc.DefaultIsProtected == 1 && tenc.DefaultPerSampleIVSize == 0 |  | ||||||
| 	} |  | ||||||
| 	return false |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func (tenc *Tenc) GetFieldLength(name string, ctx Context) uint { |  | ||||||
| 	switch name { |  | ||||||
| 	case "DefaultConstantIV": |  | ||||||
| 		return uint(tenc.DefaultConstantIVSize) |  | ||||||
| 	} |  | ||||||
| 	panic(fmt.Errorf("invalid name of dynamic-length field: boxType=tenc fieldName=%s", name)) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // GetType returns the BoxType |  | ||||||
| func (*Tenc) GetType() BoxType { |  | ||||||
| 	return BoxTypeTenc() |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /*************************** tfdt ****************************/ | /*************************** tfdt ****************************/ | ||||||
| 
 | 
 | ||||||
| func BoxTypeTfdt() BoxType { return StrToBoxType("tfdt") } | func BoxTypeTfdt() BoxType { return StrToBoxType("tfdt") } | ||||||
|  | @ -2769,20 +2397,8 @@ func (trun *Trun) GetSampleCompositionTimeOffset(index int) int64 { | ||||||
| 
 | 
 | ||||||
| func BoxTypeUdta() BoxType { return StrToBoxType("udta") } | func BoxTypeUdta() BoxType { return StrToBoxType("udta") } | ||||||
| 
 | 
 | ||||||
| var udta3GppMetaBoxTypes = []BoxType{ |  | ||||||
| 	StrToBoxType("titl"), |  | ||||||
| 	StrToBoxType("dscp"), |  | ||||||
| 	StrToBoxType("cprt"), |  | ||||||
| 	StrToBoxType("perf"), |  | ||||||
| 	StrToBoxType("auth"), |  | ||||||
| 	StrToBoxType("gnre"), |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func init() { | func init() { | ||||||
| 	AddBoxDef(&Udta{}) | 	AddBoxDef(&Udta{}) | ||||||
| 	for _, bt := range udta3GppMetaBoxTypes { |  | ||||||
| 		AddAnyTypeBoxDefEx(&Udta3GppString{}, bt, isUnderUdta, 0) |  | ||||||
| 	} |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Udta is ISOBMFF udta box type | // Udta is ISOBMFF udta box type | ||||||
|  | @ -2795,14 +2411,6 @@ func (*Udta) GetType() BoxType { | ||||||
| 	return BoxTypeUdta() | 	return BoxTypeUdta() | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| type Udta3GppString struct { |  | ||||||
| 	AnyTypeBox |  | ||||||
| 	FullBox  `mp4:"0,extend"` |  | ||||||
| 	Pad      bool    `mp4:"1,size=1,hidden"` |  | ||||||
| 	Language [3]byte `mp4:"2,size=5,iso639-2"` // ISO-639-2/T language code |  | ||||||
| 	Data     []byte  `mp4:"3,size=8,string"` |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func isUnderUdta(ctx Context) bool { | func isUnderUdta(ctx Context) bool { | ||||||
| 	return ctx.UnderUdta | 	return ctx.UnderUdta | ||||||
| } | } | ||||||
							
								
								
									
										126
									
								
								vendor/github.com/abema/go-mp4/box_types_iso14496_14.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										126
									
								
								vendor/github.com/abema/go-mp4/box_types_iso14496_14.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,126 @@ | ||||||
|  | package mp4 | ||||||
|  | 
 | ||||||
|  | import "fmt" | ||||||
|  | 
 | ||||||
|  | /*************************** esds ****************************/ | ||||||
|  | 
 | ||||||
|  | // https://developer.apple.com/library/content/documentation/QuickTime/QTFF/QTFFChap3/qtff3.html | ||||||
|  | 
 | ||||||
|  | func BoxTypeEsds() BoxType { return StrToBoxType("esds") } | ||||||
|  | 
 | ||||||
|  | func init() { | ||||||
|  | 	AddBoxDef(&Esds{}, 0) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | const ( | ||||||
|  | 	ESDescrTag            = 0x03 | ||||||
|  | 	DecoderConfigDescrTag = 0x04 | ||||||
|  | 	DecSpecificInfoTag    = 0x05 | ||||||
|  | 	SLConfigDescrTag      = 0x06 | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | // Esds is ES descripter box | ||||||
|  | type Esds struct { | ||||||
|  | 	FullBox     `mp4:"0,extend"` | ||||||
|  | 	Descriptors []Descriptor `mp4:"1,array"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // GetType returns the BoxType | ||||||
|  | func (*Esds) GetType() BoxType { | ||||||
|  | 	return BoxTypeEsds() | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type Descriptor struct { | ||||||
|  | 	BaseCustomFieldObject | ||||||
|  | 	Tag                     int8                     `mp4:"0,size=8"` // must be 0x03 | ||||||
|  | 	Size                    uint32                   `mp4:"1,varint"` | ||||||
|  | 	ESDescriptor            *ESDescriptor            `mp4:"2,extend,opt=dynamic"` | ||||||
|  | 	DecoderConfigDescriptor *DecoderConfigDescriptor `mp4:"3,extend,opt=dynamic"` | ||||||
|  | 	Data                    []byte                   `mp4:"4,size=8,opt=dynamic,len=dynamic"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // GetFieldLength returns length of dynamic field | ||||||
|  | func (ds *Descriptor) GetFieldLength(name string, ctx Context) uint { | ||||||
|  | 	switch name { | ||||||
|  | 	case "Data": | ||||||
|  | 		return uint(ds.Size) | ||||||
|  | 	} | ||||||
|  | 	panic(fmt.Errorf("invalid name of dynamic-length field: boxType=esds fieldName=%s", name)) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (ds *Descriptor) IsOptFieldEnabled(name string, ctx Context) bool { | ||||||
|  | 	switch ds.Tag { | ||||||
|  | 	case ESDescrTag: | ||||||
|  | 		return name == "ESDescriptor" | ||||||
|  | 	case DecoderConfigDescrTag: | ||||||
|  | 		return name == "DecoderConfigDescriptor" | ||||||
|  | 	default: | ||||||
|  | 		return name == "Data" | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // StringifyField returns field value as string | ||||||
|  | func (ds *Descriptor) StringifyField(name string, indent string, depth int, ctx Context) (string, bool) { | ||||||
|  | 	switch name { | ||||||
|  | 	case "Tag": | ||||||
|  | 		switch ds.Tag { | ||||||
|  | 		case ESDescrTag: | ||||||
|  | 			return "ESDescr", true | ||||||
|  | 		case DecoderConfigDescrTag: | ||||||
|  | 			return "DecoderConfigDescr", true | ||||||
|  | 		case DecSpecificInfoTag: | ||||||
|  | 			return "DecSpecificInfo", true | ||||||
|  | 		case SLConfigDescrTag: | ||||||
|  | 			return "SLConfigDescr", true | ||||||
|  | 		default: | ||||||
|  | 			return "", false | ||||||
|  | 		} | ||||||
|  | 	default: | ||||||
|  | 		return "", false | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type ESDescriptor struct { | ||||||
|  | 	BaseCustomFieldObject | ||||||
|  | 	ESID                 uint16 `mp4:"0,size=16"` | ||||||
|  | 	StreamDependenceFlag bool   `mp4:"1,size=1"` | ||||||
|  | 	UrlFlag              bool   `mp4:"2,size=1"` | ||||||
|  | 	OcrStreamFlag        bool   `mp4:"3,size=1"` | ||||||
|  | 	StreamPriority       int8   `mp4:"4,size=5"` | ||||||
|  | 	DependsOnESID        uint16 `mp4:"5,size=16,opt=dynamic"` | ||||||
|  | 	URLLength            uint8  `mp4:"6,size=8,opt=dynamic"` | ||||||
|  | 	URLString            []byte `mp4:"7,size=8,len=dynamic,opt=dynamic,string"` | ||||||
|  | 	OCRESID              uint16 `mp4:"8,size=16,opt=dynamic"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (esds *ESDescriptor) GetFieldLength(name string, ctx Context) uint { | ||||||
|  | 	switch name { | ||||||
|  | 	case "URLString": | ||||||
|  | 		return uint(esds.URLLength) | ||||||
|  | 	} | ||||||
|  | 	panic(fmt.Errorf("invalid name of dynamic-length field: boxType=ESDescriptor fieldName=%s", name)) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (esds *ESDescriptor) IsOptFieldEnabled(name string, ctx Context) bool { | ||||||
|  | 	switch name { | ||||||
|  | 	case "DependsOnESID": | ||||||
|  | 		return esds.StreamDependenceFlag | ||||||
|  | 	case "URLLength", "URLString": | ||||||
|  | 		return esds.UrlFlag | ||||||
|  | 	case "OCRESID": | ||||||
|  | 		return esds.OcrStreamFlag | ||||||
|  | 	default: | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type DecoderConfigDescriptor struct { | ||||||
|  | 	BaseCustomFieldObject | ||||||
|  | 	ObjectTypeIndication byte   `mp4:"0,size=8"` | ||||||
|  | 	StreamType           int8   `mp4:"1,size=6"` | ||||||
|  | 	UpStream             bool   `mp4:"2,size=1"` | ||||||
|  | 	Reserved             bool   `mp4:"3,size=1"` | ||||||
|  | 	BufferSizeDB         uint32 `mp4:"4,size=24"` | ||||||
|  | 	MaxBitrate           uint32 `mp4:"5,size=32"` | ||||||
|  | 	AvgBitrate           uint32 `mp4:"6,size=32"` | ||||||
|  | } | ||||||
							
								
								
									
										108
									
								
								vendor/github.com/abema/go-mp4/box_types_iso23001_7.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										108
									
								
								vendor/github.com/abema/go-mp4/box_types_iso23001_7.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,108 @@ | ||||||
|  | package mp4 | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"bytes" | ||||||
|  | 	"fmt" | ||||||
|  | 
 | ||||||
|  | 	"github.com/google/uuid" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | /*************************** pssh ****************************/ | ||||||
|  | 
 | ||||||
|  | func BoxTypePssh() BoxType { return StrToBoxType("pssh") } | ||||||
|  | 
 | ||||||
|  | func init() { | ||||||
|  | 	AddBoxDef(&Pssh{}, 0, 1) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Pssh is ISOBMFF pssh box type | ||||||
|  | type Pssh struct { | ||||||
|  | 	FullBox  `mp4:"0,extend"` | ||||||
|  | 	SystemID [16]byte  `mp4:"1,size=8,uuid"` | ||||||
|  | 	KIDCount uint32    `mp4:"2,size=32,nver=0"` | ||||||
|  | 	KIDs     []PsshKID `mp4:"3,nver=0,len=dynamic,size=128"` | ||||||
|  | 	DataSize int32     `mp4:"4,size=32"` | ||||||
|  | 	Data     []byte    `mp4:"5,size=8,len=dynamic"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type PsshKID struct { | ||||||
|  | 	KID [16]byte `mp4:"0,size=8,uuid"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // GetFieldLength returns length of dynamic field | ||||||
|  | func (pssh *Pssh) GetFieldLength(name string, ctx Context) uint { | ||||||
|  | 	switch name { | ||||||
|  | 	case "KIDs": | ||||||
|  | 		return uint(pssh.KIDCount) | ||||||
|  | 	case "Data": | ||||||
|  | 		return uint(pssh.DataSize) | ||||||
|  | 	} | ||||||
|  | 	panic(fmt.Errorf("invalid name of dynamic-length field: boxType=pssh fieldName=%s", name)) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // StringifyField returns field value as string | ||||||
|  | func (pssh *Pssh) StringifyField(name string, indent string, depth int, ctx Context) (string, bool) { | ||||||
|  | 	switch name { | ||||||
|  | 	case "KIDs": | ||||||
|  | 		buf := bytes.NewBuffer(nil) | ||||||
|  | 		buf.WriteString("[") | ||||||
|  | 		for i, e := range pssh.KIDs { | ||||||
|  | 			if i != 0 { | ||||||
|  | 				buf.WriteString(", ") | ||||||
|  | 			} | ||||||
|  | 			buf.WriteString(uuid.UUID(e.KID).String()) | ||||||
|  | 		} | ||||||
|  | 		buf.WriteString("]") | ||||||
|  | 		return buf.String(), true | ||||||
|  | 
 | ||||||
|  | 	default: | ||||||
|  | 		return "", false | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // GetType returns the BoxType | ||||||
|  | func (*Pssh) GetType() BoxType { | ||||||
|  | 	return BoxTypePssh() | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /*************************** tenc ****************************/ | ||||||
|  | 
 | ||||||
|  | func BoxTypeTenc() BoxType { return StrToBoxType("tenc") } | ||||||
|  | 
 | ||||||
|  | func init() { | ||||||
|  | 	AddBoxDef(&Tenc{}, 0, 1) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Tenc is ISOBMFF tenc box type | ||||||
|  | type Tenc struct { | ||||||
|  | 	FullBox                `mp4:"0,extend"` | ||||||
|  | 	Reserved               uint8    `mp4:"1,size=8,dec"` | ||||||
|  | 	DefaultCryptByteBlock  uint8    `mp4:"2,size=4,dec"` // always 0 on version 0 | ||||||
|  | 	DefaultSkipByteBlock   uint8    `mp4:"3,size=4,dec"` // always 0 on version 0 | ||||||
|  | 	DefaultIsProtected     uint8    `mp4:"4,size=8,dec"` | ||||||
|  | 	DefaultPerSampleIVSize uint8    `mp4:"5,size=8,dec"` | ||||||
|  | 	DefaultKID             [16]byte `mp4:"6,size=8,uuid"` | ||||||
|  | 	DefaultConstantIVSize  uint8    `mp4:"7,size=8,opt=dynamic,dec"` | ||||||
|  | 	DefaultConstantIV      []byte   `mp4:"8,size=8,opt=dynamic,len=dynamic"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (tenc *Tenc) IsOptFieldEnabled(name string, ctx Context) bool { | ||||||
|  | 	switch name { | ||||||
|  | 	case "DefaultConstantIVSize", "DefaultConstantIV": | ||||||
|  | 		return tenc.DefaultIsProtected == 1 && tenc.DefaultPerSampleIVSize == 0 | ||||||
|  | 	} | ||||||
|  | 	return false | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (tenc *Tenc) GetFieldLength(name string, ctx Context) uint { | ||||||
|  | 	switch name { | ||||||
|  | 	case "DefaultConstantIV": | ||||||
|  | 		return uint(tenc.DefaultConstantIVSize) | ||||||
|  | 	} | ||||||
|  | 	panic(fmt.Errorf("invalid name of dynamic-length field: boxType=tenc fieldName=%s", name)) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // GetType returns the BoxType | ||||||
|  | func (*Tenc) GetType() BoxType { | ||||||
|  | 	return BoxTypeTenc() | ||||||
|  | } | ||||||
							
								
								
									
										172
									
								
								vendor/github.com/abema/go-mp4/box_types_metadata.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										172
									
								
								vendor/github.com/abema/go-mp4/box_types_metadata.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,172 @@ | ||||||
|  | package mp4 | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 
 | ||||||
|  | 	"github.com/abema/go-mp4/util" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | /*************************** ilst ****************************/ | ||||||
|  | 
 | ||||||
|  | func BoxTypeIlst() BoxType { return StrToBoxType("ilst") } | ||||||
|  | func BoxTypeData() BoxType { return StrToBoxType("data") } | ||||||
|  | 
 | ||||||
|  | var ilstMetaBoxTypes = []BoxType{ | ||||||
|  | 	StrToBoxType("----"), | ||||||
|  | 	StrToBoxType("aART"), | ||||||
|  | 	StrToBoxType("akID"), | ||||||
|  | 	StrToBoxType("apID"), | ||||||
|  | 	StrToBoxType("atID"), | ||||||
|  | 	StrToBoxType("cmID"), | ||||||
|  | 	StrToBoxType("cnID"), | ||||||
|  | 	StrToBoxType("covr"), | ||||||
|  | 	StrToBoxType("cpil"), | ||||||
|  | 	StrToBoxType("cprt"), | ||||||
|  | 	StrToBoxType("desc"), | ||||||
|  | 	StrToBoxType("disk"), | ||||||
|  | 	StrToBoxType("egid"), | ||||||
|  | 	StrToBoxType("geID"), | ||||||
|  | 	StrToBoxType("gnre"), | ||||||
|  | 	StrToBoxType("pcst"), | ||||||
|  | 	StrToBoxType("pgap"), | ||||||
|  | 	StrToBoxType("plID"), | ||||||
|  | 	StrToBoxType("purd"), | ||||||
|  | 	StrToBoxType("purl"), | ||||||
|  | 	StrToBoxType("rtng"), | ||||||
|  | 	StrToBoxType("sfID"), | ||||||
|  | 	StrToBoxType("soaa"), | ||||||
|  | 	StrToBoxType("soal"), | ||||||
|  | 	StrToBoxType("soar"), | ||||||
|  | 	StrToBoxType("soco"), | ||||||
|  | 	StrToBoxType("sonm"), | ||||||
|  | 	StrToBoxType("sosn"), | ||||||
|  | 	StrToBoxType("stik"), | ||||||
|  | 	StrToBoxType("tmpo"), | ||||||
|  | 	StrToBoxType("trkn"), | ||||||
|  | 	StrToBoxType("tven"), | ||||||
|  | 	StrToBoxType("tves"), | ||||||
|  | 	StrToBoxType("tvnn"), | ||||||
|  | 	StrToBoxType("tvsh"), | ||||||
|  | 	StrToBoxType("tvsn"), | ||||||
|  | 	{0xA9, 'A', 'R', 'T'}, | ||||||
|  | 	{0xA9, 'a', 'l', 'b'}, | ||||||
|  | 	{0xA9, 'c', 'm', 't'}, | ||||||
|  | 	{0xA9, 'c', 'o', 'm'}, | ||||||
|  | 	{0xA9, 'd', 'a', 'y'}, | ||||||
|  | 	{0xA9, 'g', 'e', 'n'}, | ||||||
|  | 	{0xA9, 'g', 'r', 'p'}, | ||||||
|  | 	{0xA9, 'n', 'a', 'm'}, | ||||||
|  | 	{0xA9, 't', 'o', 'o'}, | ||||||
|  | 	{0xA9, 'w', 'r', 't'}, | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func IsIlstMetaBoxType(boxType BoxType) bool { | ||||||
|  | 	for _, bt := range ilstMetaBoxTypes { | ||||||
|  | 		if boxType == bt { | ||||||
|  | 			return true | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return false | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func init() { | ||||||
|  | 	AddBoxDef(&Ilst{}) | ||||||
|  | 	AddBoxDefEx(&Data{}, isUnderIlstMeta) | ||||||
|  | 	for _, bt := range ilstMetaBoxTypes { | ||||||
|  | 		AddAnyTypeBoxDefEx(&IlstMetaContainer{}, bt, isIlstMetaContainer) | ||||||
|  | 	} | ||||||
|  | 	AddAnyTypeBoxDefEx(&StringData{}, StrToBoxType("mean"), isUnderIlstFreeFormat) | ||||||
|  | 	AddAnyTypeBoxDefEx(&StringData{}, StrToBoxType("name"), isUnderIlstFreeFormat) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type Ilst struct { | ||||||
|  | 	Box | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // GetType returns the BoxType | ||||||
|  | func (*Ilst) GetType() BoxType { | ||||||
|  | 	return BoxTypeIlst() | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type IlstMetaContainer struct { | ||||||
|  | 	AnyTypeBox | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func isIlstMetaContainer(ctx Context) bool { | ||||||
|  | 	return ctx.UnderIlst && !ctx.UnderIlstMeta | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | const ( | ||||||
|  | 	DataTypeBinary             = 0 | ||||||
|  | 	DataTypeStringUTF8         = 1 | ||||||
|  | 	DataTypeStringUTF16        = 2 | ||||||
|  | 	DataTypeStringMac          = 3 | ||||||
|  | 	DataTypeStringJPEG         = 14 | ||||||
|  | 	DataTypeSignedIntBigEndian = 21 | ||||||
|  | 	DataTypeFloat32BigEndian   = 22 | ||||||
|  | 	DataTypeFloat64BigEndian   = 23 | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | type Data struct { | ||||||
|  | 	Box | ||||||
|  | 	DataType uint32 `mp4:"0,size=32"` | ||||||
|  | 	DataLang uint32 `mp4:"1,size=32"` | ||||||
|  | 	Data     []byte `mp4:"2,size=8"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // GetType returns the BoxType | ||||||
|  | func (*Data) GetType() BoxType { | ||||||
|  | 	return BoxTypeData() | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func isUnderIlstMeta(ctx Context) bool { | ||||||
|  | 	return ctx.UnderIlstMeta | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // StringifyField returns field value as string | ||||||
|  | func (data *Data) StringifyField(name string, indent string, depth int, ctx Context) (string, bool) { | ||||||
|  | 	switch name { | ||||||
|  | 	case "DataType": | ||||||
|  | 		switch data.DataType { | ||||||
|  | 		case DataTypeBinary: | ||||||
|  | 			return "BINARY", true | ||||||
|  | 		case DataTypeStringUTF8: | ||||||
|  | 			return "UTF8", true | ||||||
|  | 		case DataTypeStringUTF16: | ||||||
|  | 			return "UTF16", true | ||||||
|  | 		case DataTypeStringMac: | ||||||
|  | 			return "MAC_STR", true | ||||||
|  | 		case DataTypeStringJPEG: | ||||||
|  | 			return "JPEG", true | ||||||
|  | 		case DataTypeSignedIntBigEndian: | ||||||
|  | 			return "INT", true | ||||||
|  | 		case DataTypeFloat32BigEndian: | ||||||
|  | 			return "FLOAT32", true | ||||||
|  | 		case DataTypeFloat64BigEndian: | ||||||
|  | 			return "FLOAT64", true | ||||||
|  | 		} | ||||||
|  | 	case "Data": | ||||||
|  | 		switch data.DataType { | ||||||
|  | 		case DataTypeStringUTF8: | ||||||
|  | 			return fmt.Sprintf("\"%s\"", util.EscapeUnprintables(string(data.Data))), true | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return "", false | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type StringData struct { | ||||||
|  | 	AnyTypeBox | ||||||
|  | 	Data []byte `mp4:"0,size=8"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // StringifyField returns field value as string | ||||||
|  | func (sd *StringData) StringifyField(name string, indent string, depth int, ctx Context) (string, bool) { | ||||||
|  | 	if name == "Data" { | ||||||
|  | 		return fmt.Sprintf("\"%s\"", util.EscapeUnprintables(string(sd.Data))), true | ||||||
|  | 	} | ||||||
|  | 	return "", false | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func isUnderIlstFreeFormat(ctx Context) bool { | ||||||
|  | 	return ctx.UnderIlstFreeMeta | ||||||
|  | } | ||||||
							
								
								
									
										54
									
								
								vendor/github.com/abema/go-mp4/box_types_opus.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								vendor/github.com/abema/go-mp4/box_types_opus.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,54 @@ | ||||||
|  | package mp4 | ||||||
|  | 
 | ||||||
|  | /*************************** Opus ****************************/ | ||||||
|  | 
 | ||||||
|  | // https://opus-codec.org/docs/opus_in_isobmff.html | ||||||
|  | 
 | ||||||
|  | func BoxTypeOpus() BoxType { return StrToBoxType("Opus") } | ||||||
|  | 
 | ||||||
|  | func init() { | ||||||
|  | 	AddAnyTypeBoxDef(&AudioSampleEntry{}, BoxTypeOpus()) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /*************************** dOps ****************************/ | ||||||
|  | 
 | ||||||
|  | // https://opus-codec.org/docs/opus_in_isobmff.html | ||||||
|  | 
 | ||||||
|  | func BoxTypeDOps() BoxType { return StrToBoxType("dOps") } | ||||||
|  | 
 | ||||||
|  | func init() { | ||||||
|  | 	AddBoxDef(&DOps{}) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type DOps struct { | ||||||
|  | 	Box | ||||||
|  | 	Version              uint8   `mp4:"0,size=8"` | ||||||
|  | 	OutputChannelCount   uint8   `mp4:"1,size=8"` | ||||||
|  | 	PreSkip              uint16  `mp4:"2,size=16"` | ||||||
|  | 	InputSampleRate      uint32  `mp4:"3,size=32"` | ||||||
|  | 	OutputGain           int16   `mp4:"4,size=16"` | ||||||
|  | 	ChannelMappingFamily uint8   `mp4:"5,size=8"` | ||||||
|  | 	StreamCount          uint8   `mp4:"6,opt=dynamic,size=8"` | ||||||
|  | 	CoupledCount         uint8   `mp4:"7,opt=dynamic,size=8"` | ||||||
|  | 	ChannelMapping       []uint8 `mp4:"8,opt=dynamic,size=8,len=dynamic"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (DOps) GetType() BoxType { | ||||||
|  | 	return BoxTypeDOps() | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (dops DOps) IsOptFieldEnabled(name string, ctx Context) bool { | ||||||
|  | 	switch name { | ||||||
|  | 	case "StreamCount", "CoupledCount", "ChannelMapping": | ||||||
|  | 		return dops.ChannelMappingFamily != 0 | ||||||
|  | 	} | ||||||
|  | 	return false | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (ops DOps) GetFieldLength(name string, ctx Context) uint { | ||||||
|  | 	switch name { | ||||||
|  | 	case "ChannelMapping": | ||||||
|  | 		return uint(ops.OutputChannelCount) | ||||||
|  | 	} | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
							
								
								
									
										2
									
								
								vendor/modules.txt
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/modules.txt
									
										
									
									
										vendored
									
									
								
							|  | @ -77,7 +77,7 @@ github.com/DmitriyVTitov/size | ||||||
| ## explicit; go 1.19 | ## explicit; go 1.19 | ||||||
| github.com/KimMachineGun/automemlimit | github.com/KimMachineGun/automemlimit | ||||||
| github.com/KimMachineGun/automemlimit/memlimit | github.com/KimMachineGun/automemlimit/memlimit | ||||||
| # github.com/abema/go-mp4 v0.11.0 | # github.com/abema/go-mp4 v0.12.0 | ||||||
| ## explicit; go 1.14 | ## explicit; go 1.14 | ||||||
| github.com/abema/go-mp4 | github.com/abema/go-mp4 | ||||||
| github.com/abema/go-mp4/bitio | github.com/abema/go-mp4/bitio | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue