File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -40,6 +40,36 @@ type Transcode struct {
4040 IdleTimeout time.Duration `json:"-"`
4141}
4242
43+ func (t * Transcode ) UnmarshalJSON (data []byte ) error {
44+ type transcodeAlias Transcode
45+ aux := struct {
46+ HardwareDecode json.RawMessage `json:"hardware_decode"`
47+ * transcodeAlias
48+ }{
49+ transcodeAlias : (* transcodeAlias )(t ),
50+ }
51+ if err := json .Unmarshal (data , & aux ); err != nil {
52+ return err
53+ }
54+ if len (aux .HardwareDecode ) == 0 || string (aux .HardwareDecode ) == "null" {
55+ return nil
56+ }
57+ var text string
58+ if err := json .Unmarshal (aux .HardwareDecode , & text ); err == nil {
59+ t .HardwareDecode = text
60+ return nil
61+ }
62+ var enabled bool
63+ if err := json .Unmarshal (aux .HardwareDecode , & enabled ); err == nil {
64+ if ! enabled {
65+ t .HardwareDecode = "false"
66+ return nil
67+ }
68+ return errors .New (`transcode.hardware_decode boolean true is not supported; use "vaapi"` )
69+ }
70+ return errors .New (`transcode.hardware_decode must be a string or false` )
71+ }
72+
4373type ClientProfile struct {
4474 Name string `json:"name"`
4575 Match []string `json:"match"`
Original file line number Diff line number Diff line change @@ -99,3 +99,23 @@ func TestLoadSupportsVAAPIHardwareDecode(t *testing.T) {
9999 t .Fatalf ("hardware device = %q" , cfg .Transcode .HardwareDevice )
100100 }
101101}
102+
103+ func TestLoadSupportsBooleanFalseHardwareDecode (t * testing.T ) {
104+ path := filepath .Join (t .TempDir (), "config.json" )
105+ err := os .WriteFile (path , []byte (`{
106+ "upstream": {"url": "http://upstream.local"},
107+ "transcode": {"hardware_decode": false}
108+ }` ), 0o600 )
109+ if err != nil {
110+ t .Fatal (err )
111+ }
112+
113+ cfg , err := config .Load (path )
114+ if err != nil {
115+ t .Fatal (err )
116+ }
117+
118+ if cfg .Transcode .HardwareDecode != "false" {
119+ t .Fatalf ("hardware decode = %q" , cfg .Transcode .HardwareDecode )
120+ }
121+ }
Original file line number Diff line number Diff line change @@ -247,6 +247,26 @@ func TestResolveHardwareDecodeFallsBackToSoftwareWhenProbeFails(t *testing.T) {
247247 }
248248}
249249
250+ func TestResolveHardwareDecodeFalseSkipsHardwareProbe (t * testing.T ) {
251+ called := false
252+ options , err := resolveHardwareDecodeOptionsStrict ("/definitely/missing/ffmpeg" , FFmpegOptions {
253+ HardwareDecode : "false" ,
254+ HardwareDevice : "/dev/dri/renderD128" ,
255+ }, func (string , FFmpegOptions ) error {
256+ called = true
257+ return errors .New ("probe should not run" )
258+ })
259+ if err != nil {
260+ t .Fatal (err )
261+ }
262+ if called {
263+ t .Fatal ("hardware probe should not run when hardware decode is false" )
264+ }
265+ if options .HardwareDecode != "" || options .HardwareDevice != "" {
266+ t .Fatalf ("expected software options, got %+v" , options )
267+ }
268+ }
269+
250270func TestDefaultHardwareProbeRejectsVAAPIWhenDeviceInitializationFails (t * testing.T ) {
251271 tempDir := t .TempDir ()
252272 ffmpegPath := filepath .Join (tempDir , "ffmpeg" )
You can’t perform that action at this time.
0 commit comments