Fit y4m into Decoder interface
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
ece3dfe96d
commit
7d6f41da35
|
@ -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"
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Reference in a new issue