diff options
Diffstat (limited to 'vendor/github.com/abema/go-mp4/box.go')
-rw-r--r-- | vendor/github.com/abema/go-mp4/box.go | 188 |
1 files changed, 188 insertions, 0 deletions
diff --git a/vendor/github.com/abema/go-mp4/box.go b/vendor/github.com/abema/go-mp4/box.go new file mode 100644 index 000000000..72a137951 --- /dev/null +++ b/vendor/github.com/abema/go-mp4/box.go @@ -0,0 +1,188 @@ +package mp4 + +import ( + "errors" + "io" + "math" + + "github.com/abema/go-mp4/bitio" +) + +const LengthUnlimited = math.MaxUint32 + +type ICustomFieldObject interface { + // GetFieldSize returns size of dynamic field + GetFieldSize(name string, ctx Context) uint + + // GetFieldLength returns length of dynamic field + GetFieldLength(name string, ctx Context) uint + + // IsOptFieldEnabled check whether if the optional field is enabled + IsOptFieldEnabled(name string, ctx Context) bool + + // StringifyField returns field value as string + StringifyField(name string, indent string, depth int, ctx Context) (string, bool) + + IsPString(name string, bytes []byte, remainingSize uint64, ctx Context) bool + + BeforeUnmarshal(r io.ReadSeeker, size uint64, ctx Context) (n uint64, override bool, err error) + + OnReadField(name string, r bitio.ReadSeeker, leftBits uint64, ctx Context) (rbits uint64, override bool, err error) + + OnWriteField(name string, w bitio.Writer, ctx Context) (wbits uint64, override bool, err error) +} + +type BaseCustomFieldObject struct { +} + +// GetFieldSize returns size of dynamic field +func (box *BaseCustomFieldObject) GetFieldSize(string, Context) uint { + panic(errors.New("GetFieldSize not implemented")) +} + +// GetFieldLength returns length of dynamic field +func (box *BaseCustomFieldObject) GetFieldLength(string, Context) uint { + panic(errors.New("GetFieldLength not implemented")) +} + +// IsOptFieldEnabled check whether if the optional field is enabled +func (box *BaseCustomFieldObject) IsOptFieldEnabled(string, Context) bool { + return false +} + +// StringifyField returns field value as string +func (box *BaseCustomFieldObject) StringifyField(string, string, int, Context) (string, bool) { + return "", false +} + +func (*BaseCustomFieldObject) IsPString(name string, bytes []byte, remainingSize uint64, ctx Context) bool { + return true +} + +func (*BaseCustomFieldObject) BeforeUnmarshal(io.ReadSeeker, uint64, Context) (uint64, bool, error) { + return 0, false, nil +} + +func (*BaseCustomFieldObject) OnReadField(string, bitio.ReadSeeker, uint64, Context) (uint64, bool, error) { + return 0, false, nil +} + +func (*BaseCustomFieldObject) OnWriteField(string, bitio.Writer, Context) (uint64, bool, error) { + return 0, false, nil +} + +// IImmutableBox is common interface of box +type IImmutableBox interface { + ICustomFieldObject + + // GetVersion returns the box version + GetVersion() uint8 + + // GetFlags returns the flags + GetFlags() uint32 + + // CheckFlag checks the flag status + CheckFlag(uint32) bool + + // GetType returns the BoxType + GetType() BoxType +} + +// IBox is common interface of box +type IBox interface { + IImmutableBox + + // SetVersion sets the box version + SetVersion(uint8) + + // SetFlags sets the flags + SetFlags(uint32) + + // AddFlag adds the flag + AddFlag(uint32) + + // RemoveFlag removes the flag + RemoveFlag(uint32) +} + +type Box struct { + BaseCustomFieldObject +} + +// GetVersion returns the box version +func (box *Box) GetVersion() uint8 { + return 0 +} + +// SetVersion sets the box version +func (box *Box) SetVersion(uint8) { +} + +// GetFlags returns the flags +func (box *Box) GetFlags() uint32 { + return 0x000000 +} + +// CheckFlag checks the flag status +func (box *Box) CheckFlag(flag uint32) bool { + return true +} + +// SetFlags sets the flags +func (box *Box) SetFlags(uint32) { +} + +// AddFlag adds the flag +func (box *Box) AddFlag(flag uint32) { +} + +// RemoveFlag removes the flag +func (box *Box) RemoveFlag(flag uint32) { +} + +// FullBox is ISOBMFF FullBox +type FullBox struct { + BaseCustomFieldObject + Version uint8 `mp4:"0,size=8"` + Flags [3]byte `mp4:"1,size=8"` +} + +// GetVersion returns the box version +func (box *FullBox) GetVersion() uint8 { + return box.Version +} + +// SetVersion sets the box version +func (box *FullBox) SetVersion(version uint8) { + box.Version = version +} + +// GetFlags returns the flags +func (box *FullBox) GetFlags() uint32 { + flag := uint32(box.Flags[0]) << 16 + flag ^= uint32(box.Flags[1]) << 8 + flag ^= uint32(box.Flags[2]) + return flag +} + +// CheckFlag checks the flag status +func (box *FullBox) CheckFlag(flag uint32) bool { + return box.GetFlags()&flag != 0 +} + +// SetFlags sets the flags +func (box *FullBox) SetFlags(flags uint32) { + box.Flags[0] = byte(flags >> 16) + box.Flags[1] = byte(flags >> 8) + box.Flags[2] = byte(flags) +} + +// AddFlag adds the flag +func (box *FullBox) AddFlag(flag uint32) { + box.SetFlags(box.GetFlags() | flag) +} + +// RemoveFlag removes the flag +func (box *FullBox) RemoveFlag(flag uint32) { + box.SetFlags(box.GetFlags() & (^flag)) +} |