put HandlerRefer into struct.go

This commit is contained in:
nareix 2015-11-22 08:48:25 +08:00
parent e5ed771fcd
commit 8cbf203548
3 changed files with 118 additions and 64 deletions

View File

@ -5,6 +5,15 @@ Array.prototype.nonull = function () {
}; };
var atoms = { var atoms = {
test: {
cc4: 'sbss',
fields: [
['version', 'int8'],
['flags', 'int24'],
['left', '[]char'],
],
},
movie: { movie: {
cc4: 'moov', cc4: 'moov',
fields: [ fields: [
@ -71,6 +80,13 @@ var atoms = {
handlerRefer: { handlerRefer: {
cc4: 'hdlr', cc4: 'hdlr',
fields: [
['version', 'int8'],
['flags', 'int24'],
['type', '[4]char'],
['subType', '[4]char'],
['name', '[]char'],
],
}, },
media: { media: {
@ -299,7 +315,7 @@ var DeclReadFunc = (opts) => {
return [ return [
//DebugStmt(type), //DebugStmt(type),
CallCheckAssign( 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], []); 'Write'+type.Struct, ['w', name], []);
return [ return [
CallCheckAssign( CallCheckAssign(
'Write'+type.fn, ['w', name, type.len].nonull(), []), 'Write'+type.fn, ['w', name, type.len||`len(${name})`], []),
] ]
}; };

View File

@ -109,65 +109,3 @@ func WriteSampleDescEntry(w io.WriteSeeker, self *SampleDescEntry) (err error) {
return 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
}

View File

@ -5,6 +5,49 @@ import (
"io" "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 { type Movie struct {
Header *MovieHeader Header *MovieHeader
Tracks []*Track Tracks []*Track
@ -399,6 +442,63 @@ func WriteTrackHeader(w io.WriteSeeker, self *TrackHeader) (err error) {
return 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 { type Media struct {
Header *MediaHeader Header *MediaHeader
Info *MediaInfo Info *MediaInfo