X-Loop: help-debbugs@HIDDEN
Subject: bug#74748: Constructor created by define-configuration is slow (>25s) when many fields are defined
Resent-From: Tomas Volf <~@wolfsden.cz>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-guix@HIDDEN
Resent-Date: Mon, 09 Dec 2024 15:14:02 +0000
Resent-Message-ID: <handler.74748.B.17337572177802 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: report 74748
X-GNU-PR-Package: guix
X-GNU-PR-Keywords:
To: 74748 <at> debbugs.gnu.org
X-Debbugs-Original-To: bug-guix@HIDDEN
Received: via spool by submit <at> debbugs.gnu.org id=B.17337572177802
(code B ref -1); Mon, 09 Dec 2024 15:14:02 +0000
Received: (at submit) by debbugs.gnu.org; 9 Dec 2024 15:13:37 +0000
Received: from localhost ([127.0.0.1]:55169 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1tKfS5-00021m-0B
for submit <at> debbugs.gnu.org; Mon, 09 Dec 2024 10:13:37 -0500
Received: from lists.gnu.org ([209.51.188.17]:57498)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <~@wolfsden.cz>) id 1tKfS3-00021b-36
for submit <at> debbugs.gnu.org; Mon, 09 Dec 2024 10:13:35 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.90_1) (envelope-from <~@wolfsden.cz>) id 1tKfS2-0006E8-HN
for bug-guix@HIDDEN; Mon, 09 Dec 2024 10:13:34 -0500
Received: from wolfsden.cz ([37.205.8.62])
by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.90_1) (envelope-from <~@wolfsden.cz>) id 1tKfRv-00035R-Pg
for bug-guix@HIDDEN; Mon, 09 Dec 2024 10:13:33 -0500
Received: by wolfsden.cz (Postfix, from userid 104)
id 75F7933BDCD; Mon, 9 Dec 2024 15:13:21 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=wolfsden.cz; s=mail;
t=1733757201; bh=clVgEzu8oOaVALtgpBdL368zwsXxFNauJRITJcvMx0o=;
h=From:To:Subject:Date;
b=KblYvTRiCafywawnTTM00oM60QwJbtNC/795fwuakKBBHNtD0sSMdI/b4PiAAjW//
i2x5xOZcXcBlXVob4rAC8dE05ekTrYUGsuCak2bCR8anfCalfStSKhoXPBoxlMW104
zidUfICmeqwtIq/r4GRgX7miqVqtnN85ROq5CRtZSAGmz4eJ0sngs59rQK81tTzBdE
HydPz4omRJiUxJJxYYWdLhJ3VE6ys61iMe/Q4tfDSDymidi3YF98cHpvqgVoRmeT1J
mVPyaAVkUN36OjLBtDV1AzXz6kKBeF5I/pcpXrr4CNapqsY82N5qfwr17Buk0KT/N1
iD6J9OQyN5T278tFtL/KHlIgSNU98b5mvbfozJCgAG/hAoEMSLiAIUMtT1kd+6lyXY
/P8ngmdcXs5QZaIcWOLGNixT4hDTsOm0PvJdxFpRfg+i/nKrDlWS7cLvqaYLWk4wzH
5TZnbKSwavWkJYtS9bxRYoHVKQkguavKFZs8e2rYKenNVeZGYY9siTpoKVbyXGQDpk
9jLrZ99dkMqI33TT5iLn85hyEu36YfOXoY1Wzb5jj0wyHwpso/80XUchDNMNCOgkV/
kcNIJojr1dgayHpflDHhpL8UlFZqU+T63v7X2ZaswnIq2HuDG9vbj+rbbWGmCIJLUS
3emIgryu+71R2pVGvVw114eE=
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on wolfsden
X-Spam-Level:
X-Spam-Status: No, score=-3.1 required=5.0 tests=ALL_TRUSTED,BAYES_00,
DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,URIBL_BLOCKED
autolearn=ham autolearn_force=no version=3.4.6
Received: from localhost (unknown [128.0.188.242])
by wolfsden.cz (Postfix) with ESMTPSA id 5498A33B35B
for <bug-guix@HIDDEN>; Mon, 9 Dec 2024 15:13:18 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=wolfsden.cz; s=mail;
t=1733757198; bh=clVgEzu8oOaVALtgpBdL368zwsXxFNauJRITJcvMx0o=;
h=From:To:Subject:Date;
b=H9UhpBS4Fcj1t96I29B2wt+YeQjfTx4LcIuHTQ+OW9lXqqOyIP0WcCUwuX2XAaxUr
OkmtZoqKkT2gXguxqBJVBZcmDrZPfkiQV1pF2lHEoLUQOAviCvyh0lxZ3ZRb9g44KQ
ez+rVOlkjzTpWYgNNJb7CqSUvnQfrtsGWdpRHa1XWQ7fCJLDnyL6tK6q92Ohdm5/AV
AaifmrcVAbn5Os+GC16/tGbPOctcYYZ8xMTV1ZnoRpes1Ndx6KxmAXPI6DJ3D1MMsd
QPexvOAl5z1wQNYByOQe7g4xmQ8SCgzaNUJDQo9/e2wNi1U+kmTKZRkoh61E0PtZdf
occnobMaCjq6XZJ5k3tc3/BBz4x4E+oyqNn3GwXJiYd2zmIcaOguG4BqdwsKhKo1TD
KWWAa/wNqCv1SOQGgnVymucv1guASk06mo8rf4knNDkKXrxIUt9g2XqvxRET3LsdPB
w2JE3Zfjg5ooJJfjUVzyAC+1gt0dtgIO7zxfT/oQO0h/DehMrXVannQuJIymxMnQIR
EmkIx5WRGcpvMKnStQA8k4K/DX40qBWYyx2QO33SWV1U1ygLUXNqqRc+lT5bUFGcwC
AJqkPF4xy3IZTZtY+j6jIAOAPoSLMeQjj6OWUfKis6bFUd+kRKpcCGdyFgmWog1yEq
0SattK+3WOaZGuHXJG+QkTOU=
From: Tomas Volf <~@wolfsden.cz>
Date: Mon, 09 Dec 2024 16:13:16 +0100
Message-ID: <87msh499f7.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="==-=-=";
micalg=pgp-sha512; protocol="application/pgp-signature"
Received-SPF: pass client-ip=37.205.8.62; envelope-from=~@wolfsden.cz;
helo=wolfsden.cz
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001,
SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
--==-=-=
Content-Type: multipart/mixed; boundary="=-=-="
--=-=-=
Content-Type: text/plain
Content-Transfer-Encoding: quoted-printable
Hello,
I am writing a configuration for mpv and hit an issue of the generated
constructor (`home-mpv-configuration') is extremely slow. While the
almost 800 fields is unusually high, initializing the instances of the
record should *not* take almost 30 seconds. The full file is attached
to this email (as `mpv.scm').
=2D-8<---------------cut here---------------start------------->8---
scheme@(guix-user)> ,use (gnu home services mpv)
scheme@(guix-user)> ,t (and (home-mpv-configuration (global (mpv-profile-co=
nfiguration (fullscreen #t)))) #t)=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20
$1 =3D #t
;; 29.615315s real time, 50.896973s run time. 24.031723s spent in GC.
=2D-8<---------------cut here---------------end--------------->8---
Interestingly, profiling does not give us anything useful:
=2D-8<---------------cut here---------------start------------->8---
scheme@(guix-user)> ,pr (and (home-mpv-configuration (global (mpv-profile-c=
onfiguration (fullscreen #t)))) #t)=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20
No samples recorded.
=2D-8<---------------cut here---------------end--------------->8---
I also tried to remove all my custom sanitizers, to make sure the issue
is not in my code, but that did not help.
I took a short look, but code of both the define-configuration and of
Guix records is complex, full of syntax magic and I did not have any
luck trying to debug it myself. Hence this report.
Have a nice day,
Tomas
--=-=-=
Content-Type: text/x-guile; charset=utf-8
Content-Disposition: attachment; filename=mpv.scm
Content-Transfer-Encoding: quoted-printable
Content-Description: Reproducer.
;;; GNU Guix --- Functional package management for GNU
;;; Copyright =C2=A9 2024 Tomas Volf <~@wolfsden.cz>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (gnu home services mpv)
#:use-module (gnu home services)
#:use-module (gnu services configuration)
#:use-module (guix gexp)
#:use-module (ice-9 match)
#:use-module (ice-9 regex)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-2)
#:use-module (srfi srfi-26)
#:use-module (srfi srfi-71)
#:export (home-mpv-configuration
home-mpv-configuration?
home-mpv-configuration-global
home-mpv-configuration-profiles
home-mpv-configuration-extra
home-mpv-configuration-source-location
mpv-profile-configuration
mpv-profile-configuration?
mpv-profile-configuration-source-location
;; Generated exports - START.
;; Generated exports - END.
))
;;;
;;; Basic types.
;;;
(define-maybe type/boolean)
(define (serialize-type/boolean field-name value)
#~(string-append #$(symbol->string field-name)
"=3D"
#$(if value "yes" "no")
"\n"))
(define type/boolean?
(const #t))
(define-maybe type/integer)
(define (serialize-type/integer field-name value)
#~(string-append #$(symbol->string field-name)
"=3D"
#$(number->string value)
"\n"))
(define (type/integer? n)
;; We assume integer is a signed 32bit number.
(and-let* (((integer? n))
((>=3D n -2147483648))
((<=3D n 2147483647)))))
(define-maybe type/integer64)
(define (serialize-type/integer64 field-name value)
#~(string-append #$(symbol->string field-name)
"=3D"
#$(number->string value)
"\n"))
(define (type/integer64? n)
;; We assume integer is a signed 64bit number.
(and-let* (((integer? n))
((>=3D n -9223372036854775808))
((<=3D n 9223372036854775807)))))
(define-maybe type/string)
(define (serialize-type/string field-name value)
#~(string-append #$(symbol->string field-name)
"=3D"
#$value
"\n"))
(define type/string?
string?)
(define-maybe type/float)
(define (serialize-type/float field-name value)
#~(string-append #$(symbol->string field-name)
"=3D"
#$(number->string (exact->inexact value))
"\n"))
(define type/float?
;; I am not sure how to validate floats.
real?)
(define-maybe type/double)
(define (serialize-type/double field-name value)
#~(string-append #$(symbol->string field-name)
"=3D"
#$(number->string (exact->inexact value))
"\n"))
(define (type/double? value)
;; I am not sure how to validate doubles.
real?)
;;;
;;; Additional types (possible based on the basic ones).
;;;
;;; Aspect seems to be treated as an integer, so define it in terms of it.
(define-maybe type/aspect)
(define serialize-type/aspect serialize-type/integer)
(define type/aspect? type/integer?)
;;; `Audio channels or channel map' seems to be basically a free form string
;;; with no way to validate.
(define-maybe type/audio-channels-or-channel-map)
(define serialize-type/audio-channels-or-channel-map serialize-type/string)
(define type/audio-channels-or-channel-map? type/string?)
;;; Does not seem possible to validate.
(define-maybe type/audio-format)
(define serialize-type/audio-format serialize-type/string)
(define type/audio-format? type/string?)
;;; While most options list 4.6116860184274e+18 as a maximum value, we will
;;; use integer64 here. That should be enough for everyone for few more
;;; years.
(define-maybe type/byte-size)
(define serialize-type/byte-size serialize-type/integer64)
(define type/byte-size? type/integer64?)
(define-maybe type/color)
(define (serialize-type/color field-name value)
#~(string-append #$(symbol->string field-name)
"=3D"
#$(if (list? value)
(string-join (map number->string value) "/")
value)
"\n"))
(define (type/color? value)
(define (ok-num? n)
(and (number? n)
(>=3D n 0)
(<=3D n 1)))
(if (list? value)
;; Either a list of 3(4) numbers encoding RGB(A) on range from 0 to 1=
...
(match value
(((? ok-num? r) (? ok-num? g) (? ok-num? b))
#t)
(((? ok-num? r) (? ok-num? g) (? ok-num? b) (? ok-num? alpha))
#t)
(_
#f))
;; ... or RGB(A) hex encoding.
(string-match "^#([A-Fa-f0-9]{2})?[A-Fa-f0-9]{6}$" value)))
;;; I do not see value mirroring fourcc.org's database here. It is further
;;; complicated by arbitrary hex being accepted as well. So string it is.
(define-maybe type/fourcc)
(define serialize-type/fourcc serialize-type/string)
(define type/fourcc? type/string?)
;;; No way to validate.
(define-maybe type/image-format)
(define serialize-type/image-format serialize-type/string)
(define type/image-format? type/string?)
;;; Looking at the documentation for --start, there is no way to make this
;;; bullet-proof, especially since even chapter numbers are accepted.
(define-maybe type/relative-time-or-percent-position)
(define serialize-type/relative-time-or-percent-position serialize-type/str=
ing)
(define type/relative-time-or-percent-position? type/string?)
(define-maybe type/time)
(define serialize-type/time serialize-type/string)
(define type/time? type/string?)
(define-maybe type/video-rectangle)
(define serialize-type/video-rectangle serialize-type/string)
(define (type/video-rectangle? value)
(or (string-match "-?[0-9]+%?:-?[0-9]+%?" value)
(string-match
"^(-?[0-9]+%?(x-?[0-9]+%?)?)?([+-]-?[0-9]+%?[+-]-?[0-9]+%?)?$"
value)))
(define-maybe type/window-geometry)
(define serialize-type/window-geometry serialize-type/string)
(define (type/window-geometry? value)
(or (string-match "-?[0-9]+%?:-?[0-9]+%?" value)
(string-match
"^(-?[0-9]+%?(x-?[0-9]+%?)?)?([+-]-?[0-9]+%?[+-]-?[0-9]+%?)?(/[0-9]+=
)?$"
value)))
(define-maybe type/window-size)
(define serialize-type/window-size serialize-type/string)
(define (type/window-size? value)
(string-match "^([0-9]+%?(x[0-9]+%?)?)?$" value))
(define-maybe type/enumeration)
(define (serialize-type/enumeration field-name value)
#~(string-append #$(symbol->string field-name)
"=3D"
;; This could be either symbol or (in case of enumeratio=
ns
;; with alternate type) anything. So just use `format'.
#$(format #f "~s" value)
"\n"))
(define (type/enumeration? value)
;; There is no general way to check enumerations. The field always has to
;; define custom sanitizer.
#t)
;;;
;;; List types.
;;;
(define-maybe type/list-of-string)
(define (serialize-type/list-of-string field-name lst)
#~(string-append #$(symbol->string field-name)
"=3D"
#$(string-join lst ",")
"\n"))
(define (type/list-of-string? lst)
(every type/string? lst))
(define-maybe type/list-of-key-value)
(define (serialize-type/list-of-key-value field-name lst)
#~(string-append #$(symbol->string field-name)
"=3D"
#$(string-join (map (match-lambda
((k . v) (format #f "~a=3D~a" k v)=
))
lst)
",")
"\n"))
(define (type/list-of-key-value? lst)
(every (match-lambda
(((? string?) . (? string?)) #t)
(_ #f))
lst))
(define-maybe type/list-of-object-setting)
(define serialize-type/list-of-object-setting serialize-type/list-of-string)
(define type/list-of-object-setting? type/list-of-string?)
(define-maybe type/list-of-output-verbosity)
(define serialize-type/list-of-output-verbosity serialize-type/list-of-key-=
value)
(define type/list-of-output-verbosity? type/list-of-key-value?)
;;;
;;; Actual configuration record. Contains a lot of generated code.
;;;
;;; Generated code - START.
(define-configuration
mpv-profile-configuration
(ab-loop-a maybe-type/time "")
(ab-loop-b maybe-type/time "")
(ab-loop-count
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(or (memq val '(inf))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 2147483647))))))))
(access-references maybe-type/boolean "")
(ad maybe-type/string "")
(ad-lavc-ac3drc
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 6))))))
(ad-lavc-downmix maybe-type/boolean "")
(ad-lavc-o maybe-type/list-of-key-value "")
(ad-lavc-threads
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 16))))))
(ad-queue-enable maybe-type/boolean "")
(ad-queue-max-bytes
maybe-type/byte-size
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/byte-size? val)
(>=3D val 0)
(<=3D val 4.6116860184274e18))))))
(ad-queue-max-samples
maybe-type/integer64
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer64? val)
(>=3D val 0)
(<=3D val +inf.0))))))
(ad-queue-max-secs
maybe-type/double
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/double? val)
(>=3D val 0)
(<=3D val +inf.0))))))
(af maybe-type/list-of-object-setting "")
(audio maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(or (memq val '(no auto))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 8190))))))))
(alang maybe-type/list-of-string "")
(allow-delayed-peak-detect maybe-type/boolean "")
(alsa-buffer-time
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 2147483647))))))
(alsa-ignore-chmap maybe-type/boolean "")
(alsa-mixer-device maybe-type/string "")
(alsa-mixer-index
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 99))))))
(alsa-mixer-name maybe-type/string "")
(alsa-non-interleaved maybe-type/boolean "")
(alsa-periods
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 2147483647))))))
(alsa-resample maybe-type/boolean "")
(ao maybe-type/list-of-object-setting "")
(ao-null-broken-delay maybe-type/boolean "")
(ao-null-broken-eof maybe-type/boolean "")
(ao-null-buffer
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 100))))))
(ao-null-channel-layouts
maybe-type/audio-channels-or-channel-map
"")
(ao-null-format maybe-type/audio-format "")
(ao-null-latency
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 100))))))
(ao-null-outburst
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 1)
(<=3D val 100000))))))
(ao-null-speed
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 10000))))))
(ao-null-untimed maybe-type/boolean "")
(ao-pcm-append maybe-type/boolean "")
(ao-pcm-file maybe-type/string "")
(ao-pcm-waveheader maybe-type/boolean "")
(audio-backward-batch
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 1024))))))
(audio-backward-overlap
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(or (memq val '(auto))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 1024))))))))
(audio-buffer
maybe-type/double
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/double? val)
(>=3D val 0)
(<=3D val 10))))))
(audio-channels
maybe-type/audio-channels-or-channel-map
"")
(audio-client-name maybe-type/string "")
(audio-delay maybe-type/float "")
(audio-demuxer maybe-type/string "")
(audio-device maybe-type/string "")
(audio-display
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no embedded-first external-first)))))))
(audio-exclusive maybe-type/boolean "")
(audio-exts maybe-type/list-of-string "")
(audio-fallback-to-null maybe-type/boolean "")
(audio-file-auto
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no exact fuzzy all)))))))
(audio-file-paths maybe-type/list-of-string "")
(audio-files maybe-type/list-of-string "")
(audio-format maybe-type/audio-format "")
(audio-normalize-downmix maybe-type/boolean "")
(audio-pitch-correction maybe-type/boolean "")
(audio-resample-cutoff
maybe-type/double
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/double? val)
(>=3D val 0)
(<=3D val 1))))))
(audio-resample-filter-size
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 32))))))
(audio-resample-linear maybe-type/boolean "")
(audio-resample-max-output-size
maybe-type/double
"")
(audio-resample-phase-shift
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 30))))))
(audio-reversal-buffer
maybe-type/byte-size
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/byte-size? val)
(>=3D val 0)
(<=3D val 4.6116860184274e18))))))
(audio-samplerate
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 768000))))))
(audio-spdif maybe-type/string "")
(audio-stream-silence maybe-type/boolean "")
(audio-swresample-o
maybe-type/list-of-key-value
"")
(audio-wait-open
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 60))))))
(auto-window-resize maybe-type/boolean "")
(autocreate-playlist
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no filter same)))))))
(autofit maybe-type/window-size "")
(autofit-larger maybe-type/window-size "")
(autofit-smaller maybe-type/window-size "")
(autoload-files maybe-type/boolean "")
(autosync
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(or (memq val '(no))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 10000))))))))
(background
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(none color tiles)))))))
(background-color maybe-type/color "")
(blend-subtitles
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no yes video)))))))
(bluray-device maybe-type/string "")
(border maybe-type/boolean "")
(border-background
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(none color tiles)))))))
(brightness
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val -100)
(<=3D val 100))))))
(cache maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no auto yes)))))))
(cache-on-disk maybe-type/boolean "")
(cache-pause maybe-type/boolean "")
(cache-pause-initial maybe-type/boolean "")
(cache-pause-wait
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val +inf.0))))))
(cache-secs
maybe-type/double
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/double? val)
(>=3D val 0)
(<=3D val +inf.0))))))
(cdda-cdtext maybe-type/boolean "")
(cdda-device maybe-type/string "")
(cdda-overlap
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 75))))))
(cdda-paranoia
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 2))))))
(cdda-sector-size
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 1)
(<=3D val 100))))))
(cdda-skip maybe-type/boolean "")
(cdda-span-a maybe-type/integer "")
(cdda-span-b maybe-type/integer "")
(cdda-speed
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 1)
(<=3D val 100))))))
(cdda-toc-offset maybe-type/integer "")
(chapter-merge-threshold
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 10000))))))
(chapter-seek-threshold maybe-type/double "")
(chapters-file maybe-type/string "")
(config maybe-type/boolean "")
(container-fps-override
maybe-type/double
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/double? val)
(>=3D val 0)
(<=3D val +inf.0))))))
(contrast
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val -100)
(<=3D val 100))))))
(cookies maybe-type/boolean "")
(cookies-file maybe-type/string "")
(corner-rounding
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 1))))))
(correct-downscaling maybe-type/boolean "")
(correct-pts maybe-type/boolean "")
(cover-art-auto
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no exact fuzzy all)))))))
(cover-art-files maybe-type/list-of-string "")
(cover-art-whitelist
maybe-type/list-of-string
"")
(cscale
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val
'(bilinear
bicubic_fast
oversample
spline16
spline36
spline64
sinc
lanczos
ginseng
bicubic
hermite
catmull_rom
mitchell
robidoux
robidouxsharp
box
nearest
triangle
gaussian
jinc
ewa_lanczos
ewa_hanning
ewa_ginseng
ewa_lanczossharp
ewa_lanczos4sharpest
ewa_lanczossoft
haasnsoft
ewa_robidoux
ewa_robidouxsharp
bartlett
cosine
hanning
tukey
hamming
quadric
welch
kaiser
blackman
sphinx)))))))
(cscale-antiring
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 1))))))
(cscale-blur maybe-type/float "")
(cscale-clamp
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 1))))))
(cscale-param1 maybe-type/float "")
(cscale-param2 maybe-type/float "")
(cscale-radius
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0.5)
(<=3D val 16))))))
(cscale-taper
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 1))))))
(cscale-window
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val
'(bartlett
cosine
hanning
tukey
hamming
quadric
welch
kaiser
blackman
sphinx
jinc)))))))
(cscale-wparam maybe-type/float "")
(cscale-wtaper
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 1))))))
(cursor-autohide
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(or (memq val '(no always))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 30000))))))))
(cursor-autohide-fs-only maybe-type/boolean "")
(deband maybe-type/boolean "")
(deband-grain
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 4096))))))
(deband-iterations
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 16))))))
(deband-range
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 1)
(<=3D val 64))))))
(deband-threshold
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 4096))))))
(deinterlace
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no yes auto)))))))
(deinterlace-field-parity
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(tff bff auto)))))))
(demuxer maybe-type/string "")
(demuxer-backward-playback-step
maybe-type/double
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/double? val)
(>=3D val 0)
(<=3D val +inf.0))))))
(demuxer-cache-dir maybe-type/string "")
(demuxer-cache-unlink-files
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(immediate whendone no)))))))
(demuxer-cache-wait maybe-type/boolean "")
(demuxer-donate-buffer maybe-type/boolean "")
(demuxer-hysteresis-secs
maybe-type/double
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/double? val)
(>=3D val 0)
(<=3D val +inf.0))))))
(demuxer-lavf-allow-mimetype
maybe-type/boolean
"")
(demuxer-lavf-analyzeduration
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 3600))))))
(demuxer-lavf-buffersize
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 1)
(<=3D val 10485760))))))
(demuxer-lavf-format maybe-type/string "")
(demuxer-lavf-hacks maybe-type/boolean "")
(demuxer-lavf-linearize-timestamps
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no auto yes)))))))
(demuxer-lavf-o maybe-type/list-of-key-value "")
(demuxer-lavf-probe-info
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no yes auto nostreams)))))))
(demuxer-lavf-probescore
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 1)
(<=3D val 100))))))
(demuxer-lavf-probesize
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 32)
(<=3D val 2147483647))))))
(demuxer-lavf-propagate-opts
maybe-type/boolean
"")
(demuxer-max-back-bytes
maybe-type/byte-size
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/byte-size? val)
(>=3D val 0)
(<=3D val 4.6116860184274e18))))))
(demuxer-max-bytes
maybe-type/byte-size
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/byte-size? val)
(>=3D val 0)
(<=3D val 4.6116860184274e18))))))
(demuxer-mkv-probe-start-time
maybe-type/boolean
"")
(demuxer-mkv-probe-video-duration
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no yes full)))))))
(demuxer-mkv-subtitle-preroll
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no yes index)))))))
(demuxer-mkv-subtitle-preroll-secs
maybe-type/double
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/double? val)
(>=3D val 0)
(<=3D val +inf.0))))))
(demuxer-mkv-subtitle-preroll-secs-index
maybe-type/double
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/double? val)
(>=3D val 0)
(<=3D val +inf.0))))))
(demuxer-rawaudio-channels
maybe-type/audio-channels-or-channel-map
"")
(demuxer-rawaudio-format
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val
'(u8 s8
u16le
u16be
s16le
s16be
u24le
u24be
s24le
s24be
u32le
u32be
s32le
s32be
floatle
floatbe
doublele
doublebe
u16
s16
u24
s24
u32
s32
float
double)))))))
(demuxer-rawaudio-rate
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 1000)
(<=3D val 384000))))))
(demuxer-rawvideo-codec maybe-type/string "")
(demuxer-rawvideo-format maybe-type/fourcc "")
(demuxer-rawvideo-fps
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0.001)
(<=3D val 1000))))))
(demuxer-rawvideo-h
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 1)
(<=3D val 8192))))))
(demuxer-rawvideo-mp-format
maybe-type/image-format
"")
(demuxer-rawvideo-size
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 1)
(<=3D val 268435456))))))
(demuxer-rawvideo-w
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 1)
(<=3D val 8192))))))
(demuxer-readahead-secs
maybe-type/double
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/double? val)
(>=3D val 0)
(<=3D val +inf.0))))))
(demuxer-seekable-cache
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(auto no yes)))))))
(demuxer-termination-timeout
maybe-type/double
"")
(demuxer-thread maybe-type/boolean "")
(directory-filter-types
maybe-type/list-of-string
"")
(directory-mode
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(auto lazy recursive ignore)))))))
(display-fps-override
maybe-type/double
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/double? val)
(>=3D val 0)
(<=3D val +inf.0))))))
(display-tags maybe-type/list-of-string "")
(dither
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(fruit ordered error-diffusion no)))))))
(dither-depth
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(or (memq val '(no auto))
(and (maybe-type/integer? val)
(>=3D val -1)
(<=3D val 16))))))))
(dither-size-fruit
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 2)
(<=3D val 8))))))
(drag-and-drop
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no auto replace append insert-next)))))))
(drm-connector maybe-type/string "")
(drm-device maybe-type/string "")
(drm-draw-plane
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(or (memq val '(primary overlay))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 2147483647))))))))
(drm-draw-surface-size maybe-type/window-size "")
(drm-drmprime-video-plane
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(or (memq val '(primary overlay))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 2147483647))))))))
(drm-format
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val
'(xrgb8888 xrgb2101010 xbgr8888 xbgr2101010 yuyv)))))))
(drm-mode maybe-type/string "")
(drm-vrr-enabled
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no yes auto)))))))
(dscale
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val
'(bilinear
bicubic_fast
oversample
spline16
spline36
spline64
sinc
lanczos
ginseng
bicubic
hermite
catmull_rom
mitchell
robidoux
robidouxsharp
box
nearest
triangle
gaussian
jinc
ewa_lanczos
ewa_hanning
ewa_ginseng
ewa_lanczossharp
ewa_lanczos4sharpest
ewa_lanczossoft
haasnsoft
ewa_robidoux
ewa_robidouxsharp
bartlett
cosine
hanning
tukey
hamming
quadric
welch
kaiser
blackman
sphinx)))))))
(dscale-antiring
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 1))))))
(dscale-blur maybe-type/float "")
(dscale-clamp
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 1))))))
(dscale-param1 maybe-type/float "")
(dscale-param2 maybe-type/float "")
(dscale-radius
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0.5)
(<=3D val 16))))))
(dscale-taper
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 1))))))
(dscale-window
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val
'(bartlett
cosine
hanning
tukey
hamming
quadric
welch
kaiser
blackman
sphinx
jinc)))))))
(dscale-wparam maybe-type/float "")
(dscale-wtaper
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 1))))))
(dump-stats maybe-type/string "")
(dvbin-card
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 15))))))
(dvbin-channel-switch-offset
maybe-type/integer
"")
(dvbin-file maybe-type/string "")
(dvbin-full-transponder maybe-type/boolean "")
(dvbin-prog maybe-type/string "")
(dvbin-timeout
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 1)
(<=3D val 30))))))
(dvd-angle
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 1)
(<=3D val 99))))))
(dvd-device maybe-type/string "")
(dvd-speed maybe-type/integer "")
(edition
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(or (memq val '(auto))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 8190))))))))
(egl-config-id maybe-type/integer "")
(egl-output-format
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val
'(auto rgb8
rgba8
rgb10
rgb10_a2
rgb16
rgba16
rgb16f
rgba16f
rgb32f
rgba32f)))))))
(embeddedfonts maybe-type/boolean "")
(end maybe-type/relative-time-or-percent-position
"")
(error-diffusion maybe-type/string "")
(external-files maybe-type/list-of-string "")
(fbo-format maybe-type/string "")
(focus-on
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(never open all)))))))
(force-media-title maybe-type/string "")
(force-render maybe-type/boolean "")
(force-rgba-osd-rendering maybe-type/boolean "")
(force-seekable maybe-type/boolean "")
(force-window
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no yes immediate)))))))
(force-window-position maybe-type/boolean "")
(framedrop
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no vo decoder decoder+vo)))))))
(frames
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(or (memq val '(all))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 2147483647))))))))
(fs-screen
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(or (memq val '(all current))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 32))))))))
(fs-screen-name maybe-type/string "")
(fullscreen maybe-type/boolean "")
(gamma maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val -100)
(<=3D val 100))))))
(gamma-auto maybe-type/boolean "")
(gamma-factor
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0.1)
(<=3D val 2))))))
(gamut-mapping-mode
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val
'(auto clip
perceptual
relative
saturation
absolute
desaturate
darken
warn
linear)))))))
(gapless-audio
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no yes weak)))))))
(geometry maybe-type/window-geometry "")
(glsl-shader-opts
maybe-type/list-of-key-value
"")
(glsl-shaders maybe-type/list-of-string "")
(gpu-api maybe-type/list-of-object-setting "")
(gpu-context
maybe-type/list-of-object-setting
"")
(gpu-debug maybe-type/boolean "")
(gpu-dumb-mode
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(auto yes no)))))))
(gpu-hwdec-interop maybe-type/string "")
(gpu-shader-cache maybe-type/boolean "")
(gpu-shader-cache-dir maybe-type/string "")
(gpu-sw maybe-type/boolean "")
(gpu-tex-pad-x
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 4096))))))
(gpu-tex-pad-y
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 4096))))))
(hdr-compute-peak
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(auto yes no)))))))
(hdr-contrast-recovery
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 2))))))
(hdr-contrast-smoothness
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 1)
(<=3D val 100))))))
(hdr-peak-decay-rate
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 1000))))))
(hdr-peak-percentile
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 100))))))
(hdr-scene-threshold-high
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 20))))))
(hdr-scene-threshold-low
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 20))))))
(hidpi-window-scale maybe-type/boolean "")
(hls-bitrate
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(or (memq val '(no min max))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 2147483647))))))))
(hr-seek
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no absolute yes always default)))))))
(hr-seek-demuxer-offset maybe-type/float "")
(hr-seek-framedrop maybe-type/boolean "")
(http-header-fields maybe-type/list-of-string "")
(http-proxy maybe-type/string "")
(hue maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val -100)
(<=3D val 100))))))
(hwdec maybe-type/list-of-string "")
(hwdec-codecs maybe-type/string "")
(hwdec-extra-frames
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 256))))))
(hwdec-image-format maybe-type/image-format "")
(icc-3dlut-size maybe-type/string "")
(icc-cache maybe-type/boolean "")
(icc-cache-dir maybe-type/string "")
(icc-force-contrast
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(or (memq val '(no inf))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 1000000))))))))
(icc-intent maybe-type/integer "")
(icc-profile maybe-type/string "")
(icc-profile-auto maybe-type/boolean "")
(icc-use-luma maybe-type/boolean "")
(idle maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no once yes)))))))
(ignore-path-in-watch-later-config
maybe-type/boolean
"")
(image-display-duration
maybe-type/double
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/double? val)
(>=3D val 0)
(<=3D val +inf.0))))))
(image-exts maybe-type/list-of-string "")
(image-lut maybe-type/string "")
(image-lut-type
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(auto native normalized conversion)))))))
(image-subs-video-resolution
maybe-type/boolean
"")
(include maybe-type/string "")
(index maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(default recreate)))))))
(initial-audio-sync maybe-type/boolean "")
(input-ar-delay maybe-type/integer "")
(input-ar-rate maybe-type/integer "")
(input-builtin-bindings maybe-type/boolean "")
(input-builtin-dragging maybe-type/boolean "")
(input-commands maybe-type/list-of-string "")
(input-conf maybe-type/string "")
(input-cursor maybe-type/boolean "")
(input-cursor-passthrough maybe-type/boolean "")
(input-default-bindings maybe-type/boolean "")
(input-doubleclick-time
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 1000))))))
(input-dragging-deadzone maybe-type/integer "")
(input-ipc-client maybe-type/string "")
(input-ipc-server maybe-type/string "")
(input-key-fifo-size
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 2)
(<=3D val 65000))))))
(input-media-keys maybe-type/boolean "")
(input-preprocess-wheel maybe-type/boolean "")
(input-right-alt-gr maybe-type/boolean "")
(input-terminal maybe-type/boolean "")
(input-test maybe-type/boolean "")
(input-touch-emulate-mouse maybe-type/boolean "")
(input-vo-keyboard maybe-type/boolean "")
(interpolation maybe-type/boolean "")
(interpolation-preserve maybe-type/boolean "")
(interpolation-threshold maybe-type/float "")
(inverse-tone-mapping maybe-type/boolean "")
(jack-autostart maybe-type/boolean "")
(jack-connect maybe-type/boolean "")
(jack-name maybe-type/string "")
(jack-port maybe-type/string "")
(jack-std-channel-layout
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(waveext any)))))))
(keep-open
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no yes always)))))))
(keep-open-pause maybe-type/boolean "")
(keepaspect maybe-type/boolean "")
(keepaspect-window maybe-type/boolean "")
(lavfi-complex maybe-type/string "")
(length
maybe-type/relative-time-or-percent-position
"")
(libplacebo-opts maybe-type/list-of-key-value "")
(linear-downscaling maybe-type/boolean "")
(linear-upscaling maybe-type/boolean "")
(load-auto-profiles
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no yes auto)))))))
(load-osd-console maybe-type/boolean "")
(load-scripts maybe-type/boolean "")
(load-select maybe-type/boolean "")
(load-stats-overlay maybe-type/boolean "")
(load-unsafe-playlists maybe-type/boolean "")
(log-file maybe-type/string "")
(loop-file
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(or (memq val '(no inf yes))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 10000))))))))
(loop-playlist
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(or (memq val '(no inf yes force))
(and (maybe-type/integer? val)
(>=3D val 1)
(<=3D val 10000))))))))
(lut maybe-type/string "")
(lut-type
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(auto native normalized conversion)))))))
(mc maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 100))))))
(media-controls
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no player yes)))))))
(merge-files maybe-type/boolean "")
(metadata-codepage maybe-type/string "")
(mf-fps maybe-type/double "")
(mf-type maybe-type/string "")
(monitoraspect
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 9))))))
(monitorpixelaspect
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0.03125)
(<=3D val 32))))))
(msg-color maybe-type/boolean "")
(msg-level
maybe-type/list-of-output-verbosity
"")
(msg-module maybe-type/boolean "")
(msg-time maybe-type/boolean "")
(mute maybe-type/boolean "")
(native-fs maybe-type/boolean "")
(native-keyrepeat maybe-type/boolean "")
(native-touch maybe-type/boolean "")
(network-timeout
maybe-type/double
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/double? val)
(>=3D val 0)
(<=3D val +inf.0))))))
(oac maybe-type/string "")
(oacopts maybe-type/list-of-key-value "")
(ocopy-metadata maybe-type/boolean "")
(of maybe-type/string "")
(ofopts maybe-type/list-of-key-value "")
(on-all-workspaces maybe-type/boolean "")
(ontop maybe-type/boolean "")
(ontop-level
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(or (memq val '(window system desktop))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 2147483647))))))))
(opengl-check-pattern-a maybe-type/integer "")
(opengl-check-pattern-b maybe-type/integer "")
(opengl-early-flush
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no yes auto)))))))
(opengl-es
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(auto yes no)))))))
(opengl-glfinish maybe-type/boolean "")
(opengl-pbo maybe-type/boolean "")
(opengl-rectangle-textures maybe-type/boolean "")
(opengl-swapinterval maybe-type/integer "")
(opengl-waitvsync maybe-type/boolean "")
(orawts maybe-type/boolean "")
(ordered-chapters maybe-type/boolean "")
(ordered-chapters-files maybe-type/string "")
(oremove-metadata maybe-type/list-of-string "")
(osc maybe-type/boolean "")
(osd-align-x
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(left center right)))))))
(osd-align-y
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(top center bottom)))))))
(osd-back-color maybe-type/color "")
(osd-bar maybe-type/boolean "")
(osd-bar-align-x
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val -1)
(<=3D val 1))))))
(osd-bar-align-y
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val -1)
(<=3D val 1))))))
(osd-bar-h
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0.1)
(<=3D val 50))))))
(osd-bar-outline-size
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 1000))))))
(osd-bar-w
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 1)
(<=3D val 100))))))
(osd-blur
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 20))))))
(osd-bold maybe-type/boolean "")
(osd-border-style
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val
'(outline-and-shadow opaque-box background-box)))))))
(osd-color maybe-type/color "")
(osd-duration
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 3600000))))))
(osd-font maybe-type/string "")
(osd-font-provider
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(auto none fontconfig)))))))
(osd-font-size
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 1)
(<=3D val 9000))))))
(osd-fonts-dir maybe-type/string "")
(osd-fractions maybe-type/boolean "")
(osd-italic maybe-type/boolean "")
(osd-justify
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(auto left center right)))))))
(osd-level
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(#{0}# #{1}# #{2}# #{3}#)))))))
(osd-margin-x
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 300))))))
(osd-margin-y
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 600))))))
(osd-msg1 maybe-type/string "")
(osd-msg2 maybe-type/string "")
(osd-msg3 maybe-type/string "")
(osd-on-seek
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no bar msg msg-bar)))))))
(osd-outline-color maybe-type/color "")
(osd-outline-size maybe-type/float "")
(osd-playing-msg maybe-type/string "")
(osd-playing-msg-duration
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 3600000))))))
(osd-playlist-entry
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(title filename both)))))))
(osd-scale
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 100))))))
(osd-scale-by-window maybe-type/boolean "")
(osd-shadow-offset maybe-type/float "")
(osd-spacing
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val -10)
(<=3D val 10))))))
(osd-status-msg maybe-type/string "")
(oset-metadata maybe-type/list-of-key-value "")
(ovc maybe-type/string "")
(ovcopts maybe-type/list-of-key-value "")
(panscan
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 1))))))
(pause maybe-type/boolean "")
(pitch maybe-type/double
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/double? val)
(>=3D val 0.01)
(<=3D val 100))))))
(play-direction
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(forward + backward -)))))))
(player-operation-mode
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(cplayer pseudo-gui)))))))
(playlist-start
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(or (memq val '(auto no))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 2147483647))))))))
(prefetch-playlist maybe-type/boolean "")
(profile maybe-type/list-of-string "")
(pulse-allow-suspended maybe-type/boolean "")
(pulse-buffer
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(or (memq val '(native))
(and (maybe-type/integer? val)
(>=3D val 1)
(<=3D val 2000))))))))
(pulse-host maybe-type/string "")
(pulse-latency-hacks maybe-type/boolean "")
(quiet maybe-type/boolean "")
(really-quiet maybe-type/boolean "")
(rebase-start-time maybe-type/boolean "")
(referrer maybe-type/string "")
(replaygain
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no track album)))))))
(replaygain-clip maybe-type/boolean "")
(replaygain-fallback
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val -200)
(<=3D val 60))))))
(replaygain-preamp
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val -150)
(<=3D val 150))))))
(reset-on-next-file maybe-type/list-of-string "")
(resume-playback maybe-type/boolean "")
(resume-playback-check-mtime
maybe-type/boolean
"")
(rtsp-transport
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(lavf udp tcp http udp_multicast)))))))
(saturation
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val -100)
(<=3D val 100))))))
(save-position-on-quit maybe-type/boolean "")
(scale maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val
'(bilinear
bicubic_fast
oversample
spline16
spline36
spline64
sinc
lanczos
ginseng
bicubic
hermite
catmull_rom
mitchell
robidoux
robidouxsharp
box
nearest
triangle
gaussian
jinc
ewa_lanczos
ewa_hanning
ewa_ginseng
ewa_lanczossharp
ewa_lanczos4sharpest
ewa_lanczossoft
haasnsoft
ewa_robidoux
ewa_robidouxsharp
bartlett
cosine
hanning
tukey
hamming
quadric
welch
kaiser
blackman
sphinx)))))))
(scale-antiring
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 1))))))
(scale-blur maybe-type/float "")
(scale-clamp
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 1))))))
(scale-param1 maybe-type/float "")
(scale-param2 maybe-type/float "")
(scale-radius
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0.5)
(<=3D val 16))))))
(scale-taper
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 1))))))
(scale-window
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val
'(bartlett
cosine
hanning
tukey
hamming
quadric
welch
kaiser
blackman
sphinx
jinc)))))))
(scale-wparam maybe-type/float "")
(scale-wtaper
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 1))))))
(scaler-resizes-only maybe-type/boolean "")
(screen
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(or (memq val '(default))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 32))))))))
(screen-name maybe-type/string "")
(screenshot-avif-encoder maybe-type/string "")
(screenshot-avif-opts
maybe-type/list-of-key-value
"")
(screenshot-avif-pixfmt maybe-type/string "")
(screenshot-directory maybe-type/string "")
(screenshot-format
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(jpg jpeg png webp jxl avif)))))))
(screenshot-high-bit-depth maybe-type/boolean "")
(screenshot-jpeg-quality
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 100))))))
(screenshot-jpeg-source-chroma
maybe-type/boolean
"")
(screenshot-jxl-distance
maybe-type/double
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/double? val)
(>=3D val 0)
(<=3D val 15))))))
(screenshot-jxl-effort
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 1)
(<=3D val 9))))))
(screenshot-png-compression
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 9))))))
(screenshot-png-filter
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 5))))))
(screenshot-sw maybe-type/boolean "")
(screenshot-tag-colorspace maybe-type/boolean "")
(screenshot-template maybe-type/string "")
(screenshot-webp-compression
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 6))))))
(screenshot-webp-lossless maybe-type/boolean "")
(screenshot-webp-quality
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 100))))))
(script-opts maybe-type/list-of-key-value "")
(scripts maybe-type/list-of-string "")
(secondary-sid
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(or (memq val '(no auto))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 8190))))))))
(secondary-sub-ass-override
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no yes scale force strip)))))))
(secondary-sub-delay maybe-type/float "")
(secondary-sub-pos
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 150))))))
(secondary-sub-visibility maybe-type/boolean "")
(sharpen maybe-type/float "")
(show-in-taskbar maybe-type/boolean "")
(shuffle maybe-type/boolean "")
(sub maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(or (memq val '(no auto))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 8190))))))))
(sigmoid-center
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 1))))))
(sigmoid-slope
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 1)
(<=3D val 20))))))
(sigmoid-upscaling maybe-type/boolean "")
(slang maybe-type/list-of-string "")
(snap-window maybe-type/boolean "")
(speed maybe-type/double
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/double? val)
(>=3D val 0.01)
(<=3D val 100))))))
(spirv-compiler
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(auto)))))))
(sstep maybe-type/double
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/double? val)
(>=3D val 0)
(<=3D val +inf.0))))))
(start maybe-type/relative-time-or-percent-position
"")
(stop-playback-on-init-failure
maybe-type/boolean
"")
(stop-screensaver
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no yes always)))))))
(stream-buffer-size
maybe-type/byte-size
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/byte-size? val)
(>=3D val 4096)
(<=3D val 536870912))))))
(stream-dump maybe-type/string "")
(stream-lavf-o maybe-type/list-of-key-value "")
(stream-record maybe-type/string "")
(stretch-dvd-subs maybe-type/boolean "")
(stretch-image-subs-to-screen
maybe-type/boolean
"")
(sub-align-x
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(left center right)))))))
(sub-align-y
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(top center bottom)))))))
(sub-ass maybe-type/boolean "")
(sub-ass-force-margins maybe-type/boolean "")
(sub-ass-hinting
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(none light normal native)))))))
(sub-ass-justify maybe-type/boolean "")
(sub-ass-line-spacing
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val -1000)
(<=3D val 1000))))))
(sub-ass-override
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no yes scale force strip)))))))
(sub-ass-scale-with-window maybe-type/boolean "")
(sub-ass-shaper
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(simple complex)))))))
(sub-ass-style-overrides
maybe-type/list-of-string
"")
(sub-ass-styles maybe-type/string "")
(sub-ass-use-video-data
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(none aspect-ratio all)))))))
(sub-ass-video-aspect-override
maybe-type/aspect
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/aspect? val)
(>=3D val 0)
(<=3D val 10))))))
(sub-ass-vsfilter-color-compat
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no basic full force-601)))))))
(sub-auto
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no exact fuzzy all)))))))
(sub-auto-exts maybe-type/list-of-string "")
(sub-back-color maybe-type/color "")
(sub-blur
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 20))))))
(sub-bold maybe-type/boolean "")
(sub-border-style
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val
'(outline-and-shadow opaque-box background-box)))))))
(sub-clear-on-seek maybe-type/boolean "")
(sub-codepage maybe-type/string "")
(sub-color maybe-type/color "")
(sub-create-cc-track maybe-type/boolean "")
(sub-delay maybe-type/float "")
(sub-demuxer maybe-type/string "")
(sub-file-paths maybe-type/list-of-string "")
(sub-files maybe-type/list-of-string "")
(sub-filter-jsre maybe-type/list-of-string "")
(sub-filter-regex maybe-type/list-of-string "")
(sub-filter-regex-enable maybe-type/boolean "")
(sub-filter-regex-plain maybe-type/boolean "")
(sub-filter-regex-warn maybe-type/boolean "")
(sub-filter-sdh maybe-type/boolean "")
(sub-filter-sdh-enclosures maybe-type/string "")
(sub-filter-sdh-harder maybe-type/boolean "")
(sub-fix-timing maybe-type/boolean "")
(sub-font maybe-type/string "")
(sub-font-provider
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(auto none fontconfig)))))))
(sub-font-size
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 1)
(<=3D val 9000))))))
(sub-fonts-dir maybe-type/string "")
(sub-forced-events-only maybe-type/boolean "")
(sub-fps maybe-type/float "")
(sub-gauss
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 3))))))
(sub-gray maybe-type/boolean "")
(sub-italic maybe-type/boolean "")
(sub-justify
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(auto left center right)))))))
(sub-lavc-o maybe-type/list-of-key-value "")
(sub-margin-x
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 300))))))
(sub-margin-y
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 600))))))
(sub-outline-color maybe-type/color "")
(sub-outline-size maybe-type/float "")
(sub-past-video-end maybe-type/boolean "")
(sub-pos
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 150))))))
(sub-scale
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 100))))))
(sub-scale-by-window maybe-type/boolean "")
(sub-scale-with-window maybe-type/boolean "")
(sub-shadow-offset maybe-type/float "")
(sub-spacing
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val -10)
(<=3D val 10))))))
(sub-speed maybe-type/float "")
(sub-stretch-durations maybe-type/boolean "")
(sub-use-margins maybe-type/boolean "")
(sub-visibility maybe-type/boolean "")
(sub-vsfilter-bidi-compat maybe-type/boolean "")
(subs-fallback
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no default yes)))))))
(subs-fallback-forced
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no yes always)))))))
(subs-match-os-language maybe-type/boolean "")
(subs-with-matching-audio
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no forced yes)))))))
(swapchain-depth
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 1)
(<=3D val 8))))))
(sws-allow-zimg maybe-type/boolean "")
(sws-bitexact maybe-type/boolean "")
(sws-cgb
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 100))))))
(sws-chs maybe-type/integer "")
(sws-cs
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val -100)
(<=3D val 100))))))
(sws-cvs maybe-type/integer "")
(sws-fast maybe-type/boolean "")
(sws-lgb
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 100))))))
(sws-ls
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val -100)
(<=3D val 100))))))
(sws-scaler
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val
'(fast-bilinear
bilinear
bicubic
x
point
area
bicublin
gauss
sinc
lanczos
spline)))))))
(target-colorspace-hint maybe-type/boolean "")
(target-contrast
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(or (memq val '(auto inf))
(and (maybe-type/integer? val)
(>=3D val 10)
(<=3D val 1000000))))))))
(target-gamut
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val
'(auto bt.601-525
bt.601-625
bt.709
bt.2020
bt.470m
apple
adobe
prophoto
cie1931
dci-p3
display-p3
v-gamut
s-gamut
ebu3213
film-c
aces-ap0
aces-ap1)))))))
(target-lut maybe-type/string "")
(target-peak
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(or (memq val '(auto))
(and (maybe-type/integer? val)
(>=3D val 10)
(<=3D val 10000))))))))
(target-prim
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val
'(auto bt.601-525
bt.601-625
bt.709
bt.2020
bt.470m
apple
adobe
prophoto
cie1931
dci-p3
display-p3
v-gamut
s-gamut
ebu3213
film-c
aces-ap0
aces-ap1)))))))
(target-trc
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val
'(auto bt.1886
srgb
linear
gamma1.8
gamma2.0
gamma2.2
gamma2.4
gamma2.6
gamma2.8
prophoto
pq
hlg
v-log
s-log1
s-log2
st428)))))))
(taskbar-progress maybe-type/boolean "")
(teletext-page
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val -1)
(<=3D val 999))))))
(temporal-dither maybe-type/boolean "")
(temporal-dither-period
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 1)
(<=3D val 128))))))
(term-osd
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(force auto no)))))))
(term-osd-bar maybe-type/boolean "")
(term-osd-bar-chars maybe-type/string "")
(term-playing-msg maybe-type/string "")
(term-status-msg maybe-type/string "")
(term-title maybe-type/string "")
(terminal maybe-type/boolean "")
(title maybe-type/string "")
(title-bar maybe-type/boolean "")
(tls-ca-file maybe-type/string "")
(tls-cert-file maybe-type/string "")
(tls-key-file maybe-type/string "")
(tls-verify maybe-type/boolean "")
(tone-mapping
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val
'(auto clip
mobius
reinhard
hable
gamma
linear
spline
bt.2390
bt.2446a
st2094-40
st2094-10)))))))
(tone-mapping-max-boost
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 1)
(<=3D val 10))))))
(tone-mapping-param maybe-type/float "")
(tone-mapping-visualize maybe-type/boolean "")
(track-auto-selection maybe-type/boolean "")
(tscale
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val
'(oversample
linear
spline16
spline36
spline64
sinc
lanczos
ginseng
bicubic
hermite
catmull_rom
mitchell
robidoux
robidouxsharp
box
nearest
triangle
gaussian
bartlett
cosine
hanning
tukey
hamming
quadric
welch
kaiser
blackman
sphinx
jinc)))))))
(tscale-antiring
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 1))))))
(tscale-blur maybe-type/float "")
(tscale-clamp
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 1))))))
(tscale-param1 maybe-type/float "")
(tscale-param2 maybe-type/float "")
(tscale-radius
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0.5)
(<=3D val 16))))))
(tscale-taper
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 1))))))
(tscale-window
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val
'(bartlett
cosine
hanning
tukey
hamming
quadric
welch
kaiser
blackman
sphinx
jinc)))))))
(tscale-wparam maybe-type/float "")
(tscale-wtaper
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 1))))))
(untimed maybe-type/boolean "")
(use-embedded-icc-profile maybe-type/boolean "")
(use-filedir-conf maybe-type/boolean "")
(user-agent maybe-type/string "")
(vaapi-device maybe-type/string "")
(vd maybe-type/string "")
(vd-apply-cropping maybe-type/boolean "")
(vd-lavc-assume-old-x264 maybe-type/boolean "")
(vd-lavc-bitexact maybe-type/boolean "")
(vd-lavc-check-hw-profile maybe-type/boolean "")
(vd-lavc-dr
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(auto no yes)))))))
(vd-lavc-fast maybe-type/boolean "")
(vd-lavc-film-grain
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(auto cpu gpu)))))))
(vd-lavc-framedrop
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val
'(none default nonref bidir nonkey all)))))))
(vd-lavc-o maybe-type/list-of-key-value "")
(vd-lavc-show-all maybe-type/boolean "")
(vd-lavc-skipframe
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val
'(none default nonref bidir nonkey all)))))))
(vd-lavc-skipidct
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val
'(none default nonref bidir nonkey all)))))))
(vd-lavc-skiploopfilter
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val
'(none default nonref bidir nonkey all)))))))
(vd-lavc-software-fallback
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(or (memq val '(no yes))
(and (maybe-type/integer? val)
(>=3D val 1)
(<=3D val 2147483647))))))))
(vd-lavc-threads
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val +inf.0))))))
(vd-queue-enable maybe-type/boolean "")
(vd-queue-max-bytes
maybe-type/byte-size
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/byte-size? val)
(>=3D val 0)
(<=3D val 4.6116860184274e18))))))
(vd-queue-max-samples
maybe-type/integer64
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer64? val)
(>=3D val 0)
(<=3D val +inf.0))))))
(vd-queue-max-secs
maybe-type/double
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/double? val)
(>=3D val 0)
(<=3D val +inf.0))))))
(vf maybe-type/list-of-object-setting "")
(video maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(or (memq val '(no auto))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 8190))))))))
(video-align-x
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val -1)
(<=3D val 1))))))
(video-align-y
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val -1)
(<=3D val 1))))))
(video-aspect-method
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(bitstream container)))))))
(video-aspect-override
maybe-type/aspect
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/aspect? val)
(>=3D val -1)
(<=3D val 10))))))
(video-backward-batch
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 1024))))))
(video-backward-overlap
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(or (memq val '(auto))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 1024))))))))
(video-crop maybe-type/video-rectangle "")
(video-exts maybe-type/list-of-string "")
(video-latency-hacks maybe-type/boolean "")
(video-margin-ratio-bottom
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 1))))))
(video-margin-ratio-left
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 1))))))
(video-margin-ratio-right
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 1))))))
(video-margin-ratio-top
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 1))))))
(video-osd maybe-type/boolean "")
(video-output-levels
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(auto limited full)))))))
(video-pan-x maybe-type/float "")
(video-pan-y maybe-type/float "")
(video-reversal-buffer
maybe-type/byte-size
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/byte-size? val)
(>=3D val 0)
(<=3D val 4.6116860184274e18))))))
(video-rotate
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(or (memq val '(no))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 359))))))))
(video-scale-x
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 10000))))))
(video-scale-y
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 10000))))))
(video-sync
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val
'(audio display-resample
display-resample-vdrop
display-resample-desync
display-tempo
display-adrop
display-vdrop
display-desync
desync)))))))
(video-sync-max-audio-change
maybe-type/double
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/double? val)
(>=3D val 0)
(<=3D val 1))))))
(video-sync-max-factor
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 1)
(<=3D val 10))))))
(video-sync-max-video-change
maybe-type/double
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/double? val)
(>=3D val 0)
(<=3D val +inf.0))))))
(video-timing-offset
maybe-type/double
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/double? val)
(>=3D val 0)
(<=3D val 1))))))
(video-unscaled
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no yes downscale-big)))))))
(video-zoom
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val -20)
(<=3D val 20))))))
(vlang maybe-type/list-of-string "")
(vo maybe-type/list-of-object-setting "")
(vo-image-avif-encoder maybe-type/string "")
(vo-image-avif-opts
maybe-type/list-of-key-value
"")
(vo-image-avif-pixfmt maybe-type/string "")
(vo-image-format
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(jpg jpeg png webp jxl avif)))))))
(vo-image-high-bit-depth maybe-type/boolean "")
(vo-image-jpeg-quality
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 100))))))
(vo-image-jpeg-source-chroma
maybe-type/boolean
"")
(vo-image-jxl-distance
maybe-type/double
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/double? val)
(>=3D val 0)
(<=3D val 15))))))
(vo-image-jxl-effort
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 1)
(<=3D val 9))))))
(vo-image-outdir maybe-type/string "")
(vo-image-png-compression
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 9))))))
(vo-image-png-filter
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 5))))))
(vo-image-tag-colorspace maybe-type/boolean "")
(vo-image-webp-compression
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 6))))))
(vo-image-webp-lossless maybe-type/boolean "")
(vo-image-webp-quality
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 100))))))
(vo-kitty-alt-screen maybe-type/boolean "")
(vo-kitty-cols maybe-type/integer "")
(vo-kitty-config-clear maybe-type/boolean "")
(vo-kitty-height maybe-type/integer "")
(vo-kitty-left maybe-type/integer "")
(vo-kitty-rows maybe-type/integer "")
(vo-kitty-top maybe-type/integer "")
(vo-kitty-use-shm maybe-type/boolean "")
(vo-kitty-width maybe-type/integer "")
(vo-null-fps
maybe-type/double
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/double? val)
(>=3D val 0)
(<=3D val 10000))))))
(vo-sixel-alt-screen maybe-type/boolean "")
(vo-sixel-buffered maybe-type/boolean "")
(vo-sixel-cols maybe-type/integer "")
(vo-sixel-config-clear maybe-type/boolean "")
(vo-sixel-dither
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val
'(auto none
atkinson
fs
jajuni
stucki
burkes
arithmetic
xor)))))))
(vo-sixel-fixedpalette maybe-type/boolean "")
(vo-sixel-height maybe-type/integer "")
(vo-sixel-left maybe-type/integer "")
(vo-sixel-pad-x maybe-type/integer "")
(vo-sixel-pad-y maybe-type/integer "")
(vo-sixel-reqcolors maybe-type/integer "")
(vo-sixel-rows maybe-type/integer "")
(vo-sixel-threshold maybe-type/integer "")
(vo-sixel-top maybe-type/integer "")
(vo-sixel-width maybe-type/integer "")
(vo-tct-256 maybe-type/boolean "")
(vo-tct-algo
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(plain half-blocks)))))))
(vo-tct-buffering
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(pixel line frame)))))))
(vo-tct-height maybe-type/integer "")
(vo-tct-width maybe-type/integer "")
(vo-vaapi-scaled-osd maybe-type/boolean "")
(vo-vaapi-scaling
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(default fast hq nla)))))))
(vo-vdpau-chroma-deint maybe-type/boolean "")
(vo-vdpau-colorkey maybe-type/color "")
(vo-vdpau-composite-detect maybe-type/boolean "")
(vo-vdpau-denoise
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 1))))))
(vo-vdpau-force-yuv maybe-type/boolean "")
(vo-vdpau-fps maybe-type/double "")
(vo-vdpau-hqscaling
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 9))))))
(vo-vdpau-output-surfaces
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 2)
(<=3D val 15))))))
(vo-vdpau-pullup maybe-type/boolean "")
(vo-vdpau-queuetime-fs maybe-type/integer "")
(vo-vdpau-queuetime-windowed
maybe-type/integer
"")
(vo-vdpau-sharpen
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val -1)
(<=3D val 1))))))
(volume
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val -1)
(<=3D val 1000))))))
(volume-gain
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val -150)
(<=3D val 150))))))
(volume-gain-max
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 0)
(<=3D val 150))))))
(volume-gain-min
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val -150)
(<=3D val 0))))))
(volume-max
maybe-type/float
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/float? val)
(>=3D val 100)
(<=3D val 1000))))))
(vulkan-async-compute maybe-type/boolean "")
(vulkan-async-transfer maybe-type/boolean "")
(vulkan-device maybe-type/string "")
(vulkan-display-display maybe-type/integer "")
(vulkan-display-mode maybe-type/integer "")
(vulkan-display-plane maybe-type/integer "")
(vulkan-queue-count
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 1)
(<=3D val 8))))))
(vulkan-swap-mode
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val
'(auto fifo fifo-relaxed mailbox immediate)))))))
(watch-later-directory maybe-type/string "")
(watch-later-options
maybe-type/list-of-string
"")
(wayland-app-id maybe-type/string "")
(wayland-configure-bounds
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(auto no yes)))))))
(wayland-content-type
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(auto none photo video game)))))))
(wayland-disable-vsync maybe-type/boolean "")
(wayland-edge-pixels-pointer
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 2147483647))))))
(wayland-edge-pixels-touch
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val 2147483647))))))
(wayland-present maybe-type/boolean "")
(wid maybe-type/integer64 "")
(window-dragging maybe-type/boolean "")
(window-maximized maybe-type/boolean "")
(window-minimized maybe-type/boolean "")
(window-scale
maybe-type/double
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/double? val)
(>=3D val 0.001)
(<=3D val 100))))))
(write-filename-in-watch-later-config
maybe-type/boolean
"")
(x11-bypass-compositor
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no yes fs-only never)))))))
(x11-name maybe-type/string "")
(x11-netwm
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(auto no yes)))))))
(x11-present
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no auto yes)))))))
(x11-wid-title maybe-type/boolean "")
(xv-adaptor
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val -1)
(<=3D val +inf.0))))))
(xv-buffers
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 1)
(<=3D val 10))))))
(xv-ck maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(use set cur)))))))
(xv-ck-method
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(none bg man auto)))))))
(xv-colorkey maybe-type/integer "")
(xv-port
maybe-type/integer
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/integer? val)
(>=3D val 0)
(<=3D val +inf.0))))))
(ytdl maybe-type/boolean "")
(ytdl-format maybe-type/string "")
(ytdl-raw-options
maybe-type/list-of-key-value
"")
(zimg-dither
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val '(no ordered random error-diffusion)))))))
(zimg-fast maybe-type/boolean "")
(zimg-scaler
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val
'(point bilinear
bicubic
spline16
spline36
lanczos)))))))
(zimg-scaler-chroma
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(memq val
'(point bilinear
bicubic
spline16
spline36
lanczos)))))))
(zimg-scaler-chroma-param-a maybe-type/double "")
(zimg-scaler-chroma-param-b maybe-type/double "")
(zimg-scaler-param-a maybe-type/double "")
(zimg-scaler-param-b maybe-type/double "")
(zimg-threads
maybe-type/enumeration
""
(sanitizer
(lambda (val)
(or (not (maybe-value-set? val))
(and (maybe-type/enumeration? val)
(or (memq val '(auto))
(and (maybe-type/integer? val)
(>=3D val 1)
(<=3D val 64)))))))))
;;; Generated code - END.
(set-object-property!
(module-ref (current-module) 'mpv-profile-configuration)
'documentation
(generate-documentation
`((mpv-profile-configuration ,mpv-profile-configuration-fields))
'mpv-profile-configuration))
;;;
;;; Configuration base.
;;;
(define-maybe type/mpv-profile-configurations)
(define (serialize-type/mpv-profile-configurations _ profiles)
#~(string-append
#$@(map (match-lambda
((name . config)
#~(string-append
#$(format #f "[~a]~%" name)
#$(serialize-mpv-profile-configuration _ config))))
profiles)))
(define (type/mpv-profile-configurations? alist)
(every (match-lambda
(((? symbol?) . (? mpv-profile-configuration?)) #t)
(_ #f))
alist))
(define-maybe type/extra)
(define (serialize-type/extra _ value)
#~(string-append #$value "\n"))
(define type/extra? string?)
(define (serialize-mpv-profile-configuration _ config)
(serialize-configuration config mpv-profile-configuration-fields))
(define-configuration home-mpv-configuration
(global
mpv-profile-configuration
"Globally valid settings, outputted before any profile.")
(profiles
maybe-type/mpv-profile-configurations
"Alist mapping additional settings to specific profiles. Key should be a
symbol, value an instance of @code{mpv-profile-configuration}.")
(extra
maybe-type/extra
"Additional content to append to the end of the configuration file."))
(set-object-property!
(module-ref (current-module) 'home-mpv-configuration)
'documentation
(generate-documentation
`((home-mpv-configuration ,home-mpv-configuration-fields))
'home-mpv-configuration))
--=-=-=
Content-Type: text/plain
Content-Transfer-Encoding: quoted-printable
=2D-=20
There are only two hard things in Computer Science:
cache invalidation, naming things and off-by-one errors.
--=-=-=--
--==-=-=
Content-Type: application/pgp-signature; name="signature.asc"
-----BEGIN PGP SIGNATURE-----
iQJCBAEBCgAsFiEEt4NJs4wUfTYpiGikL7/ufbZ/wakFAmdXCQwOHH5Ad29sZnNk
ZW4uY3oACgkQL7/ufbZ/wamT4hAAg8D+H05v8RtRA4NjEP/K429gwVFI+rwBZ8Qh
kHr9JRHcUyeW6KoWXaE+ugRIqFALTv9wDj8LlZeA6XMKVar55ZvJN42JNKr9Vxi9
Su3aXSwZ8ou8NwiVs/2bkS9PpEM2yEA1vclQ5R1w4MybuJ3OCXkDNZ/st++CzKiJ
ydZLy4bkxwvpX4KG0L1m0V9cA0rEn8lo09TpGLdwyptJd4OJMZ691MoFEnwZUVlx
3O7JyO3mh7ZeaGZvH3y8g1qG65/f3HAtk9Af3nr1ukHJ1NEu4czb9vSE8DL9mTKx
Je9mOUqKn6e6r8oYfpgk1KcANpiv+s4nXSx4vtmcWstVKpkss0vH/FuYepvN2eUp
70EyMSDA3MoZ6Af9+sS3XFx8J8nNfacqkvqWS1QV1jykEk++s4xRjsZkb+ki56sj
jj4O3wF1PwzZZg4tKgJvOtCnwGZt59XOK8ZpM5KdwNhdIeMsVu6/9wVB+bWoXdC3
HX2XoDw1KugQXgFr6xKfoyvktOkxYfCN7TTGiWhYxOGK2GBUlnVki4J5VYfsokqx
u18wjBYxQQZkKz196UBPRAW/SM0tjXbj6xGr0yePPQVpChxANvZRqiEoxjEYZ4sH
TMbAlfEwUTfgS20yv5p9Bssw4d4p7CY9FUS4pLiiXOMlJ9APGM2DiKE8jnFsTvQh
oTgtbD4=
=4w6D
-----END PGP SIGNATURE-----
--==-=-=--
Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.505 (Entity 5.505) Content-Type: text/plain; charset=utf-8 X-Loop: help-debbugs@HIDDEN From: help-debbugs@HIDDEN (GNU bug Tracking System) To: Tomas Volf <~@wolfsden.cz> Subject: bug#74748: Acknowledgement (Constructor created by define-configuration is slow (>25s) when many fields are defined) Message-ID: <handler.74748.B.17337572177802.ack <at> debbugs.gnu.org> References: <87msh499f7.fsf@HIDDEN> X-Gnu-PR-Message: ack 74748 X-Gnu-PR-Package: guix Reply-To: 74748 <at> debbugs.gnu.org Date: Mon, 09 Dec 2024 15:14:02 +0000 Thank you for filing a new bug report with debbugs.gnu.org. This is an automatically generated reply to let you know your message has been received. Your message is being forwarded to the package maintainers and other interested parties for their attention; they will reply in due course. Your message has been sent to the package maintainer(s): bug-guix@HIDDEN If you wish to submit further information on this problem, please send it to 74748 <at> debbugs.gnu.org. Please do not send mail to help-debbugs@HIDDEN unless you wish to report a problem with the Bug-tracking system. --=20 74748: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D74748 GNU Bug Tracking System Contact help-debbugs@HIDDEN with problems
X-Loop: help-debbugs@HIDDEN
Subject: bug#74748: Constructor created by define-configuration is slow (>25s) when many fields are defined
Resent-From: Ludovic =?UTF-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-guix@HIDDEN
Resent-Date: Tue, 24 Dec 2024 14:39:02 +0000
Resent-Message-ID: <handler.74748.B74748.173505112316372 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 74748
X-GNU-PR-Package: guix
X-GNU-PR-Keywords:
To: Tomas Volf <~@wolfsden.cz>
Cc: 74748 <at> debbugs.gnu.org
Received: via spool by 74748-submit <at> debbugs.gnu.org id=B74748.173505112316372
(code B ref 74748); Tue, 24 Dec 2024 14:39:02 +0000
Received: (at 74748) by debbugs.gnu.org; 24 Dec 2024 14:38:43 +0000
Received: from localhost ([127.0.0.1]:60068 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1tQ63W-0004G0-JP
for submit <at> debbugs.gnu.org; Tue, 24 Dec 2024 09:38:43 -0500
Received: from eggs.gnu.org ([209.51.188.92]:42728)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <ludo@HIDDEN>) id 1tQ63T-0004Fi-Nk
for 74748 <at> debbugs.gnu.org; Tue, 24 Dec 2024 09:38:41 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.90_1) (envelope-from <ludo@HIDDEN>)
id 1tQ63N-0007qn-LY; Tue, 24 Dec 2024 09:38:33 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
s=fencepost-gnu-org; h=MIME-Version:Date:References:In-Reply-To:Subject:To:
From; bh=FngbVgWVrsYRyIDLwxin5BdpV8DOfQCd09vVy/G6x0Q=; b=kTbnAqyKGEkulqtA4FJy
clcBI3JTXEajfk0kC55AuCT43OPj1+0eyQYzuSTAMXqOf1MqSgmUxeeGWx8NIQ73DVmb2O6gMOhmP
wabpIPOzaYCU5Ve8AQezb4DXKUP9hA21BJ1ekoL63pMtj8RrhFzQW02ZLmn15KM7I9SRo1LfCbPeU
auFfEgIygzJrtgV2HLOpAEQevAHaQOJx7y39eKZ1XNiG4Eoa8dEBgjxwpmMbaJ9uh+KAeqk6aQ1G9
YlarPkU5ZFVv5fYLaq23DKv7v0h0KZAnspelWUSTAhbkjN52IiztO3ia+HYvwudbPvLytDv6ZPama
TkWge4caQ/a+ag==;
From: Ludovic =?UTF-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
In-Reply-To: <87msh499f7.fsf@HIDDEN> (Tomas Volf's message of "Mon, 09
Dec 2024 16:13:16 +0100")
References: <87msh499f7.fsf@HIDDEN>
Date: Tue, 24 Dec 2024 15:38:30 +0100
Message-ID: <87cyhh5eop.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
X-Spam-Score: -2.3 (--)
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)
--=-=-=
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Hi,
Tomas Volf <~@wolfsden.cz> skribis:
> I am writing a configuration for mpv and hit an issue of the generated
> constructor (`home-mpv-configuration') is extremely slow. While the
> almost 800 fields is unusually high, initializing the instances of the
> record should *not* take almost 30 seconds. The full file is attached
> to this email (as `mpv.scm').
AFAICS, time is spent in one of the compilation steps:
--8<---------------cut here---------------start------------->8---
scheme@(gnu home services mpv)> ,o interp #t
scheme@(gnu home services mpv)> ,t (lambda () (mpv-profile-configuration))
$13 =3D #<procedure 7f6ed3796700 at ice-9/eval.scm:330:13 ()>
;; 0.376347s real time, 0.375402s run time. 0.000000s spent in GC.
scheme@(gnu home services mpv)> ,o interp #f
scheme@(gnu home services mpv)> ,t (lambda () (mpv-profile-configuration))
$14 =3D #<procedure 7f6ec32088f8 at <unknown port>:40:3 ()>
;; 11.149828s real time, 12.052915s run time. 1.581736s spent in GC.
scheme@(gnu home services mpv)> ,t (->bool (macroexpand '(mpv-profile-confi=
guration)))
$15 =3D #t
;; 0.373865s real time, 0.372698s run time. 0.000000s spent in GC.
--8<---------------cut here---------------end--------------->8---
If we look more closely, it=E2=80=99s the optimizing compiler that takes ti=
me;
the baseline compile (-O1) is doing okay:
--8<---------------cut here---------------start------------->8---
scheme@(gnu home services mpv)> ,use(system base compile)
scheme@(gnu home services mpv)> ,t (->bool (compile '(mpv-profile-configura=
tion) #:to 'tree-il #:env (current-module)))
$20 =3D #t
;; 0.378741s real time, 0.377043s run time. 0.000000s spent in GC.
scheme@(gnu home services mpv)> ,t (->bool (compile '(mpv-profile-configura=
tion) #:to 'bytecode #:env (current-module)))
$21 =3D #t
;; 11.946879s real time, 12.961704s run time. 1.777478s spent in GC.
scheme@(gnu home services mpv)> (define til (compile '(mpv-profile-configur=
ation) #:to 'tree-il #:env (current-module)))
scheme@(gnu home services mpv)> ,t (->bool (compile til #:from 'tree-il #:t=
o 'bytecode))
$22 =3D #t
;; 11.403420s real time, 12.317183s run time. 1.581972s spent in GC.
scheme@(gnu home services mpv)> ,t (->bool (compile til #:from 'tree-il #:t=
o 'bytecode #:optimization-level 1))
$23 =3D #t
;; 0.225455s real time, 0.156137s run time. 0.000000s spent in GC.
--8<---------------cut here---------------end--------------->8---
Currently (guix build compile) applies these options to services:
((string-contains file "gnu/services/")
;; '-O2 -Ono-letrectify' compiles about ~20% faster than '-O2' for
;; large files like gnu/services/mail.scm.
(override-option #:letrectify? #f
(optimizations-for-level 2)))
I think we should at least apply this patch:
--=-=-=
Content-Type: text/x-patch
Content-Disposition: inline
diff --git a/guix/build/compile.scm b/guix/build/compile.scm
index 5b27b55d02..f90016b9ae 100644
--- a/guix/build/compile.scm
+++ b/guix/build/compile.scm
@@ -127,7 +127,8 @@ (define (optimization-options file)
;; Use '-O1' to have partial evaluation and primitive inlining so we
;; can honor the "macro writer's bill of rights".
(optimizations-for-level 1))
- ((string-contains file "gnu/services/")
+ ((or (string-contains file "gnu/services/")
+ (string-contains file "gnu/home/services/"))
;; '-O2 -Ono-letrectify' compiles about ~20% faster than '-O2' for
;; large files like gnu/services/mail.scm.
(override-option #:letrectify? #f
--=-=-=
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Would that be enough for the home-mpv configuration records you wrote?
Thanks,
Ludo=E2=80=99.
--=-=-=--
X-Loop: help-debbugs@HIDDEN
Subject: bug#74748: Constructor created by define-configuration is slow (>25s) when many fields are defined
Resent-From: Tomas Volf <~@wolfsden.cz>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-guix@HIDDEN
Resent-Date: Fri, 27 Dec 2024 22:51:01 +0000
Resent-Message-ID: <handler.74748.B74748.173533981318272 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 74748
X-GNU-PR-Package: guix
X-GNU-PR-Keywords:
To: Ludovic =?UTF-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Cc: 74748 <at> debbugs.gnu.org
Received: via spool by 74748-submit <at> debbugs.gnu.org id=B74748.173533981318272
(code B ref 74748); Fri, 27 Dec 2024 22:51:01 +0000
Received: (at 74748) by debbugs.gnu.org; 27 Dec 2024 22:50:13 +0000
Received: from localhost ([127.0.0.1]:47925 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1tRJ9p-0004kd-5I
for submit <at> debbugs.gnu.org; Fri, 27 Dec 2024 17:50:13 -0500
Received: from wolfsden.cz ([37.205.8.62]:43434)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <~@wolfsden.cz>) id 1tRJ9m-0004im-K1
for 74748 <at> debbugs.gnu.org; Fri, 27 Dec 2024 17:50:12 -0500
Received: by wolfsden.cz (Postfix, from userid 104)
id 4E920338C03; Fri, 27 Dec 2024 22:50:08 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=wolfsden.cz; s=mail;
t=1735339808; bh=hRkZ0BGGlJhR2bJ/YU1HOiEKlKREB3LnibkG3rX6Y1w=;
h=From:To:Cc:Subject:In-Reply-To:References:Date;
b=uzLyvFdU3Q94oSj+Ogl9li/f5hfLVeENUYONidRT6ptjqzZJ1zVTjZisQxa5V18B1
s+r0I+aI1bbLQeR5IYjmxnlhSn+hJpcKV8obwSmQlTbd/sqweQ2HvUOFolgVZ7ZC9e
yonSHMa/a7KbphxnZJ/RPMBkd39py1vMQ+/m++amlsF29ss43KzDS5E79jlphJA+if
CKnmTtDl72w0cIO7NjimmwTbxZepVvyOyjUtr8p6d5BzEzJkuHM7SSEo80wEEEGT+k
oCtR0PRa0eJcz3r8/O2b7lNRYHCdfdVU8Gp7c8oIBn4qUvATjSYelP/34t3CTE+Tty
Mjep4TDSTz74gG5jfUtBqmbFqn/9ZspBjtUTVtH3FqFJswqXedso9ELGl7EyPtEVOE
q20TkH2plpHpu24lU7bhN8bERP7IedrofeHDW8hYQsCsVvQ5uP9GW7kSTszMZUWyBv
ap1pee1yRxzRcmIcCBP7eGkTiV/BlLUmtD+w0i35HG8pV7O2IOtZaAFJpOY/zfWRiB
gUJ1KGxCvtNLuu3wrhYv6HM6qvxw+SXdq62G9G77rsRRfNO5U4O5bMbIuqSq+af1Ky
0TLdveQ87jnPfkz1Q1nkVaygAoZ8lwEen14qok5JOyx2Cf+S3HrfUouBoRiJBEaGpC
1UvKcynC3jlet1xUyCgMWAJg=
X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on wolfsden
X-Spam-Level:
X-Spam-Status: No, score=-3.1 required=5.0 tests=ALL_TRUSTED,BAYES_00,
DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,URIBL_BLOCKED
autolearn=ham autolearn_force=no version=3.4.6
Received: from localhost (unknown [128.0.188.242])
by wolfsden.cz (Postfix) with ESMTPSA id 73B4733883B;
Fri, 27 Dec 2024 22:50:07 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=wolfsden.cz; s=mail;
t=1735339807; bh=hRkZ0BGGlJhR2bJ/YU1HOiEKlKREB3LnibkG3rX6Y1w=;
h=From:To:Cc:Subject:In-Reply-To:References:Date;
b=Sz11eS+xLWZKO0xXzCX2/Nc2CCU2jYKVGalMCyzmLe/VDXLsg+xjwk7l9kVG5lFSN
6APM57kKks87jq7CwlBvu4f1PXwKWcLw4A9TJetQZCUU2h4RTaYSkmpnyvNXh9T1qJ
BQ1RpwZBrusmg48kh3PBmdy8lfb/Ul9WLEGnk4K2lry4UCE/TIZW7284Exp89WZbXM
3UwGJVXXmJenRLi+YCln0ZyAC8fHgEGHiV5fZf4fVmYjZOKNVfkhIE0ku3y0HxXjJN
aepLQGHoG7uif4njBgVYy0J5x82DnyWgV98aH8NKRUbi9uTbnY4GbOQa/P5t9vJZCZ
e3eJ2BaFG9k90VfA97HzDzr4dRbUw6thldt7flVe6Bl2Y5in5f8DF3o7eoUWKUaXrn
40A+8mAkq62ysafYXWQe0Ku3KQ1l9A1tgjIo1z842RKe69gq02lxM81uZYq0T3zgqC
Qk3Dm3hMY5/mjW9sp0dBqDNPvit46i5xslrUVl1M2XHIR19fVjRE/AhuHpBs44WAmm
+wfDF+j5iHadApNhymyHj1kLfhMTgVQQQ1d0oRAWDQZnm9cA8i9UVEnJXHp7HBD5xx
6xafFiQcjaO1lHBJfpguSPBNlIVs14GcWIUwuxISJ4TF6On5pQZdSk+P3pOc4DMQ6B
DEW86FRxBwjlVHeYyMQ4EKLs=
From: Tomas Volf <~@wolfsden.cz>
In-Reply-To: <87cyhh5eop.fsf@HIDDEN> ("Ludovic =?UTF-8?Q?Court=C3=A8s?="'s message of "Tue, 24 Dec 2024 15:38:30 +0100")
References: <87msh499f7.fsf@HIDDEN> <87cyhh5eop.fsf@HIDDEN>
Date: Fri, 27 Dec 2024 23:50:06 +0100
Message-ID: <87a5cg4u75.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="=-=-=";
micalg=pgp-sha512; protocol="application/pgp-signature"
X-Spam-Score: 0.0 (/)
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)
--=-=-=
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Hello,
thank you for finding the time to look into this issue. Replies below.
Ludovic Court=C3=A8s <ludo@HIDDEN> writes:
> Hi,
>
> Tomas Volf <~@wolfsden.cz> skribis:
>
>> I am writing a configuration for mpv and hit an issue of the generated
>> constructor (`home-mpv-configuration') is extremely slow. While the
>> almost 800 fields is unusually high, initializing the instances of the
>> record should *not* take almost 30 seconds. The full file is attached
>> to this email (as `mpv.scm').
>
> AFAICS, time is spent in one of the compilation steps:
>
> scheme@(gnu home services mpv)> ,o interp #t
> scheme@(gnu home services mpv)> ,t (lambda () (mpv-profile-configuration))
> $13 =3D #<procedure 7f6ed3796700 at ice-9/eval.scm:330:13 ()>
> ;; 0.376347s real time, 0.375402s run time. 0.000000s spent in GC.
> scheme@(gnu home services mpv)> ,o interp #f
> scheme@(gnu home services mpv)> ,t (lambda () (mpv-profile-configuration))
> $14 =3D #<procedure 7f6ec32088f8 at <unknown port>:40:3 ()>
> ;; 11.149828s real time, 12.052915s run time. 1.581736s spent in GC.
> scheme@(gnu home services mpv)> ,t (->bool (macroexpand '(mpv-profile-con=
figuration)))
> $15 =3D #t
> ;; 0.373865s real time, 0.372698s run time. 0.000000s spent in GC.
>
>
> If we look more closely, it=E2=80=99s the optimizing compiler that takes =
time;
> the baseline compile (-O1) is doing okay:
>
> scheme@(gnu home services mpv)> ,use(system base compile)
> scheme@(gnu home services mpv)> ,t (->bool (compile '(mpv-profile-configu=
ration) #:to 'tree-il #:env (current-module)))
> $20 =3D #t
> ;; 0.378741s real time, 0.377043s run time. 0.000000s spent in GC.
> scheme@(gnu home services mpv)> ,t (->bool (compile '(mpv-profile-configu=
ration) #:to 'bytecode #:env (current-module)))
> $21 =3D #t
> ;; 11.946879s real time, 12.961704s run time. 1.777478s spent in GC.
> scheme@(gnu home services mpv)> (define til (compile '(mpv-profile-config=
uration) #:to 'tree-il #:env (current-module)))
> scheme@(gnu home services mpv)> ,t (->bool (compile til #:from 'tree-il #=
:to 'bytecode))
> $22 =3D #t
> ;; 11.403420s real time, 12.317183s run time. 1.581972s spent in GC.
> scheme@(gnu home services mpv)> ,t (->bool (compile til #:from 'tree-il #=
:to 'bytecode #:optimization-level 1))
> $23 =3D #t
> ;; 0.225455s real time, 0.156137s run time. 0.000000s spent in GC.
>
> Currently (guix build compile) applies these options to services:
>
> ((string-contains file "gnu/services/")
> ;; '-O2 -Ono-letrectify' compiles about ~20% faster than '-O2' f=
or
> ;; large files like gnu/services/mail.scm.
> (override-option #:letrectify? #f
> (optimizations-for-level 2)))
>
> I think we should at least apply this patch:
>
> diff --git a/guix/build/compile.scm b/guix/build/compile.scm
> index 5b27b55d02..f90016b9ae 100644
> --- a/guix/build/compile.scm
> +++ b/guix/build/compile.scm
> @@ -127,7 +127,8 @@ (define (optimization-options file)
> ;; Use '-O1' to have partial evaluation and primitive inlining =
so we
> ;; can honor the "macro writer's bill of rights".
> (optimizations-for-level 1))
> - ((string-contains file "gnu/services/")
> + ((or (string-contains file "gnu/services/")
> + (string-contains file "gnu/home/services/"))
> ;; '-O2 -Ono-letrectify' compiles about ~20% faster than '-O2' =
for
> ;; large files like gnu/services/mail.scm.
> (override-option #:letrectify? #f
>
>
> Would that be enough for the home-mpv configuration records you wrote?
I admit I did not test the patch attached, but my understanding is that
even if the speed up was sufficient, it would take effect only for
compilation via the make command. Assuming that is correct, it would
not change much. I am (luckily) former C++ developer, so I am used to
compilations taking ~forever. So, yes, while the compilation of mpv.scm
(via `make') took roughly 40s on my machine, it was annoying, but not
worthy of a bug report.
The actual problem for me was the slowness in REPL. Would that be
addressed by the patch above? If not, do we have any way to do that?
)tomas
=2D-=20
There are only two hard things in Computer Science:
cache invalidation, naming things and off-by-one errors.
--=-=-=
Content-Type: application/pgp-signature; name="signature.asc"
-----BEGIN PGP SIGNATURE-----
iQJCBAEBCgAsFiEEt4NJs4wUfTYpiGikL7/ufbZ/wakFAmdvLx4OHH5Ad29sZnNk
ZW4uY3oACgkQL7/ufbZ/wanyqQ/+IWaH5/3zSHoUTrz+j5Wj6IOPD6MX23oqzmrh
NJ5SpG4N6zl7oOI5UBOaYE/FQgBqvlgFcjHSrU+j/3k7GCx/1PY/Uuck72zFuDR7
Lx32SCOC2Rg5XoIhkhTm7iAiH7JXkRjD/jaQWvOBmxtc0i/jGsHycKrsKnfwBzdM
YzqFh9y4gNJw7KC2TFIubkRAW/9hdXMS3vjVcsxd8DUn2OW23jJA70Jf1vGA8njo
R3QA+PVFz280Ng/TTxt7gz8gxSP11J/CN2f1gDGAk48Wpi7+SjOv575I+P+f3mAj
HriqaCFGHdN/K5elvLBNWzFoN0V2VJ47CYOStlFDkPxiSw7J5TWKpPWA9vtF2XmZ
sobYVSW/59yihcvsNqkStj36IWveWDEccLG0B/uisjzgvh6V/TPu0ddbOE0ncbif
YtUSf2Cb2aKQq+xU5AomzLqsjs2DCJ46qB2e9u53iL5AzhxJjFsurWyUThF0cmT1
oQScABso3HKf3YSYinNby+aKRbNhVcB6FkEMHtmpU5WDiYt3wyhMnau8Xj0M94Me
fZJcHadDwn6bELxp3p4O5r2fsV+vtiP8Stpr4WB1ZPCmoHQglMa5R8DbzL25pQvI
rcgZB/A2N6oeLVfHZHqCRxIRuR9oCj3JYs5At8fmg+G1YFr0VAh+P8xi+qQl+q8Y
fuXkkdI=
=PAc9
-----END PGP SIGNATURE-----
--=-=-=--
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997 nCipher Corporation Ltd,
1994-97 Ian Jackson.