diff --git a/atom/genStruct.js b/atom/genStruct.js index c62ac57..9c9e224 100644 --- a/atom/genStruct.js +++ b/atom/genStruct.js @@ -10,11 +10,19 @@ var atoms = { fields: [ ['$atoms', [ ['header', '*movieHeader'], + ['iods', '*iods'], ['tracks', '[]*track'], ]], ], }, + iods: { + cc4: 'iods', + fields: [ + ['data', '[]byte'], + ], + }, + movieHeader: { cc4: 'mvhd', fields: [ diff --git a/atom/struct.go b/atom/struct.go index 848298d..b8def2f 100644 --- a/atom/struct.go +++ b/atom/struct.go @@ -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