summaryrefslogtreecommitdiffstats
path: root/libvo
Commit message (Collapse)AuthorAgeFilesLines
* core: add infrastructure to get screenshots from VOswm42011-11-251-0/+12
| | | | | | | | | | | | | | | | | | | Add a VO command (VOCTRL_SCREENSHOT) which requests a screenshot directly from the VO. If VO support is available, screenshots will be taken instantly (no more 1 or 2 frames delay). Taking screenshots when hardware decoding is in use will also work (vdpau). Additionally, the screenshots will now use the same colorspace as the video display. Change the central MPContext to be allocated with talloc so that it can be used as a talloc parent context. This commit does not yet implement the functionality for any VO (added in subsequent commits). The old screenshot video filter is not needed anymore if VO support is present, and in that case will not be used even if it is present in the filter chain. If VO support is not available then the filter is used like before. Note that the filter still has some of the old problems, such as delaying the screenshot by at least 1 frame.
* 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-243-169/+7
| | | | | | | | | | | | | 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-243-79/+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: sdl: handle key modifierswm42011-10-241-9/+43
| | | | | | | | | Now modifiers such as shift, control, and alt are handled. Unfortunately this requires a hack to deal with a SDL quirks when combining CTRL and a letter key. Also add some missing key syms.
* vo_gl: move window creation functions from vo_gl.c into gl_common.cwm42011-10-243-90/+71
| | | | | | | 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/sdl: use desktop resolution for fullscreen modewm42011-10-243-0/+20
| | | | | Before the SDL code would change screen resolution when switching to fullscreen. Try to keep existing desktop resolution instead.
* vo_gl: add new vo name "gl_sdl" to make SDL+GL mode availablewm42011-10-242-9/+45
| | | | | | | | | | | | | | | | | 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-243-2745/+2980
| | | | | | | 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.
* vo_gl2, vo_matrixview: remove these VOswm42011-10-245-1680/+0
| | | | | | | | | | | | | | | | | | | | | Delete the vo_gl2 and vo_matrixview implementations. vo_gl2 was barely useful anymore. It was a hack based on an old vo_gl.c version, and all it did differently was rendering the video in tiles instead of using a single texture. That made it work with some crappy OpenGL implementations. These days all GPUs support textures of at least 2048x2048 pixels, which is enough for HD playback. On the other hand, gl2 suffered from various bugs and deficiencies, all of which are fixed in gl. Its existence also confused users; many thought that gl2 is the next version of gl and attempted to use it, even though it's much worse than gl and they should have used that instead. Should it turn out that tiling is actually useful, it should be implemented in vo_gl, instead of keeping vo_gl2 alive. vo_matrixview was a toy that couldn't even properly display a video. All it did was display a screensaver-like animation that showed "a Matrix-like running-text effect". (mplayer is not a screensaver.)
* video, options: implement better YUV->RGB conversion controlwm42011-10-167-167/+241
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* csputils/vo_gl: rewrite YUV->RGB matrix generationUoti Urpala2011-08-292-77/+97
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Rewrite the csputils.c code generating a conversion matrix for YUV->RGB conversions (currently used by vo_gl only). Functional differences: - The separate "mplayer default" colorspace is removed, and BT.601 is used instead (the default colorspace was in fact BT.601; see below). - The old code was missing chroma scaling. As a result the "mplayer default" colorspace actually mapped to BT.601, and everything else was buggy (I guess the other colorspaces were added with particular coefficient semantics, without understanding that the original "default colorspace" was actually BT.601 and why its coefficients differed from the added version). - The old code had a bug in the equalizer hue equations. - The old code assumed that for specifying whether input and output were limited-range or full-range YUV or RGB it would make sense to specify "no conversion" meaning full-range YUV to full-range RGB or limited-range YUV to limited-range RGB. This isn't true; limited- range YUV has different ranges for luma and chroma (16-235 vs 16-240) which means you have to scale chroma for limited->limited conversions. The new code assumes limited->limited conversions for the levelconv parameter 2. It'd probably make sense to change the API later to specify the ranges of input and output separately. - The undocumented EBU and XYZ colorspaces are removed. I doubt any videos use these. Also the EBU colorspace looks like it'd expect a different input range - at least no input would map to full RGB red as it was.
* cosmetics: csputils.[ch]: reindentUoti Urpala2011-08-282-138/+146
|
* video_out.h: change VOCTRL_* defines to enumharklu2011-08-251-54/+56
| | | | | | | | Convert the list of VOCTLR_* defines to an enum, dropping some unused values. This resolves a collision between VOCTRL_XOVERLAY_SET_COLORKEY and VOCTRL_REDRAW_OSD, which had the same value (the XOVERLAY one was only used by vo_xvr100 and vo_tdfx, so this didn't matter much in practice).
* vo_vpdau: fix preemption recovery broken in decec7f2a37e559dUoti Urpala2011-08-111-11/+22
| | | | | | | | Commit decec7f2a3 ("vo_vdpau: skip resize code if not fully initialized") broke preemption recovery because the resize code stayed incorrectly disabled when it would have been used to reinitialize things during recovery. Revert that commit and add different checks to avoid running various code when not in a fully functional state.
* vo: X key input: remove ambiguous KeySym remappingUoti Urpala2011-07-292-68/+63
| | | | | | | | | | | | Code mapping X keyboard events to internal player key names remapped the incoming KeySym values in a way that only kept information about the lowest byte of the value and whether or not the value was below 256. This caused collisions between values. Remove this obviously broken mapping and use the raw KeySym values instead. I'm not familiar enough with X key handling to tell whether there was any valid motivation whatsoever for the mapping, but the implementation was certainly broken; if something else breaks it'll have to be fixed later.
* cleanup: do libav* initialization on startupUoti Urpala2011-07-181-1/+0
| | | | | | | Do the global initialization of libavcodec and libavformat (avcodec_register_all(), av_register_all()) immediately on program startup and remove the initialization calls from various individual modules that use libavcodec/libavformat functionality.
* vo_vdpau: skip resize code if not fully initializedUoti Urpala2011-07-171-0/+5
| | | | | | | Window events or user commands could trigger a call to resize() before config() had been called. This caused at least error messages. Add a check to make resize() exit without doing anything in this case. It will be called again later when the output is configured.
* input: rework event reading and command queuingUoti Urpala2011-07-171-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Rework much of the logic related to reading from event sources and queuing commands. The two biggest architecture changes are: - The code buffering keycodes in mp_fifo.c is gone. Instead key input is now immediately fed to input.c and interpreted as commands, and then the commands are buffered instead. - mp_input_get_cmd() now always tries to read every available event from every event source and convert them to (buffered) commands. Before it would only process new events until one new command became available. Some relevant behavior changes: - Before commands could be lost when stream code called mp_input_check_interrupt() which read commands (to see if they were of types that triggered aborts during slow IO tasks) and then threw them away. This was especially an issue if cache was enabled and slow to read. Fixed - now it's possible to check whether there are queued commands which will abort playback of the current file without throwing other commands away. - mp_input_check_interrupt() now prints a message if it returns true. This is especially useful because the failures caused by aborted stream reads can trigger error messages from other code that was doing the read; the new message makes it more obvious what the cause of the subsequent error messages is. - It's now possible to again avoid making stdin non-blocking (which caused some issues) without reintroducing extra latency. The change will be done in a subsequent commit. - Event sources that do not support select() should now have somewhat lower latency in certain situations as they will be checked both before and after select()/sleep in input reading; before the sleep always happened first even if such sources already had queued input. Before the key fifo was also handled in this manner (first key triggered select, but if multiple were read then rest could be delayed; however in most cases this didn't add latency in practice as after central code started doing command handling it queried for further commands with a max sleep time of 0). - Key fifo limiting is more accurate now: it now counts actual commands intead of keycodes, and all queued keys are read immediately from input devices so they can be counted correctly. - Since keypresses are now interpreted immediately, commands which change keybindings will no longer affect following keypresses that have already been read before the command is executed. This should not be an issue in practice with current keybinding behavior.
* vo_directx: include <libavutil/common.h> for FFMINUoti Urpala2011-07-071-0/+1
| | | | | 070491f1029ca3d74322146e646d653f9f5dc153 added an use of FFMIN to vo_directx.c but failed to include a header for the macro. Fix.
* Merge branch 'mplayer1_changes'Uoti Urpala2011-07-0615-484/+130
|\
| * cleanup: silence some clang warningsreimar2011-07-063-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Cosmetics: vo_mpegpes.c: Fix strange space placement Avoids clang warning that =- might have been intended as -=. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33797 b3059339-0415-0410-9bf9-f77b7e298cf2 vo_jpeg: Use "const char *" type for paths. Fixes a clang warning due to sign mismatch when calling open(). git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33799 b3059339-0415-0410-9bf9-f77b7e298cf2 mga_template.c: Remove pointless and in addition incorrect cast. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33800 b3059339-0415-0410-9bf9-f77b7e298cf2
| * vo_gl: fix YUY2/YVYU colorspace mixupreimar2011-07-062-2/+4
| | | | | | | | | | | | Second GL_YCBCR_MESA format is YVYU, not YUY2. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33694 b3059339-0415-0410-9bf9-f77b7e298cf2
| * cleanup: vo_directx: remove redundant codereimar2011-07-061-94/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Simplify code for printing display adapter list. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33672 b3059339-0415-0410-9bf9-f77b7e298cf2 Remove left-over code from icon/cursor handling that is now done by w32_common.c git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33673 b3059339-0415-0410-9bf9-f77b7e298cf2 Remove more code and variables that have no purpose anymore. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33674 b3059339-0415-0410-9bf9-f77b7e298cf2 Remove some #includes that are no longer needed. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33675 b3059339-0415-0410-9bf9-f77b7e298cf2 Remove more unnecessary code/defines. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33677 b3059339-0415-0410-9bf9-f77b7e298cf2 Move check_events function to avoid forward declaration. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33678 b3059339-0415-0410-9bf9-f77b7e298cf2 Remove more unused variables. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33679 b3059339-0415-0410-9bf9-f77b7e298cf2 Add const to avoid compiler warning. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33680 b3059339-0415-0410-9bf9-f77b7e298cf2 Use the proper type for the palette, fixes compiler warning. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33681 b3059339-0415-0410-9bf9-f77b7e298cf2
| * vo_directx: Change vo_directx to use w32_common.creimar2011-07-061-370/+43
| | | | | | | | | | | | | | | | | | | | | | While I tested it quite thoroughly, with and without -wid, -vm, -fs, ... it is _very_ likely to break something, please report any regressions! In the worst case it can still be reverted, however since it has very little relevance nowadays it will rot all the faster if not at least some code is shared. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33657 b3059339-0415-0410-9bf9-f77b7e298cf2
| * VO: w32_common: also generate VO_EVENT_MOVEreimar2011-07-061-0/+8
| | | | | | | | | | | | | | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33650 b3059339-0415-0410-9bf9-f77b7e298cf2 Generate VO_EVENT_MOVE also with -wid. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33656 b3059339-0415-0410-9bf9-f77b7e298cf2
| * VO: support Pause/Break key in X11 inputdiego2011-07-062-1/+3
| | | | | | | | | | | | | | Allow Pause/Break key to be bound as MPlayer input key under X11. patch by Steaphan Greene, sgreene cs.binghamton edu git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33609 b3059339-0415-0410-9bf9-f77b7e298cf2
| * cleanup: x11_common: remove pointless GC operationsiive2011-07-061-3/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Remove useless XSetBackground() call right before freeing the graphic context. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33524 b3059339-0415-0410-9bf9-f77b7e298cf2 Create empty vo_gc graphic context instead of one with undefined foreground color. The code that uses vo_gc already employs XSetForeground()/XSetBackground() to change the context accordingly. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33525 b3059339-0415-0410-9bf9-f77b7e298cf2
| * vo_xv: avoid setting background color due to resize flickeriive2011-07-061-4/+5
| | | | | | | | | | | | | | | | | | Set background color only when using ck-method=background. In the other cases clearing of the non-video image area should be done manually. Not drawing on the video image area prevents flickering (visible when resizing). git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33522 b3059339-0415-0410-9bf9-f77b7e298cf2
| * vo_gl: Support 9- and 10-bit YUV input for OpenGL VOsreimar2011-07-065-15/+46
| | | | | | | | | | | | | | | | | | 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
| * cleanup: vo_direct3d: Mark a function staticdiego2011-07-061-2/+3
| | | | | | | | | | | | | | This fixes the warning: libvo/vo_direct3d.c:984:6: warning: no previous prototype for 'vo_draw_alpha_l8a8' git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33499 b3059339-0415-0410-9bf9-f77b7e298cf2
* | vo: avoid losing initial expose eventUoti Urpala2011-07-061-3/+2
| | | | | | | | | | | | | | | | | | The x11_common.c window creation code could lose the initial expose event due to input mask changes. This meant that the window might not be cleared at start (there's a vo_x11_clearwindow() call but it may do nothing if it runs before the window is mapped). Modify the code to avoid losing the expose event. Handling that event should ensure the window is cleared and otherwise set up properly.
* | vo_xv: avoid clearing too much on resizeUoti Urpala2011-07-064-32/+6
|/ | | | | | | | | | | | | vo_xv set the "use_fs" parameter to vo_x11_clearwindow_part(). This meant it always used the whole screen size to calculate the area to clear. I can't see why overriding the vo->dwidth/dheight values would ever be the right thing to do (if in fullscreen they should be set to match that), so remove the use_fs parameter and always use the dwidth/dheight values in the function. Also delete code drawing back borders in vo_xv_draw colorkey. That should already happen in vo_x11_clearwindow_part(); if it doesn't then things need to be fixed anyway because colorkey code only ran in fullscreen mode (but borders must work in window mode too).
* debug output: reduce verbosity of some frequent messagesUoti Urpala2011-07-051-5/+4
| | | | | Drop from frequent (per-frame) messages from DBG2 to DBG3. Drop VDPAU clock adjustment messages from V to DBG2.
* VO: silence "[ASPECT] Warning: No suitable new res found!"Uoti Urpala2011-07-051-1/+1
| | | | | | | | | | The warning "[ASPECT] Warning: No suitable new res found!" was printed from aspect() if the video ended up being downscaled from the original size AND the horizontal direction was the more limiting one for aspect-aware scaling. Also, because aspect() can run multiple times when starting playback this warning could be output multiple times. Change the code so that downscaling alone no longer triggers this message.
* VO: clean up aspect.c, remove aspecttest toolUoti Urpala2011-07-052-133/+43
| | | | | | | | | | Clean up aspect.c code and simplify it somewhat (without changing the overall logic). Replace debug output printf calls under #ifdef with mp_msg() debug output (somewhat modified). Remove the file aspecttest.c which created a binary to test aspect.c functionality. It did not compile and would not be particularly useful anyway. Remove some support lines from aspect.c and Makefile.
* cleanup: mark some vo_directfb2.c and vo_s3fb.c functions staticUoti Urpala2011-06-292