summaryrefslogtreecommitdiffstats
path: root/mpvcore
Commit message (Collapse)AuthorAgeFilesLines
* input: don't emit command when using multiple mouse buttons at oncewm42013-12-011-5/+21
| | | | | | | | | | | | | | | | | | | | | | This is for key bindings that use multiple mouse buttons at once. (Yes, this is weird, but MPlayer always had this feature, and apparently there are people using it!) Before this commit, clicking another mouse button while still holding the previous mouse button forced the command bound to the previous mouse button to be emitted. This is usually needed to make sure the input consumer (the player and the OSC) stays in sync with the actual mouse button state. If there's no command sent, the OSC in particular would think the button is still held down. However, sending the command is undesired behavior if you want to use these multiple-key binds. Solve this by emitting commands in this situation only if a key down command was sent earlier. Since mouse button key bindings are normally executed on key-up only, this happens with special commands like script_dispatch only (used by the OSD to track mouse buttons, but also used for other OSC bindings). See github issue #390.
* player: simple hack to make backstep code somewhat more robustwm42013-12-011-3/+12
| | | | | | | | | | | | | | | | | | | | | | The hr-seek code assumes that when seeking the demuxer, the first image decoded after the seek will have a PTS exactly equal to the demuxer seek target time, or before that target time. Incorrect timestamps, implicitly dropped initial frames, or broken files/demuxers can all break this assumption, and lead to hr-seek missing the seek target. Generally, this is not much a problem (the user won't notice being off by one frame), but it really shows when using the backstep feature. In this case, backstepping would simply hang. Add a simple hack that basically forces a minimal value for the --hr- seek-demuxer-offset option (which is 0 by default) when doing a backstep-seek. The chosen minimum value is arbitrary. There's no perfect value, though in general it should perhaps be slightly longer than the frametime, which the chosen value is more than enough for typical framerates. Conflicts: mpvcore/player/playloop.c
* player: only pause for waiting on cache if it makes sensewm42013-12-011-1/+3
| | | | | | | | | | | | If the value for --cache-on-pause is larger than --cache-min, and the cache runs below --cache-on-pause, but above --cache-min, the logic would demand to pause the player and then unpause immediately again. This doesn't make much sense, and alternating the pause state in each playloop iteration has negative consequences. Add an explicit check to avoid this situation. Conflicts: mpvcore/player/playloop.c
* input: discard precise scrolling commands with no valueStefano Pigozzi2013-12-011-0/+2
| | | | | | | | | | | Apparently Cocoa precise scrolling generates a lot of spurious events with a delta that is equal to 0.0. Make sure that they are discarded and not added to the input queue. Even though this only known to happen with Cocoa, I implemented this at core level since it makes sense in general. Fixes: #310
* audio: respect --end/--length with spdif passthroughwm42013-12-011-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | In theory, we can't really do this, because we don't know when a spdif frame ends. Spdif transports compressed audio through audio setups that were originally designed for PCM only (which includes the audio filter chain, the AO API, most audio output APIs, etc.), and to reach this goal, spdif pretends to be PCM. Compressed data frames are padded with zeros, until a certain data rate is reached, which corresponds to a pseudo-PCM format with 2 bytes per sample and 2 channels at 48000 Hz. Of course an actual spdif frame is significantly larger than a frame of the PCM format it pretends to be, so cutting audio data on frame boundaries (as according to the pseudo-PCM format) merely yields an incomplete and broken frame, not audio that plays for the desired duration. However, sending an incomplete frame might still be much better than the current behavior, which simply ignores --end/--length (but still lets the video end at the exact end time). Should this result in trouble with real spdif receivers, this commit probably has to be reverted. Conflicts: mpvcore/player/audio.c
* player: deselect video track if initialization failswm42013-12-011-0/+1
| | | | | | | | | This didn't have any consequences, other than suddenly reinitializing video when it works again (such as with EDL timeline mixing video and audio-only files). Conflicts: mpvcore/player/video.c
* player: don't remove playback status when reinitializing DVBwm42013-12-011-1/+3
| | | | | | | Also break that line a bit. Conflicts: mpvcore/player/loadfile.c
* encode_lavc: add missing newline in error messagewm42013-12-011-1/+1
|
* m_option: handle audio/filter filters with old option parsingwm42013-12-011-3/+9
| | | | | | | | | These use the _oldargs_ hack, which failed in combination with playback resume. Make it work. It would be better to port all filters to new option parsing, but that's obviously too much work, and most filters will probably be deleted and replaced by libavfilter in the long run.
* player: fix quvi 0.9 playlist loadingwm42013-11-071-2/+3
| | | | | | | The code made no sense at all. Conflicts: mpvcore/player/loadfile.c
* mpvcore: add a note about desync on track switchesBen Boeckel2013-11-021-0/+1
|
* osc: make sure the OSC actually fits into the videoChrisK22013-11-021-1/+7
|
* mplayer: make --length relative to actual start of file, instead of 0wm42013-11-021-1/+2
| | | | | We always use the file's timestamps, so the start time can be easily something different from 0. Make the --length option respect this.
* mplayer: don't call libquvi for local fileswm42013-11-021-0/+2
| | | | | | | | | | | This is obviously not needed, and just creates potential for bad breakages (e.g. what happens if libquvi tries to open a normal filename as http URL?). Note that for simplicity, we still pass file:// URIs to quvi, and we don't exclude other protocol prefixes either. In general, we don't know what protocols quvi might support, so we don't try to second-guess it. (Even though in practice, it's probably only "http" and "https".)
* input: fix --input-ar-rate=0wm42013-10-201-1/+1
| | | | Crashed, instead of disabling auto-repeat.
* spelling fixesAlessandro Ghedini2013-10-201-3/+3
|
* osc: fix borked optionsChrisK22013-10-151-13/+13
|
* osc docs: Add documentation for OSC and rename some optionsChrisK22013-10-151-6/+6
| | | | camelCase from some of the option names removed. If you were using those, you'll have to update them in your config.
* osc: reset mouse position when leaving windowChrisK22013-10-151-4/+9
| | | | and store it freshly on first mouse_move event when entering again
* osc: Don't create a config if none exists.ChrisK22013-10-151-19/+14
| | | | A documentation explaing where and how to create one instead will follow.
* osc: use "info" instead of "warn" for config file creation messagewm42013-10-141-1/+1
| | | | | When the main mpv config file, "info" is used, so this makes things consistent.
* parser-cfg: allow putting options with leading "--"wm42013-10-141-0/+3
| | | | | | | | | | | Now you can pretend the config file is quite literally command line values dumped into a file, e.g. --option1=value --option2=value ... although the underlying mechanisms are quite different.
* parser-cfg: use bstr everywhere after parsing stagewm42013-10-143-7/+8
| | | | | | Until now it used both char[] and bstr variants in the same code, which was nasty. For example, the next commit would have additionally required using memmove() to remove the prefix from the char[] string.
* options: enable OSC by defaultwm42013-10-141-0/+1
| | | | Can can disable it with --osc=no.
* mplayer: escape strings if needed when writing watch_later configwm42013-10-141-2/+19
| | | | | | | | | This fixes handling of e.g. "--vf=lavfi=[ noise ]" when used with playback resume functionality. The spaces made it bug out, and there are more cases where it could potentially break. We could always escape for simplicity, but for now make old and new mpv builds somewhat interoperable and use this new escaping only if needed.
* parser-cfg: parse % escapeswm42013-10-141-7/+31
| | | | | | | | | | This parses "%len%string" escapes, where string can contain any characters. This method of escaping has also been used in other parts of mplayer and mpv, so it's not a new idea. (Also, don't confuse with URL encoding.) Needed by the following commit.
* mplayer: print ffmpeg library versions along with mpv version infowm42013-10-143-16/+33
| | | | | | | | | | Also change what the FFmpeg version info looks like, and additionally dump lavfi/lavr/lswr versions. (Don't bother with libavdevice and libpostproc, they're not important enough.) Unfortunately, there's no "single" FFmpeg/Libav version due to fatal braindeath on the FFmpeg/Libav side. We can't map the versions to releases either (it simply isn't accessible anywhere).
* osc: raise minmousemove default setting to 3 and disable input mouse area ↵ChrisK22013-10-141-6/+11
| | | | | | when OSC not visible The mouse area that covers the OSC is now only activated when the OSC is actually visible, to make sure the mouse still hides if it happens to be parked in the OSC area without making the OSC show up.
* mplayer, vo_image: simplify OSD redrawing, fix vo_image crashwm42013-10-131-6/+1
| | | | | | | | | | | | | | | | | | vo_image didn't handle OSD redrawing correctly anymore after OSD redrawing behavior was changed in commit ed9295c (or maybe it has been a problem for a longer time, and only showed up now). Basically, flip_page was called unexpectedly and when no image was stored, which made it crash trying to access the image. This could happen when for example provoking OSD redrawing by pausing while using --vo=image, or by using this command line: mpv --vo=image '-vf=lavfi="select=not(mod(n\,3))"' Fix by removing the code that pretends vo_image can redraw OSD, and by removing the framestepping fallback, which could make bad things happen if the VO didn't support OSD redrawing. By now, there aren't any real VOs that can't redraw the OSD properly, so this code is not needed and just complicates things like vo_image. This change likely will also be useful for vo_lavc (encoding).
* mplayer: print a warning if libass is not compiledwm42013-10-131-0/+3
| | | | | | Libass is technically an optional dependency, but in practice users tend to disable libass accidentally or for the hell of it to get something "minimal", without being aware of the consequences.
* osc: fix mouse hidingChrisK22013-10-131-2/+2
|
* osc: Once again new Show/Hide handlingChrisK22013-10-131-7/+34
| | | | | | | The deadzone-size is now by default zero, so movement on the entire window will make the OSC show up. To avoid it showing up by randomly moving mice, the option 'minmousemove' controls how many pixels movement (default: 1) between ticks (frames) are necessary to make the OSC show up. The deadzone can be reenabeled by setting the option 'deadzonesize' (default: 0 = no deadzone, 1 = entire area between OSC and opposite window border), to restore the old behavior, set it to ~0.92. The OSC will hide immediately when leaving the window or entering the deadzone (if existing) or after the time specified with 'hidetimeout' (default: 500ms) passed without any new movement. Set to negative value to disabling auto-hide (thus restoring old behavior). The OSC will never hide if hovered by the mouse.
* talloc: change talloc destructor signaturewm42013-10-131-2/+1
| | | | | | | | | | | | | Change talloc destructor so that they can never signal failure, and don't return a status code. This makes our talloc copy even more incompatible to upstream talloc, but on the other hand this is preparation for getting rid of talloc entirely. (The talloc replacement in the next commit won't allow the talloc_free equivalent to fail, and the destructor return value would be useless. But I don't want to change any mpv code either; the idea is that the talloc replacement commit can be reverted for some time in order to test whether the talloc replacement introduced a regression.)
* command: preferably show "add"/"cycle"/"set" command errors on OSDwm42013-10-121-10/+10
| | | | | | Before this, they were shown on terminal only. Now they use the OSD mechanism, which shows them on the video window or the terminal, depending on settings and what's available.
* command: don't allow changing volume if no audio initializedwm42013-10-121-0/+6
| | | | | | | | | | | | | | | | | | | | | | | Changing volume when audio is disabled was a feature request (github issue #215), and was introduced with commit 327a779. But trying to fix github issue #280 (volume is not correct in no-audio mode, and if audio is re-enabled, the volume set in no-audio mode isn't set), I concluded that it's not worth the trouble and the current implementation is questionable all around. (For example, you can't change the real volume in no-audio mode, even if the AO is open - this could happen with gapless audio.) It's hard to get right, and the current mixer code is already hilariously overcomplicated. (Virtually all of mixer.c is an amalgamation of various obscure corner cases.) So just remove this feature again. Note that "options/volume" and "options/mute" still can be used in idle mode to adjust the volume used next time, though these properties can't be used during playback and thus not in audio-only mode. Querying the volume still "works" in audio-only mode, though it can return bogus values.
* playlist: check for NULL on caller sitewm42013-10-122-2/+3
| | | | | Letting some playlist functions randomly accept NULL, while others do not isn't such a good idea.
* options: --loop=N means playback N times, not N+1 timesPhilip Sequeira2013-10-122-4/+4
| | | | | | | | | | The argument or this change is that --loop should set how often the file is played, not the number of additional repeats. Based on pull request 277, with additions to the manpage and removal of "--loop=0". Signed-off-by: wm4 <wm4@nowhere>
* libquvi9: work around insane interaction between libquvi and libkdecorewm42013-10-121-0/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | The primary effect of this commit is that it fixes playback resume if libquvi 0.9 and German locale are used, and libkdecore is on the system. (See github issue #279.) libquvi uses libproxy to determine system-wide proxy settings. libproxy in turn loads libkdecore (if present) to determine KDE proxy settings. libkdecore has a global constructor, which calls setlocale(LC_ALL, ""), switching the current locale from "C" to what the user's settings. This breaks some basic C string processing functions. Note that the locale won't be set on program start, but only when libproxy calls dlopen() on its config_kde module, which actually causes libkdecore to be loaded and initialized. In particular, with German locale, snprintf() would use "," instead of "." when formatting float values, which in combination with playback resume, would lead to parse errors the next time mpv was started, which is how this issue was found. I'd consider this a bug with libkdecore or at least libproxy. No library should ever even touch locale: it might break basic expectations on C string handling functions, might override program settings, and it's not thread-safe. But this is so nasty and severe, that a quick hack to fix it hurts less. See github issue #279 and KDE bug #325902.
* mpvcore/playlist.c: Avoid NULL reference in playlist_add_base_path()Mohammad Alsaleh2013-10-111-1/+1
| | | | | | | | | | Before this patch, those will cause a crash: mpv -playlist /dev/null mpv -playlist <(bla) # if the result of bla is empty Signed-off-by: Mohammad Alsaleh <CE.Mohammad.AlSaleh@gmail.com> Signed-off-by: Stefano Pigozzi <stefano.pigozzi@gmail.com>
* mp_ring: fix mp_ring_read_cb() when read wraps aroundWilliam Light2013-10-081-2/+10
| | | | | | previously, mp_ring_read_cb() would allow reading past the end of the ringbuffer when buffered > available. mp_ring_read() had logic for splitting the read into two, which I duplicated into mp_ring_read_cb().
* command: sub_seek: avoid getting stuckwm42013-10-071-0/+5
| | | | | | | | | First, don't try to seek if the result is 0 (i.e. nothing found, or subtitle event happens to be exactly on spot). Second, since we never can make sure that we actually seek to the exact subtitle PTS (seeking "snaps" to video PTS), offset the seek by 10ms. Since most subtitle events are longer than 10ms, this should work fine.
* osc: Okay, don't multiply the cache valueChrisK22013-10-071-5/+1
| | | | As expected, this is not liked.
* osc: Display cache fill statusChrisK22013-10-071-1/+21
| | | | | | The OSC will now display cache fill status between the timecodes, but only if it's below 48% to not clutter the interface with erratically changing values. By default, the displayed value is multiplied by 2 to not confuse users who are unfamillar with the inner workings of the caching system. This can be disabled using the iAmAProgrammer=true setting.
* osc: Add another scale option for forced windows.ChrisK22013-10-061-3/+6
| | | | If the OSC is rendered on a forced window (by --force-window), the scale can be configured with scaleForcedWindow.
* mplayer: don't resume playlist if --no-resume-playback is usedwm42013-10-061-0/+2
|
* command: add commands for displaying overlayswm42013-10-055-4/+148
| | | | | | Requested by github issue #255. Does not work where mmap is not available (i.e. Windows).
* command: add properties for retrieving OSD dimensionswm42013-10-051-0/+23
|
* mplayer: fix some issues with playlist_prev commandwm42013-10-051-1/+9
| | | | | | | | | | | | | | | | You couldn't jump to the first entry in the playlist, if that entry was marked as "too short". But this is usually fine, because it doesn't get into the way of the user. (This feature is meant to allow being able to jump backwards through the playlist even if a file immediately stops playback right after initialization, not to prevent playing these files at all.) Also, apply the skip logic when wrapping around the playlist when going backwards. This happens with --loop, because looping pretends the playlist is infinitely repeated forwards and backwards (as long as the playlist_prev/next commands are concerned). Also add some comments.
* mplayer: fix cleanup if VO initialization failswm42013-10-051-0/+1
| | | | | Just specifying a VO that doesn't exist would make it crash. Regression caused by commit 6a0408b.
* mplayer: don't keep previous video frame with --force-windowwm42013-10-041-15/+14
| | | | | | | | | | When for example switching off the video stream, and --force-window is used, forcefully reconfigure the VO. This will reset the size, and will clear the window with black. Needed some effort, because you don't always want to clear the window on "discontinuity" points like going to a next file: this would introduce some flicker.
* command: add sub_seek input commandwm42013-10-023-6/+18
| | | | | | | Essentially reuses the sub_step command, and is subject to the same restrictions. Seems to behave a bit strange sometimes, but generally works.
* input: remove strange offset from commands enumwm42013-10-021-1/+1
| | | | A leftover from 10 years of refactoring.
* command: don't let "avsync" property print NOPTS valuewm42013-10-021-0/+2
| | | | | | Can happen when seeking in audio files with attached picture. MP_NOPTS_VALUE doesn't really make sense outside of mpv internals, so don't return it.
* mplayer: osd bar depends on VO, not video decodingwm42013-10-021-1/+1
| | | | The OSD bar wasn't displayed, and instead a fallback message was shown.
* mplayer: make VO interaction work in --idle modewm42013-10-021-19/+34
| | | | | | | Didn't handle VO events, didn't handle OSD message management. There is probably still some strangeness left. --idle mode was never made for direct interaction.
* mplayer: change default window size for --force-windowwm42013-10-021-1/+1
| | | | Closer to the ubiquitous 16:9 screen aspect ratio. Requested by ChrisK3.
* command: subtitle support depends on VO, not video decodingwm42013-10-022-13/+9
| | | | | | | | | We can render subtitles if a VO is open. Whether we're decoding video (i.e. if mpctx->sh_video is set) doesn't really matter. Subtitle display with --force-window still doesn't quite work yet, because there's nothing to actually force redrawing of subtitles in this mode.
* core: add --force-windowwm42013-10-024-16/+83
| | | | | | | | | | | | | | | | | This commit adds the --force-window option, which will cause mpv always to create a window when started. This can be useful when pretending that mpv is a GUI application (which it isn't, but users pretend anyway), and playing audio files would run mpv in the background without giving a window to control it. This doesn't actually create the window immediately: it only does so only after initializing playback and when it is clear that there won't be any actual video. This could be a problem when starting slow or completely stuck network streams (mpv would remain frozen in the background), or if video initialization somehow is stuck forever in an in-between state (like when the decoder doesn't output a video frame, but doesn't return an error either). Well, we can pretend only so much that mpv is a GUI application.
*