File tree 4 files changed +84
-2
lines changed
4 files changed +84
-2
lines changed Original file line number Diff line number Diff line change @@ -49,6 +49,7 @@ func init() {
49
49
"meta" : DecodeMeta ,
50
50
"mdat" : DecodeMdat ,
51
51
"free" : DecodeFree ,
52
+ "name" : DecodeName ,
52
53
}
53
54
}
54
55
Original file line number Diff line number Diff line change
1
+ package mp4
2
+
3
+ import (
4
+ "io"
5
+ "io/ioutil"
6
+ )
7
+
8
+ // Name Box
9
+ //
10
+ // Status: not decoded
11
+ type NameBox struct {
12
+ notDecoded []byte
13
+ }
14
+
15
+ func DecodeName (r io.Reader ) (Box , error ) {
16
+ data , err := ioutil .ReadAll (r )
17
+ if err != nil {
18
+ return nil , err
19
+ }
20
+ return & NameBox {
21
+ notDecoded : data [:],
22
+ }, nil
23
+ }
24
+
25
+ func (b * NameBox ) Type () string {
26
+ return "name"
27
+ }
28
+
29
+ func (b * NameBox ) Size () int {
30
+ return BoxHeaderSize + 4 + len (b .notDecoded )
31
+ }
32
+
33
+ func (b * NameBox ) Encode (w io.Writer ) error {
34
+ err := EncodeHeader (b , w )
35
+ if err != nil {
36
+ return err
37
+ }
38
+ buf := makebuf (b )
39
+ copy (buf [:], b .notDecoded )
40
+ _ , err = w .Write (buf )
41
+ return err
42
+ }
Original file line number Diff line number Diff line change @@ -11,6 +11,7 @@ type TrakBox struct {
11
11
Tkhd * TkhdBox
12
12
Mdia * MdiaBox
13
13
Edts * EdtsBox
14
+ Udta * UdtaBox
14
15
}
15
16
16
17
func DecodeTrak (r io.Reader ) (Box , error ) {
@@ -27,6 +28,8 @@ func DecodeTrak(r io.Reader) (Box, error) {
27
28
t .Mdia = b .(* MdiaBox )
28
29
case "edts" :
29
30
t .Edts = b .(* EdtsBox )
31
+ case "udta" :
32
+ t .Udta = b .(* UdtaBox )
30
33
default :
31
34
return nil , ErrBadFormat
32
35
}
@@ -44,6 +47,9 @@ func (b *TrakBox) Size() int {
44
47
if b .Edts != nil {
45
48
sz += b .Edts .Size ()
46
49
}
50
+ if b .Udta != nil {
51
+ sz += b .Udta .Size ()
52
+ }
47
53
return sz + BoxHeaderSize
48
54
}
49
55
@@ -52,6 +58,9 @@ func (b *TrakBox) Dump() {
52
58
if b .Edts != nil {
53
59
b .Edts .Dump ()
54
60
}
61
+ // if b.Udta != nil {
62
+ // b.Udta.Dump()
63
+ // }
55
64
b .Mdia .Dump ()
56
65
}
57
66
@@ -70,5 +79,11 @@ func (b *TrakBox) Encode(w io.Writer) error {
70
79
return err
71
80
}
72
81
}
82
+ if b .Udta != nil {
83
+ err = b .Udta .Encode (w )
84
+ if err != nil {
85
+ return err
86
+ }
87
+ }
73
88
return b .Mdia .Encode (w )
74
89
}
Original file line number Diff line number Diff line change @@ -7,6 +7,7 @@ import "io"
7
7
// Contained in: Movie Box (moov) or Track Box (trak)
8
8
type UdtaBox struct {
9
9
Meta * MetaBox
10
+ Name * NameBox
10
11
}
11
12
12
13
func DecodeUdta (r io.Reader ) (Box , error ) {
@@ -19,6 +20,8 @@ func DecodeUdta(r io.Reader) (Box, error) {
19
20
switch b .Type () {
20
21
case "meta" :
21
22
u .Meta = b .(* MetaBox )
23
+ case "name" :
24
+ u .Name = b .(* NameBox )
22
25
default :
23
26
return nil , ErrBadFormat
24
27
}
@@ -31,13 +34,34 @@ func (b *UdtaBox) Type() string {
31
34
}
32
35
33
36
func (b * UdtaBox ) Size () int {
34
- return BoxHeaderSize + b .Meta .Size ()
37
+ sz := BoxHeaderSize
38
+ if b .Meta != nil {
39
+ sz += b .Meta .Size ()
40
+ }
41
+ if b .Name != nil {
42
+ sz += b .Name .Size ()
43
+ }
44
+ return sz
35
45
}
36
46
37
47
func (b * UdtaBox ) Encode (w io.Writer ) error {
38
48
err := EncodeHeader (b , w )
39
49
if err != nil {
40
50
return err
41
51
}
42
- return b .Meta .Encode (w )
52
+ if b .Meta != nil {
53
+ err = b .Meta .Encode (w )
54
+ if err != nil {
55
+ return err
56
+ }
57
+
58
+ }
59
+ if b .Name != nil {
60
+ err = b .Name .Encode (w )
61
+ if err != nil {
62
+ return err
63
+ }
64
+
65
+ }
66
+ return nil
43
67
}
You can’t perform that action at this time.
0 commit comments