Fit y4m into Decoder interface
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
DataHoarder 2022-11-11 13:25:48 +01:00
parent ece3dfe96d
commit 7d6f41da35
Signed by: DataHoarder
SSH key fingerprint: SHA256:OLTRf6Fl87G52SiR7sWLGNzlJt4WOX+tfI2yxo0z7xk
5 changed files with 25 additions and 18 deletions

View file

@ -12,7 +12,7 @@ import (
"sync"
)
type Stream struct {
type Decoder struct {
r io.Reader
frameSeekTable []int64
parameters map[Parameter][]string
@ -41,8 +41,8 @@ const (
const fileMagic = "YUV4MPEG2 "
const frameMagic = "FRAME"
func New(reader io.Reader, settings map[string]any) (*Stream, error) {
s := &Stream{
func NewDecoder(reader io.Reader, settings map[string]any) (*Decoder, error) {
s := &Decoder{
r: reader,
parameters: make(map[Parameter][]string),
}
@ -62,11 +62,11 @@ func New(reader io.Reader, settings map[string]any) (*Stream, error) {
return s, nil
}
func (s *Stream) Properties() frame.StreamProperties {
func (s *Decoder) Properties() frame.StreamProperties {
return s.properties
}
func (s *Stream) SeekToFrame(frameNumber int) (err error) {
func (s *Decoder) SeekToFrame(frameNumber int) (err error) {
if seeker, ok := s.r.(io.Seeker); ok {
if frameNumber >= 0 && len(s.frameSeekTable) > frameNumber && s.frameSeekTable[frameNumber] != 0 {
if _, err = seeker.Seek(s.frameSeekTable[frameNumber], io.SeekStart); err != nil {
@ -84,11 +84,11 @@ func (s *Stream) SeekToFrame(frameNumber int) (err error) {
}
}
func (s *Stream) Decode() (frame.Frame, error) {
func (s *Decoder) Decode() (frame.Frame, error) {
_, f, err := s.GetFrame()
return f, err
}
func (s *Stream) DecodeStream() *frame.Stream {
func (s *Decoder) DecodeStream() *frame.Stream {
stream, channel := frame.NewStream(s.properties)
go func() {
defer close(channel)
@ -103,7 +103,7 @@ func (s *Stream) DecodeStream() *frame.Stream {
return stream
}
func (s *Stream) GetFrame() (parameters map[Parameter][]string, frameObject frame.Frame, err error) {
func (s *Decoder) GetFrame() (parameters map[Parameter][]string, frameObject frame.Frame, err error) {
var index int64
if seeker, ok := s.r.(io.Seeker); ok {
@ -153,7 +153,7 @@ func (s *Stream) GetFrame() (parameters map[Parameter][]string, frameObject fram
return
}
func (s *Stream) readHeader() (err error) {
func (s *Decoder) readHeader() (err error) {
var header [10]byte
if _, err = io.ReadFull(s.r, header[:]); err != nil {
return err
@ -190,7 +190,7 @@ func (s *Stream) readHeader() (err error) {
return nil
}
func (s *Stream) readFrameHeader() (parameters map[Parameter][]string, err error) {
func (s *Decoder) readFrameHeader() (parameters map[Parameter][]string, err error) {
var header [5]byte
if _, err = io.ReadFull(s.r, header[:]); err != nil {
return nil, err
@ -229,14 +229,14 @@ func (s *Stream) readFrameHeader() (parameters map[Parameter][]string, err error
return parameters, nil
}
func (s *Stream) readFrameData() (buf []byte, err error) {
func (s *Decoder) readFrameData() (buf []byte, err error) {
//TODO: reuse buffers, maybe channel?
buf = s.bufPool.Get().([]byte)
_, err = io.ReadFull(s.r, buf)
return buf, err
}
func (s *Stream) parseParameters() (err error) {
func (s *Decoder) parseParameters() (err error) {
for k, values := range s.parameters {
switch k {
case ParameterFrameWidth:
@ -303,6 +303,10 @@ func (s *Stream) parseParameters() (err error) {
return err
}
func (s *Stream) Version() string {
func (s *Decoder) Close() {
}
func (s *Decoder) Version() string {
return "y4m"
}

View file

@ -13,9 +13,10 @@ func TestDecodeYUV420_8bit(t *testing.T) {
}
defer f.Close()
if y4m, err := New(f, nil); err != nil {
if y4m, err := NewDecoder(f, nil); err != nil {
t.Fatal(err)
} else {
defer y4m.Close()
decoded := 0
for range y4m.DecodeStream().Channel() {
//ingest

View file

@ -23,9 +23,10 @@ func TestEncode(t *testing.T) {
}
defer f.Close()
if pipe, err := y4m.New(f, nil); err != nil {
if pipe, err := y4m.NewDecoder(f, nil); err != nil {
t.Fatal(err)
} else {
defer pipe.Close()
target, err := os.CreateTemp("", "encode_test_*.ivf")
if err != nil {
t.Fatal(err)

View file

@ -23,9 +23,10 @@ func TestEncode(t *testing.T) {
}
defer f.Close()
if pipe, err := y4m.New(f, nil); err != nil {
if pipe, err := y4m.NewDecoder(f, nil); err != nil {
t.Fatal(err)
} else {
defer pipe.Close()
target, err := os.CreateTemp("", "encode_test_*.h264")
if err != nil {
t.Fatal(err)

View file

@ -24,11 +24,11 @@ func TestDecodeYUV420_8bit(t *testing.T) {
}
defer distortedFile.Close()
referenceDecoder, err := y4m.New(referenceFile, nil)
referenceDecoder, err := y4m.NewDecoder(referenceFile, nil)
if err != nil {
t.Fatal(err)
}
//defer referenceDecoder.Close()
defer referenceDecoder.Close()
distortedDecoder, err := libdav1d.NewDecoder(distortedFile, nil)
if err != nil {