summaryrefslogtreecommitdiffstats
path: root/player
Commit message (Collapse)AuthorAgeFilesLines
* vo: add video-target-params propertyKacper Michajłow2024-03-071-1/+18
|
* player/command: fix video-params/[average-bpp, alpha] when hw decodingKacper Michajłow2024-03-071-2/+3
| | | | Need to check hw_subfmt for real values.
* mp_image: add imgfmt_name to mp_image_paramsKacper Michajłow2024-03-071-10/+14
| | | | | | | | Convenience to override name if imgfmt is not set. Allows to create mp_image_params without setting imgfmt. Will be useful for the next change where mp_imgfmt is not available. This is workaround that will be remved once all codebase switches to pl_fmt.
* Revert "player: reset av state on speed changes"Dudemanguy2024-03-033-22/+2
| | | | | | | | | Ended up being too flawed and caused trouble in other areas. There's other approaches to trying to solve the issue this meant to address in the works that should be better, so let's wait on that. Fixes #13613 and fixes #13622. This reverts commit e3af545421322e357eb9355395923710ea93f83b.
* player/video: subtract frame_time from delay when ao_chain starts audioDudemanguy2024-03-033-1/+5
| | | | | | | This seems more robust than relying on the audio status to actually be playing. For files where there is no audio or the audio start is delayed, this guards against that but it allows the subtraction to always occur otherwise on normal files with audio.
* player/audio: also adjust apts by audio speed in audio_start_aoDudemanguy2024-03-031-1/+2
| | | | Fixes 7051e94e4bacd00e53e88835d28e9d9082de3bb3
* command: add begin-vo-dragging commandnanahi2024-03-011-0/+12
| | | | | | This command initializes a vo dragging request for VOs that implement the new VOCTRL_BEGIN_DRAGGING voctrl. This allows scripts to begin vo dragging for any button press event.
* Revert "player: add ao-volume option, to set the system volume at startup"Dudemanguy2024-03-013-24/+10
| | | | | | | | Ended up being a bad idea. As a property, this inherently has more functionality and the tradeoff of being able to do --ao-volume wasn't worth it. This reverts commit 58ed620c064971535e60778612777750aa5e2f4d.
* osdep/mac: make mac naming of files, folders and function consistentder richter2024-02-281-2/+2
| | | | | rename all macOS namings (osx, macosx, macOS, macos, apple) to mac, to make naming consistent.
* console.lua: fix blurry cursor when --osd-blur is setnanahi2024-02-271-1/+1
| | | | | This is drawn with the same method as the stats.lua graphs so it's also blurry. Fix this by using the "Default" style for cursor drawing.
* stats.lua: fix blurry graphs when --osd-blur is setnanahi2024-02-271-1/+1
| | | | | | | | When --osd-blur is set to a nonzero value, the graphs also become blurry. This is because they are rendered by the osd-overlay command with the "OSD" style which has OSD blur applied, and are treated no differently from texts. Fix this by using the "Default" style for these graphs which uses the default OSD options.
* player/audio: remove misleading comment about delayDudemanguy2024-02-261-1/+1
| | | | | | | | | | | This came up in #13571. playing_audio_pts does not include mpctx->delay contray to what that implies. The function is meant to only offset the written audio pts by whatever the internal AO buffer may be. mpctx->delay is a combination from both the audio and video code, so it should not be used here. What is wanted is purely the audio pts. b74c09efbf7c6969fc053265f72cc0501b840ce1, a very controversial commit to say the least, was what introduced this comment, so removing is probably OK.
* player: reset av state on speed changesDudemanguy2024-02-263-2/+22
| | | | | | | | | | | | | | | Playback speed changes should be treated as a discontinuity just like seeking. Previously, this was being treated internally as just plain normal playback, but that can't really work. The frame timings from before the speed change and after the speed change are completely different and shouldn't be compared to each other. This lead to frames being adjusted to weird places and possibly even being skipped (as if mpv was seeking) on speed changes. What we should do is clear out and reset all av related fields like what happens when you seek, but it is not quite as aggressive. No need to do a full video state reset or such. We also wait an arbitrary amount of frames before adjusting for av sync again. compute_audio_drift already used a magic number of 10 which sounds reasonable enough so define that and use it here. Fixes #13513.
* player: remove speed adjustment from playing_audio_ptsDudemanguy2024-02-262-2/+3
| | | | | | | | | | | | When calculating the audio pts, mpv multiplies the ao delay by the current audio speed and subtracts it from the written audio pts. This doesn't really make sense though. mpctx->video_pts is never affected by the playback speed, and this leads to weird behavior like the audio-pts property changing values while paused merely because the playback speed changes. Remove the multiplication and simply subtract the delay by a factor of 1 instead. When updating the av_diff in player/video, this does actually need to take in account the audio speed so we do the calculation there.
* player/main: don't set the main thread nameDudemanguy2024-02-261-1/+0
| | | | | | | 98a27b3cd1e6af743af67699318df1946ce5bf8f changed this to mpv but that's kind of pointless since the binary is already named mpv so that will be the default thread name. Evidently, people rename/symlink the binary to something else so might as well make them happier. Fixes #13469.
* input/player: add loadfile/loadlist insert-at commandDavid Vaughan2024-02-261-22/+78
|
* player: change insert_next to insert_atDavid Vaughan2024-02-262-6/+5
| | | | | | | | | | Change the `playlist_insert_next` function to `playlist_insert_at` (ie, insert at the location of an entry, rather than after it, and rename to be clearer that it doesn't have anything to do with the currently-playing entry). Also, replace calls to `playlist_add` with calls to `playlist_insert_at`, since the former has become redundant.
* player: add loadlist insert-next commandsDavid Vaughan2024-02-261-5/+15
| | | | | | | | Analogous changes to the previous commit ("add loadfile insert-next commands"), but for the `loadlist` command. This allows us to insert a new playlist next in the current playlist, rather than just appending it to the end.
* player: add loadfile insert-next commandsDavid Vaughan2024-02-261-5/+16
| | | | | | | | | | | | | This commit adds two new commands (`insert-next` and `insert-next-play`) which mirror the existing commands, `append` and `append-play` in functionality, with the difference that they insert directly after the current playlist entry, rather than at the end of the playlist. This change gives MPV a piece of functionality already found in (for example) Spotify's media player: "play next". Additionally, using the new `insert-next` command, users can trivially write a script to play a new piece of media immediately without otherwise clearing or altering the remainder of the playlist.
* player: add ao-volume option, to set the system volume at startupLeonardo Boss2024-02-253-10/+24
| | | | closes #12353
* player/command: handle runtime toggling of hidpi-window-scaleDudemanguy2024-02-241-0/+23
| | | | | | | Wayland was the only backend that attempted this, but it can be done in a centralized place for anything that supports this. hidpi-window-scale is just the same as a normal window scale but with the OS DPI as the factor.
* player: fix watch later config comments when ignoring pathGuido Cella2024-02-241-2/+5
| | | | | | | | | | | | | With --ignore-path-in-watch-later-config, --write-filename-in-watch-later-config still writes the absolute path of files in the comment, even though the hash is calculated from the basename. Make it write the basename to avoid confusion. Also stop writing redirect entries for parent directories with --ignore-path-in-watch-later-config, both because it's redundant, and because with this patch it would write the basename of directories in the comment, which would be wrong because their hashes are calculated from the absolute paths.
* player/loadfile: rewrite sub autoselection logicDudemanguy2024-02-242-51/+29
| | | | | | | | | There's too many dumb options related to subtitles which have annoying edge cases. Try to rewrite this completely so it hopefully behaves normally in every expected scenario. A key goal here is be smarter while looping through the tracks and avoid selecting the subtitle if it doesn't meet user's passed options as opposed to clearing the pick after the fact. Fixes #13280 and fixes #13263.
* command: fix sub-seek while paused without a videoGuido Cella2024-02-231-0/+8
| | | | | | | When using sub-seek without a video track while paused, adding the 0.01 SUB_SEEK_OFFSET to the new timestamp is not enough to show the new subtitle line. Add 0.1 instead to fix it. 0.01 is already enough for sub-step.
* command: don't add SUB_SEEK_OFFSET twice with sub-seekGuido Cella2024-02-231-4/+0
| | | | | The name SD_CTRL_SUB_STEP is misleading, but it is also used for sub-seek, and sub/sd_ass.c already adds SUB_SEEK_OFFSET with it.
* vo: remove VOCTRL_SET_EQUALIZER and simplify into UPDATE_VIDEODudemanguy2024-02-171-1/+1
| | | | | | | | | | | | | | | Since 03cf150ff3516789d581214177f291d46310aaf4, the only purpose of this VOCTRL was to signal a redraw to the vo. It actualy could have been removed in 531868fe0d2a35fbbff78d9a9ff8f96df73e69fd, but this was missed. The UPDATE_VIDEO flag is better anyway because it allows us to handle a wide variety of options scattered around that require the VO to update itself and redraw. We can remove both of the custom callbacks in vo.c and only leave the VOCTRL_VO_OPTS_CHANGED one. Additionally, that commit also introduced vo_set_want_redraw, but this is redundant and not needed. The VOs that use VOCTRL_UPDATE_RENDER_OPTS already set vo->want_redraw, and those are the only VOs where these options are relevant in the first place. So we can remove this as well and just let the big callback in player/command do everything.
* command: add window-id to MPV_EVENT_VIDEO_RECONFIG property changeDudemanguy2024-02-171-2/+2
| | | | | | | | | 25b66256d7ff48254b2055a066e29f260414112f originally added this property, but it did not add it to the property notification. This is possibly because the window id doesn't appear to change on x11 even when toggling VOs at runtime. However, windows uses this property and apparently the id changes there so we should signal updates when appropriate. Fixes #13495.
* player/sub: avoid wasteful subtitle redrawsDudemanguy2024-02-153-22/+53
| | | | | | | | | | | | | | | | | This only affects two special cases: printing subtitles to the terminal and printing subtitles on a still picture. Previously, mpv was very dumb here and spammed this logic on every single loop. For terminal subtitles, this isn't as big of a deal, but for the image case this is pretty bad. The entire VO constantly redrew even when there was no need to which can be very expensive depending on user settings. Instead, let's rework sub_read_packets so that it also tells us whether or not the subtitle packets update in some way in addition to telling us whether or not to read more. Since we cache all packets thanks to the previous commit, we can leverage this information to make a guess whether or not the current subtitle packet is supposed to be visible on the screen. Because the redraw now only happens when it is needed, the mp_set_timeout_hack can be removed.
* Reapply "video: remove another redundant wakeup"Kacper Michajłow2024-02-151-1/+3
| | | | This reverts commit 44c398c3e133379e01f06c89fd78b6692694849c.
* js: complex key-binding: send also key_textAvi Halachmi (:avih)2024-02-091-4/+5
| | | | | | | This is doumented and has been part of the table in lua, but until now not in the JS object. Fixes #13448
* console.lua: move functions to strip common charactersGuido Cella2024-02-081-34/+34
| | | | | | Move common_prefix_length() and related functions before the first call to common_prefix_length(). It works now because it's global but if we ever make all functions local for consistency it will stop working.
* stats.lua: use deinterlace-active property insteadDudemanguy2024-02-071-1/+1
| | | | | But still read the deinterlacing option to distinguish between yes and auto.
* player/command: add deinterlace-active propertyDudemanguy2024-02-071-1/+15
|
* player: ensure runtime updates of certain rendering optionsDudemanguy2024-02-051-0/+7
| | | | | | | | | | When adding things like brightness or gamma, the video obviously needs a redraw if paused. This happened to work in the normal case because the OSD notification triggered a redraw, but if you use no-osd the picture won't change. Fix this by adding another option flag, UPDATE_VIDEO, and simply signalling we want a redraw. This gets handled along with the normal osd redrawing check in the playloop so something like "no-osd add gamma 1" actually works.
* command: add load-input-confGuido Cella2024-02-041-0/+11
| | | | | | | | | | | | | | | | This can be used to auto reload the input configuration file, e.g. in vim: autocmd BufWritePost ~/.config/mpv/input.conf silent !echo load-input-conf %:p | socat - /tmp/mpvsocket Partially fixes #6362. Additionally this can be used as a replacement for deprecated input sections if they are ever actually removed. For example, if you want to define different bindings for images, you can load-input-conf an input.conf for images, and load the original again when switching to a video. Though currently you would have to redefine builtin bindings that were overwritten with image ones in the default input.conf.
* command: add load-config-fileGuido Cella2024-02-042-10/+38
| | | | | | | | Unlike set include mpv.conf, this works after playback has started. It can be used to auto reload the configuration, e.g. in vim: autocmd BufWritePost ~/.config/mpv/mpv.conf silent !echo load-config-file %:p | socat - /tmp/mpvsocket Partially fixes #6362.
* vo: change vo_frame duration to doubleKacper Michajłow2024-01-271-1/+1
| | | | | | | 32-bit signed integer can hold ~2.1s stored as nanoseconds. While frame duration doesn't make sense to be this long, the existing clamp is to 10s. Change type to double, which is consistent with other fields in vo_frame.
* player/command: don't reselect demux stream on only UPDATE_OSDDudemanguy2024-01-221-3/+4
| | | | | 700f72f8e424486633b1c8da9313182e63072592 should have put this inside the flag check.
* player/video: force vo reconfigure on color parameters changeKacper Michajłow2024-01-221-11/+6
| | | | | | | | This workarounds the issue with vo_gpu that would freeze in certain condition. I haven't go deep inside to understand why, so this should be considered as a workaround. Fixes: #13256
* csputils: replace mp_chroma_location with pl_chroma_locationKacper Michajłow2024-01-221-1/+1
|
* csputils: replace mp_alpha_type with pl_alpha_modeKacper Michajłow2024-01-221-6/+6
|
* csputils: replace mp_colorspace with pl_color_spaceKacper Michajłow2024-01-221-5/+5
|
* command: do a normal seek instead of a refresh seek when switching vojmir12024-01-221-1/+1
|
* osc: add osc-windowcontrols_title optionDudemanguy2024-01-221-1/+2
| | | | | This allows the title shown with the windowcontrols to be controlled separately from the normal osc title. Fixes #13295.
* Revert "player/video: loosen logic checks for adjust_sync"llyyr2024-01-211-2/+2
| | | | | | | | | This reverts commit cb2b579f61764452652c6cf5c6a94ae5e67c77ed. This breaks files where the audio starts much later after the video since mpv reads the first audio packet even if it isn't supposed to start yet, resulting in the audio_status being STATUS_READY for the entire time mpv is "waiting" for the first audio packet to be played.
* player: remove --term-remaining-playtime optionDudemanguy2024-01-201-2/+1
| | | | | This wasn't useful and didn't even really do what it said anyway. Closes #12167.
* command: restore lang after track reloadGuido Cella2024-01-203-0/+13
| | | | | | | | | | If a track's language was guessed from its filename, the commands that reload the track, like sub-reload, remove it. Fix this by calling guess_lang_from_filename() again. Note that backing up t->lang and restoring it if nt->lang is NULL would work incorrectly when lang is in the stream and it is removed before reloading.
* command: minor m_property_strdup_ro style changesnanahi2024-01-201-6/+5
|
* stats.lua: display the current GPU contextnanahi2024-01-201-0/+2
| | | | | | This displays the current GPU context when --vo=gpu or --vo=gpu-next is used, which shows the platform and backend information of the vo which are previously not available.
* command: export current-gpu-context propertynanahi2024-01-201-0/+8
| | | | | | | This exports `current-gpu-context` property, which is the string description of the current active GPU context. This allows scripts to uniquely identify the platform and backend used for --vo=gpu and --vo=gpu-next.
* player/command: reselect track after UPDATE_SUB_HARDDudemanguy2024-01-201-0/+2
| | | | | | The lingering cache needs to be cleared so the packets don't stay forever on the screen past their welcome. Do this by simply refreshing the stream. Fixes #13148.
* console.lua: highlight the selected suggestion in the terminalGuido Cella2024-01-201-3/+10
|
* scripting: don't observe properties with type nilGuido Cella2024-01-202-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | mp.observe_property('foo', nil, ...) calls the handler at least 2 times on each playlist change even when the property doesn't change. This is dangerous because if you haven't read observe_property's documentation in a long time this is easy to forget, and you can end up using it for handlers that are computationally expensive or that cause unintended side effects. Therefore, this commit discourages its use more explicitly in the documentation, and replaces its usages in scripts. For console.lua, observing focused with type nil leads to calling mp.osd_message('') when changing file while playing in the terminal with the console disabled. I don't notice issues from this, but it's safer to avoid it. For playlist and track-list this doesn't really matter since they trigger multiple changes on each new file anyway, but changing it can avoid encouraging people to imitate the code. One usage of none in stats.lua is kept because according to b9084dfd47 it is a hack to replicate the deprecated tick event.
* osc: don't autohide mouse cursor when hovering over windowcontrols titlenanahi2024-01-201-0/+14
| | | | | | | | | | | When the mouse cursor is hovering over the (CSD) windowcontrols title, the osc keeps displaying, but the cursor autohide isn't disabled like other visible regions. Fix this by disabling the cursor autohide in this region. All other existing behaviors of the mouse cursor in this region are unchanged, including triggering main window area input and allowing VO dragging.
* command: add osd display for volume-gainnanahi2024-01-201-0/+3
|
* audio: add --volume-gain options to control volume in decibelsnanahi2024-01-202-2/+26
| | | | | | This adds volume-gain, volume-gain-max, volume-gain-min options, which can be used to control audio volume and target dynamic range in decibels. The gain is applied on top of the existing volume setting.
* command: fix bitrate unit capitalizationnanahi2024-01-181-1/+1
| | | | This is 1 billion times smaller than it should be in SI units.
* stats.lua: make capitalization consistent across pagesllyyr2024-01-171-11/+11
|
* console.lua: style log lines in the terminalGuido Cella2024-01-143-29/+40
| | | | | | | | | | When running the console in the terminal, style log lines with the same escape sequences as msg.c. mp.input can also specify terminal escape sequences, e.g. a script to select a playlist entry can invert the color of the selection. Also add a missing newline to help's error message.
* player: add forced choice to subs-with-matching-audioDudemanguy2024-01-131-2/+5
| | | | | | | | | | fe875083b3d30b06ef77745f40570e8f63afec2 confused things a bit and made --no-subs-with-matching-audio actually mean what it says: no subtitles if the languages match. However, the option actually meant no non-forced subtitles not no subtitles at all. This isn't really intuitive so instead of changing the behavior back to the old way (we already have a release since then), add a third option "forced" which is equivalent to the old meaning of --no-subs-with-matching audio. Fixes #13151.
* scripting: add mp.inputGuido Cella2024-01-135-36/+278
| | | | This lets scripts get textual input from the user using console.lua.
* console.lua: expand ~/ in file completionGuido Cella2024-01-041-0/+10
| | | | | | | Makes Tab expand loadfile ~/ to loadfile /home/$USER/. I used expand-path instead of os.getenv('HOME') to make it work on Windows.
* player/video: set video_out to NULL before broadcasting eventsKacper Michajłow2024-01-041-1/+1
| | | | This avoids possible reference of video_out after destory.
* command: allow changing --gpu-api and --gpu-context at runtimeGuido Cella2024-01-011