src/server/internal/mediapeer/vp8_segment_test.go
1,213 bytes · 53 lines · capsule://quake0day/[email protected]
raw on github
package mediapeer
import "testing"
func isVP8Keyframe(payload []byte) bool {
return len(payload) > 0 && payload[0]&0x01 == 0
}
func TestEncodeRGBChunkToVP8SamplesUsesInterFramesInsideSegment(t *testing.T) {
t.Parallel()
const (
width = 32
height = 32
numFrames = 8
fps = 20
)
rgb := make([]byte, width*height*3*numFrames)
frameSize := width * height * 3
for f := 0; f < numFrames; f++ {
base := f * frameSize
for y := 0; y < height; y++ {
for x := 0; x < width; x++ {
i := base + (y*width+x)*3
rgb[i] = byte((x + f) % 256)
rgb[i+1] = byte((y + f) % 256)
rgb[i+2] = byte((x + y + f) % 256)
}
}
}
samples, err := EncodeRGBChunkToVP8SamplesWithBitrate(rgb, width, height, numFrames, fps, 500)
if err != nil {
t.Fatal(err)
}
if len(samples) < 2 {
t.Fatalf("got %d samples want at least 2", len(samples))
}
if !isVP8Keyframe(samples[0].Data) {
t.Fatalf("first VP8 sample should be a keyframe")
}
keyframes := 0
for _, sample := range samples {
if isVP8Keyframe(sample.Data) {
keyframes++
}
}
if keyframes == len(samples) {
t.Fatalf("all %d VP8 samples are keyframes; expected inter frames inside the segment", len(samples))
}
}