mirror of
https://github.com/asticode/go-astiav.git
synced 2025-10-05 16:16:50 +08:00
Added real file scaling to scale tests
This commit is contained in:
@@ -48,7 +48,7 @@ func CreateSoftwareScaleContext(srcW, srcH int, srcFormat PixelFormat, dstW, dst
|
|||||||
ssc.dstW,
|
ssc.dstW,
|
||||||
ssc.dstH,
|
ssc.dstH,
|
||||||
ssc.dstFormat,
|
ssc.dstFormat,
|
||||||
C.int(ssc.flags),
|
ssc.flags,
|
||||||
nil, nil, nil,
|
nil, nil, nil,
|
||||||
)
|
)
|
||||||
if ssc.c == nil {
|
if ssc.c == nil {
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
package astiav_test
|
package astiav_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/asticode/go-astiav"
|
"github.com/asticode/go-astiav"
|
||||||
@@ -20,11 +21,11 @@ func TestSoftwareScaleContext(t *testing.T) {
|
|||||||
require.NotNil(t, f3)
|
require.NotNil(t, f3)
|
||||||
defer f3.Free()
|
defer f3.Free()
|
||||||
|
|
||||||
srcW := 320
|
srcW := 4
|
||||||
srcH := 280
|
srcH := 2
|
||||||
srcPixelFormat := astiav.PixelFormatYuv420P
|
srcPixelFormat := astiav.PixelFormatYuv420P
|
||||||
dstW := 640
|
dstW := 8
|
||||||
dstH := 480
|
dstH := 4
|
||||||
dstPixelFormat := astiav.PixelFormatRgba
|
dstPixelFormat := astiav.PixelFormatRgba
|
||||||
swscf1 := astiav.SoftwareScaleContextFlags(astiav.SoftwareScaleContextFlagBilinear)
|
swscf1 := astiav.SoftwareScaleContextFlags(astiav.SoftwareScaleContextFlagBilinear)
|
||||||
|
|
||||||
@@ -33,56 +34,78 @@ func TestSoftwareScaleContext(t *testing.T) {
|
|||||||
f1.SetPixelFormat(srcPixelFormat)
|
f1.SetPixelFormat(srcPixelFormat)
|
||||||
require.NoError(t, f1.AllocBuffer(1))
|
require.NoError(t, f1.AllocBuffer(1))
|
||||||
|
|
||||||
swsc, err := astiav.CreateSoftwareScaleContext(srcW, srcH, srcPixelFormat, dstW, dstH, dstPixelFormat, swscf1)
|
swsc1, err := astiav.CreateSoftwareScaleContext(srcW, srcH, srcPixelFormat, dstW, dstH, dstPixelFormat, swscf1)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer swsc.Free()
|
defer swsc1.Free()
|
||||||
|
require.Equal(t, dstH, swsc1.DestinationHeight())
|
||||||
|
require.Equal(t, dstPixelFormat, swsc1.DestinationPixelFormat())
|
||||||
|
w, h := swsc1.DestinationResolution()
|
||||||
|
require.Equal(t, w, dstW)
|
||||||
|
require.Equal(t, h, dstH)
|
||||||
|
require.Equal(t, dstW, swsc1.DestinationWidth())
|
||||||
|
require.Equal(t, swscf1, swsc1.Flags())
|
||||||
|
require.Equal(t, srcH, swsc1.SourceHeight())
|
||||||
|
require.Equal(t, srcPixelFormat, swsc1.SourcePixelFormat())
|
||||||
|
w, h = swsc1.SourceResolution()
|
||||||
|
require.Equal(t, w, srcW)
|
||||||
|
require.Equal(t, h, srcH)
|
||||||
|
require.Equal(t, srcW, swsc1.SourceWidth())
|
||||||
|
|
||||||
require.NoError(t, swsc.ScaleFrame(f1, f2))
|
require.NoError(t, swsc1.ScaleFrame(f1, f2))
|
||||||
require.Equal(t, dstH, f2.Height())
|
require.Equal(t, dstH, f2.Height())
|
||||||
require.Equal(t, dstW, f2.Width())
|
require.Equal(t, dstW, f2.Width())
|
||||||
require.Equal(t, dstPixelFormat, f2.PixelFormat())
|
require.Equal(t, dstPixelFormat, f2.PixelFormat())
|
||||||
|
|
||||||
dstW = 1024
|
dstW = 4
|
||||||
dstH = 576
|
dstH = 3
|
||||||
dstPixelFormat = astiav.PixelFormatYuv420P
|
dstPixelFormat = astiav.PixelFormatYuv420P
|
||||||
swscf2 := astiav.SoftwareScaleContextFlags(astiav.SoftwareScaleContextFlagPoint)
|
swscf2 := astiav.SoftwareScaleContextFlags(astiav.SoftwareScaleContextFlagPoint)
|
||||||
|
srcW = 2
|
||||||
|
srcH = 1
|
||||||
|
srcPixelFormat = astiav.PixelFormatRgba
|
||||||
|
|
||||||
require.Equal(t, swsc.Flags(), swscf1)
|
require.NoError(t, swsc1.SetDestinationHeight(dstH))
|
||||||
swsc.SetFlags(swscf2)
|
require.Equal(t, dstH, swsc1.DestinationHeight())
|
||||||
require.Equal(t, swsc.Flags(), swscf2)
|
require.NoError(t, swsc1.SetDestinationPixelFormat(dstPixelFormat))
|
||||||
|
require.Equal(t, dstPixelFormat, swsc1.DestinationPixelFormat())
|
||||||
|
require.NoError(t, swsc1.SetDestinationWidth(dstW))
|
||||||
|
require.Equal(t, dstW, swsc1.DestinationWidth())
|
||||||
|
dstW = 5
|
||||||
|
dstH = 4
|
||||||
|
require.NoError(t, swsc1.SetDestinationResolution(dstW, dstH))
|
||||||
|
w, h = swsc1.DestinationResolution()
|
||||||
|
require.Equal(t, w, dstW)
|
||||||
|
require.Equal(t, h, dstH)
|
||||||
|
require.NoError(t, swsc1.SetFlags(swscf2))
|
||||||
|
require.Equal(t, swsc1.Flags(), swscf2)
|
||||||
|
require.NoError(t, swsc1.SetSourceHeight(srcH))
|
||||||
|
require.Equal(t, srcH, swsc1.SourceHeight())
|
||||||
|
require.NoError(t, swsc1.SetSourcePixelFormat(srcPixelFormat))
|
||||||
|
require.Equal(t, srcPixelFormat, swsc1.SourcePixelFormat())
|
||||||
|
require.NoError(t, swsc1.SetSourceWidth(srcW))
|
||||||
|
require.Equal(t, srcW, swsc1.SourceWidth())
|
||||||
|
srcW = 3
|
||||||
|
srcH = 2
|
||||||
|
require.NoError(t, swsc1.SetSourceResolution(srcW, srcH))
|
||||||
|
w, h = swsc1.SourceResolution()
|
||||||
|
require.Equal(t, w, srcW)
|
||||||
|
require.Equal(t, h, srcH)
|
||||||
|
|
||||||
require.NoError(t, swsc.SetSourceWidth(f2.Width()))
|
f4, err := globalHelper.inputLastFrame("image-rgba.png", astiav.MediaTypeVideo)
|
||||||
require.Equal(t, swsc.SourceWidth(), f2.Width())
|
require.NoError(t, err)
|
||||||
require.NoError(t, swsc.SetSourceHeight(f2.Height()))
|
|
||||||
require.Equal(t, swsc.SourceHeight(), f2.Height())
|
|
||||||
|
|
||||||
newSourceW := 1280
|
f5 := astiav.AllocFrame()
|
||||||
newSourceH := 720
|
require.NotNil(t, f5)
|
||||||
require.NoError(t, swsc.SetSourceResolution(newSourceW, newSourceH))
|
defer f5.Free()
|
||||||
w, h := swsc.SourceResolution()
|
|
||||||
require.Equal(t, w, newSourceW)
|
|
||||||
require.Equal(t, h, newSourceH)
|
|
||||||
require.NoError(t, swsc.SetSourceResolution(f2.Width(), f2.Height()))
|
|
||||||
require.NoError(t, swsc.SetSourcePixelFormat(f2.PixelFormat()))
|
|
||||||
require.Equal(t, swsc.SourcePixelFormat(), f2.PixelFormat())
|
|
||||||
|
|
||||||
newDestW := 800
|
swsc2, err := astiav.CreateSoftwareScaleContext(f4.Width(), f4.Height(), f4.PixelFormat(), 512, 512, f4.PixelFormat(), astiav.NewSoftwareScaleContextFlags(astiav.SoftwareScaleContextFlagBilinear))
|
||||||
newDestH := 600
|
require.NoError(t, err)
|
||||||
require.NoError(t, swsc.SetDestinationWidth(dstW))
|
require.NoError(t, swsc2.ScaleFrame(f4, f5))
|
||||||
require.Equal(t, swsc.DestinationWidth(), dstW)
|
|
||||||
require.NoError(t, swsc.SetDestinationHeight(dstH))
|
|
||||||
require.Equal(t, swsc.DestinationHeight(), dstH)
|
|
||||||
require.NoError(t, swsc.SetDestinationResolution(newDestW, newDestH))
|
|
||||||
w, h = swsc.DestinationResolution()
|
|
||||||
require.Equal(t, w, newDestW)
|
|
||||||
require.Equal(t, h, newDestH)
|
|
||||||
require.NoError(t, swsc.SetDestinationResolution(dstW, dstH))
|
|
||||||
require.NoError(t, swsc.SetDestinationPixelFormat(dstPixelFormat))
|
|
||||||
require.Equal(t, swsc.DestinationPixelFormat(), dstPixelFormat)
|
|
||||||
|
|
||||||
require.NoError(t, swsc.ScaleFrame(f2, f3))
|
b1, err := f5.Data().Bytes(1)
|
||||||
require.Equal(t, dstW, f3.Width())
|
require.NoError(t, err)
|
||||||
require.Equal(t, dstH, f3.Height())
|
|
||||||
require.Equal(t, dstPixelFormat, f3.PixelFormat())
|
|
||||||
|
|
||||||
|
b2, err := os.ReadFile("testdata/image-rgba-upscaled-bytes")
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, b2, b1)
|
||||||
}
|
}
|
||||||
|
BIN
testdata/image-rgba-upscaled-bytes
vendored
Normal file
BIN
testdata/image-rgba-upscaled-bytes
vendored
Normal file
Binary file not shown.
Reference in New Issue
Block a user