aboutsummaryrefslogtreecommitdiffhomepage
Commit message (Collapse)AuthorAge
...
* build: move Android environment check to main dependenciesGravatar Jan Ekström2017-08-05
| | | | | | Additionally change the description to better match what Android is, which is an "environment". The original positioning of this check was unfortunate.
* w32_common: handle media keysGravatar James Ross-Gowan2017-08-05
| | | | | | | | | | | | | | | | | This was attempted before in fc9695e63b5b, but it was reverted in 1b7ce759b1f4 because it caused conflicts with other software watching the same keys (See #2041.) It seems like some PCs ship with OEM software that watches the volume keys without consuming key events and this causes them to be handled twice, once by mpv and once by the other software. In order to prevent conflicts like this, use the WM_APPCOMMAND message to handle media keys. Returning TRUE from the WM_APPCOMMAND handler should indicate to the operating system that we consumed the key event and it should not be propogated to the shell. Also, we now only listen for keys that are directly related to multimedia playback (eg. the APPCOMMAND_MEDIA_* keys.) Keys like APPCOMMAND_VOLUME_* are ignored, so they can be handled by the shell, or by other mixer software.
* vo_opengl: always print when getting embedded ICC profile dataGravatar Rostislav Pehlivanov2017-08-04
| | | | | | The printout in get_vid_profile() gets skipped if icc caching has been enabled, so always print if an embedded ICC profile has been provided.
* TOOLS/lua/status-line: improve and updateGravatar Rostislav Pehlivanov2017-08-04
| | | | | | | Updates the line once per second rather than once per frame, saving quite a bit of CPU. Also completely stops the script while paused. That aside, fixes the swapped checks for video and audio-only files and adds bitrate printing.
* bstr: short-circuit bstr_equals on pointer equalityGravatar Niklas Haas2017-08-03
| | | | | More efficient in cases where we're comparing a bstr against itself, which can happen in e.g. the ICC profile code.
* vo_opengl: support embedded ICC profilesGravatar Niklas Haas2017-08-03
| | | | | | | | | | | | | | | | This currently only works when using lcms-based color management (--icc-profile-*). In principle, we could also support using lcms even when the user has not specified an ICC profile, by generating the profile against a fixed reference (--target-prim/--target-trc) instead. I still might do that some day, simply because 3dlut provides a higher quality conversion than our simple gamut mapping does for stuff like BT.2020, and also because it's now needed to enable embedded ICC profiles. But that would be a separate change, so preserve the status quo for now. (Besides, my opinion is still that you should be using an ICC profile if you care about colors being accurate _at all_)
* vd_lavc: decode embedded ICC profilesGravatar Niklas Haas2017-08-03
| | | | | | | | | Since these need to be refcounted, we throw them directly into struct mp_image instead of being part of mp_colorspace. Even though they would semantically make more sense in mp_colorspace, having them there is really awkward because mp_colorspace is passed around and stored a lot, and this way their lifetime is exactly tied to the lifetime of the mp_image associated with it.
* vo_opengl: use GL_CLIENT_STORAGE_BIT for DRGravatar Niklas Haas2017-08-03
| | | | | | | | | mesa won't pick client storage unless this bit is set, and we *absolutely* want to be using client storage for our DR PBOs. Performance is shit on AMD otherwise. (Nvidia always uses client storage for persistent coherent buffers whether you tell it it or not, probably because it's way faster and nvidia doesn't trust users to figure that out on their own)
* vo_opengl: remove unused ra_mapped_buffer.preferred_align fieldGravatar wm42017-08-03
| | | | | | | | | | | It makes no sense to have this on an already created buffer. If anything, the ra backend would have to export this as a global value (e.g. struct ra field), so that whatever allocates the buffer can account for the required alignment. Since this code is in vo_opengl.c in the first place, and since GL doesn't dictate any special alignment here, it doesn't make sense in the first place to export this. (Maybe something like this will be required later.)
* vo_opengl: don't hardcode texmap0 for polar computeGravatar Niklas Haas2017-08-03
| | | | | This was an oversight. The ID shouldn't be hard-coded here, so add it to sampler_prelude instead.
* vo_opengl: don't precompute texcoord in global scopeGravatar Niklas Haas2017-08-03
| | | | | | | | | | | Breaks on mesa for whatever reason... even though it doesn't generate a GLSL shader compiler error Shouldn't make a performance difference for us because we cache `pos` anyway, and most compute shaders will probably cache all of their samples to shmem. Might have to re-visit this when we have an actual use case for repeated sampling inside CS though. (RAVU + anti-ringing is a possible candidate for that)
* vo_opengl: make compute shaders more flexibleGravatar Niklas Haas2017-08-03
| | | | | | This allows users to do their own custom sample writing, mainly meant to address use cases such as RAVU. Also clean up the compute shader code a bit.
* vo_opengl: add legend for texture format debug dumpGravatar wm42017-08-03
|
* vo_opengl: give special Apple name a more appropriate nameGravatar wm42017-08-03
| | | | | | | | Or less appropriate, as some would argue. The new name is short for "Apple YUV packed". (This format is needed only for hardware decoding on rather old Apple hardware, and a very annoying special case.)
* vo_opengl: simplify/fix user shader texturesGravatar wm42017-08-03
| | | | | | | | | | | | | | | | | | | | This broke float textures, which were actually used by some shaders. There were probably some other bugs as well. Lots of code can be avoided by using ra_tex_params directly, so do that. The main change is that COMPONENT/FORMAT are replaced by a single FORMAT directive, which takes different parameters now. Due to the mess with 16/32 bit float textures, and because we want to support other APIs than just GL in the future, it's not really clear how this should be handled, and the nice component/type separation makes things actually harder. So just jump the gun and use the ra_format.name names, which were originally meant mostly for debugging. (This is probably something that will be regretted later.) Still only superficially tested, but seems to work. Fixes #4708.
* travis: drop libav-stable supportGravatar wm42017-08-03
| | | | | | | | | | | For libav-stable, we download the Libav tarball, which is failing, because their certificate is broken: ERROR: cannot verify libav.org's certificate, issued by `/C=US/O=Let\'s Encrypt/CN=Let\'s Encrypt Authority X3': Issued certificate has expired. I don't intend to support Libav's overly old releases anymore anyway, so if you want to use Libav, use its git master.
* vo_opengl: fix constexprs on ANGLEGravatar Niklas Haas2017-08-03
| | | | I hate GLES
* vo_opengl: fix HLG OOTF inverseGravatar Niklas Haas2017-08-03
| | | | Got the "sign" of the second multiplication wrong.
* vo_opengl: generalize HDR tone mapping to gamut mappingGravatar Niklas Haas2017-08-03
| | | | | | | | | | | | | | | | | | | | | | Since this code was already written for HDR, and is now per-channel (because it works better for HDR as well), we can actually reuse this to get very high quality gamut mapping without clipping. The only required change is to move the tone mapping from before the gamut map to after the gamut map. Additonally, we need to also account for changes in the signal range as a result of applying the CMS when we compute ref_peak, which is fortunately pretty easy because we only need to consider the case of primaries mapping to themselves. Since `HDR` no longer really makes sense as a label, rename it to `--tone-mapping` in general. Also fits better with `--tone-mapping-desat` etc. Arguably we could also rename `--hdr-compute-peak`, but that option is basically only useful for HDR content anyway because we don't need information about the signal range for gamut mapping. This (finally!) gives us reasonably high quality gamut mapping even in the absence of an ICC profile / 3DLUT.
* vo_opengl: implement HLG OOTF inverseGravatar Niklas Haas2017-08-03
| | | | | | | Huge thanks to @rusxg for finding this solution, which was previously believed not to exist. Of course, we still don't actually need it, but I don't want to leave this half-implemented in case somebody does in the future.
* options: --priority can be LGPLGravatar wm42017-08-03
| | | | | | | Original author has agreed now. Also fix the notice in dec_video.c - all GPL-only code is gone (unrelated to --priority/its author).
* osx: load the proper profiles and configs in the bundleGravatar Akemi2017-07-31
| | | | | | | different shells need different args to load the expected profiles and configs, so we added a small heuristic to decide those args. also don't always load the profiles for a bash login shell and instead only use the standard shell without any args.
* osx: fix bundle for paths that need escapingGravatar Akemi2017-07-31
| | | | | | this fixes the mpv binary call in our bundle wrapper script, in the case that the path to the binary needs escaping. examples are white spaces or special chars.
* cocoa: fix the support of multiple renderers (GPU switch)Gravatar Alex Notes2017-07-31
| | | | | | | | | | | | So far, switching between integrated and discrete GPU would cause the kernel to kill mpv due to an indecipherable buffer error. The technical note TN2229 from Apple recommends to enable OpenGL Offline Renderers for every Mac with more GPUs than displays to handle the switch between GPU. By ordering the array from the least commonly rejected to the most, we can sequentially remove PixelFormat attributes to fit the host. Fixes #2371
* cocoa: remove usage of FFABS and the dependency on libavutil/common.hGravatar Akemi2017-07-31
|
* cocoa: distinguish between horizontal and vertical scrollGravatar Akemi2017-07-31
| | | | | | | | | | we need to switch the x and y deltas when Shift is being held because macOS switches them around. otherwise we would get a horizontal scroll on a vertical one and vice versa. additional we switch from deltaX/Y to scrollingDeltaX/Y since the Apple docs suggest it's the preferred way now. in my tests both reported the same values on imprecise scrolls though.
* vo_opengl: manage user shader textures with raGravatar wm42017-07-30
| | | | | Drops some features I guess, no idea if those were needed. Untested due to lack of test cases.
* vo_opengl: fix dither texture filterGravatar wm42017-07-30
| | | | Should be GL_NEAREST, not GL_LINEAR.
* vo_opengl: manage ICC LUT texture via raGravatar wm42017-07-29
| | | | | Also move the capability check to gl_video_get_lut3d(), because it seems more convenient (ra won't have a _CAP_EXT16).
* vo_opengl: manage scaler LUT textures via raGravatar wm42017-07-29
| | | | Also fix the RA_CAP_ bitmask nonsense.
* vo_opengl: manage dither texture via raGravatar wm42017-07-29
| | | | | | | | | Also add some more helpers. Fix the broken math.h include statement. utils.c uses ra_gl.h internals, which it shouldn't, and which will be removed again as soon as this code gets converted to ra fully.
* vo_opengl: do not use GL format conversion on texture uploadGravatar wm42017-07-29
| | | | | | | | | | | | | | | | | | The dither texture data is created as a float array, but uploaded to a texture with GL_R16 as internal format. We relied on GL to do the conversion from float to uint16_t. Not all GL variants even support this: GLES does not provide this conversion (one of the reasons why this code has a float16 code path). Also, ra is not going to do this. So just convert on the fly. Still keep the float16 texture format fallback, because not all GLES implementations provide GL_R16. There is some possibility that we'll need to provide some kind of upload conversion anyway for float->float16. We still rely on GL doing this implicitly, and all GL variants support it, but with RA there might be the need for explicit conversion. Even then, it might be best to reduce the number of conversion cases. I'll worry about this later.
* vo_opengl: use ra_* for format negotiation tooGravatar wm42017-07-29
| | | | | | | | | | | | | Format handling via ra_* was added earlier, but the format negotiation part was forgotten. Actually move some aspects of it to ra_get_imgfmt_desc(). Also make sure the unorm and float formats selected by the common format lookup functions are linear filterable. (For OpenGL, this is implicitly guaranteed, so it wasn't done before.) Whether these assumptions should be checked/enforced in the ra code at all is a bit fuzzy, but with ra being helper code only for the actual video renderer, it's probably justified.
* options: fix --external-file alias typoGravatar Martin Herkt2017-07-29
|
* subprocess-win: fix swprintf usageGravatar James Ross-Gowan2017-07-29
| | | | | | | The count parameter refers to the number of wide-characters to write to the buffer (including the terminating NUL character, which is always added,) not the number of bytes. See C99 7.24.2.3 or https://msdn.microsoft.com/en-us/library/ybk95axf.aspx
* appveyor: use a clean %PATH%Gravatar James Ross-Gowan2017-07-28
| | | | | | | AppVeyor build workers have Git for Windows on the %PATH%, which includes some MSYS2 binaries. Having multiple MSYS2 installations on the %PATH% causes cygheap errors, so remove them and make sure %PATH% only has stuff we need.
* subprocess-win: don't leak pipe handle on errorGravatar James Ross-Gowan2017-07-28
|
* vo_opengl: support loading custom user texturesGravatar Niklas Haas2017-07-27
| | | | | | | | | | | Parsing the texture data as raw strings makes the textures the most portable and self-contained. In order to facilitate different types of shaders, the parse_user_shader interaction has been changed to instead have it loop through blocks and call the passed functions for each valid block parsed. This is more modular and also cleaner, with better code separation. Closes #4586.
* vo_opengl: slightly refactor user_shaders codeGravatar Niklas Haas2017-07-27
| | | | | | | | | | | | | | - Each struct tex_hook now stores multiple hooks, this allows us to avoid the awkward way of the current code has to add the same pass multiple times. - As a consequence, SHADER_MAX_HOOKS was split up into SHADER_MAX_PASSES (number of tex_hooks) and SHADER_MAX_HOOKS (number of hooked textures per tex_hook), and both numbers decreased correspondingly. - Instead of having a weird free() callback, we can just leverage talloc's recursive free behavior. The only user is the user shaders code anyway.
* vo_opengl: tone map on the maximum signal componentGravatar Niklas Haas2017-07-27
| | | | | | | | | | This actually makes sure we don't decolor due to clipping even when the signal itself exceeds the luma by a significant factor, which was pretty common for saturated blues (and to a lesser degree, reds) - most noticeable in skies etc. This prevents the turn-the-sky-cyan effect of mobius tone mapping, and should also improve the other tone mapping modes in quality.
* vo_opengl: fix mpgl_caps bit checkGravatar Niklas Haas2017-07-27
| | | | | As pointed out by @bjin, this would match if _any_ of the reqs are set. Need to test for explicit equality.
* vo_opengl: start work on rendering API abstractionGravatar wm42017-07-26
| | | | | | | | | | | | | | | | | | | | | | This starts work on moving OpenGL-specific code out of the general renderer code, so that we can support other other GPU APIs. This is in a very early stage and it's only a proof of concept. It's unknown whether this will succeed or result in other backends. For now, the GL rendering API ("ra") and its only provider (ra_gl) does texture creation/upload/destruction only. And it's used for the main video texture only. All other code is still hardcoded to GL. There is some duplication with ra_format and gl_format handling. In the end, only the ra variants will be needed (plus the gl_format table of course). For now, this is simpler, because for some reason lots of hwdec code still requires the GL variants, and would have to be updated to use the ra ones. Currently, the video.c code accesses private ra_gl fields. In the end, it should not do that of course, and it would not include ra_gl.h. Probably adds bugs, but you can keep them.
* vo_opengl: describe the texture uploading modeGravatar Niklas Haas2017-07-26
| | | | | Be a bit more transparent here, which is especially helpful when people are sending me screenshots of stats pages.
* vo_opengl: check against shmem limitsGravatar Niklas Haas2017-07-26
| | | | | | The radius check was not strict enough, especially not for all platforms. To fix this, actually check the hardware capabilities instead of relying on a hard-coded maximum radius.
* vo_opengl: fix image uniforms for older OpenGLGravatar James Ross-Gowan2017-07-26
| | | | | This explicitly enables the GL_ARB_shader_image_load_store extension, which seems to fix compute shaders for Intel/GL 3.0.
* vo_opengl: cosmetic changeGravatar Niklas Haas2017-07-25
|
* subprocess-win: remove VLA usageGravatar James Ross-Gowan2017-07-26
| | | | This only ever waits on four handles at most anyway.
* vo_opengl: add PRINTF_ATTRIBUTE to gl_sc_ssboGravatar Niklas Haas2017-07-25
| | | | | Doesn't uncover any bugs, but apparently we're getting in the habit of this anyway.
* vo_opengl: kill off FBOTEX_COMPUTE againGravatar Niklas Haas2017-07-25
| | | | | | | | | | | The textures not having an FBO actually caused regressions when trying to render the subtitles on top of this texture (--blend-subtitles), which still relied on an FBO. So just kill off the logic entirely. Why worry about a single FBO wasted when we're allocating like 10 anyway. Fixes #4657.
* vo_opengl: fix incoherent SSBO usageGravatar Niklas Haas2017-07-25
| | | | | | | According to the OpenGL spec, atomic access to SSBO variables is *not* guaranteed to be coherent, even when reusing the same SSBO attached to the same shader across different frames. So we actually need a glMemoryBarrier here, at least in theory.