Skip to content

Commit 1ed63da

Browse files
committed
Fix VAAPI H264 input surface format
1 parent 091d9e3 commit 1ed63da

2 files changed

Lines changed: 8 additions & 2 deletions

File tree

internal/transcode/ffmpeg_args_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,8 +163,9 @@ func TestBuildFFmpegArgsUsesFullVAAPITranscodePipeline(t *testing.T) {
163163
if codecIndex < 0 || args[codecIndex+1] != "h264_vaapi" {
164164
t.Fatalf("expected VAAPI H.264 encoder, args=%v", args)
165165
}
166-
if slices.Contains(args, "-vf") {
167-
t.Fatalf("full VAAPI pipeline should not scale, args=%v", args)
166+
vfIndex := slices.Index(args, "-vf")
167+
if vfIndex < 0 || args[vfIndex+1] != "scale_vaapi=format=nv12" {
168+
t.Fatalf("full VAAPI pipeline should convert surfaces to NV12 with VAAPI, args=%v", args)
168169
}
169170
for _, softwareOnly := range []string{"libx264", "-preset", "-tune", "-level"} {
170171
if slices.Contains(args, softwareOnly) {

internal/transcode/manager.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1248,6 +1248,7 @@ func appendVideoTranscodeArgs(args []string, options FFmpegOptions) []string {
12481248
switch hardwarePipeline(options) {
12491249
case "vaapi-full":
12501250
return append(args,
1251+
"-vf", vaapiFormatFilter(),
12511252
"-c:v", "h264_vaapi",
12521253
"-low_power", "1",
12531254
"-g", strconv.Itoa(lowLatencyGOP),
@@ -1286,6 +1287,10 @@ func vaapiScaleFilter(width, height int) string {
12861287
return fmt.Sprintf("scale_vaapi=w=%d:h=%d:force_original_aspect_ratio=decrease:force_divisible_by=2:format=nv12", width, height)
12871288
}
12881289

1290+
func vaapiFormatFilter() string {
1291+
return "scale_vaapi=format=nv12"
1292+
}
1293+
12891294
func softwareScaleFilter(width, height int) string {
12901295
return fmt.Sprintf("scale=w=%d:h=%d:force_original_aspect_ratio=decrease:force_divisible_by=2", width, height)
12911296
}

0 commit comments

Comments
 (0)