Ignite/utilities/obuwriter/writer.go

55 lines
1.2 KiB
Go

package obuwriter
import (
"encoding/binary"
"git.gammaspectra.live/S.O.N.G/Ignite/utilities"
"io"
)
type Writer struct {
w io.Writer
}
func NewWriter(w io.Writer, width, height int, fourCC uint32, frameRate utilities.Ratio) (*Writer, error) {
if err := binary.Write(w, binary.LittleEndian, struct {
Magic [4]byte
Version uint16
HeaderSize uint16
FourCC uint32
Width uint16
Height uint16
Denominator uint32
Numerator uint32
Length uint32
Unused uint32
}{
Magic: [4]byte{'D', 'K', 'I', 'F'},
Version: 0,
HeaderSize: 32,
FourCC: fourCC,
Width: uint16(width),
Height: uint16(height),
Denominator: uint32(frameRate.Numerator),
Numerator: uint32(frameRate.Denominator),
Length: 0,
}); err != nil {
return nil, err
}
return &Writer{
w: w,
}, nil
}
func (w *Writer) WriteFrameBytes(pts uint64, data []byte) error {
if err := binary.Write(w.w, binary.LittleEndian, uint32(len(data))); err != nil {
return err
} else if err = binary.Write(w.w, binary.LittleEndian, uint64(pts)); err != nil {
return err
} else if _, err = w.w.Write(data); err != nil {
return err
}
return nil
}