forked from Eyevinn/mp4ff
-
Notifications
You must be signed in to change notification settings - Fork 1
/
btrt.go
70 lines (58 loc) · 1.34 KB
/
btrt.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package mp4
import (
"encoding/binary"
"io"
"io/ioutil"
)
// BtrtBox - BitRateBox - ISO/IEC 14496-12 Section 8.5.2.2
type BtrtBox struct {
BufferSizeDB uint32
MaxBitrate uint32
AvgBitrate uint32
}
// DecodeBtrt - box-specific decode
func DecodeBtrt(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error) {
data, err := ioutil.ReadAll(r)
if err != nil {
return nil, err
}
b := &BtrtBox{
BufferSizeDB: binary.BigEndian.Uint32(data[0:4]),
MaxBitrate: binary.BigEndian.Uint32(data[4:8]),
AvgBitrate: binary.BigEndian.Uint32(data[8:12]),
}
return b, nil
}
// Type - return box type
func (b *BtrtBox) Type() string {
return "btrt"
}
// Size - return calculated size
func (b *BtrtBox) Size() uint64 {
return 20
}
// Encode - write box to w
func (b *BtrtBox) Encode(w io.Writer) error {
var err error
err = EncodeHeader(b, w)
if err != nil {
return err
}
write := func(b uint32) {
if err != nil {
return
}
err = binary.Write(w, binary.BigEndian, b)
}
write(b.BufferSizeDB)
write(b.MaxBitrate)
write(b.AvgBitrate)
return err
}
func (b *BtrtBox) Info(w io.Writer, specificBoxLevels, indent, indentStep string) error {
bd := newInfoDumper(w, indent, b, -1, 0)
bd.write(" - bufferSizeDB: %d", b.BufferSizeDB)
bd.write(" - maxBitrate: %d", b.MaxBitrate)
bd.write(" - AvgBitrate: %d", b.AvgBitrate)
return bd.err
}