V210 issue fix + correct packing
This commit is contained in:
@@ -26,7 +26,7 @@ func TestNewCPUGeneratorValidation(t *testing.T) {
|
||||
}{
|
||||
{name: "zero width", height: 1, renderer: renderer, wantErrSub: "greater than zero"},
|
||||
{name: "zero height", width: 6, renderer: renderer, wantErrSub: "greater than zero"},
|
||||
{name: "unaligned width", width: 7, height: 1, renderer: renderer, wantErrSub: "divisible by 6"},
|
||||
{name: "odd width", width: 7, height: 1, renderer: renderer, wantErrSub: "even"},
|
||||
{name: "nil renderer", width: 6, height: 1, wantErrSub: "renderer is nil"},
|
||||
}
|
||||
for _, tc := range tests {
|
||||
@@ -54,7 +54,7 @@ func TestCPUGeneratorCopiesBaseAndRestoresBeforePatch(t *testing.T) {
|
||||
t.Fatalf("NewCPUGenerator: %v", err)
|
||||
}
|
||||
|
||||
frame := make([]byte, 32)
|
||||
frame := make([]byte, V210FrameSize(12, 1))
|
||||
if err := g.GenerateFrame(frame, 1); err != nil {
|
||||
t.Fatalf("GenerateFrame(1): %v", err)
|
||||
}
|
||||
@@ -113,10 +113,35 @@ func TestCPUGeneratorErrors(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Fatalf("NewCPUGenerator: %v", err)
|
||||
}
|
||||
if err := g.GenerateFrame(make([]byte, 15), 0); err == nil || !strings.Contains(err.Error(), "too small") {
|
||||
if err := g.GenerateFrame(make([]byte, V210FrameSize(6, 1)-1), 0); err == nil || !strings.Contains(err.Error(), "too small") {
|
||||
t.Fatalf("small destination error = %v", err)
|
||||
}
|
||||
if err := g.GenerateFrame(make([]byte, 16), 4); !errors.Is(err, wantErr) {
|
||||
if err := g.GenerateFrame(make([]byte, V210FrameSize(6, 1)), 4); !errors.Is(err, wantErr) {
|
||||
t.Fatalf("patch error = %v, want wrapped %v", err, wantErr)
|
||||
}
|
||||
}
|
||||
|
||||
func TestCPUGeneratorUsesPaddedV210Rows(t *testing.T) {
|
||||
const width, height = 100, 2
|
||||
g, err := NewCPUPatternGenerator(width, height, "gray-ramp")
|
||||
if err != nil {
|
||||
t.Fatalf("NewCPUPatternGenerator: %v", err)
|
||||
}
|
||||
frame := make([]byte, V210FrameSize(width, height))
|
||||
if err := g.GenerateFrame(frame, 0); err != nil {
|
||||
t.Fatalf("GenerateFrame: %v", err)
|
||||
}
|
||||
|
||||
for y := 0; y < height; y++ {
|
||||
gotY, gotCb, gotCr := sampleV210(frame, width, 0, y)
|
||||
if gotY != 64 || gotCb != 512 || gotCr != 512 {
|
||||
t.Fatalf("row %d first pixel = %d/%d/%d, want 64/512/512", y, gotY, gotCb, gotCr)
|
||||
}
|
||||
padding := frame[y*V210LineSize(width)+V210ActiveLineSize(width) : (y+1)*V210LineSize(width)]
|
||||
for i, b := range padding {
|
||||
if b != 0 {
|
||||
t.Fatalf("row %d padding byte %d = %#x, want 0", y, i, b)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user