mirror of
https://github.com/photoprism/photoprism.git
synced 2025-12-12 00:34:13 +01:00
40 lines
1.1 KiB
Go
40 lines
1.1 KiB
Go
package encode
|
|
|
|
import (
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/photoprism/photoprism/pkg/fs"
|
|
"github.com/photoprism/photoprism/pkg/txt"
|
|
)
|
|
|
|
// defaultAvcEncoder is the default FFmpeg AVC encoder if it has already been determined.
|
|
var defaultAvcEncoder = Encoder("")
|
|
|
|
// DefaultAvcEncoder determines and returns the default FFmpeg AVC encoder type:
|
|
func DefaultAvcEncoder() Encoder {
|
|
if defaultAvcEncoder != "" {
|
|
return defaultAvcEncoder
|
|
}
|
|
|
|
// See: https://docs.photoprism.app/getting-started/config-options/#docker-image
|
|
init := os.Getenv("PHOTOPRISM_INIT")
|
|
|
|
// See: https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/docker-specialized.html
|
|
dCap := os.Getenv("NVIDIA_DRIVER_CAPABILITIES")
|
|
vDev := os.Getenv("NVIDIA_VISIBLE_DEVICES")
|
|
|
|
// Check if a GPU is shared through the NVIDIA Container Toolkit.
|
|
switch {
|
|
case fs.DeviceExists("/dev/nvidia0") && !strings.Contains(init, "ffmpeg") &&
|
|
(dCap == "video" || dCap == "all") && (txt.IsUInt(vDev) || vDev == "all"):
|
|
// Enable Nvidia AVC encoder.
|
|
defaultAvcEncoder = NvidiaAvc
|
|
default:
|
|
// Use AVC software encoder.
|
|
defaultAvcEncoder = SoftwareAvc
|
|
}
|
|
|
|
return defaultAvcEncoder
|
|
}
|