mp4 fix samplesize atom bug
This commit is contained in:
parent
49340a40ec
commit
5236977a6a
97
format/mp4/atom/samplesize.go
Normal file
97
format/mp4/atom/samplesize.go
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
|
||||||
|
package atom
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io"
|
||||||
|
)
|
||||||
|
|
||||||
|
type SampleSize struct {
|
||||||
|
Version int
|
||||||
|
Flags int
|
||||||
|
SampleSize int
|
||||||
|
Entries []int
|
||||||
|
}
|
||||||
|
|
||||||
|
func ReadSampleSize(r *io.LimitedReader) (res *SampleSize, err error) {
|
||||||
|
|
||||||
|
self := &SampleSize{}
|
||||||
|
if self.Version, err = ReadInt(r, 1); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if self.Flags, err = ReadInt(r, 3); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if self.SampleSize, err = ReadInt(r, 4); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if self.SampleSize != 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var count int
|
||||||
|
if count, err = ReadInt(r, 4); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
self.Entries = make([]int, count)
|
||||||
|
for i := 0; i < count; i++ {
|
||||||
|
if self.Entries[i], err = ReadInt(r, 4); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
res = self
|
||||||
|
return
|
||||||
|
}
|
||||||
|
func WriteSampleSize(w io.WriteSeeker, self *SampleSize) (err error) {
|
||||||
|
|
||||||
|
var aw *Writer
|
||||||
|
if aw, err = WriteAtomHeader(w, "stsz"); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
w = aw
|
||||||
|
if err = WriteInt(w, self.Version, 1); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err = WriteInt(w, self.Flags, 3); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err = WriteInt(w, self.SampleSize, 4); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if self.SampleSize != 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err = WriteInt(w, len(self.Entries), 4); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for _, elem := range self.Entries {
|
||||||
|
if err = WriteInt(w, elem, 4); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err = aw.Close(); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
func WalkSampleSize(w Walker, self *SampleSize) {
|
||||||
|
|
||||||
|
w.StartStruct("SampleSize")
|
||||||
|
w.Name("Version")
|
||||||
|
w.Int(self.Version)
|
||||||
|
w.Name("Flags")
|
||||||
|
w.Int(self.Flags)
|
||||||
|
w.Name("SampleSize")
|
||||||
|
w.Int(self.SampleSize)
|
||||||
|
for i, item := range self.Entries {
|
||||||
|
if w.FilterArrayItem("SampleSize", "Entries", i, len(self.Entries)) {
|
||||||
|
w.Name("Entries")
|
||||||
|
w.Int(item)
|
||||||
|
} else {
|
||||||
|
w.ArrayLeft(i, len(self.Entries))
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
w.EndStruct()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user