From 8cbf203548fad7c621ea699978a000f465ac6e1b Mon Sep 17 00:00:00 2001 From: nareix Date: Sun, 22 Nov 2015 08:48:25 +0800 Subject: [PATCH] put HandlerRefer into struct.go --- atom/genStruct.js | 20 ++++++++- atom/otherStruct.go | 62 --------------------------- atom/struct.go | 100 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 118 insertions(+), 64 deletions(-) diff --git a/atom/genStruct.js b/atom/genStruct.js index 8e81ee8..e856fc6 100644 --- a/atom/genStruct.js +++ b/atom/genStruct.js @@ -5,6 +5,15 @@ Array.prototype.nonull = function () { }; var atoms = { + test: { + cc4: 'sbss', + fields: [ + ['version', 'int8'], + ['flags', 'int24'], + ['left', '[]char'], + ], + }, + movie: { cc4: 'moov', fields: [ @@ -71,6 +80,13 @@ var atoms = { handlerRefer: { cc4: 'hdlr', + fields: [ + ['version', 'int8'], + ['flags', 'int24'], + ['type', '[4]char'], + ['subType', '[4]char'], + ['name', '[]char'], + ], }, media: { @@ -299,7 +315,7 @@ var DeclReadFunc = (opts) => { return [ //DebugStmt(type), CallCheckAssign( - 'Read'+type.fn, ['r', type.len].nonull(), [name]), + 'Read'+type.fn, ['r', type.len||'int(r.N)'], [name]), ] }; @@ -368,7 +384,7 @@ var DeclWriteFunc = (opts) => { 'Write'+type.Struct, ['w', name], []); return [ CallCheckAssign( - 'Write'+type.fn, ['w', name, type.len].nonull(), []), + 'Write'+type.fn, ['w', name, type.len||`len(${name})`], []), ] }; diff --git a/atom/otherStruct.go b/atom/otherStruct.go index 5922f10..5a99686 100644 --- a/atom/otherStruct.go +++ b/atom/otherStruct.go @@ -109,65 +109,3 @@ func WriteSampleDescEntry(w io.WriteSeeker, self *SampleDescEntry) (err error) { return } -type HandlerRefer struct { - Version int - Flags int - Type string - SubType string - Name string -} - -func ReadHandlerRefer(r *io.LimitedReader) (res *HandlerRefer, err error) { - self := &HandlerRefer{} - if self.Version, err = ReadInt(r, 3); err != nil { - return - } - if self.Flags, err = ReadInt(r, 1); err != nil { - return - } - if self.Type, err = ReadString(r, 4); err != nil { - return - } - if self.SubType, err = ReadString(r, 4); err != nil { - return - } - if _, err = ReadDummy(r, 12); err != nil { - return - } - if self.Name, err = ReadString(r, int(r.N)); err != nil { - return - } - res = self - return -} - -func WriteHandlerRefer(w io.WriteSeeker, self *HandlerRefer) (err error) { - var aw *Writer - if aw, err = WriteAtomHeader(w, "hdlr"); err != nil { - return - } - w = aw - if err = WriteInt(w, self.Version, 3); err != nil { - return - } - if err = WriteInt(w, self.Flags, 1); err != nil { - return - } - if err = WriteString(w, self.Type, 4); err != nil { - return - } - if err = WriteString(w, self.SubType, 4); err != nil { - return - } - if err = WriteDummy(w, 12); err != nil { - return - } - if err = WriteString(w, self.Name, len(self.Name)); err != nil { - return - } - if err = aw.Close(); err != nil { - return - } - return -} - diff --git a/atom/struct.go b/atom/struct.go index a7f4286..118c815 100644 --- a/atom/struct.go +++ b/atom/struct.go @@ -5,6 +5,49 @@ import ( "io" ) +type Test struct { + Version int + Flags int + Left string +} + +func ReadTest(r *io.LimitedReader) (res *Test, err error) { + + self := &Test{} + if self.Version, err = ReadInt(r, 1); err != nil { + return + } + if self.Flags, err = ReadInt(r, 3); err != nil { + return + } + if self.Left, err = ReadString(r, int(r.N)); err != nil { + return + } + res = self + return +} +func WriteTest(w io.WriteSeeker, self *Test) (err error) { + + var aw *Writer + if aw, err = WriteAtomHeader(w, "sbss"); 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 = WriteString(w, self.Left, len(self.Left)); err != nil { + return + } + if err = aw.Close(); err != nil { + return + } + return +} + type Movie struct { Header *MovieHeader Tracks []*Track @@ -399,6 +442,63 @@ func WriteTrackHeader(w io.WriteSeeker, self *TrackHeader) (err error) { return } +type HandlerRefer struct { + Version int + Flags int + Type string + SubType string + Name string +} + +func ReadHandlerRefer(r *io.LimitedReader) (res *HandlerRefer, err error) { + + self := &HandlerRefer{} + if self.Version, err = ReadInt(r, 1); err != nil { + return + } + if self.Flags, err = ReadInt(r, 3); err != nil { + return + } + if self.Type, err = ReadString(r, 4); err != nil { + return + } + if self.SubType, err = ReadString(r, 4); err != nil { + return + } + if self.Name, err = ReadString(r, int(r.N)); err != nil { + return + } + res = self + return +} +func WriteHandlerRefer(w io.WriteSeeker, self *HandlerRefer) (err error) { + + var aw *Writer + if aw, err = WriteAtomHeader(w, "hdlr"); 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 = WriteString(w, self.Type, 4); err != nil { + return + } + if err = WriteString(w, self.SubType, 4); err != nil { + return + } + if err = WriteString(w, self.Name, len(self.Name)); err != nil { + return + } + if err = aw.Close(); err != nil { + return + } + return +} + type Media struct { Header *MediaHeader Info *MediaInfo