summaryrefslogtreecommitdiffstats
path: root/DOCS/man/vo.rst
diff options
context:
space:
mode:
Diffstat (limited to 'DOCS/man/vo.rst')
-rw-r--r--DOCS/man/vo.rst1080
1 files changed, 117 insertions, 963 deletions
diff --git a/DOCS/man/vo.rst b/DOCS/man/vo.rst
index c775f6dde7..34302f9a3f 100644
--- a/DOCS/man/vo.rst
+++ b/DOCS/man/vo.rst
@@ -4,26 +4,25 @@ VIDEO OUTPUT DRIVERS
Video output drivers are interfaces to different video output facilities. The
syntax is:
-``--vo=<driver1[:suboption1[=value]:...],driver2,...[,]>``
+``--vo=<driver1,driver2,...[,]>``
Specify a priority list of video output drivers to be used.
-If the list has a trailing ',', mpv will fall back on drivers not contained
-in the list. Suboptions are optional and can mostly be omitted.
-
-You can also set defaults for each driver. The defaults are applied before the
-normal driver parameters.
+If the list has a trailing ``,``, mpv will fall back on drivers not contained
+in the list.
``--vo-defaults=<driver1[:parameter1:parameter2:...],driver2,...>``
Set defaults for each driver.
+ Deprecated. No replacement.
+
.. note::
See ``--vo=help`` for a list of compiled-in video output drivers.
- The recommended output driver is ``--vo=opengl-hq``. All other drivers are
- for compatibility or special purposes. By default, ``--vo=opengl`` is used,
- but if that appears not to work, it fallback to other drivers (in the same
- order as listed by ``--vo=help``).
+ The recommended output driver is ``--vo=opengl``, which is the default. All
+ other drivers are for compatibility or special purposes. If the default
+ does not work, it will fallback to other drivers (in the same order as
+ listed by ``--vo=help``).
Available video output drivers are:
@@ -34,11 +33,13 @@ Available video output drivers are:
.. note:: This driver is for compatibility with old systems.
- ``adaptor=<number>``
+ The following global options are supported by this video output:
+
+ ``--xv-adaptor=<number>``
Select a specific XVideo adapter (check xvinfo results).
- ``port=<number>``
+ ``--xv-port=<number>``
Select a specific XVideo port.
- ``ck=<cur|use|set>``
+ ``--xv-ck=<cur|use|set>``
Select the source from which the color key is taken (default: cur).
cur
@@ -49,9 +50,11 @@ Available video output drivers are:
set
Same as use but also sets the supplied color key.
- ``ck-method=<man|bg|auto>``
+ ``--xv-ck-method=<none|man|bg|auto>``
Sets the color key drawing method (default: man).
+ none
+ Disables color-keying.
man
Draw the color key manually (reduces flicker in some cases).
bg
@@ -59,14 +62,11 @@ Available video output drivers are:
auto
Let Xv draw the color key.
- ``colorkey=<number>``
+ ``--xv-colorkey=<number>``
Changes the color key to an RGB value of your choice. ``0x000000`` is
black and ``0xffffff`` is white.
- ``no-colorkey``
- Disables color-keying.
-
- ``buffers=<number>``
+ ``--xv-buffers=<number>``
Number of image buffers to use for the internal ringbuffer (default: 2).
Increasing this will use more memory, but might help with the X server
not responding quickly enough if video FPS is close to or higher than
@@ -89,17 +89,19 @@ Available video output drivers are:
``chroma-deint``, ``pullup``, ``hqscaling``. These sub-options are
deprecated, and you should use the ``vdpaupp`` video filter instead.
- ``sharpen=<-1-1>``
+ The following global options are supported by this video output:
+
+ ``--vo-vdpau-sharpen=<-1-1>``
(Deprecated. See note about ``vdpaupp``.)
For positive values, apply a sharpening algorithm to the video, for
negative values a blurring algorithm (default: 0).
- ``denoise=<0-1>``
+ ``--vo-vdpau-denoise=<0-1>``
(Deprecated. See note about ``vdpaupp``.)
Apply a noise reduction algorithm to the video (default: 0; no noise
reduction).
- ``deint=<-4-4>``
+ ``--vo-vdpau-deint=<-4-4>``
(Deprecated. See note about ``vdpaupp``.)
Select deinterlacing mode (default: 0). In older versions (as well as
@@ -122,32 +124,32 @@ Available video output drivers are:
4
Motion-adaptive temporal deinterlacing with edge-guided spatial
interpolation. Needs fast video hardware.
- ``chroma-deint``
+ ``--vo-vdpau-chroma-deint``
(Deprecated. See note about ``vdpaupp``.)
Makes temporal deinterlacers operate both on luma and chroma (default).
Use no-chroma-deint to solely use luma and speed up advanced
deinterlacing. Useful with slow video memory.
- ``pullup``
+ ``--vo-vdpau-pullup``
(Deprecated. See note about ``vdpaupp``.)
Try to apply inverse telecine, needs motion adaptive temporal
deinterlacing.
- ``hqscaling=<0-9>``
+ ``--vo-vdpau-hqscaling=<0-9>``
(Deprecated. See note about ``vdpaupp``.)
0
Use default VDPAU scaling (default).
1-9
Apply high quality VDPAU scaling (needs capable hardware).
- ``fps=<number>``
+ ``--vo-vdpau-fps=<number>``
Override autodetected display refresh rate value (the value is needed
for framedrop to allow video playback rates higher than display
refresh rate, and for vsync-aware frame timing adjustments). Default 0
means use autodetected value. A positive value is interpreted as a
refresh rate in Hz and overrides the autodetected value. A negative
value disables all timing adjustment and framedrop logic.
- ``composite-detect``
+ ``--vo-vdpau-composite-detect``
NVIDIA's current VDPAU implementation behaves somewhat differently
under a compositing window manager and does not give accurate frame
timing information. With this option enabled, the player tries to
@@ -158,20 +160,20 @@ Available video output drivers are:
with the composited mode behavior of the NVIDIA driver, there is no
hard playback speed limit even without the disabled logic. Enabled by
default, use ``no-composite-detect`` to disable.
- ``queuetime_windowed=<number>`` and ``queuetime_fs=<number>``
+ ``--vo-vdpau-queuetime-windowed=<number>`` and ``queuetime-fs=<number>``
Use VDPAU's presentation queue functionality to queue future video
frame changes at most this many milliseconds in advance (default: 50).
See below for additional information.
- ``output_surfaces=<2-15>``
+ ``--vo-vdpau-output-surfaces=<2-15>``
Allocate this many output surfaces to display video frames (default:
3). See below for additional information.
- ``colorkey=<#RRGGBB|#AARRGGBB>``
+ ``--vo-vdpau-colorkey=<#RRGGBB|#AARRGGBB>``
Set the VDPAU presentation queue background color, which in practice
is the colorkey used if VDPAU operates in overlay mode (default:
``#020507``, some shade of black). If the alpha component of this value
is 0, the default VDPAU colorkey will be used instead (which is usually
green).
- ``force-yuv``
+ ``--vo-vdpau-force-yuv``
Never accept RGBA input. This means mpv will insert a filter to convert
to a YUV format before the VO. Sometimes useful to force availability
of certain YUV-only features, like video equalizer or deinterlacing.
@@ -198,31 +200,40 @@ Available video output drivers are:
driver implementation may also have limits on the length of maximum
queuing time or number of queued surfaces that work well or at all.
-``direct3d_shaders`` (Windows only)
+``direct3d`` (Windows only)
Video output driver that uses the Direct3D interface.
.. note:: This driver is for compatibility with systems that don't provide
- proper OpenGL drivers.
+ proper OpenGL drivers, and where ANGLE does not perform well.
+
+ .. note:: Before to 0.21.0, ``direct3d_shaders`` and ``direct3d`` were
+ different, with ``direct3d`` not using shader by default. Now
+ both use shaders by default, and ``direct3d_shaders`` is a
+ deprecated alias. Use the ``--vo-direct3d-prefer-stretchrect``
+ or the ``--vo-direct3d-disable-shaders`` options to get the old
+ behavior of ``direct3d``.
+
+ The following global options are supported by this video output:
- ``prefer-stretchrect``
+ ``--vo-direct3d-prefer-stretchrect``
Use ``IDirect3DDevice9::StretchRect`` over other methods if possible.
- ``disable-stretchrect``
+ ``--vo-direct3d-disable-stretchrect``
Never render the video using ``IDirect3DDevice9::StretchRect``.
- ``disable-textures``
+ ``--vo-direct3d-disable-textures``
Never render the video using D3D texture rendering. Rendering with
textures + shader will still be allowed. Add ``disable-shaders`` to
completely disable video rendering with textures.
- ``disable-shaders``
+ ``--vo-direct3d-disable-shaders``
Never use shaders when rendering video.
- ``only-8bit``
+ ``--vo-direct3d-only-8bit``
Never render YUV video with more than 8 bits per component.
Using this flag will force software conversion to 8-bit.
- ``disable-texture-align``
+ ``--vo-direct3d-disable-texture-align``
Normally texture sizes are always aligned to 16. With this option
enabled, the video texture will always have exactly the same size as
the video itself.
@@ -232,11 +243,11 @@ Available video output drivers are:
might crash, might cause slow downs, etc. Contact the developers if you
actually need any of these for performance or proper operation.
- ``force-power-of-2``
+ ``--vo-direct3d-force-power-of-2``
Always force textures to power of 2, even if the device reports
non-power-of-2 texture sizes as supported.
- ``texture-memory=<mode>``
+ ``--vo-direct3d-texture-memory=<mode>``
Only affects operation with shaders/texturing enabled, and (E)OSD.
Possible values:
@@ -260,26 +271,24 @@ Available video output drivers are:
Use ``D3DPOOL_SCRATCH``, with a ``D3DPOOL_SYSTEMMEM`` texture for
locking.
- ``swap-discard``
+ ``--vo-direct3d-swap-discard``
Use ``D3DSWAPEFFECT_DISCARD``, which might be faster.
Might be slower too, as it must(?) clear every frame.
- ``exact-backbuffer``
+ ``--vo-direct3d-exact-backbuffer``
Always resize the backbuffer to window size.
-``direct3d`` (Windows only)
- Same as ``direct3d_shaders``, but with the options ``disable-textures``
- and ``disable-shaders`` forced.
-
- .. note:: This driver is for compatibility with old systems.
-
``opengl``
OpenGL video output driver. It supports extended scaling methods, dithering
and color management.
- By default, it tries to use fast and fail-safe settings. Use the alias
- ``opengl-hq`` to use this driver with defaults set to high quality
- rendering.
+ See `OpenGL renderer options`_ for options specific to this VO.
+
+ By default, it tries to use fast and fail-safe settings. Use the
+ ``opengl-hq`` profile to use this driver with defaults set to high
+ quality rendering. (This profile is also the replacement for
+ ``--vo=opengl-hq``.) The profile can be applied with ``--profile=opengl-hq``
+ and its contents can be viewed with ``--show-profile=opengl-hq``.
Requires at least OpenGL 2.1.
@@ -294,886 +303,12 @@ Available video output drivers are:
the hardware decoder APIs.
``opengl`` makes use of FBOs by default. Sometimes you can achieve better
- quality or performance by changing the ``fbo-format`` suboption to
+ quality or performance by changing the ``--opengl-fbo-format`` option to
``rgb16f``, ``rgb32f`` or ``rgb``. Known problems include Mesa/Intel not
accepting ``rgb16``, Mesa sometimes not being compiled with float texture
support, and some OS X setups being very slow with ``rgb16`` but fast
- with ``rgb32f``. If you have problems, you can also try passing the
- ``dumb-mode=yes`` sub-option.
-
- ``dumb-mode=<yes|no>``
- This mode is extremely restricted, and will disable most extended
- OpenGL features. This includes high quality scalers and custom
- shaders!
-
- It is intended for hardware that does not support FBOs (including GLES,
- which supports it insufficiently), or to get some more performance out
- of bad or old hardware.
-
- This mode is forced automatically if needed, and this option is mostly
- useful for debugging. It's also enabled automatically if nothing uses
- features which require FBOs.
-
- This option might be silently removed in the future.
-
- ``scale=<filter>``
-
- ``bilinear``
- Bilinear hardware texture filtering (fastest, very low quality).
- This is the default for compatibility reasons.
-
- ``spline36``
- Mid quality and speed. This is the default when using ``opengl-hq``.
-
- ``lanczos``
- Lanczos scaling. Provides mid quality and speed. Generally worse
- than ``spline36``, but it results in a slightly sharper image
- which is good for some content types. The number of taps can be
- controlled with ``scale-radius``, but is best left unchanged.
-
- This filter corresponds to the old ``lanczos3`` alias if the default
- radius is used, while ``lanczos2`` corresponds to a radius of 2.
-
- (This filter is an alias for ``sinc``-windowed ``sinc``)
-
- ``ewa_lanczos``
- Elliptic weighted average Lanczos scaling. Also known as Jinc.
- Relatively slow, but very good quality. The radius can be
- controlled with ``scale-radius``. Increasing the radius makes the
- filter sharper but adds more ringing.
-
- (This filter is an alias for ``jinc``-windowed ``jinc``)
-
- ``ewa_lanczossharp``
- A slightly sharpened version of ewa_lanczos, preconfigured to use
- an ideal radius and parameter. If your hardware can run it, this is
- probably what you should use by default.
-
- ``mitchell``
- Mitchell-Netravali. The ``B`` and ``C`` parameters can be set with
- ``scale-param1`` and ``scale-param2``. This filter is very good at
- downscaling (see ``dscale``).
-
- ``oversample``
- A version of nearest neighbour that (naively) oversamples pixels,
- so that pixels overlapping edges get linearly interpolated instead
- of rounded. This essentially removes the small imperfections and
- judder artifacts caused by nearest-neighbour interpolation, in
- exchange for adding some blur. This filter is good at temporal
- interpolation, and also known as "smoothmotion" (see ``tscale``).
-
- ``linear``
- A ``tscale`` filter.
-
- ``custom``
- A user-defined custom shader (see ``scale-shader``).
-
- There are some more filters, but most are not as useful. For a complete
- list, pass ``help`` as value, e.g.::
-
- mpv --vo=opengl:scale=help
-
- ``scale-param1=<value>``, ``scale-param2=<value>``
- Set filter parameters. Ignored if the filter is not tunable.
- Currently, this affects the following filter parameters:
-
- bcspline
- Spline parameters (``B`` and ``C``). Defaults to 0.5 for both.
-
- gaussian
- Scale parameter (``t``). Increasing this makes the result blurrier.
- Defaults to 1.
-
- oversample
- Minimum distance to an edge before interpolation is used. Setting
- this to 0 will always interpolate edges, whereas setting it to 0.5
- will never interpolate, thus behaving as if the regular nearest
- neighbour algorithm was used. Defaults to 0.0.
-
- ``scale-blur=<value>``
- Kernel scaling factor (also known as a blur factor). Decreasing this
- makes the result sharper, increasing it makes it blurrier (default 0).
- If set to 0, the kernel's preferred blur factor is used. Note that
- setting this too low (eg. 0.5) leads to bad results. It's generally
- recommended to stick to values between 0.8 and 1.2.
-
- ``scale-radius=<value>``
- Set radius for filters listed below, must be a float number between 0.5
- and 16.0. Defaults to the filter's preferred radius if not specified.
-
- ``sinc`` and derivatives, ``jinc`` and derivatives, ``gaussian``, ``box`` and ``triangle``
-
- Note that depending on filter implementation details and video scaling
- ratio, the radius that actually being used might be different
- (most likely being increased a bit).
-
- ``scale-antiring=<value>``
- Set the antiringing strength. This tries to eliminate ringing, but can
- introduce other artifacts in the process. Must be a float number
- between 0.0 and 1.0. The default value of 0.0 disables antiringing
- entirely.
-
- Note that this doesn't affect the special filters ``bilinear`` and
- ``bicubic_fast``.
-
- ``scale-window=<window>``
- (Advanced users only) Choose a custom windowing function for the kernel.
- Defaults to the filter's preferred window if unset. Use
- ``scale-window=help`` to get a list of supported windowing functions.
-
- ``scale-wparam=<window>``
- (Advanced users only) Configure the parameter for the window function
- given by ``scale-window``. Ignored if the window is not tunable.
- Currently, this affects the following window parameters:
-
- kaiser
- Window parameter (alpha). Defaults to 6.33.
- blackman
- Window parameter (alpha). Defaults to 0.16.
- gaussian
- Scale parameter (t). Increasing this makes the window wider.
- Defaults to 1.
-
- ``scaler-lut-size=<4..10>``
- Set the size of the lookup texture for scaler kernels (default: 6).
- The actual size of the texture is ``2^N`` for an option value of ``N``.
- So the lookup texture with the default setting uses 64 samples.
-
- All weights are bilinearly interpolated from those samples, so
- increasing the size of lookup table might improve the accuracy of
- scaler.
-
- ``scaler-resizes-only``
- Disable the scaler if the video image is not resized. In that case,
- ``bilinear`` is used instead whatever is set with ``scale``. Bilinear
- will reproduce the source image perfectly if no scaling is performed.
- Enabled by default. Note that this option never affects ``cscale``.
-
- ``pbo``
- Enable use of PBOs. On some drivers this can be faster, especially if
- the source video size is huge (e.g. so called "4K" video). On other
- drivers it might be slower or cause latency issues.
-
- In theory, this can sometimes lead to sporadic and temporary image
- corruption (because reupload is not retried when it fails).
-
- ``dither-depth=<N|no|auto>``
- Set dither target depth to N. Default: no.
-
- no
- Disable any dithering done by mpv.
- auto
- Automatic selection. If output bit depth cannot be detected,
- 8 bits per component are assumed.
- 8
- Dither to 8 bit output.
-
- Note that the depth of the connected video display device cannot be
- detected. Often, LCD panels will do dithering on their own, which
- conflicts with ``opengl``'s dithering and leads to ugly output.
-
- ``dither-size-fruit=<2-8>``
- Set the size of the dither matrix (default: 6). The actual size of
- the matrix is ``(2^N) x (2^N)`` for an option value of ``N``, so a
- value of 6 gives a size of 64x64. The matrix is generated at startup
- time, and a large matrix can take rather long to compute (seconds).
-
- Used in ``dither=fruit`` mode only.
-
- ``dither=<fruit|ordered|no>``
- Select dithering algorithm (default: fruit). (Normally, the
- ``dither-depth`` option controls whether dithering is enabled.)
-
- ``temporal-dither``
- Enable temporal dithering. (Only active if dithering is enabled in
- general.) This changes between 8 different dithering patterns on each
- frame by changing the orientation of the tiled dithering matrix.
- Unfortunately, this can lead to flicker on LCD displays, since these
- have a high reaction time.
-
- ``temporal-dither-period=<1-128>``
- Determines how often the dithering pattern is updated when
- ``temporal-dither`` is in use. 1 (the default) will update on every
- video frame, 2 on every other frame, etc.
-
- ``debug``
- Check for OpenGL errors, i.e. call ``glGetError()``. Also, request a
- debug OpenGL context (which does nothing with current graphics drivers
- as of this writing).
-
- ``interpolation``
- Reduce stuttering caused by mismatches in the video fps and display
- refresh rate (also known as judder).
-
- .. warning:: This requires setting the ``--video-sync`` option to one
- of the ``display-`` modes, or it will be silently disabled.
- This was not required before mpv 0.14.0.
-
- This essentially attempts to interpolate the missing frames by
- convoluting the video along the temporal axis. The filter used can be
- controlled using the ``tscale`` setting.
-
- Note that this relies on vsync to work, see ``swapinterval`` for more
- information.
-
- ``swapinterval=<n>``
- Interval in displayed frames between two buffer swaps.
- 1 is equivalent to enable VSYNC, 0 to disable VSYNC. Defaults to 1 if
- not specified.
-
- Note that this depends on proper OpenGL vsync support. On some platforms
- and drivers, this only works reliably when in fullscreen mode. It may
- also require driver-specific hacks if using multiple monitors, to
- ensure mpv syncs to the right one. Compositing window managers can
- also lead to bad results, as can missing or incorrect display FPS
- information (see ``--display-fps``).
-
- ``dscale=<filter>``
- Like ``scale``, but apply these filters on downscaling instead. If this
- option is unset, the filter implied by ``scale`` will be applied.
-
- ``cscale=<filter>``
- As ``scale``, but for interpolating chroma information. If the image
- is not subsampled, this option is ignored entirely.
-
- ``tscale=<filter>``
- The filter used for interpolating the temporal axis (frames). This is
- only used if ``interpolation`` is enabled. The only valid choices
- for ``tscale`` are separable convolution filters (use ``tscale=help``
- to get a list). The default is ``mitchell``.
-
- Note that the maximum supported filter radius is currently 3, due to
- limitations in the number of video textures that can be loaded
- simultaneously.
-
- ``tscale-clamp``
- Clamp the ``tscale`` filter kernel's value range to [0-1]. This reduces
- excessive ringing artifacts in the temporal domain (which typically
- manifest themselves as short flashes or fringes of black, mostly
- around moving edges) in exchange for potentially adding more blur.
-
- ``interpolation-threshold=<0..1,-1>``
- Threshold below which frame ratio interpolation gets disabled (default:
- ``0.0001``). This is calculated as ``abs(disphz/vfps - 1) < threshold``,
- where ``vfps`` is the speed-adjusted display FPS, and ``disphz`` the
- display refresh rate.
-
- The default is intended to almost always enable interpolation if the
- playback rate is even slightly different from the display refresh rate.
- But note that if you use e.g. ``--video-sync=display-vdrop``, small
- deviations in the rate can disable interpolation and introduce a
- discontinuity every other minute.
-
- Set this to ``-1`` to disable this logic.
-
- ``dscale-radius``, ``cscale-radius``, ``tscale-radius``, etc.
- Set filter parameters for ``dscale``, ``cscale`` and ``tscale``,
- respectively.
-
- See the corresponding options for ``scale``.
-
- ``linear-scaling``
- Scale in linear light. It should only be used with a ``fbo-format``
- that has at least 16 bit precision.
-
- ``correct-downscaling``
- When using convolution based filters, extend the filter size
- when downscaling. Increases quality, but reduces performance while
- downscaling.
-
- This will perform slightly sub-optimally for anamorphic video (but still
- better than without it) since it will extend the size to match only the
- milder of the scale factors between the axes.
-
- ``pre-shaders=<files>``, ``post-shaders=<files>``, ``scale-shader=<file>``
- Custom GLSL fragment shaders.
-
- pre-shaders (list)
- These get applied after conversion to RGB and before linearization
- and upscaling. Operates on non-linear RGB (same as input). This is
- the best place to put things like sharpen filters.
- scale-shader
- This gets used instead of scale/cscale when those options are set
- to ``custom``. The colorspace it operates on depends on the values
- of ``linear-scaling`` and ``sigmoid-upscaling``, so no assumptions
- should be made here.
- post-shaders (list)
- These get applied after upscaling and subtitle blending (when
- ``blend-subtitles`` is enabled), but before color management.
- Operates on linear RGB if ``linear-scaling`` is in effect,
- otherwise non-linear RGB. This is the best place for colorspace
- transformations (eg. saturation mapping).
-
- These files must define a function with the following signature::
-
- vec4 sample_pixel(sampler2D tex, vec2 pos, vec2 tex_size)
-
- (If there is no string ``sample_pixel`` in the shader script, it will
- use ``sample`` instead. This is a compatibility hack for older shader
- scripts, and is deprecated.)
-
- The meanings of the parameters are as follows:
-
- sampler2D tex
- The source texture for the shader.
- vec2 pos
- The position to be sampled, in coordinate space [0-1].
- vec2 tex_size
- The size of the texture, in pixels. This may differ from image_size,
- eg. for subsampled content or for post-shaders.
-
- In addition to these parameters, the following uniforms are also
- globally available:
-
- float random
- A random number in the range [0-1], different per frame.
- int frame
- A simple count of frames rendered, increases by one per frame and
- never resets (regardless of seeks).
- vec2 image_size
- The size in pixels of the input image.
- vec2 target_size
- The size in pixels of the visible part of the scaled (and possibly
- cropped) image.
-
- For example, a shader that inverts the colors could look like this::
-
- vec4 sample(sampler2D tex, vec2 pos, vec2 tex_size)
- {
- vec4 color = texture(tex, pos);
- return vec4(1.0 - color.rgb, color.a);
- }
-
- ``user-shaders=<files>``
- Custom GLSL hooks. These are similar to ``post-shaders`` etc., but more
- flexible: They can be injected at almost arbitrary points in the
- rendering pipeline, and access all previous intermediate textures.
-
- .. admonition:: Warning
-
- The syntax is not stable yet and may change any time.
-
- The general syntax of a user shader looks like this::
-
- //!METADATA ARGS...
- //!METADATA ARGS...
-
- vec4 hook() {
- ...
- return something;
- }
-
- //!METADATA ARGS...
- //!METADATA ARGS...
-
- ...
-
- Each block of metadata, along with the non-metadata lines after it,
- defines a single pass. Each pass can set the following metadata:
-
- HOOK <name> (required)
- The texture which to hook into. May occur multiple times within a
- metadata block, up to a predetermined limit. See below for a list
- of hookable textures.
-
- BIND <name>
- Loads a texture and makes it available to the pass, and sets up
- macros to enable accessing it. See below for a list of set macros.
- By default, no textures are bound. The special name HOOKED can be
- used to refer to the texture that triggered this pass.
-
- SAVE <name>
- Gives the name of the texture to save the result of this pass
- into. By default, this is set to the special name HOOKED which has
- the effect of overwriting the hooked texture.
-
- WIDTH <szexpr>, HEIGHT <szexpr>
- Specifies the size of the resulting texture for this pass.
- ``szexpr`` refers to an expression in RPN (reverse polish
- notation), using the operators + - * / > < !, floating point
- literals, and references to sizes of existing texture and OUTPUT
- (such as MAIN.width or CHROMA.height). By default, these are set to
- HOOKED.w and HOOKED.h, respectively.
-
- WHEN <szexpr>
- Specifies a condition that needs to be true (non-zero) for the
- shader stage to be evaluated. If it fails, it will silently be
- omitted. (Note that a shader stage like this which has a dependency
- on an optional hook point can still cause that hook point to be
- saved, which has some minor overhead)
-
- OFFSET ox oy
- Indicates a pixel shift (offset) introduced by this pass. These
- pixel offsets will be accumulated and corrected during the
- next scaling pass (``cscale`` or ``scale``). The default values
- are 0 0 which correspond to no shift. Note that offsets are ignored
- when not overwriting the hooked texture.
-
- COMPONENTS n
- Specifies how many components of this pass's output are relevant
- and should be stored in the texture, up to 4 (rgba). By default,
- this value is equal to the number of components in HOOKED.
-
- Each bound texture (via ``BIND``) will make available the following
- definitions to that shader pass, where NAME is the name of the bound
- texture:
-
- vec4 NAME_tex(vec2 pos)
- The sampling function to use to access the texture at a certain
- spot (in texture coordinate space, range [0,1]). This takes care
- of any necessary normalization conversions.
- vec4 NAME_texOff(vec2 offset)
- Sample the texture at a certain offset in pixels. This works like
- NAME_tex but additionally takes care of necessary rotations, so
- that sampling at e.g. vec2(-1,0) is always one pixel to the left.
- vec2 NAME_pos
- The local texture coordinate of that texture, range [0,1].
- vec2 NAME_size
- The (rotated) size in pixels of the texture.
- mat2 NAME_rot
- The rotation matrix associated with this texture. (Rotates
- pixel space to texture coordinates)
- vec2 NAME_pt
- The (unrotated) size of a single pixel, range [0,1].
- sampler NAME_raw
- The raw bound texture itself. The use of this should be
- avoided unless absolutely necessary.
-
- In addition, the global uniforms described in ``post-shaders`` are
- also available.
-
- Internally, vo_opengl may generate any number of the following
- textures. Whenever a texture is rendered and saved by vo_opengl, all of
- the passes that have hooked into it will run, in the order they were
- added by the user. This is a list of the legal hook points:
-
- RGB, LUMA, CHROMA, ALPHA, XYZ (resizable)
- Source planes (raw). Which of these fire depends on the image
- format of the source.
-
- CHROMA_SCALED, ALPHA_SCALED (fixed)
- Source planes (upscaled). These only fire on subsampled content.
-
- NATIVE (resizable)
- The combined image, in the source colorspace, before conversion
- to RGB.
-
- MAINPRESUB (resizable)
- The image, after conversion to RGB, but before
- ``blend-subtitles=video`` is applied.
-
- MAIN (resizable)
- The main image, after conversion to RGB but before upscaling.
-
- LINEAR (fixed)
- Linear light image, before scaling. This only fires when
- ``linear-scaling`` is in effect.
-
- SIGMOID (fixed)
- Sigmoidized light, before scaling. This only fires when
- ``sigmoid-upscaling`` is in effect.
-
- PREKERNEL (fixed)
- The image immediately before the scaler kernel runs.
-
- POSTKERNEL (fixed)
- The image immediately after the scaler kernel runs.
-
- SCALED (fixed)
- The final upscaled image, before color management.
-
- OUTPUT (fixed)
- The final output image, after color management but before
- dithering and drawing to screen.
-
- Only the textures labelled with ``resizable`` may be transformed by the
- pass. When overwriting a texture marked ``fixed``, the WIDTH, HEIGHT
- and OFFSET must be left at their default values.
-
- ``deband``
- Enable the debanding algorithm. This greatly reduces the amount of
- visible banding, blocking and other quantization artifacts, at the
- expensive of very slightly blurring some of the finest details. In
- practice, it's virtually always an improvement - the only reason to
- disable it would be for performance.
-
- ``deband-iterations=<1..16>``
- The number of debanding steps to perform per sample. Each step reduces
- a bit more banding, but takes time to compute. Note that the strength
- of each step falls off very quickly, so high numbers (>4) are
- practically useless. (Default 1)
-
- ``deband-threshold=<0..4096>``
- The debanding filter's cut-off threshold. Higher numbers increase the
- debanding strength dramatically but progressively diminish image
- details. (Default 64)
-
- ``deband-range=<1..64>``
- The debanding filter's initial radius. The radius increases linearly
- for each iteration. A higher radius will find more gradients, but
- a lower radius will smooth more aggressively. (Default 16)
-
- If you increase the ``deband-iterations``, you should probably
- decrease this to compensate.
-
- ``deband-grain=<0..4096>``
- Add some extra noise to the image. This significantly helps cover up
- remaining quantization artifacts. Higher numbers add more noise.
- (Default 48)
-
- ``sigmoid-upscaling``
- When upscaling, use a sigmoidal color transform to avoid emphasizing
- ringing artifacts. This also implies ``linear-scaling``.
-
- ``sigmoid-center``
- The center of the sigmoid curve used for ``sigmoid-upscaling``, must
- be a float between 0.0 and 1.0. Defaults to 0.75 if not specified.
-
- ``sigmoid-slope``
- The slope of the sigmoid curve used for ``sigmoid-upscaling``, must
- be a float between 1.0 and 20.0. Defaults to 6.5 if not specified.
-
- ``sharpen=<value>``
- If set to a value other than 0, enable an unsharp masking filter.
- Positive values will sharpen the image (but add more ringing and
- aliasing). Negative values will blur the image. If your GPU is powerful
- enough, consider alternatives like the ``ewa_lanczossharp`` scale
- filter, or the ``scale-blur`` sub-option.
-
- (This feature is the replacement for the old ``sharpen3`` and
- ``sharpen5`` scalers.)
-
- ``glfinish``
- Call ``glFinish()`` before and after swapping buffers (default: disabled).
- Slower, but might improve results when doing framedropping.
- Can completely ruin performance. The details depend entirely on the
- OpenGL driver.
-
- ``waitvsync``
- Call ``glXWaitVideoSyncSGI`` after each buffer swap (default: disabled).
- This may or may not help with video timing accuracy and frame drop. It's
- possible that this makes video output slower, or has no effect at all.
-
- X11/GLX only.
-
- ``vsync-fences=<N>``
- Synchronize the CPU to the Nth past frame using the ``GL_ARB_sync``
- extension. A value of 0 disables this behavior (default). A value of
- 1 means it will synchronize to the current frame after rendering it.
- Like ``glfinish`` and ``waitvsync``, this can lower or ruin performance.
- Its advantage is that it can span multiple frames, and effectively limit
- the number of frames the GPU queues ahead (which also has an influence
- on vsync).
-
- ``dwmflush=<no|windowed|yes|auto>``
- Calls ``DwmFlush`` after swapping buffers on Windows (default: auto).
- It also sets ``SwapInterval(0)`` to ignore the OpenGL timing. Values
- are: no (disabled), windowed (only in windowed mode), yes (also in
- full screen).
-
- The value ``auto`` will try to determine whether the compositor is
- active, and calls ``DwmFlush`` only if it seems to be.
-
- This may help to get more consistent frame intervals, especially with
- high-fps clips - which might also reduce dropped frames. Typically, a
- value of ``windowed`` should be enough, since full screen may bypass the
- DWM.
-
- Windows only.
-
- ``dcomposition=<yes|no>``
- Allows DirectComposition when using the ANGLE backend (default: yes).
- DirectComposition implies