From 1d810df00cf8fc24d7fb0f4349cbcaf9818134a9 Mon Sep 17 00:00:00 2001 From: Varun Patil Date: Thu, 25 Apr 2024 11:37:46 -0700 Subject: [PATCH] go-vod: add software transpose config Signed-off-by: Varun Patil --- go-vod/transcoder/config.go | 2 ++ go-vod/transcoder/stream.go | 4 ++-- lib/Service/BinExt.php | 1 + lib/Settings/SystemConfig.php | 1 + src/components/admin/AdminTypes.ts | 1 + src/components/admin/sections/VideoAccel.vue | 15 +++++++++++++++ 6 files changed, 22 insertions(+), 2 deletions(-) diff --git a/go-vod/transcoder/config.go b/go-vod/transcoder/config.go index 526ed890f..27daac5dd 100644 --- a/go-vod/transcoder/config.go +++ b/go-vod/transcoder/config.go @@ -58,6 +58,8 @@ type Config struct { // Use transpose workaround for streaming (VA-API) UseTranspose bool `json:"useTranspose"` + // Force tranpose in software + ForceSwTranspose bool `json:"forceSwTranspose"` // Use GOP size workaround for streaming (NVENC) UseGopSize bool `json:"useGopSize"` diff --git a/go-vod/transcoder/stream.go b/go-vod/transcoder/stream.go index 31e363346..1a85a0c7e 100644 --- a/go-vod/transcoder/stream.go +++ b/go-vod/transcoder/stream.go @@ -441,9 +441,9 @@ func (s *Stream) transcodeArgs(startAt float64, isHls bool) []string { // Force rotation in software instead. // For example, if we desire not to use transpose_vaapi for some reason. - forceSwTranspose := transposer != "transpose" && (false || transposer == "transpose_cuda") + forceSwTranspose := transposer != "transpose" && (s.c.ForceSwTranspose || transposer == "transpose_cuda") - // If we are forcing software, download the video and rotate it + // Use CPU transpose if forcing software if forceSwTranspose { transposer = "transpose" } diff --git a/lib/Service/BinExt.php b/lib/Service/BinExt.php index 595fd6d4e..1473da289 100644 --- a/lib/Service/BinExt.php +++ b/lib/Service/BinExt.php @@ -186,6 +186,7 @@ public static function getGoVodConfig(bool $local = false): array 'nvencScale' => SystemConfig::get('memories.vod.nvenc.scale'), 'useTranspose' => SystemConfig::get('memories.vod.use_transpose'), + 'forceSwTranspose' => SystemConfig::get('memories.vod.use_transpose.force_sw'), 'useGopSize' => SystemConfig::get('memories.vod.use_gop_size'), ]; diff --git a/lib/Settings/SystemConfig.php b/lib/Settings/SystemConfig.php index 76b74d764..7814f0718 100644 --- a/lib/Settings/SystemConfig.php +++ b/lib/Settings/SystemConfig.php @@ -62,6 +62,7 @@ class SystemConfig // Extra streaming configuration 'memories.vod.use_transpose' => false, + 'memories.vod.use_transpose.force_sw' => false, 'memories.vod.use_gop_size' => false, // Paths to ffmpeg and ffprobe binaries diff --git a/src/components/admin/AdminTypes.ts b/src/components/admin/AdminTypes.ts index dde7ff6e7..64eede079 100644 --- a/src/components/admin/AdminTypes.ts +++ b/src/components/admin/AdminTypes.ts @@ -30,6 +30,7 @@ export type ISystemConfig = { 'memories.vod.nvenc.scale': string; 'memories.vod.use_transpose': boolean; + 'memories.vod.use_transpose.force_sw': boolean; 'memories.vod.use_gop_size': boolean; 'memories.db.triggers.fcu': boolean; diff --git a/src/components/admin/sections/VideoAccel.vue b/src/components/admin/sections/VideoAccel.vue index bfb8918db..bf2344080 100644 --- a/src/components/admin/sections/VideoAccel.vue +++ b/src/components/admin/sections/VideoAccel.vue @@ -112,6 +112,12 @@ 'Due to a bug in certain hardware drivers, videos may appear in incorrect orientations when streaming. This can be resolved in some cases by rotating the video on the accelerator.', ) }} + {{ + t( + 'memories', + 'Some drivers (e.g. AMD and older Intel) do not support hardware accelerated rotation. You can attempt to force software-based transpose in this case.', + ) + }}
{{ t('memories', 'Try this option only if you have incorrectly oriented videos during playback.') }} @@ -126,6 +132,15 @@ {{ t('memories', 'Enable streaming transpose workaround') }} + + {{ t('memories', 'Force transpose in software') }} + + {{ t('memories', 'Some NVENC devices have issues with force_key_frames.') }}
{{ t('memories', 'Try this option only if you use NVENC and have issues with video playback.') }}