fix the test

This commit is contained in:
Lei Kang
2025-09-12 16:32:50 -07:00
committed by Leo (Lei) Kang
parent 7fdafa9598
commit 0710906fc7
2 changed files with 40 additions and 29 deletions

View File

@@ -99,7 +99,6 @@ func NewDecoder(r io.Reader, p prop.Media) (codec.VideoDecoder, error) {
}
func (d *decoder) Read() (image.Image, func(), error) {
n, err := d.reader.Read(d.buf)
if err != nil {
return nil, nil, err
@@ -107,7 +106,7 @@ func (d *decoder) Read() (image.Image, func(), error) {
if n > 0 {
status := C.decodeFrame(d.codec, (*C.uint8_t)(&d.buf[0]), C.uint(n))
if status != C.VPX_CODEC_OK {
return nil, nil, fmt.Errorf("Decode failed: %v", status)
return nil, nil, fmt.Errorf("decode failed: %v", status)
}
}

View File

@@ -6,6 +6,7 @@ import (
"io"
"math"
"math/rand"
"sync"
"sync/atomic"
"testing"
"time"
@@ -449,7 +450,7 @@ func TestVP8EncodeDecode(t *testing.T) {
}
p.LagInFrames = 0 // Disable frame lag buffering for real-time encoding
p.RateControlEndUsage = RateControlCBR
totalFrames := 100
totalFrames := 10
var cnt uint32
r, err := p.BuildVideoEncoder(
video.ReaderFunc(func() (image.Image, func(), error) {
@@ -473,36 +474,47 @@ func TestVP8EncodeDecode(t *testing.T) {
t.Fatal(err)
}
data, rel, err := r.Read()
if err != nil {
t.Fatal(err)
}
defer rel()
var wg sync.WaitGroup
wg.Add(1)
// Decode the frame
writer.Write(data)
writer.Close()
// Poll for frame with timeout
timeout := time.After(2 * time.Second)
ticker := time.NewTicker(10 * time.Millisecond)
defer ticker.Stop()
for {
select {
case <-timeout:
t.Fatal("Timeout: No frame received within 2 seconds")
case <-ticker.C:
frame, rel, err := decoder.Read()
counter := 0
go func() {
defer wg.Done()
for {
img, rel, err := decoder.Read()
if err == io.EOF {
return
}
if err != nil {
t.Fatal(err)
}
defer rel()
if frame != nil {
t.Log("Successfully received and decoded frame")
return // Test passes
t.Errorf("decoder read error: %v", err)
return
}
assert.Equal(t, initialWidth, img.Bounds().Dx())
assert.Equal(t, initialHeight, img.Bounds().Dy())
rel()
counter++
}
}()
// --- feed encoded frames to writer
for {
data, rel, err := r.Read()
if err == io.EOF {
break
}
if err != nil {
t.Fatalf("encoder error: %v", err)
}
_, werr := writer.Write(data)
rel()
if werr != nil {
t.Fatalf("writer error: %v", werr)
}
}
writer.Close()
// ✅ wait until decoder goroutine is done
wg.Wait()
assert.Equal(t, counter, totalFrames)
})
}