mirror of
https://github.com/pion/mediadevices.git
synced 2025-09-27 04:46:10 +08:00
99 lines
2.2 KiB
Go
99 lines
2.2 KiB
Go
package mediadevices
|
|
|
|
import (
|
|
"image"
|
|
"testing"
|
|
|
|
"github.com/pion/mediadevices/pkg/io/audio"
|
|
"github.com/pion/mediadevices/pkg/io/video"
|
|
"github.com/pion/mediadevices/pkg/wave"
|
|
)
|
|
|
|
func TestDetectCurrentVideoProp(t *testing.T) {
|
|
resolution := image.Rect(0, 0, 4, 4)
|
|
first := image.NewRGBA(resolution)
|
|
first.Pix[0] = 1
|
|
second := image.NewRGBA(resolution)
|
|
second.Pix[0] = 2
|
|
|
|
isFirst := true
|
|
source := video.ReaderFunc(func() (image.Image, func(), error) {
|
|
if isFirst {
|
|
isFirst = true
|
|
return first, func() {}, nil
|
|
} else {
|
|
return second, func() {}, nil
|
|
}
|
|
})
|
|
|
|
broadcaster := video.NewBroadcaster(source, nil)
|
|
|
|
currentProp, err := detectCurrentVideoProp(broadcaster)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if currentProp.Width != resolution.Dx() {
|
|
t.Fatalf("Expect the actual width to be %d, but got %d", currentProp.Width, resolution.Dx())
|
|
}
|
|
|
|
if currentProp.Height != resolution.Dy() {
|
|
t.Fatalf("Expect the actual height to be %d, but got %d", currentProp.Height, resolution.Dy())
|
|
}
|
|
|
|
reader := broadcaster.NewReader(false)
|
|
img, _, err := reader.Read()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
rgba := img.(*image.RGBA)
|
|
if rgba.Pix[0] != 1 {
|
|
t.Fatal("Expect the frame after reading the current prop is not the first frame")
|
|
}
|
|
}
|
|
|
|
func TestDetectCurrentAudioProp(t *testing.T) {
|
|
info := wave.ChunkInfo{
|
|
Len: 4,
|
|
Channels: 2,
|
|
SamplingRate: 48000,
|
|
}
|
|
first := wave.NewInt16Interleaved(info)
|
|
first.Data[0] = 1
|
|
second := wave.NewInt16Interleaved(info)
|
|
second.Data[0] = 2
|
|
|
|
isFirst := true
|
|
source := audio.ReaderFunc(func() (wave.Audio, func(), error) {
|
|
if isFirst {
|
|
isFirst = true
|
|
return first, func() {}, nil
|
|
} else {
|
|
return second, func() {}, nil
|
|
}
|
|
})
|
|
|
|
broadcaster := audio.NewBroadcaster(source, nil)
|
|
|
|
currentProp, err := detectCurrentAudioProp(broadcaster)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if currentProp.ChannelCount != info.Channels {
|
|
t.Fatalf("Expect the actual channel count to be %d, but got %d", currentProp.ChannelCount, info.Channels)
|
|
}
|
|
|
|
reader := broadcaster.NewReader(false)
|
|
chunk, _, err := reader.Read()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
realChunk := chunk.(*wave.Int16Interleaved)
|
|
if realChunk.Data[0] != 1 {
|
|
t.Fatal("Expect the chunk after reading the current prop is not the first chunk")
|
|
}
|
|
}
|