summaryrefslogtreecommitdiffstats
path: root/libvo/vo_gl.c
Commit message (Collapse)AuthorAgeFilesLines
* vo_gl: improve 10-bit YUV->RGB conversion accuracy slightlyUoti Urpala2012-03-091-1/+2
| | | | | | | | | | Modify the YUV->RGB conversion matrix to take into account the difference between the same color value being x/255 in a 8-bit texture and x*256/65535 in a 16-bit texture (actually things are stored as x*4/65535 for 10-bit color, but that can be ignored here). This 0.4 % difference in the shader float value could make shades of gray in 10-bit (or generally more than 8 bit) YUV produce RGB values with green slightly higher than red/blue.
* Merge remote-tracking branch 'wm4/window_title'Uoti Urpala2011-12-071-5/+5
|\
| * libvo: remove title argument from struct vo_driver.configwm42011-12-061-5/+5
| | | | | | | | | | | | | | | | | | | | This affects only the "new" VO API. The config() title argument was barely used, and it's hardcoded to "MPlayer" in vf_vo.c. The X11 and the Cocoa GUI backends, which are the only ones properly supporting window titles, ignored this argument. Remove the title argument. Add the vo_get_window_title function. All GUI VOs are supposed to use it for the window title.
* | core, vo: new window refresh logic, add slow-video OSD redrawUoti Urpala2011-12-061-20/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Remove code refreshing window contents after events such as resize from vo_vdpau, vo_gl and vo_xv. Instead have them simply set a flag indicating that a refresh is needed, and have the player core perform that refresh by doing an OSD redraw. Also add support for updating the OSD contents over existing frames during slow-but-not-paused playback. The VOs now also request a refresh if parameters affecting the picture change (equalizer settings, colormatrix, VDPAU deinterlacing setting). Even previously the picture was typically redrawn with the new settings while paused because new OSD messages associated with setting changes triggered a redraw, but this did not happen if OSD was turned off. A minor imperfection is that now window system events can trigger a single one-frame step forward when using vo_xv after pausing so that vo_xv does not yet have a copy of the current image. This could be fixed but I think it's not important enough to bother.
* | core, vo: modify OSD redraw architecture, support EOSDUoti Urpala2011-12-061-6/+2
|/ | | | | | | | | | | | | | | | Previously the core sent VFCTRL_REDRAW_OSD to change OSD contents over the current frame. Change this to VFCTRL_REDRAW_FRAME followed by normal EOSD and OSD drawing calls, then vo_flip_page(). The new version supports changing EOSD contents for libass-rendered subtitles and simplifies the redraw support code needed per VO. vo_xv doesn't support EOSD changes because it relies on vf_ass to render EOSD contents earlier in the filter chain. vo_xv logic is additionally simplified because the previous commit removed the need to track the status of current and next images separately (now each frame is guaranteed to become "visible" soon after we receive it as "next", with no VO code running in the interval between).
* vo_gl: fix 10 bit with Mesa drivers (Intel/Nouveau on Linux)wm42011-11-251-2/+5
| | | | | | | | | | | | | | | | | | The GL_LUMINANCE16 texture format had only 8 bit precision on Mesa based drivers. This caused heavy degradation of the image when playing formats with more than 8 bits per pixel, such as 10 bit h264. Use GL_R16 instead, which at least Mesa and Nvidia drivers actually implement as 16 bit textures. Since sampling from this texture format doesn't return anything meaningful in the other color components (unlike luminance textures), the shader code has to be slightly changed. GL_R16 requires the GL_ARB_texture_rg extension. Check for it, and fall back to the old texture format if it's not available. The low precision of the GL_LUMINANCE16 format has just been fixed in upstream Mesa, but it'll take a while before that fix is available in distros.
* vo_gl: implement screenshotswm42011-11-251-0/+59
|
* vo_gl: fix crash with backends lacking control() featureswm42011-10-241-0/+6
| | | | | | | | Some functionality provided by the windowing backend (such as x11, win32) is optional. The function pointers in MPGLContext are NULL if the functionality is not implemented. Check them before calling them, instead of crashing. This happened at least on Windows with the "vo_ontop" command.
* vo_gl: remove support for nvidia register combiners (yuv=1)wm42011-10-241-1/+6
| | | | | | | | | | | | | The register combiner color conversion is broken and seems to use a slightly incorrect color matrix (the image looks gray-ish). Completely remove all code related to nVidia register combiners. Unless you have an ancient nVidia GPU, there's no reason to prefer register combiners over fragment shaders. Users with ancient GPUs without fragment shader support can just use -vo xv. Passing yuv=1 (register combiners) as sub option will print a warning and use yuv=2 (fragment shaders) instead.
* vo_gl: fix crash with ati-hack after 20256a8a64c9679bc9136bbwm42011-10-241-28/+34
| | | | | | | | | | | | | | | | | | | | | | Using the ati-hack and force-pbo suboptions (both can be enabled automatically when particular ATI drivers are detected) could lead to segfaults due to incorrect length calculation. The problem is that width*((bpp+7)/8) == width*(bpp+7)/8 doesn't hold true in general. The old code used bpp/8, because bpp was always guaranteed to be divisible by 8. When commit 20256a8a64c96 fixed bugs around 10 bit pixel formats, this assumption was broken, and resulted in out of bounds memory accesses. Additionally, the color values that were used to clear image borders were incorrect and showed up as pink borders on the right/bottom sides of the video when playing 10 bit content. Make the clear value approximately correct; the borders are still filled with a single byte value even though formats with 9-16 bits should be cleared with 2-byte values with the low byte 0. This commit also contains some other minor cleanups with no functional changes.
* vo_gl: remove mesa-buffer suboptionwm42011-10-241-72/+28
| | | | | | | This option enabled using Mesa specific functions, which have never been widely supported, and were removed from Mesa in 2010. http://cgit.freedesktop.org/mesa/mesa/commit/?id=cb2a66fd0c095fe03be5aaf88c8d48f5867425d3
* vo_gl: move window creation functions from vo_gl.c into gl_common.cwm42011-10-241-58/+1
| | | | | | | Now all windowing specific code is in gl_common.c. init_mpglcontext() used to set dummy callbacks for non-optional windowing callbacks. Remove these, as they only lead to confusion.
* vo_gl: add new vo name "gl_sdl" to make SDL+GL mode availablewm42011-10-241-9/+41
| | | | | | | | | | | | | | | | | The actual work is done by the existing SDL code. This commit merely makes it possible to explicitly select the SDL backend ("gl" alone uses SDL only if the X11 and win32 backends are not available, while the new "gl_sdl" always forces use of SDL). Also disable YUV conversion method autodetection when SDL is used. This gets rid of a temporary window that appears for a moment and is immediately closed again. SDL can't deal with the VOFLAG_HIDDEN flag, which is needed to create an invisible GL context (when the autodetection is run, the video size isn't yet known to the VO, and creating a window then resizing would cause problems with window placement). Instead always pick the fragment program method by default (yuv=2). This change affects the normal "gl" VO too if it chooses the SDL backend.
* vo_gl: remove "noaspect" suboptionwm42011-10-241-13/+13
| | | | | | Apparently this is fully redundant given the global "noaspect" option. Refuse this suboption, and output an error message suggesting the correct option.
* vo_gl: convert to new API, clean up codewm42011-10-241-1149/+1336
| | | | | | | Reformat vo_gl.c, gl_common.c, gl_common.h. Remove all global variables and move them into a context struct (the Windows and SDL backends still refer to global_vo though). Change vo_gl.c to use the "new" VO API.
* video, options: implement better YUV->RGB conversion controlwm42011-10-161-75/+46
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Rewrite control of the colorspace and input/output level parameters used in YUV-RGB conversions, replacing VO-specific suboptions with new common options and adding configuration support to more cases. Add new option --colormatrix which selects the colorspace the original video is assumed to have in YUV->RGB conversions. The default behavior changes from assuming BT.601 to colorspace autoselection between BT.601 and BT.709 using a simple heuristic based on video size. Add new options --colormatrix-input-range and --colormatrix-output-range which select input YUV and output RGB range. Disable the previously existing VO-specific colorspace and level conversion suboptions in vo_gl and vo_vdpau. Remove the "yuv_colorspace" property and replace it with one named "colormatrix" and semantics matching the new option. Add new properties matching the options for level conversion. Colorspace selection is currently supported by vo_gl, vo_vdpau, vo_xv and vf_scale, and all can change it at runtime (previously only vo_vdpau and vo_xv could). vo_vdpau now uses the same conversion matrix generation as vo_gl instead of libvdpau functionality; the main functional difference is that the "contrast" equalizer control behaves somewhat differently (it scales the Y component around 1/2 instead of around 0, so that contrast 0 makes the image gray rather than black). vo_xv does not support level conversion. vf_scale supports range setting for input, but always outputs full-range RGB. The value of the slave properties is the policy setting used for conversions. This means they can be set to any value regardless of whether the current VO supports that value or whether there currently even is any video. Possibly separate properties could be added to query the conversion actually used at the moment, if any. Because the colorspace and level settings are now set with a single VF/VO control call, the return value of that is no longer used to signal whether all the settings are actually supported. Instead code should set all the details it can support, and ignore the rest. The core will use GET_YUV_COLORSPACE to check which colorspace details have been set and which not. In other words, the return value for SET_YUV_COLORSPACE only signals whether any kind of YUV colorspace conversion handling exists at all, and VOs have to take care to return the actual state with GET_YUV_COLORSPACE instead. To be changed in later commits: add missing option documentation.
* vo_gl: fix image corruption with PBOs when playing 10 bit videowm42011-10-061-10/+14
| | | | | | | | vo_gl.c hardcoded the assumption that YUV formats always use 1 byte per component. This corrupted the output when playing 10 bit h264 video. Only the PBO code path was affected. PBOs are normally unused, unless ATI is detected, or the force-pbo option is used.
* vo_gl: fix YUY2/YVYU colorspace mixupreimar2011-07-061-1/+1
| | | | | | Second GL_YCBCR_MESA format is YVYU, not YUY2. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33694 b3059339-0415-0410-9bf9-f77b7e298cf2
* vo_gl: Support 9- and 10-bit YUV input for OpenGL VOsreimar2011-07-061-8/+13
| | | | | | | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33502 b3059339-0415-0410-9bf9-f77b7e298cf2 Fix clear/border color of chroma texture for 9- and 10-bit formats. Avoids pink borders for those formats. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33504 b3059339-0415-0410-9bf9-f77b7e298cf2
* vo_gl: don't accept 9/10-bit formats as inputreimar2011-06-291-8/+10
| | | | | | | | | Make mp_get_chroma_shift() simpler/more generic and add an argument to get the per-component bit depth. Use this to check more properly for supported formats in gl and gl2 vos (only 8 and 16 bit are supported, 9 and 10 are not). git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33452 b3059339-0415-0410-9bf9-f77b7e298cf2
* vo_gl: fix "gamma" equalizer settingreimar2011-04-121-0/+2
| | | | | | | The "gamma" setting only changed red gamma. Fix it to change all of red, green and blue gamma. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32895 b3059339-0415-0410-9bf9-f77b7e298cf2
* vo_gl: mark llvmpipe as a software rendererreimar2011-01-291-1/+2
| | | | | | | llvmpipe, while only slow instead of insanely slow, is a software renderer. Recognize it as such and disable -vo gl_nosw on it. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32719 b3059339-0415-0410-9bf9-f77b7e298cf2
* sub/OSD: move some related files to sub/Uoti Urpala2011-01-261-3/+3
|
* cleanup: remove NULL checks before free() all over the codecboesch2010-11-141-2/+2
| | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32624 b3059339-0415-0410-9bf9-f77b7e298cf2
* vo_gl: create stereo-capable window when using Quadbuffer 3Dreimar2010-11-141-0/+2
| | | | | | | Select a stereo pixel format for window when Quadbuffer OpenGL was selected as 3D mode. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32620 b3059339-0415-0410-9bf9-f77b7e298cf2
* vo_gl.c: Use early return instead of large if blockreimar2010-11-021-26/+26
| | | | | | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31887 b3059339-0415-0410-9bf9-f77b7e298cf2 Reindent. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31888 b3059339-0415-0410-9bf9-f77b7e298cf2
* vo_gl: Make OSD rendering code more readablereimar2010-11-021-7/+12
| | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31886 b3059339-0415-0410-9bf9-f77b7e298cf2
* vo_gl: Make it possible to select GL_NEAREST scalingreimar2010-11-021-1/+9
| | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31743 b3059339-0415-0410-9bf9-f77b7e298cf2
* vo_gl: add helper macros to build the yuv conversion type numberreimar2010-11-021-1/+3
| | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31742 b3059339-0415-0410-9bf9-f77b7e298cf2
* vo_gl: Cosmetics: create luma texture firstreimar2010-11-021-4/+5
| | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31740 b3059339-0415-0410-9bf9-f77b7e298cf2
* vo_gl: remove unused labelUoti Urpala2010-11-021-1/+0
|
* vo_gl: remove "broken" comment from quadbuffer stereocehoyos2010-11-021-1/+1
| | | | | | | | | Independent tests indicate that GLX_STEREO is working fine on supported hardware. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31647 b3059339-0415-0410-9bf9-f77b7e298cf2 git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31648 b3059339-0415-0410-9bf9-f77b7e298cf2
* vo_gl: Some small whitespace and {} cosmeticsreimar2010-11-021-19/+21
| | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31639 b3059339-0415-0410-9bf9-f77b7e298cf2
* vo_gl: Try to get a quadbuffered visual for corresponding 3D modereimar2010-11-021-1/+13
| | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31638 b3059339-0415-0410-9bf9-f77b7e298cf2
* vo_gl: cleanupreimar2010-11-021-9/+2
| | | | | | | | | | Move declaration to where it is actually used. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31636 b3059339-0415-0410-9bf9-f77b7e298cf2 Use a more sensible variable name. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31637 b3059339-0415-0410-9bf9-f77b7e298cf2
* vo_gl: Add initial stereo supportreimar2010-11-021-0/+24
| | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31633 b3059339-0415-0410-9bf9-f77b7e298cf2
* vo_gl: Fix -geometry with -wid behaviour (y position was flipped)reimar2010-11-021-3/+4
| | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31600 b3059339-0415-0410-9bf9-f77b7e298cf2
* vo_gl: More sensible behaviour for -geometry with -widreimar2010-11-021-1/+1
| | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31428 b3059339-0415-0410-9bf9-f77b7e298cf2
* vo_gl, csputils: dual-license under LGPL v2.1reimar2010-11-021-0/+5
| | | | | | | | | | | | Dual-license gl_common and vo_gl under the LGPL v2.1 or later as an alternative to the GPL license. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31375 b3059339-0415-0410-9bf9-f77b7e298cf2 Allow LGPL for csputils as well, they were previously part of gl_common and are still an important part of it. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31376 b3059339-0415-0410-9bf9-f77b7e298cf2
* vo_gl: Remove nonsense commented-out function headerreimar2010-10-271-1/+0
| | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31340 b3059339-0415-0410-9bf9-f77b7e298cf2
* Merge svn changes up to r31284Uoti Urpala2010-06-021-1/+1
|\
| * Treat a NULL renderer string as indication for software renderer.reimar2010-05-301-1/+1
| | | | | | | | | | | | | | Usually it means OpenGL will not work at all. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31284 b3059339-0415-0410-9bf9-f77b7e298cf2
* | Merge svn changes up to r31211Uoti Urpala2010-05-301-5/+12
|\| | | | | | | | | The merged cache2.c changes are known to have problems. Will merge further fixes to them before merging this to the master branch.
| * Fix OpenGL autodetection to not leave values at -1.reimar2010-05-241-5/+12
| | | | | | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31207 b3059339-0415-0410-9bf9-f77b7e298cf2
* | Merge svn changes up to r31169Uoti Urpala2010-05-301-5/+7
|\|
| * Default to rectangle=1 on Mesa DRI R200 drivers, much faster and less buggy.reimar2010-05-091-0/+2
| | | | | | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31151 b3059339-0415-0410-9bf9-f77b7e298cf2
| * Minor code cleanup.reimar2010-05-091-4/+4
| | | | | | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31150 b3059339-0415-0410-9bf9-f77b7e298cf2
| * yuv=5 supports brightness and contrast adjustment.reimar2010-05-091-1/+1
| | | | | | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31149 b3059339-0415-0410-9bf9-f77b7e298cf2
* | Merge svn changes up to r31133Uoti Urpala2010-05-071-2/+3
|\|
| * Also print OpenGL renderer string with vendor and version with -vreimar2010-05-011-1/+2
| | | | | | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31127 b3059339-0415-0410-9bf9-f77b7e298cf2
| * 100l, open the customtex also in binary mode, not just the program.reimar2010-04-301-1/+1
| | | | | | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31106 b3059339-0415-0410-9bf9-f77b7e298cf2
* | Merge svn changes up to r31097Uoti Urpala2010-04-261-8/+28
|\|
| * Support for auto-selecting the OpenGL backend.reimar2010-04-251-7/+1
| | | | | | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31086 b3059339-0415-0410-9bf9-f77b7e298cf2
| * Add reinitialization support. Necessary for fullscreen on OSX.reimar2010-04-251-0/+4
| | | | | | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31085 b3059339-0415-0410-9bf9-f77b7e298cf2
| * Remove unnecessary check.reimar2010-04-251-2/+0
| | | | | | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31078 b3059339-0415-0410-9bf9-f77b7e298cf2
| * Set SDL window title.reimar2010-04-251-0/+1
| | | | | | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31076 b3059339-0415-0410-9bf9-f77b7e298cf2
| * Window resizing support for -vo gl with SDL backend.reimar2010-04-251-7/+2
| | | | | | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31075 b3059339-0415-0410-9bf9-f77b7e298cf2
| * Disable OSD support by default if the necessary OpenGL functionality is missing.reimar2010-04-241-1/+3
| | | | | | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31065 b3059339-0415-0410-9bf9-f77b7e298cf2
| * SDL support with related crash-resilience fixes.reimar2010-04-241-4/+30
| | | | | | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31064 b305