summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* command: always show OSD message when changing volume etc.wm42014-09-211-15/+3
| | | | | | | | | | | | | | If there's a command that uses the OSD by default, then always print the associated message (or a fallback made of name + value), even if the command has an associated OSD bar. This means volume, gamma, panscan, etc. all show both a message and a OSD bar. Also, add a '%' to the volume message. The extra_msg thing is not needed anymore. See issue #1103.
* options: remove --volstepwm42014-09-216-20/+14
| | | | | | | It's just confusing; users are encouraged to edit input.conf instead (changing the argument to the "add" command). Update input.conf to keep the old behavior.
* TOOLS: idet: remove extra '$' in $(()) expansionBen Boeckel2014-09-211-4/+4
|
* manpage: clarify vf_pp docswm42014-09-211-8/+14
| | | | | Make the note about quoting more prominent. Add a warning that this filter is useless for new files.
* video: fix redrawing when pausing after framedropwm42014-09-211-1/+1
| | | | | | | When pausing after a frame was just dropped, we're logically at the dropped frame, and thus should redraw the dropped frame. This was implemented, but didn't work after unpausing for the second time, because of a minor logic bug.
* video: fix some vo_direct3d crashes due to FFmpeg nonsensewm42014-09-211-1/+2
| | | | | | | | | | | | For incomprehensible reasons, AV_PIX_FMT_GRAY8 (and some others) have a palette. This literally makes no sense and this issue has bitten us before, but it is how it is. This also caused a crash with vo_direct3d: this mapped a texture as IMGFMT_Y8 (i.e. AV_PIX_FMT_GRAY8), and when copying this, it tried to copy the non-existent palette. Fixes #1113.
* TOOLS/umpv: make URL detection consistent with mpv methodshdown2014-09-201-6/+4
| | | | See mp_is_url in options/path.c.
* TOOLS/umpv: print error message to stderrshdown2014-09-201-1/+2
|
* TOOLS/umpv: use MPV environment variable, not UMPV_OPTIONSshdown2014-09-201-10/+8
| | | | Just like the rest of TOOLS/*.sh scripts.
* vo_vdpau: better integration with the generic framedrop codewm42014-09-205-19/+31
| | | | | | | | | | | | | | | | | | | | vo_vdpau uses its own framedrop code, mostly for historic reasons. It has some tricky heuristics, of which I'm not sure how they work, or if they have any effect at all, but in any case, I want to keep this code for now. One day it might get fully ported to the vo.c framedrop code, or just removed. But improve its interaction with the user-visible framedrop controls. Make --framedrop actually enable and disable the vo_vdpau framedrop code, and increment the number of dropped frames correctly. The code path for other VOs should be equivalent. The vo_vdpau behavior should, except for the improvements mentioned above, be mostly equivalent as well. One minor change is that frames "shown" during preemption are always count as dropped. Remove the statement from the manpage that vo_vdpau is the default; this hasn't been the case for a while.
* vo_vdpau: fix confusion around vsync_intervalwm42014-09-201-10/+9
| | | | | | | vc->vsync_interval and vsync_interval should be the same value, but actually vc->vsync_interval was updated after vsync_interval was initialized. This was probably not intended. Fix this by removing the duplicate local variable. There were probably no bad effects.
* input: explain why we use semaphoreswm42014-09-201-3/+6
| | | | Also switch function names for better self-documentation.
* osdep: hack to fix build with low quality pthreads-w32 headerswm42014-09-201-0/+1
| | | | | | | | | | | | | | | | When compiling semaphore_osx.c on win32, the following error happened: /usr/i686-w64-mingw32/include/semaphore.h:160:6: error: unknown type name 'mode_t' This is because this system header references symbols that are not not defined anywhere. This is clearly a bug in pthreads-w32, but has been known and unfixed since 2012, so add a hack to fix it. We build semaphore_osx.c this way because it saves us an extra configure check. On win32, Linux, etc. it's empty and contains "#include <semaphore.h>" only. Should fix #1108.
* mixer: always restore volume (even with pulse), don't unmutewm42014-09-201-6/+8
| | | | | | | | | | | | | | | | | | Be less clever, and restore the volume state even with AOs like pulse, which have per-application audio. Before this commit we didn't do this, because the volume is global (even if per-application), so the volume will persist between invocations. But to me it looks like always restoring is less tricky and makes for easier to understand semantics. Also, don't always unmute on exit. Unmuting was done even with ao_pulse, and interfered with user expectations (see #1107). This might annoy some users, because mpv will change the volume all the time. We will see. Fixes #1107.
* manpage: document terminal status line componentswm42014-09-201-0/+45
| | | | | (The classic MPlayer documentation had this in separate files, but we deleted them ages ago.)
* player: rename "Late:" field to "SD:"wm42014-09-201-1/+1
| | | | | | | | | Follow up to previous commit. This is probably confusing from a user point of view, since this field shouldn't show up normally anymore. (Before this commit, it could show up sporadically when a slow operation was performed during playback, such as switching fullscreen.)
* video: actually count decoder-dropped frameswm42014-09-201-4/+7
| | | | | | | | | Normally, feeding a packet to the decoder should always return a frame _if_ we received a frame before. So while we can't know exactly whether a frame was dropped, at least the normal case is easily detectable. This means we display something closer to the actual framedrop count, instead of a bad guess.
* video: improve decoder-based framedropping modewm42014-09-201-6/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is the "old" framedropping mode (derived from MPlayer). At least in the mplayer2/mpv source base, it stopped working properly years ago (or maybe it never worked properly). For one, it depends on the video framerate, which assume constant framerate. Another problem was that it could lead to freezing video display: video could get so much behind that it couldn't recover from framedrop. Make some small changes to improve this. Don't use the current audio position to check how much we are behind. Instead, use the last known A/V difference. last_av_difference is updated only when a video frame is scheduled for display. This means we can keep stop dropping once we're done catching up, even if video is technically still behind. What helps us here that this forces a video frame to be displayed after a while. Likewise, we reset the dropped_frames count only when scheduling a new frame for display as well. Some inspiration was taken from earlier work by xnor (see issue #620), although the implementation turned out quite different. This still uses the demuxer-reported (possibly broken) FPS value. It also doesn't account for filters changing FPS. We can't do much about this, because without decoding _and_ filtering, we just can't know how long a frame is. In theory, you could derive that from the raw packet timestamps and the filter chain contents, but actually doing this is too involved. Fortunately, the main thing the FPS affects is actually the displayed framedrop count.
* player: make code more obviouswm42014-09-201-2/+2
| | | | Or at least I think so.
* player: use backwards flag for seeking external trackswm42014-09-201-1/+1
| | | | | Otherwise, the external track could end up at a position that's too late.
* player: reset last_av_difference if not applicablewm42014-09-202-0/+2
| | | | | | Don't let stale values linger around. Also fix a slightly related case in audio.c.
* af_hrtf: initialize coefficient arrayswm42014-09-191-0/+25
| | | | | | | | | | | | | | | Sometimes, --af=hrtf produces heavy artifacts or silence. It's possible that this commit fixes these issues. My theory is that usually, the uninitialized coefficients quickly converge to sane values as more audio is filtered, which would explain why there are often artifacts on init, with normal playback after that. It's also possible that sometimes, the uninitialized values were NaN or inf, so that the artifacts (or silence) would never go away. Fix this by initializing the coefficients to 0. I'm not sure if this is correct, but certainly better than before. See issue #1104.
* input: add locking for repeat infoAlexander Preisinger2014-09-191-0/+3
|
* build: update minimum wayland versionAlexander Preisinger2014-09-192-3/+3
| | | | Uh oh.
* wayland: use reported rete and delayAlexander Preisinger2014-09-191-2/+27
| | | | | If native-keyrepeat is true then we set the rate and delay reported by the compositor.
* input: add function for setting repeat infoAlexander Preisinger2014-09-192-0/+8
| | | | | | | Let us set a different rate and delay. Needed for the following commit where we set rate and delay reported by weston. But only if the option native-keyrepeat is set.
* vf_lavfi: fetch output frames incrementallywm42014-09-181-22/+24
| | | | | | | Uses the new mechanism introduced in the previous commit. Depending on the actual filter, this distributes CPU load more evenly over time, although it probably doesn't matter.
* video/filter: allow better dataflowwm42014-09-182-2/+20
| | | | | | | | | Consider a filter which turns 1 frame into 2 frames (such as an deinterlacer). Until now, we forced filters to produce all output frames at once. This was done for simplicity. Change the filter API such that a filter can produce frames incrementally.
* video: separate calling decoder/filterwm42014-09-181-14/+22
| | | | | | | | | | | Rename video_decode_and_filter to video_filter, and add a new video_decode_and_filter function. This function now calls the decoder. This is done so that we can check filters a second time after decoding, which avoids a useless playloop iteration. (This and the previous commits are really just microoptimizations, which simply reduce the number of times the playloop has to recheck everything.)
* video: check whether there are enough frames after filteringwm42014-09-181-6/+11
| | | | | | | Move the check to a function. Run the check a second time after decoding/filtering. This second check is strictly speaking redundant (which is why it wasn't done until now), but it avoids a useless playloop iteration.
* video: filter new frames at a better timewm42014-09-181-24/+24
| | | | | | | Move this code below the code that "shifts" the newly filtered frame. This allows us to skip a useless playloop iteration later, because obviously we need to filter a new frame after the previous frame has been "shifted", and not before that.
* player: allow overriding OSD message for all OSD levelswm42014-09-184-17/+54
| | | | | | | | | | | | | | | | | | Until now, you could override only level 3 with --osd-status-msg. Extend this, add add --osd-msg1 to --osd-msg3 (one for each OSD level). OSD level 0 always means disable OSD, so that isn't included. --osd-msg3 corresponds to --osd-status-msg, but they're not exactly the same. To allow more customization, --osd-msgN do not include the OSD symbol. The symbol can be manually added with "${osd-sym-cc}". We keep the "old" option for some short-term compatibility. --osd-msg1 should be particularly useful; for example you could do: --osd-msg1='${?pause==yes:${osd-sym-cc}}' to display a "paused" symbol when paused, and nothing during normal playback. (Although admittedly, the syntax is quite a bit of work.)
* command: allow using ASS tags on OSD messageswm42014-09-185-4/+48
| | | | | | | | | | | We don't allow this by default, because it would be silly if random external data (like filenames or file tags) could accidentally trigger them. Add a property that magically disables this ASS tag escaping. Note that malicious input could still disable ASS tag escaping by itself. This would be annoying but harmless.
* command: add osd-sym-cc propertywm42014-09-184-11/+27
| | | | This allows you to reproduce the OSD symbol.
* TOOLS/idet.sh: Handle the case of multiple Parsed_idet_0: output lines.Rudolf Polzer2014-09-171-14/+23
| | | | This seems to happen frequently now. It is handled by adding their values.
* ao_oss: prevent hang when unpausing after device was lostwm42014-09-171-0/+3
| | | | | | | | | | | | | | | | | | | | | | | Pausing/unpausing while the audio device can't be reopened, and then unpausing again when the device is finally reopened, can hang the player for a while. This happens because p->prepause_samples grows without bounds each time the player is unpaused while the device is lost. On unpause, ao_oss plays prepause_samples of silence to compensate for A/V timing issues due to the partially lost buffer (we can't pause the device at an arbitrary sample position, and the current period will be lost). This in turn will make the player appear to be frozen if too much audio is queued. (Normally, play() must never block, but here it happens because more data is written than get_space() reports. A better implementation would never let prepause_samples grow larger than the period size.) The unbounded growth happens because get_space() always returns that the device can be written while the device is lost. So limit it to 200ms. (A better implementation would limit it to the period size.) Also see #1080.
* ao_oss: move code aroundwm42014-09-171-26/+27
| | | | | More logical, and preparation for the next commit. No functional changes.
* TOOLS: eliminate echoes with variable substitutionsshdown2014-09-172-16/+18
| | | | | echo behaviour with backslash escapes seems to be non-portable: dash does expand such an escapes and bash does not, so use cat/printf instead.
* TOOLS/mpv_identify.sh: simplify line-by-line readingshdown2014-09-161-18/+6
| | | | Use here-document idiom to read mpv output line-by-line.
* video: wake up core as soon as possiblewm42014-09-161-0/+1
| | | | | | | | There's no reason to let the core wait until the frame is done displaying. In practice, the core normally didn't need this additional wakeup, and the VO was quick enough to fetch the new frame, before the core even attempted to queue a new frame. But it wasn't entirely clean, and the correct wakeup handling might matter in some cases.
* options: change --volstep to 2wm42014-09-162-2/+2
| | | | | | | | | | With default settings, this allows you to hit the 100% mark (with default --softvol-max in the middle) even if you've reached min or max volume before. This is because 50 is not divisible by 3 (old default) but by 2 (new default). Not really sure why there still can be issues with higher --softvol-max and --volstep=1, but this is where I stop caring.
* player: don't let multiline filenames set options on resumewm42014-09-161-4/+7
| | | | | | | | | | | | | | | | | If --write-filename-in-watch-later-config is used, and the filename contains newline characters (as generally allowed on Unix), then the newline will be written to the resume file literally, and the parts after the newline character are interpreted as options. This is possibly security relevant. Change newline characters (and in fact any other special characters) to '_'. Reported as #1099 (this commit is a reimplementation of the proposed pull request). CC: @mpv-player/stable
* demux: gracefully handle packet allocation failureswm42014-09-167-27/+58
| | | | Now the packet allocation functions can fail.
* TOOLS/mpv_identify.sh: mark as executablewm42014-09-161-0/+0
|
* options.lua: call msg.debug after resolving 'identifier'Otto Modinos2014-09-161-2/+1
|
* command: avoid a double -> int castBen Boeckel2014-09-161-1/+1
| | | | | | | | Just check against zero directly. Changes behavior, but that should be ok. Signed-off-by: wm4 <wm4@nowhere>
* TOOLS: idet: use quotes for the verdict valueBen Boeckel2014-09-161-8/+8
| | | | | ShellCheck warns about "vara-varb" about not being in $(()), but we actually want the literal string, so quote it. Also fix a typo.
* TOOLS: shellcheck: quote variable expansionsBen Boeckel2014-09-163-23/+23
|
* TOOLS: shellcheck: remove '$' on variables in $(()) expansionBen Boeckel2014-09-162-9/+9
|
* TOOLS, version.sh: shellcheck: replace `cmd` with $(cmd)Ben Boeckel2014-09-162-2/+2
| | | | Signed-off-by: wm4 <wm4@nowhere>
* TOOLS: idet: remove unused codeBen Boeckel2014-09-161-9/+0
|
* vo_wayland: remove unnecessary checkAlexander Preisinger2014-09-161-19/+10
| | | | | buffer_pool_get_front now returns always a valid buffer. No need for corner cases.
* wayland/buffer: use buffer macros consistentlyAlexander Preisinger2014-09-161-3/+3
|
* manpage: fix typo in input.rstAleksey Andreev2014-09-151-1/+1
| | | | Signed-off-by: wm4 <wm4@nowhere>
* input.conf: map ESC to exiting fullscreenwm42014-09-152-2/+5
| | | | | | | | | | Apparently making ESC exit fullscreen mode is the more popular convention compared to ESC quitting the program. It was also concluded that ESC should do nothing when the windows is already in normal state. See discussion in #973.
* af_lavrresample: fix crash with size 0wm42014-09-151-2/+3
| | | | | | | | | | | | | | The filter output size can be 0. Due to how filtering works, this is nothing unusual, but avresample_convert() will return 0. The same case is already handling with "normal" resampling (this commit fixes the reordering code). Additionally, don't use an assert(). avresample_convert() failing is unusual, but might also happen due to e.g. internal out of memory conditions, so we shouldn't just crash on it. Curiously observed with --ao=oss --audio-channels=5.1 when changing speed.
* ao_oss: don't break playback when device can't be reopenedwm42014-09-151-23/+42
| | | | | | | | | | | | | | Apparently NetBSD users want/need this (see issue #1080). In order not to break playback, we need at least to emulate get_delay(). We do this approximately by using the system clock. Also, always close the audio device on reset. Reopen it on play only. If we can't reopen it, don't retry until after the next time reset or resume is called, to avoid spam and unexpectedly "stealing" back the audio device. Also do something about framestepping causing audio desync.
* ao_oss: audio_buf_info isn't statewm42014-09-151-11/+11
| | | | | | | The context struct had an audio_buf_info field, but there's no reason why this would be needed. It's a tiny struct, and it isn't permanent state. It's always returned by SNDCTL_DSP_GETOSPACE. Keeping this as field is just confusing, so get rid of it.
* ao_oss: remove duplicate audio device open codewm42014-09-151-104/+108
| | | | | | | | | | | | | | | | | | | The code for reopening the audio device was separate, and duplicated some of the "real" open code. This was very badly done, and major required parts of initialization were skipped. Fix this by removing the code duplication. This consists mainly of moving the code for opening the device to a separate function, and adding some changes to handle format changes gracefully. (We can't change the audio format on the fly, but we can at least not explode and play noise when that happens.) As a minor change, actually always use SNDCTL_DSP_RESET when closing the audio device. We don't want to wait until the rest of the buffer is played. Also, don't use strerror() when printing the error message that reopening failed, simply because reopen_device() takes care of this, and also errno might be clobbered at this point.
* ao_oss: assume audio format reinit is not needed with SNDCTL_DSP_RESETwm42014-09-151-3/+2
| | | | | | | I have no idea whether this is true, because there literally doesn't seem to exist documentation for SNDCTL_DSP_RESET. But at least on Linux' OSS emulation, it is true. Also, it would be quite insane if it would be needed.
* ao_oss: don't use SNDCTL_DSP_RESET when pausing on NetBSDwm42014-09-151-5/+10
| | | | | | It seems on NetBSD SNDCTL_DSP_RESET exists, but using it for pausing is not feasible. We still use it to discard the audio buffer when closing the audio device.
* ao_oss: fix incorrect comments using bytes instead of sampleswm42014-09-151-3/+3
| | | | MPlayer uses bytes, mpv uses sample counts in the AO API.
* x11: if the WM supports _NET_FRAME_EXTENTS, don't wait for mapwm42014-09-152-3/+18
| | | | | | | | | | | |