diff --git a/DOCS/man/en/changes.rst b/DOCS/man/en/changes.rst index c4fc3a0812..cdbfb8f0ab 100644 --- a/DOCS/man/en/changes.rst +++ b/DOCS/man/en/changes.rst @@ -52,7 +52,7 @@ General changes for mplayer2 to mplayer3 * Cleaned up terminal output (nicer status line, less useless noise) * Support for playing URLs of popular streaming sites directly (e.g. ``mplayer3 https://www.youtube.com/watch?v=...``) -* Improved OpenGL output (``vo_gl3``) +* Improved OpenGL output (``vo_opengl``) * Make ``--softvol`` default (**mplayer3** is not a mixer control panel) * Improved support for .cue files * Screenshot improvements (can save screenshots as JPG, configurable filenames) diff --git a/DOCS/man/en/vo.rst b/DOCS/man/en/vo.rst index 34b547c4bc..93fc480977 100644 --- a/DOCS/man/en/vo.rst +++ b/DOCS/man/en/vo.rst @@ -16,8 +16,8 @@ in the list. Suboptions are optional and can mostly be omitted. *EXAMPLE*: - ``--vo=gl,xv,`` - Try the gl driver, then the Xv driver, then others. + ``--vo=opengl,xv,`` + Try the OpenGL driver, then the Xv driver, then others. Available video output drivers are: @@ -225,11 +225,226 @@ direct3d (Windows only) corevideo (Mac OS X 10.6 and later) Mac OS X CoreVideo video output driver. Uses the CoreVideo APIs to fill PixelBuffers and generate OpenGL textures from them (useful as a fallback - for vo_gl_). + for vo_opengl_). -.. _vo_gl: -gl - OpenGL video output driver, simple version. Video size must be smaller +.. _vo_opengl: +opengl + OpenGL video output driver. + + It supports extended scaling methods, dithering and color management. + It tries to use sane defaults for good quality output. + + Note that some cheaper LCDs do dithering that gravely interferes with + vo_opengl's dithering. Disabling dithering with ``dither-depth=-1`` helps. + + Requires at least OpenGL 2.1 and the GL_ARB_texture_rg extension. For older + drivers, ``opengl-old`` may work. + + Some features are available with OpenGL 3 capable graphics drivers only. + + lscale= + Set the scaling filter. Possible choices: + bilinear + bicubic_fast + sharpen3 + sharpen5 + hanning + hamming + hermite + quadric + bicubic + kaiser + catmull_rom + mitchell + spline16 + spline36 + gaussian + sinc2 + sinc3 + sinc4 + lanczos2 + lanczos3 + lanczos4 + blackman2 + blackman3 + blackman4 + + bilinear + Bilinear hardware texture filtering (fastest, mid-quality). + + lanczos2 + Lanczos scaling with radius=2. Provides a good quality and speed. + This is the default. + + lanczos3 + Lanczos with radius=3. + + bicubic_fast + Bicubic filter. Has a blurring effect on the image, even if no + scaling is done. + + sharpen3 + Unsharp masking (sharpening) with radius=3 and a default strength + of 0.5 (see ``lparam1``). + + sharpen5 + Unsharp masking (sharpening) with radius=5 and a default strength + of 0.5 (see ``lparam1``). + + mitchell + Mitchell-Netravali. The ``b`` and ``c`` parameters can be set with + ``lparam1`` and ``lparam2``. Both are set to 1/3 by default. + + lparam1= + Set filter parameters. Ignored if the filter is not tunable. These are + unset by default, and use the filter specific default if applicable. + + lparam2= + See ``lparam1``. + + osdcolor=<0xAARRGGBB> + Use the given color for the OSD. + + stereo= + Select a method for stereo display. You may have to use ``--aspect`` to + fix the aspect value. Experimental, do not expect too much from it. + + 0 + Normal 2D display + 1 + Convert side by side input to full-color red-cyan stereo. + 2 + Convert side by side input to full-color green-magenta stereo. + 3 + Convert side by side input to quadbuffered stereo. Only supported + by very few OpenGL cards. + + srgb + Enable gamma-correct scaling by working in linear light. This + makes use of sRGB textures and framebuffers. + This option forces the options 'indirect' and 'gamma'. + NOTE: for BT.709 colorspaces, a gamma of 2.35 is assumed. For + other YUV colorspaces, 2.2 is assumed. RGB input is always + assumed to be in sRGB. + + pbo + Enable use of PBOs. This is faster, but can sometimes lead to + sporadic and temporary image corruption. + + dither-depth= + Positive non-zero values select the target bit depth. Default: 0. + + \-1 + Disable any dithering done by mplayer. + 0 + Automatic selection. If output bit depth can't be detected, + 8 bits per component are assumed. + 8 + Dither to 8 bit output. + + Note that dithering will always be disabled if the bit depth + of the video is lower or equal to the detected dither-depth. + If color management is enabled, input depth is assumed to be + 16 bits, because the 3D LUT output is 16 bit wide. + + Note that the depth of the connected video display device can not be + detected. Often, LCD panels will do dithering on their own, which + conflicts with vo_opengl's dithering, and leads to ugly output. + + 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). + + + swapinterval= + Interval in displayed frames between two buffer swaps. + 1 is equivalent to enable VSYNC, 0 to disable VSYNC. + + no-scale-sep + When using a separable scale filter for luma, usually two filter + passes are done. This is often faster. However, it forces + conversion to RGB in an extra pass, so it can actually be slower + if used with fast filters on small screen resolutions. Using + this options will make rendering a single operation. + Note that chroma scalers are always done as 1-pass filters. + + cscale= + As lscale but for chroma (2x slower with little visible effect). + Note that with some scaling filters, upscaling is always done in + RGB. If chroma is not subsampled, this option is ignored, and the + luma scaler is used instead. Setting this option is often useless. + + no-fancy-downscaling + When using convolution based filters, don't extend the filter + size when downscaling. Trades downscaling performance for + reduced quality. + + no-npot + Force use of power-of-2 texture sizes. For debugging only. + Borders will be distorted due to filtering. + + glfinish + Call glFinish() before swapping buffers + + sw + Continue even if a software renderer is detected. + + backend= + auto + auto-select (default) + cocoa + Cocoa/OSX + win + Win32/WGL + x11 + X11/GLX + + indirect + Do YUV conversion and scaling as separate passes. This will + first render the video into a video-sized RGB texture, and + draw the result on screen. The luma scaler is used to scale + the RGB image when rendering to screen. The chroma scaler + is used only on YUV conversion, and only if the video uses + chroma-subsampling. + This mechanism is disabled on RGB input. + + fbo-format= + Selects the internal format of any FBO textures used. + fmt can be one of: rgb, rgba, rgb8, rgb10, rgb16, rgb16f, rgb32f + Default: rgb16. + + gamma + Always enable gamma control. (Disables delayed enabling.) + + icc-profile= + Load an ICC profile and use it to transform linear RGB to + screen output. Needs LittleCMS2 support compiled in. + + icc-cache= + Store and load the 3D LUT created from the ICC profile in + this file. This can be used to speed up loading, since + LittleCMS2 can take a while to create the 3D LUT. + Note that this file contains an uncompressed LUT. Its size depends on + the ``3dlut-size``, can become very big. + + icc-intent= + 0 + perceptual + 1 + relative colorimetric + 2 + saturation + 3 + absolute colorimetric (default) + + 3dlut-size=xx + Size of the 3D LUT generated from the ICC profile in each + dimension. Default is 128x256x64. + Sizes must be a power of two, and 256 at most. + +opengl-old + OpenGL video output driver, old version. Video size must be smaller than the maximum texture size of your OpenGL implementation. Intended to work even with the most basic OpenGL implementations, but also makes use of newer extensions, which allow support for more colorspaces and direct @@ -426,218 +641,6 @@ gl x11 X11/GLX -gl3 - OpenGL video output driver, extended version. - - It supports extended scaling methods, dithering and color management. - It tries to use sane defaults for good quality output. - - Note that some cheaper LCDs do dithering that gravely interferes with - vo_gl3's dithering. Disabling dithering with ``dither-depth=-1`` helps. - - Some features are available with OpenGL 3 capable graphics drivers only. - - lscale= - Set the scaling filter. Possible choices: - bilinear - bicubic_fast - sharpen3 - sharpen5 - hanning - hamming - hermite - quadric - bicubic - kaiser - catmull_rom - mitchell - spline16 - spline36 - gaussian - sinc2 - sinc3 - sinc4 - lanczos2 - lanczos3 - lanczos4 - blackman2 - blackman3 - blackman4 - - bilinear - Bilinear hardware texture filtering (fastest, mid-quality). - - lanczos2 - Lanczos scaling with radius=2. Provides a good quality and speed. - This is the default. - - lanczos3 - Lanczos with radius=3. - - bicubic_fast - Bicubic filter. Has a blurring effect on the image, even if no - scaling is done. - - sharpen3 - Unsharp masking (sharpening) with radius=3 and a default strength - of 0.5 (see ``lparam1``). - - sharpen5 - Unsharp masking (sharpening) with radius=5 and a default strength - of 0.5 (see ``lparam1``). - - mitchell - Mitchell-Netravali. The ``b`` and ``c`` parameters can be set with - ``lparam1`` and ``lparam2``. Both are set to 1/3 by default. - - lparam1= - Set filter parameters. Ignored if the filter is not tunable. These are - unset by default, and use the filter specific default if applicable. - - lparam2= - See ``lparam1``. - - osdcolor=<0xAARRGGBB> - Use the given color for the OSD. - - stereo= - Select a method for stereo display. You may have to use ``--aspect`` to - fix the aspect value. Experimental, do not expect too much from it. - - 0 - Normal 2D display - 1 - Convert side by side input to full-color red-cyan stereo. - 2 - Convert side by side input to full-color green-magenta stereo. - 3 - Convert side by side input to quadbuffered stereo. Only supported - by very few OpenGL cards. - - srgb - Enable gamma-correct scaling by working in linear light. This - makes use of sRGB textures and framebuffers. - This option forces the options 'indirect' and 'gamma'. - NOTE: for BT.709 colorspaces, a gamma of 2.35 is assumed. For - other YUV colorspaces, 2.2 is assumed. RGB input is always - assumed to be in sRGB. - - pbo - Enable use of PBOs. This is faster, but can sometimes lead to - sporadic and temporary image corruption. - - dither-depth= - Positive non-zero values select the target bit depth. Default: 0. - - \-1 - Disable any dithering done by mplayer. - 0 - Automatic selection. If output bit depth can't be detected, - 8 bits per component are assumed. - 8 - Dither to 8 bit output. - - Note that dithering will always be disabled if the bit depth - of the video is lower or equal to the detected dither-depth. - If color management is enabled, input depth is assumed to be - 16 bits, because the 3D LUT output is 16 bit wide. - - Note that the depth of the connected video display device can not be - detected. Often, LCD panels will do dithering on their own, which - conflicts with vo_gl3's dithering, and leads to ugly output. - - 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). - - - swapinterval= - Interval in displayed frames between two buffer swaps. - 1 is equivalent to enable VSYNC, 0 to disable VSYNC. - - no-scale-sep - When using a separable scale filter for luma, usually two filter - passes are done. This is often faster. However, it forces - conversion to RGB in an extra pass, so it can actually be slower - if used with fast filters on small screen resolutions. Using - this options will make rendering a single operation. - Note that chroma scalers are always done as 1-pass filters. - - cscale= - As lscale but for chroma (2x slower with little visible effect). - Note that with some scaling filters, upscaling is always done in - RGB. If chroma is not subsampled, this option is ignored, and the - luma scaler is used instead. Setting this option is often useless. - - no-fancy-downscaling - When using convolution based filters, don't extend the filter - size when downscaling. Trades downscaling performance for - reduced quality. - - no-npot - Force use of power-of-2 texture sizes. For debugging only. - Borders will be distorted due to filtering. - - glfinish - Call glFinish() before swapping buffers - - sw - Continue even if a software renderer is detected. - - backend= - auto - auto-select (default) - cocoa - Cocoa/OSX - win - Win32/WGL - x11 - X11/GLX - - indirect - Do YUV conversion and scaling as separate passes. This will - first render the video into a video-sized RGB texture, and - draw the result on screen. The luma scaler is used to scale - the RGB image when rendering to screen. The chroma scaler - is used only on YUV conversion, and only if the video uses - chroma-subsampling. - This mechanism is disabled on RGB input. - - fbo-format= - Selects the internal format of any FBO textures used. - fmt can be one of: rgb, rgba, rgb8, rgb10, rgb16, rgb16f, rgb32f - Default: rgb16. - - gamma - Always enable gamma control. (Disables delayed enabling.) - - icc-profile= - Load an ICC profile and use it to transform linear RGB to - screen output. Needs LittleCMS2 support compiled in. - - icc-cache= - Store and load the 3D LUT created from the ICC profile in - this file. This can be used to speed up loading, since - LittleCMS2 can take a while to create the 3D LUT. - Note that this file contains an uncompressed LUT. Its size depends on - the ``3dlut-size``, can become very big. - - icc-intent= - 0 - perceptual - 1 - relative colorimetric - 2 - saturation - 3 - absolute colorimetric (default) - - 3dlut-size=xx - Size of the 3D LUT generated from the ICC profile in each - dimension. Default is 128x256x64. - Sizes must be a power of two, and 256 at most. - null Produces no video output. Useful for benchmarking. diff --git a/DOCS/tech-overview.txt b/DOCS/tech-overview.txt index 7faffec616..9acfe846cf 100644 --- a/DOCS/tech-overview.txt +++ b/DOCS/tech-overview.txt @@ -160,13 +160,13 @@ libvo/: Video output. They also create GUI windows and handle user input. In most cases, the windowing code is shared among VOs, like x11_common.c for X11 and w32_common.c for Windows. The VOs stand between frontend and windowing code. - vo_gl can pick a windowing system at runtime, e.g. the same binary can + vo_opengl can pick a windowing system at runtime, e.g. the same binary can provide both X11 and Cocoa support on OSX. VOs can be reconfigured at runtime. A config() call can change the video resolution and format, without destroying the window. - vo_vdpau and vo_gl3 should be taken as reference. + vo_vdpau and vo_opengl should be taken as reference. libaf/: Audio filter chain. format.h/format.c define the audio formats. diff --git a/libvo/video_out.c b/libvo/video_out.c index 2be311f87c..f75d9f273c 100644 --- a/libvo/video_out.c +++ b/libvo/video_out.c @@ -73,8 +73,8 @@ int vo_colorkey = 0x0000ff00; // default colorkey is green extern struct vo_driver video_out_x11; extern struct vo_driver video_out_vdpau; extern struct vo_driver video_out_xv; -extern struct vo_driver video_out_gl_nosw; -extern struct vo_driver video_out_gl; +extern struct vo_driver video_out_opengl; +extern struct vo_driver video_out_opengl_old; extern struct vo_driver video_out_gl3; extern struct vo_driver video_out_null; extern struct vo_driver video_out_image; @@ -91,7 +91,8 @@ const struct vo_driver *video_out_drivers[] = &video_out_direct3d, #endif #ifdef CONFIG_GL_COCOA - &video_out_gl, + &video_out_opengl, + &video_out_opengl_old, #endif #ifdef CONFIG_COREVIDEO &video_out_corevideo, @@ -103,9 +104,9 @@ const struct vo_driver *video_out_drivers[] = &video_out_xv, #endif #ifdef CONFIG_GL - &video_out_gl3, #if !defined CONFIG_GL_COCOA - &video_out_gl, + &video_out_opengl, + &video_out_opengl_old, #endif #endif #ifdef CONFIG_X11 @@ -120,10 +121,8 @@ const struct vo_driver *video_out_drivers[] = #ifdef CONFIG_ENCODING &video_out_lavc, #endif -#ifdef CONFIG_X11 #ifdef CONFIG_GL - &video_out_gl_nosw, -#endif + &video_out_gl3, #endif NULL }; diff --git a/libvo/vo_opengl.c b/libvo/vo_opengl.c index d2a28aa41a..2f1cc0545b 100644 --- a/libvo/vo_opengl.c +++ b/libvo/vo_opengl.c @@ -54,7 +54,7 @@ #include "fastmemcpy.h" #include "sub/ass_mp.h" -static const char vo_gl3_shaders[] = +static const char vo_opengl_shaders[] = // Generated from libvo/vo_opengl_shaders.glsl #include "libvo/vo_opengl_shaders.h" ; @@ -655,7 +655,7 @@ static void compile_shaders(struct gl_priv *p) void *tmp = talloc_new(NULL); - struct bstr src = bstr0(vo_gl3_shaders); + struct bstr src = bstr0(vo_opengl_shaders); char *vertex_shader = get_section(tmp, src, "vertex_all"); char *shader_prelude = get_section(tmp, src, "prelude"); char *s_video = get_section(tmp, src, "frag_video"); @@ -2437,10 +2437,29 @@ err_out: return -1; } +const struct vo_driver video_out_opengl = { + .is_new = true, + .info = &(const vo_info_t) { + "Extended OpenGL Renderer", + "opengl", + "Based on vo_gl.c by Reimar Doeffinger", + "" + }, + .preinit = preinit, + .config = config, + .control = control, + .draw_slice = draw_slice, + .draw_osd = draw_osd, + .flip_page = flip_page, + .check_events = check_events, + .uninit = uninit, +}; + +// short-term compatibility const struct vo_driver video_out_gl3 = { .is_new = true, .info = &(const vo_info_t) { - "OpenGL 3.x", + "Extended OpenGL Renderer", "gl3", "Based on vo_gl.c by Reimar Doeffinger", "" @@ -2456,8 +2475,8 @@ const struct vo_driver video_out_gl3 = { }; static const char help_text[] = -"\n--vo=gl3 command line help:\n" -"Example: mplayer --vo=gl3:scale-sep:lscale=lanczos2\n" +"\n--vo=opengl command line help:\n" +"Example: mplayer --vo=opengl:scale-sep:lscale=lanczos2\n" "\nOptions:\n" " lscale=\n" " Set the scaling filter. Possible choices:\n" diff --git a/libvo/vo_opengl_old.c b/libvo/vo_opengl_old.c index f24448ac6c..e8cdd47172 100644 --- a/libvo/vo_opengl_old.c +++ b/libvo/vo_opengl_old.c @@ -1230,8 +1230,8 @@ static int preinit(struct vo *vo, const char *arg) if (subopt_parse(arg, subopts) != 0) { mp_msg(MSGT_VO, MSGL_FATAL, - "\n-vo gl command line help:\n" - "Example: mplayer -vo gl:slice-height=4\n" + "\n-vo opengl_old command line help:\n" + "Example: mplayer -vo opengl_old:slice-height=4\n" "\nOptions:\n" " nomanyfmts\n" " Disable extended color formats for OpenGL 1.2 and later\n" @@ -1454,33 +1454,11 @@ static int control(struct vo *vo, uint32_t request, void *data) return VO_NOTIMPL; } -const struct vo_driver video_out_gl = { +const struct vo_driver video_out_opengl_old = { .is_new = true, .info = &(const vo_info_t) { "OpenGL", - "gl", - "Reimar Doeffinger ", - "" - }, - .preinit = preinit, - .config = config, - .control = control, - .draw_slice = draw_slice, - .draw_osd = draw_osd, - .flip_page = flip_page, - .check_events = check_events, - .uninit = uninit, -}; - -// "-vo gl" used to accept software renderers by default. This is not the case -// anymore: you have to use "-vo gl:sw" to get this. This means gl and gl_nosw -// are exactly the same thing now. Keep gl_nosw to not break user configs. -const struct vo_driver video_out_gl_nosw = -{ - .is_new = true, - .info = &(const vo_info_t) { - "OpenGL no software rendering", - "gl_nosw", + "opengl-old", "Reimar Doeffinger ", "" }, diff --git a/mplayer.c b/mplayer.c index 65c9731c53..7dc4137a3d 100644 --- a/mplayer.c +++ b/mplayer.c @@ -186,7 +186,7 @@ static const char av_desync_help_text[] = _( " If you have PulseAudio, try --ao=alsa .\n" "- Slow video output.\n" " Try a different -vo driver (-vo help for a list) or try -framedrop!\n" -"- Playing a video file with --vo=gl/gl3 with higher FPS than your monitor.\n" +"- Playing a video file with --vo=opengl with higher FPS than the monitor.\n" " This is due to vsync limiting the framerate. Try --no-vsync, or a\n" " different VO.\n" "- Playing from a slow network source.\n"