aboutsummaryrefslogtreecommitdiffhomepage
Commit message (Collapse)AuthorAge
* demux: remove relative seekingGravatar wm42016-02-28
| | | | | | | | | | | | | | | | | | | Ever since a change in mplayer2 or so, relative seeks were translated to absolute seeks before sending them to the demuxer in most cases. The only exception in current mpv is DVD seeking. Remove the SEEK_ABSOLUTE flag; it's not the implied default. SEEK_FACTOR is kept, because it's sometimes slightly useful for seeking in things like transport streams. (And maybe mkv files without duration set?) DVD seeking is terrible because DVD and libdvdnav are terrible, but mostly because libdvdnav is terrible. libdvdnav does not expose seeking with seek tables. (Although I know xbmc/kodi use an undocumented API that is not declared in the headers by dladdr()ing it - I think the function is dvdnav_jump_to_sector_by_time().) With the current mpv policy if not giving a shit about DVD, just revert our half-working seek hacks and always use dvdnav_time_search(). Relative seeking might get stuck sometimes; in this case --hr-seek=always is recommended.
* vo_opengl: remove redundant codeGravatar igv2016-02-28
|
* osc: add always-on mode and unify visibility mode (always/never/auto)Gravatar Avi Halachmi (:avih)2016-02-27
| | | | | | | | | | | | | Adds always-on mode by internally utilizing hidetimeout as negative and forbidding the user to set negative values. This removes script-message to enable/disable the osc, and instead introduces a combined 'visibility' control with the values never/auto/always. It's available via script_opts and script_message as 'osc-visibility'. As message, it also supports a 'cycle' value. The del key is bound to cycling the visibility modes.
* osc: fix runtime enable_osc(true/false)Gravatar Avi Halachmi (:avih)2016-02-27
| | | | | | | | | | | There were few issues: - When it's disabled and then enabled, it was displaying the osc briefly and then autohide right away. Don't do that. - When it's enabled and then disabled, it was not removing the osc from screen if called while the osc is visible (because tick() is responsible for the hide but it doesn't render() the empty osc when the osc is disabled). - Due to delayed/async unbinding of mouse events it was possible to show_osc() after it got disabled e.g. from mouse_move. Prevent this.
* player: minor simplificationGravatar wm42016-02-27
| | | | | | No need to pass endpts down in such a dumb way. Also remove an outdated comment somewhere.
* ao_wasapi: make wait for audio thread termination infiniteGravatar Kevin Mitchell2016-02-26
| | | | | The time-out was a terrible hack for marginally better behaviour when encountering #1773, which appears to have been resolved by a previous commit.
* ao_wasapi: further flatten/simplify volume controlGravatar Kevin Mitchell2016-02-26
|
* ao_wasapi: use MP_FATAL for stuff that leads to init failureGravatar Kevin Mitchell2016-02-26
|
* ao_wasapi: move pre-resume reset into resume functionGravatar Kevin Mitchell2016-02-26
|
* ao_wasapi: move resetting the thread state into main loopGravatar Kevin Mitchell2016-02-26
| | | | | This was previously duplicated between the reset/resume functions, and not properly handled in the "impossible" invalid thread state case.
* ao_wasapi: set buffer size to device period in exclusive modeGravatar Kevin Mitchell2016-02-26
| | | | | | | | | | | | | This eliminates some intermittent pops heard in a HRT MicroStreamer DAC uncorrelated with user interaction. As a bonus, this resolves #1773 which I can o longer reproduce as of this commit. Leave the 50ms buffer for shared mode since that seems to be working quite well. This is also the way exclusive mode is done in the MSDN example code: https://msdn.microsoft.com/en-us/library/windows/desktop/dd370844%28v=vs.85%29.aspx This was originally increased in c545c40 to mitigate glitches that subsequent refactorings have eliminated.
* ao_wasapi: replace laggy COM messaging with mp_dispatch_queueGravatar Kevin Mitchell2016-02-26
| | | | | | | | | | A COM message loop is apparently totally inappropriate for a low latency thread. It leads to audio glitches because the thread doesn't wake up fast enough when it should. It also causes mysterious correlations between the vo and ao thread (i.e., toggling fullscreen delays audio feed events). Instead use an mp_dispatch_queue to set/get volume/mute/session display name from the audio thread. This has the added benefit of obviating the need to marshal the associated interfaces from the audio thread.
* ao_wasapi: avoid under-run cascade in exclusive mode.Gravatar Kevin Mitchell2016-02-26
| | | | | | | | | | | | | | | | Don't wait for WASAPI to send another feed event if we detect an underfull buffer. It seems that WASAPI doesn't always send extra feed events if something causes rendering to fall behind. This causes every subsequent playback buffer to under-run until playback is reset. The fix is simply to do a one-shot double feed when this happens, which allows rendering to catch up with playback. This was observed to happen when using MsgWaitForMultipleObjects to wait for the feed event and toggling fullscreen with vo=opengl:backend=win. This commit improves the behaviour in that specific case and more generally makes exclusive mode significantly more robust. This commit also moves the logic to avoid *over*filling the exclusive mode buffer into thread_feed right next to the above described underfil logic.
* ao_wasapi: fix typo in commentGravatar Kevin Mitchell2016-02-26
|
* ao_wasapi: use SUCCEEDED/FAILED macrosGravatar Kevin Mitchell2016-02-26
|
* manpage: add showvolume example to --lavfi-complexGravatar wm42016-02-27
| | | | Pretty useful for debugging surround nonsense.
* ao: initial OpenSL ES supportGravatar Ilya Zhuravlev2016-02-27
| | | | | | | | OpenSL ES is used on Android. At the moment only stereo output is supported. Two options are supported: 'frames-per-buffer' and 'sample-rate'. To get better latency the user of libmpv should pass values obtained from AudioManager.getProperty(PROPERTY_OUTPUT_FRAMES_PER_BUFFER) and AudioManager.getProperty(PROPERTY_OUTPUT_SAMPLE_RATE).
* dispatch: clarify lifetime issuesGravatar wm42016-02-26
|
* vo_opengl: set uniform variable "pixel_size" for internal shadersGravatar igv2016-02-26
|
* vo_opengl: dxinterop: fix compatibility issue with VistaGravatar igv2016-02-26
|
* demux_timeline: slightly improve reported file formatGravatar wm42016-02-25
| | | | | Report the underlying demuxer's format. Since there can be many demuxers participating, pick the "main" segment.
* player: slightly simplify how demuxer streams are enabled/disabledGravatar wm42016-02-25
| | | | | Instead of having reselect_demux_streams() look at all streams, make it look at the current stream that is being enabled/disabled.
* player: fix --force-window behaviorGravatar wm42016-02-25
| | | | | | | | | | | | | | | | | _Of course_ the previous commit broke --force-window behavior (like it does every single time I touch it). vo_has_frame() gets cleared after a seek, so e.g. stopping playback of a file and going to the next by keeping the seek key down will enter a short moment without video at the end of the first file, which will set the stalled_video variable to true. Prevent it by using the indication whether the window was properly created (which is probably exactly what we want here). This function is also responsible for destroying the window when needed, and obviously we should never do that while video is active. (This is the actual bug, although the other change in this commit already hides the common breakage it caused.)
* player: honor --force-window if video is selected, but inactiveGravatar wm42016-02-24
| | | | | If a video track is selected, but no video is decoded from it (mostly with broken files), then create the window anyway.
* demux: avoid lost wakeup on queue overflowGravatar wm42016-02-24
| | | | | | | | | If a stream is marked as EOF (due to no packets found in reach), then we need to wakeup the decoder. This is important especially if no packets are found at the start of the file, so the A/V sync logic actually starts playback, instead of waiting for packets that will never come. (It would randomly start playback when running the playback loop due to arbitrary external events like user input.)
* demux_mkv: don't trust DefaultDuration for audioGravatar wm42016-02-24
| | | | | It's used to interpolate timestamps for sub-packets ("block laces"). It's occasionally broken, and not really needed by us.
* vo_opengl, vo_rpi: unbreak a few thingsGravatar wm42016-02-24
| | | | | Commit 2f562825 didn't remove the "color" declaration for these. Since the shader header already declares it, shader compilation broke.
* player: remove pointless callGravatar wm42016-02-23
| | | | | This is the unfortunate video timer; it's already reset when it actually matters (after video was prepared and before video is actually started).
* player: simplify enabling demuxer threadsGravatar wm42016-02-23
| | | | | No need for this crazy loop anymore, and we can simply enable it for each demuxer when it's opened.
* player: remove unused MPContext.stream fieldGravatar wm42016-02-23
| | | | | | | It was just dead code. Also fixes the stream-open-filename property, which is supposed to be read-only if a file was already opened.
* player: remove MPContext.sources fieldsGravatar wm42016-02-23
| | | | | | Some oddity that is not needed anymore. The only thing which still referenced them was avoiding loading external files more than once, which is now prevented by checking the list of tracks instead.
* vo_opengl: declare vec4 color inside fragment shader stubGravatar Niklas Haas2016-02-23
| | | | | | Why was this done so stupidly, with so many complicated special cases, before? Declare it once so the shader bits don't have to figure out where and when to do so themselves.
* vo_opengl: set uniform variable "pixel_size"Gravatar igv2016-02-22
| | | | | pixel_size is often used variable, also reciprocal is a costly operation for AMD and older nVidia (prior to Kepler) GPUs.
* vo_opengl: set the correct size of the input imageGravatar igv2016-02-22
|
* vo_x11: add 16bpp supportGravatar Gusar3212016-02-22
|
* wscript: don’t install the encoding profiles with encoding disabledGravatar Emmanuel Gil Peyrot2016-02-22
|
* demux_mkv: fix opus gapless behavior (2)Gravatar wm42016-02-22
| | | | | | | Commit 943f76e6, which already tried this, was very stupid: it didn't actually override the samplerate for Opus, but overrode it for all codecs other than Opus. And even then, it failed to use the overridden samplerate. (Sigh...)
* demux_lavf: adjust seeks by maximum codec delayGravatar wm42016-02-22
| | | | | | | | | | | | | | | Fixes relative seeks. Without this, a seek back could skip so much data that the seek would effectively jump forward. (Or insert silence for files with video.) There's the question whether the frontend should do this instead (by using information from the decoders), but for now this seems more proper. demux_mkv.c does this already, sort of. libavformat doesn't for seeks in .ogg (aka .opus), but might be doing it for mkv. Seems to be a mess as well.
* audio: make mp_audio_skip_samples() adjust the PTSGravatar wm42016-02-22
| | | | Slight simplification/cleanup.
* ad_lavc: skip AVCodecContext.delay samples at beginningGravatar wm42016-02-22
| | | | | | | | Fixes correctness_trimming_nobeeps.opus. One nasty thing is that this mechanism interferes with the container-signalled mechanism with AV_FRAME_DATA_SKIP_SAMPLES. So apply it only if that is apparently not present. It's a mess, and it's still broken in FFmpeg CLI, so I'm sure this will get fucked up later again.
* ad_lavc: make sample trimming symmetric to skippingGravatar wm42016-02-22
| | | | | | I'm not quite sure what the FFmpeg AV_FRAME_DATA_SKIP_SAMPLES API demands here. The code so far assumed that skipping can be more than a frame, but not trimming. Extend it to trimming too.
* ad_lavc: move skipping logic out of the HAVE_AVFRAME_SKIP_SAMPLES blockGravatar wm42016-02-22
|
* ad_lavc: interpolate missing timestampsGravatar wm42016-02-22
| | | | | | | | | | This is actually already done by dec_audio.c. But if AV_FRAME_DATA_SKIP_SAMPLES is applied, this happens too late here. The problem is that this will slice off samples, and make it impossible for later code to reconstruct the timestamp properly. Missing timestamps can still happen with some demuxers, e.g. demux_mkv.c with Opus tracks. (Although libavformat interpolates these itself.)
* audio: move frame clipping to a generic functionGravatar wm42016-02-21
|
* demux_mkv: add hack to fix opus gapless behaviorGravatar wm42016-02-21
| | | | | | | I think the conclusion is that AV_PKT_DATA_SKIP_SAMPLES is misdesigned (at least for some formats), and an alternative mechanism using durations would be better. (Combining it with a proper timebase would keep sample-accuracy.)
* manpage: fix typoGravatar wm42016-02-21
|
* manpage: add hint where the full keybindings are declaredGravatar wm42016-02-21
| | | | The actual location of input.conf the user has to find out himself.
* sub: always clip subtitles against segment endGravatar wm42016-02-20
| | | | | | | | | | | | This happens only if the new segment wasn't read yet. This is not quite proper and a problem with dec_sub.c internals. Ideally, it'd wait with rendering until a new enough segment has been read. Normally, the new segment is available immediately, so the end will be automatically clipped by switching to the right segment in the exact moment it's supposed to become effective. Usually shouldn't cause any problems, though.
* demux_timeline: fix nested timelinesGravatar wm42016-02-20
| | | | | You can e.g. reference ordered chapters or other EDL files in EDLs. There were some bugs left which broke this in some cases.
* vd_lavc: simplify hwdec pixfmt checkGravatar wm42016-02-20
| | | | | Instead of checking whether the format is a hwaccel format, check whether it's the exact format we've requested for hardware decoding.