mirror of
https://github.com/langhuihui/monibuca.git
synced 2025-12-24 13:48:04 +08:00
64 lines
1.5 KiB
Go
64 lines
1.5 KiB
Go
package box
|
|
|
|
import (
|
|
"encoding/binary"
|
|
"io"
|
|
)
|
|
|
|
// Box Types: 'vmhd', 'smhd', 'hmhd', 'nmhd'
|
|
// Container: Media Information Box ('minf')
|
|
// Mandatory: Yes
|
|
// Quantity: Exactly one specific media header shall be present
|
|
|
|
// aligned(8) class VideoMediaHeaderBox
|
|
// extends FullBox('vmhd', version = 0, 1) {
|
|
// template unsigned int(16) graphicsmode = 0; // copy, see below template
|
|
// unsigned int(16)[3] opcolor = {0, 0, 0};
|
|
// }
|
|
|
|
type VideoMediaHeaderBox struct {
|
|
FullBox
|
|
Graphicsmode uint16
|
|
Opcolor [3]uint16
|
|
}
|
|
|
|
func CreateVideoMediaHeaderBox() *VideoMediaHeaderBox {
|
|
return &VideoMediaHeaderBox{
|
|
FullBox: FullBox{
|
|
BaseBox: BaseBox{
|
|
typ: TypeVMHD,
|
|
size: uint32(FullBoxLen + 8),
|
|
},
|
|
Version: 0,
|
|
Flags: [3]byte{0, 0, 1}, // Flags = 1
|
|
},
|
|
}
|
|
}
|
|
|
|
func (box *VideoMediaHeaderBox) WriteTo(w io.Writer) (n int64, err error) {
|
|
var tmp [8]byte
|
|
binary.BigEndian.PutUint16(tmp[0:], box.Graphicsmode)
|
|
binary.BigEndian.PutUint16(tmp[2:], box.Opcolor[0])
|
|
binary.BigEndian.PutUint16(tmp[4:], box.Opcolor[1])
|
|
binary.BigEndian.PutUint16(tmp[6:], box.Opcolor[2])
|
|
|
|
nn, err := w.Write(tmp[:])
|
|
n = int64(nn)
|
|
return
|
|
}
|
|
|
|
func (box *VideoMediaHeaderBox) Unmarshal(buf []byte) (IBox, error) {
|
|
if len(buf) < 8 {
|
|
return nil, io.ErrShortBuffer
|
|
}
|
|
box.Graphicsmode = binary.BigEndian.Uint16(buf[0:])
|
|
box.Opcolor[0] = binary.BigEndian.Uint16(buf[2:])
|
|
box.Opcolor[1] = binary.BigEndian.Uint16(buf[4:])
|
|
box.Opcolor[2] = binary.BigEndian.Uint16(buf[6:])
|
|
return box, nil
|
|
}
|
|
|
|
func init() {
|
|
RegisterBox[*VideoMediaHeaderBox](TypeVMHD)
|
|
}
|