This commit is contained in:
nareix 2015-11-26 18:42:43 +08:00
parent 0a8a72ae7d
commit 60176b7f50
2 changed files with 49 additions and 0 deletions

View File

@ -10,11 +10,19 @@ var atoms = {
fields: [
['$atoms', [
['header', '*movieHeader'],
['iods', '*iods'],
['tracks', '[]*track'],
]],
],
},
iods: {
cc4: 'iods',
fields: [
['data', '[]byte'],
],
},
movieHeader: {
cc4: 'mvhd',
fields: [

View File

@ -7,6 +7,7 @@ import (
type Movie struct {
Header *MovieHeader
Iods *Iods
Tracks []*Track
}
@ -26,6 +27,12 @@ func ReadMovie(r *io.LimitedReader) (res *Movie, err error) {
return
}
}
case "iods":
{
if self.Iods, err = ReadIods(ar); err != nil {
return
}
}
case "trak":
{
var item *Track
@ -55,6 +62,11 @@ func WriteMovie(w io.WriteSeeker, self *Movie) (err error) {
return
}
}
if self.Iods != nil {
if err = WriteIods(w, self.Iods); err != nil {
return
}
}
if self.Tracks != nil {
for _, elem := range self.Tracks {
if err = WriteTrack(w, elem); err != nil {
@ -68,6 +80,35 @@ func WriteMovie(w io.WriteSeeker, self *Movie) (err error) {
return
}
type Iods struct {
Data []byte
}
func ReadIods(r *io.LimitedReader) (res *Iods, err error) {
self := &Iods{}
if self.Data, err = ReadBytes(r, int(r.N)); err != nil {
return
}
res = self
return
}
func WriteIods(w io.WriteSeeker, self *Iods) (err error) {
var aw *Writer
if aw, err = WriteAtomHeader(w, "iods"); err != nil {
return
}
w = aw
if err = WriteBytes(w, self.Data, len(self.Data)); err != nil {
return
}
if err = aw.Close(); err != nil {
return
}
return
}
type MovieHeader struct {
Version int
Flags int