aboutsummaryrefslogtreecommitdiffhomepage
Commit message (Collapse)AuthorAge
* vo_opengl: require --enable-gpl3 for nnediGravatar wm42015-12-03
| | | | | | | | | There are claims that nnedi3.c doesn't constitute its own new implementation, but is derived from existing HLSL or OpenCL shaders distributed under the LGPLv3 license. Until these are resolved, do the "correct" thing and require --enable-gpl3 to build nnedi.
* client API: disallow masking MPV_EVENT_SHUTDOWNGravatar wm42015-12-02
| | | | | | | | | This makes no sense, because the client is obligated to react to this event. This also happens to fix a deadlock with JSON IPC clients sending "disable_event all", because MPV_EVENT_SHUTDOWN was used to stop the thread driving the socket connection (fixes #2558).
* video: readd codec delay estimationGravatar wm42015-12-02
| | | | | | | | | | | | | | | | | Approximately reverts commit 3ccac74d. This failed with some avi files, which do pseudo-VFR by sending packets with empty frames (or repeat frames, depending on point of view). Specifically, these packets are not 0 bytes, so they don't get skipped by libavformat, as with the usual VFR avi hack. Instead, the packet contains a VOP with vop_coded=0, so libavcodec will just return no frame. We could probably distinguish such skipped frames and delayed frames by explicitly measuring the codec delay by counting how long it takes to get the very first frame (and then treat skips as explicit drops), but we may as well simply reinstate the old code. To appease to at least one semi-broken case, do not enable this logic on the RPI, as the FFmpeg MMAL wrapper has arbitrary buffering (and MMAL itself is asynchronous).
* vo_opengl: fix backend=x11 on IntelGravatar wm42015-12-02
| | | | "backend=x11" was resolved to x11_probe, which is unintentional.
* vo_opengl: add credits to NNEDI3 shaderGravatar Bin Jin2015-12-02
| | | | Add credits to several existing implementation of NNEDI3 shader.
* vo_opengl: enable NNEDI3 prescaler on OpenGL ES 3.0Gravatar Bin Jin2015-12-02
| | | | | | | | | | | | | | It turns out that both UBO and intBitsToFloat() are supported in OpenGL ES 3.0[1][2], enable them so that NNEDI3 prescaler can be used in a wider range of backends. Also fixes some implicit int-to-float conversions so that the shader actually compiles on GLES. Tested on Linux desktop (nvidia 358.16) with "es" sub-option. [1]: https://www.khronos.org/opengles/sdk/docs/man3/html/glGetUniformBlockIndex.xhtml [2]: https://www.khronos.org/opengles/sdk/docs/manglsl/docbook4/xhtml/intBitsToFloat.xml
* path: cosmeticsGravatar lzmths2015-12-02
| | | | | | Avoiding conditional directives that split up parts of statements. Signed-off-by: wm4 <wm4@nowhere>
* manpage: fix a command nameGravatar wm42015-12-01
| | | | Using "-" as separator is preferred now.
* build: install scalable svg icon as wellGravatar Christian Hesse2015-12-01
|
* manpage: ' can't be used for quotingGravatar wm42015-11-30
|
* vo_opengl_cb: pass mpv_global to gl_videoGravatar wm42015-11-30
| | | | | | | | I guess gl_video->global was originally meant to be optional, but now it crashes in some newer code with vo_opengl_cb, which tries to init it with this field set to NULL (because normally it's not needed). Probably fixes #2542.
* manpage: explain behavior of "path" propertyGravatar wm42015-11-29
| | | | | | | This seems to confuse users pretty often, but I'm not going to change its behavior. See e.g. #2541.
* osd: do not let OSD messages overwrite --osd-msgN textGravatar wm42015-11-29
| | | | | | | | | Requested. Don't overwrite permanent OSD text set with e.g. --osd-msg1. Instead, append the OSD message to it (on the next line). Note that with --osd-msg1, seeking will still overwrite the OSD with the playback status for a while. If you do not want this, use --osd-msg3 --osd-level=3 instead.
* vo: cosmetics: split functionGravatar wm42015-11-29
| | | | | Split two huge chunks from the update_vsync_timing_after_swap() function. There should be no functional changes.
* vo: make using estimated FPS more conservativeGravatar wm42015-11-29
| | | | | | | | | | Don't use the average FPS if there are likely skipped vsyncs. Note that we don't use the normal skip detection, as it is unreliable if the real and assumed display FPS differ too much. The normal skip detection is still in place as it's more reliable in the case when vsync jitters much, but the display FPS is relatively exact. Further improvement over commit 41f2c653.
* vo: remove redundant and broken codeGravatar wm42015-11-29
| | | | This was stupid.
* sub: remove unused function, move another oneGravatar wm42015-11-29
| | | | | mp_ass_default_track() was not used by anything anymore (commit 5a89150a got rid of it). mp_ass_add_default_styles() is used by sd_ass.c only.
* osd: fix and cleanup font style managementGravatar wm42015-11-29
| | | | | | | | | | | Commit 2b07d3eb merged progbar and OSD text renderer into one ASS_Track, but it confused the styles. Specifically, if both progbar and OSD are visible, the create_ass_track() call made by the progbar code will reset the style adjusted by the OSD text code. Change create_ass_track() not to add any styles. Instead let the caller manage the styles. They are now referenced by name, and lazily added if they don't exist yet. This is also much cleaner.
* DOCS/interface-changes: add some recent changesGravatar wm42015-11-29
|
* vo_opengl: make tscale=mitchell:tscale-clamp the defaultGravatar wm42015-11-29
| | | | Looks better than "oversample". tscale-clamp suggested by haasn.
* vo_opengl: warn if interpolation is enabled, but not display-syncGravatar wm42015-11-28
| | | | | | | Try to avoid user confusion. Reading the global options in this place is a pretty disgusting hack, but it's still the most robust way.
* osd: use the same ASS_Renderer for OSD text and progbarGravatar wm42015-11-28
| | | | | | Reduces memory usage and startup times. The implementation is a bit weird, because both OSD parts have conflicting requirements on the used ASS styles.
* vo: report when switching back to system-reported FPS tooGravatar wm42015-11-28
| | | | | | Instead of just when switching away from it. Further improvement over commit 41f2c653.
* vo: wait longer before abandoning system-reported display-fpsGravatar wm42015-11-28
| | | | Further improvement over commit 41f2c653.
* vo_opengl: fix interpolation with display-syncGravatar wm42015-11-28
| | | | | | | | | | | | | | | | | | | | At least I hope so. Deriving the duration from the pts was not really correct. It doesn't include speed adjustments, and becomes completely wrong of the user e.g. changes the playback speed by a huge amount. Pass through the accurate duration value by adding a new vo_frame field. The value for vsync_offset was not correct either. We don't need the error for the next frame, but the error for the current one. This wasn't noticed because it makes no difference in symmetric cases, like 24 fps on 60 Hz. I'm still not entirely confident in the correctness of this, but it sure is an improvement. Also, remove the MP_STATS() calls - they're not really useful to debug anything anymore.
* player: fix commit 50bb209aGravatar wm42015-11-28
| | | | Well, this was stupid.
* vo: change vo_frame field unitsGravatar wm42015-11-27
| | | | | | | This was just converting back and forth between int64_t/microseconds and double/seconds. Remove this stupidity. The pts/duration fields are still in microseconds, but they have no meaning in the display-sync case (also drop printing the pts field from opengl/video.c - it's always 0).
* vo: switch back to system-reported display FPS if possibleGravatar wm42015-11-27
| | | | | | If we switched away from the system FPS, we were remaining in this mode ssentially forever. There's no reason to do so; switch back if the estimated FPS gets worse again. Improvement over commit 41f2c653.
* vo: factor redundant timer callsGravatar wm42015-11-27
| | | | Call it once instead of 3 times.
* vo: fix audio-timing framedrop regressionsGravatar wm42015-11-27
| | | | | | | | | | | | | | Commit 12eb8b2d accidentally disabled framedropping in the audio timing case. It tried to replace the last_flip field with the prev_vsync one, which didn't work because prev_sync is reset to 0 if the timing code is used. Fix it by always setting it properly. This field must (or should) be reinitialized to something sensible when switching to display sync timing mode; since prev_vsync is not reset anymore, the check when to reinitialize this field has to be adjusted as well. It's a bit weird that update_vsync_timing_after_swap() now does some minor work for timing mode too, but I guess it's ok, if only to avoid additional fields and timer calls.
* ao: disambiguate default device list entriesGravatar wm42015-11-27
| | | | | | | | | | | If there were many AO drivers without device selection, this added a "Default" entry for each AO. These entries were not distinguishable, as the device list feature is meant not to require to display the "raw" device name in GUIs. Disambiguate them by adding the driver name. If the AO is the first, the name will remain just "Default". (The condition checks "num > 1", because the very first entry is the dummy for AO autoselection.)
* player: always disable display-sync on desyncsGravatar wm42015-11-27
| | | | | | | | | | | | | | | Instead of periodically trying to enable it again. There are two cases that can happen: 1. A random discontinuity messed everything up, 2. Things are just broken and will desync all the time Until now, it tried to deal with case 1 - but maybe this is really rare, and we don't really need to care about it. On the other hand, case 2 is kind of hard to diagnose if the user doesn't use the terminal. Seeking will reenable display-sync, so you can fix playback if case 1 happens, but still get predictable behavior in case 2.
* vo: disregard system-reported display FPS if it's too impreciseGravatar wm42015-11-27
| | | | | | | | | | | | If the system-reported display FPS (returned by the VO backends, or forced with --display-fps) is too imprecise (deviating frame duration by more than 1%). This works if the display FPS is off by almost 1 (typical for old/bad/broken OS APIs). Actually it even works if the FPs is completely wrong. Is it a good idea? Probably not. It might be better to only output a warning message. But unless there are reports about it going terribly wrong, I'll go with this for now.
* vo: improve vsync delay detectionGravatar wm42015-11-27
| | | | | | | Actually I'm not content with the detection added in commit 44376d2d. It triggers too often if vsync is very jittery. It's easy to avoid this: we add more samples to the detection by reusing the drift computation loop. If there's a significant step in the drift, we consider it a drop.
* player: make display-vdrop mode do what the manpage claimsGravatar wm42015-11-26
| | | | | Don't change video speed in this mode, which is closer to the claim on the manpage that it's close to the behavior of the "audio" mode.
* w32_common: implement icc-profile-autoGravatar James Ross-Gowan2015-11-26
| | | | | | | | | | | | This adds basic support for ICC profiles. Per-monitor profiles are supported. WCS profiles are not supported, but there is an API for converting WCS profiles to ICC, so they might be supported in future. I'm just not sure if anyone actually uses them. Reloading the ICC profile when it's changed in the control panel is also not supported. This might be possible by using the WCS APIs and watching the registry for changes, but there is no official API for it, and as far as I can tell, no other Windows programs can do it.
* af_lavrresample: fix build on LibavGravatar wm42015-11-26
| | | | | | | Of course, only FFmpeg has av_clipd(), while Libav does not. (Nevermind that it doesn't do much more than the mpv MPCLAMP() macro. Supposedly, libavutil can provide optimized platform-specific versions for av_clip*, but of course nothing actually does for av_clipf() or av_clipd().)
* vo: smooth out reported vsync timeGravatar wm42015-11-25
| | | | | | | | | | Return the estimated/ideal flip time to the timing logic (meaning vo_get_delay() returns a smoothed out time). In addition to this add some lame but working drift compensation. (Useful especially if the display FPS is wrong by a factor such as 1.001.) Also remove some older leftovers. The vsync_interval_approx and last_flip fields are redundant or unneeded.
* vo: add new frame drop detectionGravatar wm42015-11-25
| | | | | | | | For the vo-delayed-frame-count property. Slightly less dumb than the previous one (which was removed earlier), but still pretty dumb. But this also seems to be relatively robust, even with strong vsync jittering.
* vo: do not use display FPS for framedropGravatar wm42015-11-25
| | | | | | | This logic was kind of questionable anyway, and --display-sync should give much better results. (I would even go as far as saying that the FPS-dependent framedrop code made things worse in some situations. Not all, though.)
* vo_opengl: disable interpolation without display-syncGravatar wm42015-11-25
| | | | | Without display-sync mode, our guesses wrt. vsync phase etc. are much worse, and I see no reason to keep the complicated "vsync_timed" code.
* command, vo: add estimated-display-fps propertyGravatar wm42015-11-25
| | | | | | | | | | This is simply the average refresh rate. Including "bad" samples is actually an advantage, because the property exists only for informational purposes, and will reflect problems such as the driver skipping a vsync. Also export the standard deviation of the vsync frame duration (normalized to the range 0-1) as vsync-jitter property.
* player: log some more display-sync informationGravatar wm42015-11-25
|
* af_lavrresample: clamp float output to rangeGravatar wm42015-11-25
| | | | | | | libswresample doesn't do it - although it should, but the patch is stuck in limbo. Probably reduces problems with artifacts on downmixing in some cases.
* vo_rpi: set aspect ratioGravatar wm42015-11-25
| | | | | Otherwise, the MMAL output component will letter-box the video within the specified dest_rect while keeping square pixels.
* vo_rpi: log subtitle render timeGravatar wm42015-11-25
|
* vo_rpi: add an option to disable OSDGravatar wm42015-11-25
| | | | | | The OSD takes up an entire fullscreen dispmanx layer. Although the GPU should be able to handle it (possibly even without any disadvantages), it'll still be useful for debugging performance issues.
* vo_opengl: win32: test for exclusive modeGravatar James Ross-Gowan2015-11-26
| | | | | | | | | | This is a hack, but unfortunately the DwmGetCompositionTimingInfo heuristic does not work in all cases (with multiple-monitors on Windows 8.1 and even with a single monitor in Windows 10.) See the comment in mp_w32_is_in_exclusive_mode() for more details. It should go without saying that if any better method of doing this reveals itself, this hack should be dropped.
* vo_opengl: angle: don't load libGLESv2.dllGravatar James Ross-Gowan2015-11-26
| | | | | ANGLE has EGL_KHR_get_all_proc_addresses, so all GLES core functions can be queried with eglGetProcAddress.
* ao_alsa: filter audio device listGravatar wm42015-11-24
| | | | | | | | Remove known useless device entries from the --audio-device list (and corresponding property). Do this because the list is supposed to be a high level list of devices the user can select. ALSA does not provide such a list (in an useable manner), and ao_alsa.c is still in the best position to improve the situation somewhat.