alpha perfomance fix
This commit is contained in:
@@ -32,7 +32,7 @@ func (g *fakeFrameGenerator) Close() error {
|
||||
func TestV210AGeneratorLayoutAndAlpha(t *testing.T) {
|
||||
const width, height = 304, 200
|
||||
fill := &fakeFrameGenerator{}
|
||||
g, err := NewV210AGenerator(fill, width, height)
|
||||
g, err := NewV210AGenerator(fill, width, height, true)
|
||||
if err != nil {
|
||||
t.Fatalf("NewV210AGenerator: %v", err)
|
||||
}
|
||||
@@ -58,7 +58,7 @@ func TestV210AGeneratorLayoutAndAlpha(t *testing.T) {
|
||||
|
||||
func TestV210AGeneratorRestoresAlphaBase(t *testing.T) {
|
||||
const width, height = 304, 200
|
||||
g, err := NewV210AGenerator(&fakeFrameGenerator{}, width, height)
|
||||
g, err := NewV210AGenerator(&fakeFrameGenerator{}, width, height, true)
|
||||
if err != nil {
|
||||
t.Fatalf("NewV210AGenerator: %v", err)
|
||||
}
|
||||
@@ -82,13 +82,68 @@ func TestV210AGeneratorRestoresAlphaBase(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestV210AGeneratorCachesStaticFill(t *testing.T) {
|
||||
const width, height = 100, 20
|
||||
fill := &fakeFrameGenerator{}
|
||||
g, err := NewV210AGenerator(fill, width, height, false)
|
||||
if err != nil {
|
||||
t.Fatalf("NewV210AGenerator: %v", err)
|
||||
}
|
||||
if fill.calls != 1 {
|
||||
t.Fatalf("fill calls after construction = %d, want 1", fill.calls)
|
||||
}
|
||||
|
||||
dst := make([]byte, V210AFrameSize(width, height))
|
||||
for _, frameIndex := range []int{7, 19} {
|
||||
if err := g.GenerateFrame(dst, frameIndex); err != nil {
|
||||
t.Fatalf("GenerateFrame(%d): %v", frameIndex, err)
|
||||
}
|
||||
}
|
||||
if fill.calls != 1 {
|
||||
t.Errorf("fill calls after two frames = %d, want 1", fill.calls)
|
||||
}
|
||||
for i, b := range dst[:V210FrameSize(width, height)] {
|
||||
if b != 0 {
|
||||
t.Fatalf("cached fill byte %d = %#x, want frame-zero value 0", i, b)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestV210AGeneratorRegeneratesDynamicFill(t *testing.T) {
|
||||
const width, height = 100, 20
|
||||
fill := &fakeFrameGenerator{}
|
||||
g, err := NewV210AGenerator(fill, width, height, true)
|
||||
if err != nil {
|
||||
t.Fatalf("NewV210AGenerator: %v", err)
|
||||
}
|
||||
if fill.calls != 0 {
|
||||
t.Fatalf("fill calls after construction = %d, want 0", fill.calls)
|
||||
}
|
||||
|
||||
dst := make([]byte, V210AFrameSize(width, height))
|
||||
for _, frameIndex := range []int{7, 19} {
|
||||
if err := g.GenerateFrame(dst, frameIndex); err != nil {
|
||||
t.Fatalf("GenerateFrame(%d): %v", frameIndex, err)
|
||||
}
|
||||
}
|
||||
if fill.calls != 2 {
|
||||
t.Errorf("fill calls after two frames = %d, want 2", fill.calls)
|
||||
}
|
||||
if got := dst[0]; got != 19 {
|
||||
t.Errorf("dynamic fill byte = %#x, want frame-index value 0x13", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestV210AGeneratorErrors(t *testing.T) {
|
||||
if _, err := NewV210AGenerator(nil, 1920, 1080); err == nil || !strings.Contains(err.Error(), "nil") {
|
||||
if _, err := NewV210AGenerator(nil, 1920, 1080, false); err == nil || !strings.Contains(err.Error(), "nil") {
|
||||
t.Fatalf("nil fill error = %v", err)
|
||||
}
|
||||
|
||||
fillErr := errors.New("fill failed")
|
||||
g, err := NewV210AGenerator(&fakeFrameGenerator{generateErr: fillErr}, 100, 20)
|
||||
if _, err := NewV210AGenerator(&fakeFrameGenerator{generateErr: fillErr}, 100, 20, false); !errors.Is(err, fillErr) {
|
||||
t.Fatalf("static fill initialization error = %v, want wrapped %v", err, fillErr)
|
||||
}
|
||||
g, err := NewV210AGenerator(&fakeFrameGenerator{generateErr: fillErr}, 100, 20, true)
|
||||
if err != nil {
|
||||
t.Fatalf("NewV210AGenerator: %v", err)
|
||||
}
|
||||
@@ -103,7 +158,7 @@ func TestV210AGeneratorErrors(t *testing.T) {
|
||||
func TestV210AGeneratorClosesFill(t *testing.T) {
|
||||
closeErr := errors.New("close failed")
|
||||
fill := &fakeFrameGenerator{closeErr: closeErr}
|
||||
g, err := NewV210AGenerator(fill, 100, 20)
|
||||
g, err := NewV210AGenerator(fill, 100, 20, false)
|
||||
if err != nil {
|
||||
t.Fatalf("NewV210AGenerator: %v", err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user