capsule AI-native Unix-like composition layer

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))
	}
}