photoprism/internal/ffmpeg/vulkan/avc_test.go
Michael Mayer 5242964330 FFmpeg: Fix duplicate hwupload in Vulkan transcoding command #5631
encode.FormatNV12 already ends in hwupload, so appending it again produced
"format=nv12,hwupload,hwupload", which fails because the frames are already on
the GPU. Build the filter from FormatNV12 directly to upload exactly once, and
add a gated Vulkan case to the transcode command tests.
2026-05-30 20:14:14 +00:00

35 lines
1.4 KiB
Go

package vulkan
import (
"strings"
"testing"
"github.com/stretchr/testify/assert"
"github.com/photoprism/photoprism/internal/ffmpeg/encode"
)
func TestVulkan_TranscodeToAvcCmd_WithDevice(t *testing.T) {
opt := encode.NewVideoOptions("/usr/bin/ffmpeg", encode.VulkanAvc, 1500, encode.DefaultQuality, encode.PresetFast, "0", "0:v:0", "0:a:0?")
cmd := TranscodeToAvcCmd("SRC.mov", "DEST.mp4", opt)
s := cmd.String()
assert.True(t, strings.Contains(s, "-init_hw_device vulkan=vk:0"))
assert.True(t, strings.Contains(s, "-filter_hw_device vk"))
assert.True(t, strings.Contains(s, "format=nv12,hwupload"))
assert.False(t, strings.Contains(s, "hwupload,hwupload"))
assert.True(t, strings.Contains(s, "-c:v h264_vulkan"))
assert.True(t, strings.Contains(s, "-qp 25"))
assert.True(t, strings.Contains(s, "-f mp4"))
}
func TestVulkan_TranscodeToAvcCmd_NoDevice(t *testing.T) {
opt := encode.NewVideoOptions("/usr/bin/ffmpeg", encode.VulkanAvc, 1500, encode.DefaultQuality, encode.PresetFast, "", "0:v:0", "0:a:0?")
cmd := TranscodeToAvcCmd("SRC.mov", "DEST.mp4", opt)
s := cmd.String()
assert.True(t, strings.Contains(s, "-init_hw_device vulkan=vk "))
assert.False(t, strings.Contains(s, "vulkan=vk:"))
assert.True(t, strings.Contains(s, "-filter_hw_device vk"))
assert.True(t, strings.Contains(s, "format=nv12,hwupload"))
assert.False(t, strings.Contains(s, "hwupload,hwupload"))
assert.True(t, strings.Contains(s, "-c:v h264_vulkan"))
}