summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* player: remove unused mutate argument in mp_next_fileDudemanguy2023-10-053-7/+6
| | | | | | e277fadd60350caad1fc31e92a5076692e61dcc9 originally added this but it never actually did anything in the function... wm4 probably changed his mind but forget to delete it so just remove it here.
* loadfile: fix an old wonky playlist heuristicDudemanguy2023-10-052-17/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 2c6a3cb1f27e02b2e66390a2465ab648905a64d0 originally added this struct member and then 1be863afdbe9017aa227234e8525b209fb818224 later added some more logic to loadfile that uses this. There's been more changes since then of course, but bits using playback_short and playback_start have mostly stayed the same. It's a bit strange it's worked this way for so long since it makes an assumption on how long files should be and leads to weird, broken behavior on playlists with shorter videos. The main reason for playlist_short, as far as I can tell, is to deal with some fringe cases with short videos and trying to go back in the playlist. More specifically, if you use --loop=inf on a very short video (say less than 1 second) and try to go back in the playlist, you won't be able to without any of this special logic that deals with it. But the current approach has several side effects like going back multiple items in the playlist instead of just one if the video is less than one second. This is just bad so delete everything related to playlist_short and playlist_start. Instead, let's handle this by keeping track of playlist-prev attempts. Going forward in the playlist doesn't require any special handling since a bad/broken file will just advance to the next one. So it's only going backwards that requires some special consideration. If we're going backwards and the user isn't using force, then mark the playlist entry with a special flag. If the file loads successfully in play_current_file, we can just clear the flag and not worry about it. However if there's a failure, then we set a bool telling play_current_file that it should go back one more item in the playlist if possible and try again. This way, we avoid the previously mentioned --loop=inf edgecase and the user can still attempt to retry previously failed items in the playlist (like a url or such). Fixes #6576, fixes #12548.
* af/vf-command: add ability to target a specific lavfi filterAshyni2023-10-054-15/+33
| | | | fixes: #11180
* vo_dmabuf_wayland: free frame if the visibility check failsDudemanguy2023-10-041-1/+4
| | | | | | Forgotten in 7b8a30fc8132203bc93d35ac887682d2044ad5a9. Every other case either is either a dummy frame (no allocated memory) or we manage it as part of the usual wayland buffer release.
* external_files: remove duplicate from cover art whitelistGuido Cella2023-10-042-3/+2
| | | | | I made a mistake in 0070a5820e here because there were 2 separate groups of "front" filenames.
* vo_dmabuf_wayland: eliminate an extra frame copyDudemanguy2023-10-033-29/+36
| | | | | | | | | | | | | | When implementing vo_dmabuf_wayland, it always did a copy of the image from the current frame and worked with that. The reason was because mpv's core held onto the frame and caused some timing issues and rendering glitches depending on when it freed the image. This is pretty easy to fix: just make vo_dmabuf_wayland manage the the frames. In vo.h, we add a boolean that a VO can set to make them manage freeing frames directly. After doing this, change the buffers in vo_dmabuf_wayland to store the whole vo_frame instead of just the image. Then, just modify some things a bit so frame is freed instead of the image. Now, we should truly have zero-copy playback. Well as long as you don't use libass to render anything (that's still a copy from system memory).
* TOOLS/lua/autoload: bump the msg-level of some loggingDudemanguy2023-10-031-6/+6
| | | | | | | msg.info for when you're potentially adding hundreds of files is way too spammy and not really useful (autoload loads files, what?). Bump it up to msg.verbose. Also bump up the previously existing msg.verbose logs up to msg.debug to keep the difference in log levels. Fixes #12551.
* meson: declare libmpv as a dependency and override itDudemanguy2023-10-031-0/+4
| | | | | | This allows libmpv users to build it as a subproject easily, i.e. meson setup build --force-fallback-for=mpv -Dmpv:libmpv=true, if the mpv source is in the subprojects directory. Mainly useful for development.
* win32: adjust WM_NCACTIVATE for better compatibility with window stateKacper Michajłow2023-10-021-2/+4
| | | | We have to support all changing states, not only borderless.
* vo_dmabuf_wayland: attach solid buffer when using force windowDudemanguy2023-10-022-2/+11
| | | | | | | | | | | | | | e125da2096d97ec7e64701bf6289705a24c31729 changed the z order of the surfaces a bit, but it turns out this has a side effect. If the aspect ratio of the actual video doesn't match your display, the osd surface doesn't scale properly and gets clipped. Put the z ordering back where it used to be. Instead when we have the force window case, simply attach the already existing solid buffer to the video surface. This allows the osd surface to actually draw over it instead of always being obscured so it satisfies the case of not having any real video frames but still wanting to draw the osd. Also don't mess with any of the viewport source setting stuff with force window. Weston complains about it, and it's nonsensical anyway. Fixes #12547.
* codec_tags: map some more image mimetypesDudemanguy2023-10-021-0/+7
| | | | This only had jpeg and png in it strangely enough. Fixes #11592.
* path: don't override "cache" and "state" paths with configdirsfan52023-10-023-10/+4
| | | | | | | | | | This reverts commit 576e86bfa18a0a79e591988ad93ed009edc40849 (functionally). Right now, the --config-dir option silently causes all watch_later and cache files to be written in the --config-dir as well. This is pretty uninitutive and also not desirable in most cases so get rid of this. libmpv users will have to set the corresponding options or env vars if they want to keep the old behaviour.
* demux: move parent_stream_info before the gotoDudemanguy2023-10-011-9/+9
| | | | | | Previously if the demuxer didn't exist, then it could jump down and try to free sinfo.filename before it was ever set thus segfaulting. Just always set the struct unconditionally so we're always sure to free it.
* Revert "demux: constify a struct member"Dudemanguy2023-10-011-2/+3
| | | | | | | | | | Some demuxers actually close the stream right after they are finished opening like cue. Since the stream->url is no longer copied with this commit, that means it gets thrown away after the stream closes. This leads to a use after free. We still need to allocate stream->url so fix this another way. This reverts commit 3e85df3b2d89d6a27806d677b6b8a99055cb1fcc.
* external_files: base cover-art-whitelist on cover-art-auto-extsGuido Cella2023-10-012-44/+14
| | | | | | | | | | Combine the cover art whitelist with the extensions in --cover-art-auto-exts instead of hardcoding them. This is shorter, checks for more extensions, saves us from updating the whitelist everytime we add a new image extension, and since the whitelist had gotten so big and the priority is calculated as MP_ARRAY_SIZE(cover_files) - n, files like cover.jpg were taking priority over cover art loaded by --cover-art-auto=exact.
* DOCS/interface-changes: also mention --window-affinityDudemanguy2023-10-011-0/+1
| | | | | Added in 2c738ca54b16cdd1982473672bd39068fcf8d948. I guess we seem to always mention any added option these days so might as well.
* DOCS/interface-changes: mention --backdrop-typeKacper Michajłow2023-10-011-0/+1
| | | | Added in f19ada7b583e9bf78de38d228a956c365b5c417b
* win32: add WS_THICKFRAME style in borderless modeKacper Michajłow2023-10-011-1/+9
| | | | | | Fixes window resizing in borderless mode after adding WS_SYSMENU. Fixes: 172d9be3005c6a85f4f139f1dedccefe26ea8d91
* vo: fully replace draw_image with draw_frameDudemanguy2023-10-0111-126/+58
| | | | | | | | | | | | 0739cfc20934ac7772ab71dbae7ecba4ba10fda4 added the draw_frame API deprecated draw_image internally. VOs that still used draw_image were around, but really there's no reason to not just "upgrade" them anyway. draw_frame is what the "real" VOs that people care about (gpu/gpu-next) use. So we can just simplfy the code a bit now. VOCTRL_REDRAW_FRAME is also no longer needed so that can be completely deleted as well. Note that several of these VOs are legacy crap anyway (e.g. vaapi) and maybe should just be deleted but whatever. vo_direct3d was also completely untested (not that anyone should ever use it).
* restore-old-bindings.conf: remove unusable bindingsGuido Cella2023-10-011-11/+4
| | | | | | | | | | | | | | | | | Remove keybindings for properties that have been removed because they can no longer be used even if you restore them. Replace dvb-channel-name with dvbin-channel-switch-offset. Fix the L keybinding: it was bound to cycle-values loop when loop was an alias for loop-playlist, but now it's an alias for loop-file. "osd" was a command that cycles osd-level from 0 to 3. Keep only the newest I show-text "${filename}" from mpv 0.26, the mpv 0.5 line for it is a mistake because it was bound to that in input.conf from a749c61437 (2012) until 2e84934be7 (2017), while mpv 0.5 is from 2014.
* demux: fix erroneous condition in lazy_stream_needs_waitDudemanguy2023-10-011-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | Yeah another try at this. So when inspecting lazy_stream_needs_wait, I realized it had a curious !ds->reader_head condition. Actually, this is what is messing everything up. This was originally added in cf2b7a4997299ff9e0ff91d4273cd294686b001f for showing large negative sub delay values correctly. It worked because the packet will eventually be discarded during playback causing ds->reader_head not exist and thus the next one will correctly be read ahead as needed. But for the "switching subtitle tracks while paused" case, this is actually bad. As the stream is read, eventually you'll find a packet and set the reader_head. But it's not going to be the correct packet (unless you're looking for the very first one), so you need to read more. This won't happen because of the !ds->reader_head check and unlike the sub delay case, nothing will eventually discard that packet since playback isn't occuring. So read_packet exits earlier than it should and isn't tried again, so the subtitle that you want won't show since the returned packet has the wrong pts. All that needs to be done here is to delete this one condition. There's already checks in place to make sure that it's not read past the desired timestamp and for the sub delay case (the only other time this logic is used), it makes no difference since you won't read past the specified pts in the first place.
* win32: set WS_SYSMENU style alwaysKacper Michajłow2023-10-011-1/+2
| | | | | | Fixes missing icon when initial window is created without caption. Fixes: #12472
* DOCS/lua: remove superfluous parameterChristoph Heinrich2023-09-301-1/+1
| | | | This seems to have been a leftover from copying the entry below it.
* Revert "demux: improve stream selection state"Dudemanguy2023-09-309-29/+19
| | | | | | | | The stream selection state wasn't improved. I didn't realize this messed with caches. All in all, just not a good idea. Back to drawing board I guess. This reverts commit f40bbfec4fcd2d9a787a4d98ec7698a646e5607e.
* msg: use nanosecond precisionDudemanguy2023-09-292-4/+4
| | | | | | | | | | The timestamps when making a log file is actually dependent on MP_START_TIME. This is a 10 microsecond offset that was added to the timer as an offset. With the nanosecond change, this unit needs to be converted as well so the offset is the same as before. After doing that, we need to change the various mp_time_us calls in msg to mp_time_ns and do the right conversion. This fixes the logs timestamps (i.e. so they aren't negative anymore).
* vo: don't invoke wait, when not neededKacper Michajłow2023-09-291-0/+3
| | | | | | | | This causes only problems, because we convert mp_time to realtime, which is not atomic, so we introduce error. And even though on sane platforms it should work fine, after all the sleep time is in the past. winpthreads like to sleep for like over 10ms when the time is less than current time, but not more than 1s.
* vo: increase display refresh rate estimation limit from 99 Hz to 400 HzKacper Michajłow2023-09-291-1/+1
| | | | High refresh rate displays exists...
* vo: change vsync base to nanosecondsKacper Michajłow2023-09-299-40/+41
| | | | | There is no reason to use microseconds precision. We have precise timers all all relevant platforms.
* win32/pthread: define _POSIX_TIMERS to notify they are not supportedKacper Michajłow2023-09-2910-8/+11
|
* win32/pthread: don't convert time through unrelated timerKacper Michajłow2023-09-292-18/+16
| | | | Just keep it directly as mp_time for internal implementation.
* meson: don't link pthreads when internal impl is usedKacper Michajłow2023-09-292-4/+11
|
* meson: add missing gl-video test dependencyKacper Michajłow2023-09-291-1/+2
|
* timer: teach it about nanosecondsKacper Michajłow2023-09-296-36/+57
| | | | | Those changes will alow to change vsync base to more precise time base. In general there is no reason to truncate values returned by system.
* timer: rename mp_add_timeout to reflect what it actually doesKacper Michajłow2023-09-299-10/+10
|
* timer: remove dead codeKacper Michajłow2023-09-291-35/+0
| | | | This is not a proper way to do unit tests or whatever that was.
* timer: simplify mp_time_us_to_realtimeKacper Michajłow2023-09-291-21/+20
|
* timer: rename mp_time_us_to_timespec to reflect what it actually doesKacper Michajłow2023-09-299-12/+12
|
* ao_audiotrack: convert to nanosecondsKacper Michajłow2023-09-291-14/+14
|
* playloop: make chapter property more accurate when seeking chaptersMike Will2023-09-294-11/+17
| | | | | | | | | | | | | | | | | | | | | | When seeking chapters, `last_chapter_seek` acts as a projection of what the current chapter will be once mpv has a chance to seek to it. This allows for more accurate results from the `chapter` property. It works by comparing the projection to the actual current chapter and returning the larger of the two indexes, but this only works when seeking forward. If we want it to work for both forward and backward chapter seeking, we can instead use a boolean called `last_chapter_flag`, which gets switched on when a chapter seek request is made, and then switched off when the seek has been performed. We should also check to ensure that we don't allow the chapter index to be set to -1 unless there is a span of time between the very beginning of the track and the start of the first chapter. Since the new approach to resetting `last_chapter_seek` no longer depends on `last_chapter_pts`, that member variable can be removed.
* vo_dmabuf_wayland: assume counter-clockwise rotationsDudemanguy2023-09-291-1/+4
| | | | | | | | | | | | | | In practice, most compositors implement the rotation clockwise which matches mpv's option, but amusingly this is actually incorrect. According to the spec*, wayland buffer rotations are counter-clockwise. So with this assumption in mind, in order for the rotation to match mpv's usual semantics, the 90 degree and 270 degree positions need to be flipped. Of course, this will make the VO rotate the wrong way on most compositors, but this is what the spec says (sway master is known to currently be correct). Fixes #12508 (sort of but will break the rotation direction on other compositors. Oh well). *: https://wayland.freedesktop.org/docs/html/apa.html#protocol-spec-wl_output-enum-transform
* hwdec_drmprime: add nv16 supporthbiyik2023-09-292-0/+3
| | | | | | | | | NV16 is the half subsampled version of NV12 format. Decoders which support High 4:2:2 of h264 provide the frame in NV16 format to establish richer colorspace. Similar profiles are also available in HEVC and other popular codecs. This commit allows NV16 frames to be displayed over drmprime layers. Signed-off-by: hbiyik <boogiepop@gmx.com>
* audio/chmap: support up to 64 channelsKacper Michajłow2023-09-291-1/+1
| | | | This fixes AAC 22.2 playback
* wasapi: clamp number of output channels to 8Kacper Michajłow2023-09-291-1/+13
| | | | | | This is the most supported in standard layout, if we request more it tends to fallback to stereo instead. Also channels mask is 32-bit and it can get truncated.
* chmap: add more channel layouts up to 22.2Kacper Michajłow2023-09-294-1/+30
|
* audio/chmap: link string buffer size to MP_NUM_CHANNELSKacper Michajłow2023-09-292-3/+6
|
* playloop: don't refresh seek on external sub streamsDudemanguy2023-09-281-1/+1
| | | | | | External subtitles are always read as eager, so they do not need to be changed on pause/unpause. Don't do the refresh seek since it will just buffer forever. Fixes f40bbfec4fcd2d9a787a4d98ec7698a646e5607e.
* demux: improve stream selection stateDudemanguy2023-09-279-19/+29
| | | | | | | | | | | | | | | | | | | | | | | This replaces the previous commit and makes more sense. The internal demux marked tracks as eager depending on their type and for subtitles it would always lazily read them unless there happened to be no available av stream. However, we want the sub stream to be eager if the player is paused. The existing subtitle is still preserved on the screen, but if the user changes tracks that's when the problem occurs. So to handle this case, propagate the mpctx->paused down to the stream selection logic. This modifies both demuxer_refresh_track and demuxer_select_track to take that boolean value. A few other parts of the player use this, but we can just assume false there (no change in behavior from before) since they should never be related to subtitles. The core player code is aware of its own state naturally, and can always pass the appropriate value so go ahead and do so. When we change the pause state, a refresh seek is done on all existing subtitle tracks to make sure their eager state is the appropriate value (i.e. so it's not still set to eager after a pause and a track switch). Slightly invasive change, but it works with the existing logic instead of going around it so ultimately it should be a better approach. We can additionally remove the old force boolean from sub_read_packets since it is no longer needed.
* Revert "demux: eagerly read subtitle streams when switching tracks while paused"Dudemanguy2023-09-273-10/+5
| | | | | | | Actually, I thought of a better way of handling this shortly after merging this. Revert it and redo it in the next commit. This reverts commit c2c157ebeca3d072d4f48ff36228d01ebe888699.
* demux: eagerly read subtitle streams when switching tracks while pausedDudemanguy2023-09-273-5/+10
| | | | | | | | | | | | | | | | | a323dfae426e43451f4d3e08a9a63cb7d1c1ace9 almost fixed subtitle tracks disappearing when paused but it actually missed one part: the behavior of demux_read_packet_async_until. It's a bit unintuitive, but for subtitle streams, that function would only return the very first packet regardless of whatever pts you pass to it. So the previous commit worked on the very first subtitle, but not actually any of the others (oops). This is because subtitle streams never marked as eager and thus never actually read farther ahead. While the video is playing, this is OK, but if we're paused and switching subtitle tracks then the stream should be eagerly read. Luckily, the logic is already there in the function for this. All we have to do add an extra argument to demux_read_packet_async_until to force the stream to be read eagerly and then it just works. Be sure to unset the eager flag when we're done. Actually fixes the bug for real this time.
* osc: move the idle logo behind other overlaysChristoph Heinrich2023-09-271-4/+4
| | | | | | | | The default `z` of an overlay is 0, which is used by e.g. console.lua. Having the idle logo at a `z` of 1000 means that it ends up above the console (and anything that don't set a value higher then 1000). It doesn't make sense for the idle logo to overshadow other things, so put it at -1000 instead to prevent that.
* meson: don't require swift when checking macos sdkDudemanguy2023-09-271-4/+8
| | | | | | | It turns out that iOS doesn't actually need swift so this sdk check was too strict and the build failed. Instead, only check this if we have darwin and then make sure that the osdep subdir is only executed if there are swift sources in the list. Fixes #12161.
* command: only warn shared-script-properties onceDudemanguy2023-09-271-2/+6
| | | | | | | Evidently I was wrong and mpv only actually warns once on deprecation (playlist-pos nor display-fps did not and warned every time, but those were outliers apparently). Someone complained so just hack it into command_ctx for now.
* wayland: don't double close display fdJack Mitchell2023-09-271-5/+2
| | | | | | | | Calling wl_display_disconnect closes the file descriptor, no need to manually do it ourselves beforehand which causes a double close on the fd. Signed-off-by: Jack Mitchell <jack.mitchell@tuxable.co.uk>
* command: deprecate shared-script-propertiesDudemanguy2023-09-272-0/+3
| | | | user-data is simply better.
* osc: remove shared-script-properties usageDudemanguy2023-09-271-5/+0
| | | | | | 0b4860248b3395b32a89908efd34fdef12f4906e added user-data which is completely superior and makes this property obsolete. We've already had one mpv release with the osc using user-data so drop this.
* DOCS/options: update lavfi-complex examplesGuido Cella2023-09-271-2/+2
| | | | | Show how to stack 3 or more videos, and remove the life filter example because it should be used with av://lavfi:life.
* console.lua: complete properties after cycle-valuesGuido Cella2023-09-271-0/+2
|
* af_scaletempo2: raise max playback rate to 8.0llyyr2023-09-272-2/+2
| | | | | | 4.0 was too low and copied from Chromium defaults when the filter was initially written, there's no good reason for it to be so low, so double it.
* DOCS/options: add example for custom pitch correction filterllyyr2023-09-271-2/+16
|
* restore-old-bindings.conf: add the old wheel bindingsGuido Cella2023-09-271-2/+7
| | | | | | I removed the previous WHEEL_UP and WHEEL_DOWN bindings because they are duplicate, and it appears that they were already bound to seek 10 before 7897f79217af.
* DOCS/mpv: update the wheel bindingsGuido Cella2023-09-271-2/+2
| | | | Update the docs to the new bindings set by 981a9372ff.