{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":6201092,"defaultBranch":"master","name":"mpv","ownerLogin":"mpv-player","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2012-10-13T08:08:44.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/2550273?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1714773183.0","currentOid":""},"activityList":{"items":[{"before":"b09e48e38898089997daee814e4b68386f11a97c","after":"e07470adc2d144da8d1096e3ca1df8053e70966a","ref":"refs/heads/master","pushedAt":"2024-07-04T22:24:10.000Z","pushType":"pr_merge","commitsCount":3,"pusher":{"login":"Dudemanguy","name":null,"path":"/Dudemanguy","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5105515?s=80&v=4"},"commit":{"message":"console.lua: restore the order of items after clearing the input line\n\nWhen you type something in select mode and then delete it, table.sort\nchanges how selectable items are sorted. Restore the order specified by\nthe mp.input caller in this case.","shortMessageHtmlLink":"console.lua: restore the order of items after clearing the input line"}},{"before":"dc523b137f8c386c29e16858adc855cdd8d9b7fc","after":"b09e48e38898089997daee814e4b68386f11a97c","ref":"refs/heads/master","pushedAt":"2024-07-04T22:23:27.000Z","pushType":"pr_merge","commitsCount":3,"pusher":{"login":"Dudemanguy","name":null,"path":"/Dudemanguy","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5105515?s=80&v=4"},"commit":{"message":"player/loadfile: enable streams in order of types when loading file\n\nThe previous commit to avoid refresh seeking video streams has an edge\ncase when enabling tracks when loading files. Since the streams are\ninitially unselected and then multiple streams are enabled, the detection\nonly works reliably when video tracks are enabled first.\n\nThis makes sure that loading file enables tracks in a predictable order.","shortMessageHtmlLink":"player/loadfile: enable streams in order of types when loading file"}},{"before":"e78e2c73cf7b2f76a3af61456e466b84e01e0300","after":"dc523b137f8c386c29e16858adc855cdd8d9b7fc","ref":"refs/heads/master","pushedAt":"2024-07-04T22:23:17.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"Dudemanguy","name":null,"path":"/Dudemanguy","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5105515?s=80&v=4"},"commit":{"message":"video/out/gpu/context: convert --gpu-api to object settings list\n\nThis follows up 96e1f1dfa5 which converted --gpu-context, and has the\nsame advantages as listed there.\n\nUnlike with --gpu-context auto can be used anywhere in the list, e.g.\n--gpu-api=d3d11,auto works.\n\nI wanted to use the list of GPU contexts as the description in\nget_type_desc(), but there is no talloc context to allocate it to, so I\nset a print_help_list to print them. The APIs go before the contexts so\nthat etc/_mpv.zsh doesn't try to complete the contexts.","shortMessageHtmlLink":"video/out/gpu/context: convert --gpu-api to object settings list"}},{"before":"7c70df093480f0d5fe739a713ecb5339f59b765e","after":"e78e2c73cf7b2f76a3af61456e466b84e01e0300","ref":"refs/heads/master","pushedAt":"2024-07-04T19:10:37.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Dudemanguy","name":null,"path":"/Dudemanguy","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5105515?s=80&v=4"},"commit":{"message":"ytdl_hook: strip quotes from cookie values","shortMessageHtmlLink":"ytdl_hook: strip quotes from cookie values"}},{"before":"4969d6e03ec35ee848ee0461147189c591ad1896","after":"7c70df093480f0d5fe739a713ecb5339f59b765e","ref":"refs/heads/master","pushedAt":"2024-07-01T08:02:13.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"sfan5","name":null,"path":"/sfan5","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1042418?s=80&v=4"},"commit":{"message":"input/cmd: move m_option_type_cycle_dir to m_option.c\n\nA relic when commands lived in input.c. Move them to where other option\ntypes live. Also remove the redundant copy_opt.","shortMessageHtmlLink":"input/cmd: move m_option_type_cycle_dir to m_option.c"}},{"before":"68a1a3879ca5b65ecd1f7b63b09b615f968d807a","after":"4969d6e03ec35ee848ee0461147189c591ad1896","ref":"refs/heads/master","pushedAt":"2024-06-30T19:15:37.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"sfan5","name":null,"path":"/sfan5","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1042418?s=80&v=4"},"commit":{"message":"player/lua: restore original lua allocator before close\n\nWe wrap the default Lua allocator to allow used memory tracking. This\nworks well, except that we never destroy the default allocator or notify\nit that we are closing. Since we override it for the current Lua state,\nit is reasonable that the Lua engine does not expect it to be used. We\nget and pass through a free call, but in the case of LuaJIT, the\ninternal allocator has additional state and is freed differently. So, in\nfact, it is a LuaJIT leak because once we replace the allocator with our\ncustom one, they should clean its internal state. I guess the assumption\nis to override allocator only before any allocation happen. To work\naround this issue, restore the default allocator, the one that we use,\nbefore closing the state. This way, everything is cleared as expected.\n\nNote that the current solution of wrapping the default allocator works\nonly because none of the supported Lua engines actually invalidate the\nallocator on the lua_setallocf() call. However, they could, so keep in\nmind that we are currently depending on an implementation detail.\n\nThanks to @Dudemanguy for help with finding the changes that introduced\nthe leak.\n\nFixes: a67bda28409dd893617ef47f6e089fd753d7de78\nFixes: #14451","shortMessageHtmlLink":"player/lua: restore original lua allocator before close"}},{"before":"a3f72ea87c9def800c9475a6182f3dc70bb34f49","after":"68a1a3879ca5b65ecd1f7b63b09b615f968d807a","ref":"refs/heads/master","pushedAt":"2024-06-28T03:33:16.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Dudemanguy","name":null,"path":"/Dudemanguy","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5105515?s=80&v=4"},"commit":{"message":"wayland: add a --wayland-present option\n\nMainly for debugging. It might be handy to disable presentation feedback\non wayland to make sure something isn't going wrong with the\ncalculations somewhere.","shortMessageHtmlLink":"wayland: add a --wayland-present option"}},{"before":"ea03451d1e9c53bdbb2f0c246e8652d9a82e808f","after":"a3f72ea87c9def800c9475a6182f3dc70bb34f49","ref":"refs/heads/master","pushedAt":"2024-06-27T18:24:13.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"kasper93","name":"Kacper Michajłow","path":"/kasper93","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1126053?s=80&v=4"},"commit":{"message":"stats.lua: fix codec-profile position for audio","shortMessageHtmlLink":"stats.lua: fix codec-profile position for audio"}},{"before":"4574644b7ad79363a77c479b73f3e888e8ea6d04","after":"ea03451d1e9c53bdbb2f0c246e8652d9a82e808f","ref":"refs/heads/master","pushedAt":"2024-06-27T16:45:21.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"avih","name":null,"path":"/avih","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/2164962?s=80&v=4"},"commit":{"message":"misc/natural_sort: avoid implementation-defined behavior in comparison\n\nBefore a7158ceec00f14e680a885722cfe23761b4662d3, string comparision was\ndone with strcmp, which does unsigned comparison. The natural sort\nimplementation instead compares on char values.\nThis causes implementation-defined behavior in comparison, depending on\nthe signedness of char type.\n\nFix this by using unsigned comparison instead.","shortMessageHtmlLink":"misc/natural_sort: avoid implementation-defined behavior in comparison"}},{"before":"529450a9650e68a05c95f8b2c885e63783726c14","after":"4574644b7ad79363a77c479b73f3e888e8ea6d04","ref":"refs/heads/master","pushedAt":"2024-06-27T00:57:22.000Z","pushType":"pr_merge","commitsCount":3,"pusher":{"login":"kasper93","name":"Kacper Michajłow","path":"/kasper93","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1126053?s=80&v=4"},"commit":{"message":"fuzzers: wait for file start event before idle\n\nSometimes we exited too soon, not waiting for full transition to idle\nstate.","shortMessageHtmlLink":"fuzzers: wait for file start event before idle"}},{"before":"22fc2e6af3a89db325b3191a3775a373020d562f","after":"529450a9650e68a05c95f8b2c885e63783726c14","ref":"refs/heads/master","pushedAt":"2024-06-27T00:56:59.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"kasper93","name":"Kacper Michajłow","path":"/kasper93","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1126053?s=80&v=4"},"commit":{"message":"test/paths: add tests for mp_basename and mp_dirname\n\nNote that those functions have different behaviour than POSIX ones.","shortMessageHtmlLink":"test/paths: add tests for mp_basename and mp_dirname"}},{"before":"88db2d0b6165ade620591f6d23078d84340e9699","after":"22fc2e6af3a89db325b3191a3775a373020d562f","ref":"refs/heads/master","pushedAt":"2024-06-25T23:28:55.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"kasper93","name":"Kacper Michajłow","path":"/kasper93","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1126053?s=80&v=4"},"commit":{"message":"bstr: change memcpy to memmove to allow aliased copies\n\nmp_property_expand_escaped_string() needs this.\n\nFound by OSS-Fuzz.","shortMessageHtmlLink":"bstr: change memcpy to memmove to allow aliased copies"}},{"before":"95ac32220e5d0adc7b4ba28fd9d7eadbe37b67c6","after":"88db2d0b6165ade620591f6d23078d84340e9699","ref":"refs/heads/master","pushedAt":"2024-06-25T18:14:38.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Akemi","name":"der richter","path":"/Akemi","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/680386?s=80&v=4"},"commit":{"message":"mac/menu: add option to disable default shortcuts\n\nFixes #14305","shortMessageHtmlLink":"mac/menu: add option to disable default shortcuts"}},{"before":"0db6abadd4745466b030666416076439f54c05bd","after":"95ac32220e5d0adc7b4ba28fd9d7eadbe37b67c6","ref":"refs/heads/master","pushedAt":"2024-06-25T03:29:46.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"kasper93","name":"Kacper Michajłow","path":"/kasper93","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1126053?s=80&v=4"},"commit":{"message":"m_option: parse the timestamp as unsigned value\n\nThe sign is handled manually. This allows us to skip the check for\nnegative integers.","shortMessageHtmlLink":"m_option: parse the timestamp as unsigned value"}},{"before":"111571bd0510e751b4c8764a7e1e5a8f49150567","after":"0db6abadd4745466b030666416076439f54c05bd","ref":"refs/heads/master","pushedAt":"2024-06-25T02:19:09.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"Dudemanguy","name":null,"path":"/Dudemanguy","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5105515?s=80&v=4"},"commit":{"message":"playlist: let playlist-next go to first item if player is idle\n\nSimilar to the previous commit but the other way around. If you start\nmpv as idle, load up a playlist without immediately hitting play and\nthen try to go to the next item, nothing happens. Naturally, you would\nexpect this to go to the first item. Fix this detecting if the playlist\nhas not started yet, the direction, and going to the first item in the\nlist.","shortMessageHtmlLink":"playlist: let playlist-next go to first item if player is idle"}},{"before":"7eec246d56da3ff5e3debd681e04119cccaee831","after":"111571bd0510e751b4c8764a7e1e5a8f49150567","ref":"refs/heads/master","pushedAt":"2024-06-25T02:18:58.000Z","pushType":"pr_merge","commitsCount":3,"pusher":{"login":"Dudemanguy","name":null,"path":"/Dudemanguy","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5105515?s=80&v=4"},"commit":{"message":"options: remove some options with .deprecation_message\n\nIn both cases, setting these options did nothing other than give you a\nwarning that they may be removed in the future. Remove them now.","shortMessageHtmlLink":"options: remove some options with .deprecation_message"}},{"before":"01330dba7185c813958615f183d09dc1ba215cc3","after":"7eec246d56da3ff5e3debd681e04119cccaee831","ref":"refs/heads/master","pushedAt":"2024-06-25T00:17:40.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"kasper93","name":"Kacper Michajłow","path":"/kasper93","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1126053?s=80&v=4"},"commit":{"message":"fuzzer_load: seal the input fd after writing the data\n\nNothing should ever modify this data. Also, add CLOEXEC for good\nmeasure.","shortMessageHtmlLink":"fuzzer_load: seal the input fd after writing the data"}},{"before":"22ca65a59d35c0b8fa5e8b7799f683167f102cc6","after":"01330dba7185c813958615f183d09dc1ba215cc3","ref":"refs/heads/master","pushedAt":"2024-06-24T19:30:14.000Z","pushType":"pr_merge","commitsCount":3,"pusher":{"login":"kasper93","name":"Kacper Michajłow","path":"/kasper93","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1126053?s=80&v=4"},"commit":{"message":"console.lua: assume non-ASCII characters span 2 cells for truncation\n\nThis prevents line wraps in select mode with terminal output which hide\nthe top items (OSD output no longer uses truncate_utf8 since the\nprevious commit). This is not ideal as even accented letters are assumed\nto be 2 cells wide. The alternative is using \\e[?7l and \\e[?7h to\ndisable and enable text wrapping, but it won't work in Windows console\nwith VT processing disabled.","shortMessageHtmlLink":"console.lua: assume non-ASCII characters span 2 cells for truncation"}},{"before":"893ea5e47bf343b72814eec9544d4c1ad409bfdc","after":"22ca65a59d35c0b8fa5e8b7799f683167f102cc6","ref":"refs/heads/master","pushedAt":"2024-06-24T15:36:53.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"kasper93","name":"Kacper Michajłow","path":"/kasper93","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1126053?s=80&v=4"},"commit":{"message":"fuzzer_set_property: destroy mpv also on error\n\nShouldn't matter much and in fact even LSAN doesn't complain, but we\nshould clean it correctly.\n\nFixes: 1225bcbd4112d2f5880c7273f90f56725123fe8a","shortMessageHtmlLink":"fuzzer_set_property: destroy mpv also on error"}},{"before":"82ffe8f425d176a2ef1a2f10a269f8a988ba0f25","after":"893ea5e47bf343b72814eec9544d4c1ad409bfdc","ref":"refs/heads/master","pushedAt":"2024-06-24T14:20:47.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"sfan5","name":null,"path":"/sfan5","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1042418?s=80&v=4"},"commit":{"message":"player/playloop: fix null dereference if filter_root does not exist\n\nFor example when `input-commands=drop-buffers` is added to the config.\n\nAdd a check inside mp_filter_reset().\n\nFound by OSS-Fuzz.","shortMessageHtmlLink":"player/playloop: fix null dereference if filter_root does not exist"}},{"before":"f7c1461053f076ebb181191db100f041ce757536","after":"82ffe8f425d176a2ef1a2f10a269f8a988ba0f25","ref":"refs/heads/master","pushedAt":"2024-06-24T14:19:31.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"sfan5","name":null,"path":"/sfan5","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1042418?s=80&v=4"},"commit":{"message":"loadfile: update the format of terminal track information\n\nStop making unselected tracks and editions grey because they can be hard\nto read over a dark background (\\033[2m would be hard to differentiate\nfrom regular text with a light theme instead), and because there is no\nway to not print the escape sequences in --log-file.\n\nJust use the same circles as the OSD and OSC. We need to print the empty\ncircles for alignment on mlterm with East Asian fonts (we could also\nmake them invisible with \\033[8m but it would still get added to log\nfiles).\n\nAdd back the space before tracks and editions when printed after\n\"Playing...\" or \"Track switched\" and similar, so they look like a\nsub-section of it, consistently with the metadata which starts with\nspace which makes it look like a sub-section of the \"File tags\" line.\n\nLeave 2 spaces between track columns.\n\nMake the lang options only as long as the longest language.\n\nPlace hls-bitrate within the same parentheses as the other data.\n\nReplace the incomprehensible (*) (f) and [P] with textual descriptions\nwithin []. Also place external there.\n\nStop converting Hz to kHz for consistency with other log messages, e.g.\nAO: [pipewire] 48000Hz stereo 2ch floatp\n\nRemove the space in \"2 ch\" so it doesn't look like 2 separate values (We\nconsidered using mp_chmap_to_str(&s->codec->channels) but it prints\nvalues like \"unknown2\").","shortMessageHtmlLink":"loadfile: update the format of terminal track information"}},{"before":"26029cfbb0724c709edcd999895d5a88d77ecb0d","after":"f7c1461053f076ebb181191db100f041ce757536","ref":"refs/heads/master","pushedAt":"2024-06-24T12:52:37.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Dudemanguy","name":null,"path":"/Dudemanguy","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5105515?s=80&v=4"},"commit":{"message":"DOCS/input: document undocumented track-list sub-properties","shortMessageHtmlLink":"DOCS/input: document undocumented track-list sub-properties"}},{"before":"1225bcbd4112d2f5880c7273f90f56725123fe8a","after":"26029cfbb0724c709edcd999895d5a88d77ecb0d","ref":"refs/heads/master","pushedAt":"2024-06-24T12:51:28.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Dudemanguy","name":null,"path":"/Dudemanguy","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5105515?s=80&v=4"},"commit":{"message":"m_option: add a way for aliases to use sub option prefix\n\nPreviously, using m_option_type_alias required that the alias have the\nfull name of the option value. This is limited if you are reusing the\nsame opts struct in different sub options. Fix this by add an additional\nfield to m_option to signal whether or not prefixes should be taken into\naccount for the alias option. Instead of blindly using whatever is\nstored in opt->priv as the name, we can construct the desired option\nname for either case (using the prefix or not).","shortMessageHtmlLink":"m_option: add a way for aliases to use sub option prefix"}},{"before":"cd1b63f628a99d16183961056bb8177511a85888","after":"1225bcbd4112d2f5880c7273f90f56725123fe8a","ref":"refs/heads/master","pushedAt":"2024-06-24T01:05:10.000Z","pushType":"pr_merge","commitsCount":7,"pusher":{"login":"kasper93","name":"Kacper Michajłow","path":"/kasper93","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1126053?s=80&v=4"},"commit":{"message":"fuzzer_set_property: don't run mpv if set property failed\n\nWe can avoid testing this cases, hopefully there are no side-effects\nwhen set property fails.","shortMessageHtmlLink":"fuzzer_set_property: don't run mpv if set property failed"}},{"before":"f7ed8c42d254f0585db69b7a5804316a7ed5722a","after":"cd1b63f628a99d16183961056bb8177511a85888","ref":"refs/heads/master","pushedAt":"2024-06-23T03:09:13.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"kasper93","name":"Kacper Michajłow","path":"/kasper93","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1126053?s=80&v=4"},"commit":{"message":"ad_{lavc,spdif}: initialize channel layout\n\nIt is not always available for the demuxer, so update it from decoder.","shortMessageHtmlLink":"ad_{lavc,spdif}: initialize channel layout"}},{"before":"c3de4f04db55ec873d2c5cbfd9bd320a6db334dc","after":"f7ed8c42d254f0585db69b7a5804316a7ed5722a","ref":"refs/heads/master","pushedAt":"2024-06-23T03:05:22.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"kasper93","name":"Kacper Michajłow","path":"/kasper93","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1126053?s=80&v=4"},"commit":{"message":"options: add secondary-{sid,sub-delay} to watch_later_options","shortMessageHtmlLink":"options: add secondary-{sid,sub-delay} to watch_later_options"}},{"before":"265056fa54d977d98188fd88e874ee1a1b164c39","after":"c3de4f04db55ec873d2c5cbfd9bd320a6db334dc","ref":"refs/heads/master","pushedAt":"2024-06-23T00:33:04.000Z","pushType":"pr_merge","commitsCount":5,"pusher":{"login":"kasper93","name":"Kacper Michajłow","path":"/kasper93","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1126053?s=80&v=4"},"commit":{"message":"fuzzer_load: disallow include option in config files\n\nIt produces undeterministic results, especially if it do\n`include=fd://N` which starts loading external data.","shortMessageHtmlLink":"fuzzer_load: disallow include option in config files"}},{"before":"940854c86ff500317a5f5934cb8574a05e4e0b53","after":"265056fa54d977d98188fd88e874ee1a1b164c39","ref":"refs/heads/master","pushedAt":"2024-06-22T20:48:40.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"kasper93","name":"Kacper Michajłow","path":"/kasper93","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1126053?s=80&v=4"},"commit":{"message":"vo_gpu: optimize pass_info_reset\n\nNo need to reset mp_pass_perf which is only read when desc.len > 0.\nThis avoids zeroing >16384 uint64_t's every time it's called.\nProfiling shows that this reduces CPU usage for frame rendering by ~4%.","shortMessageHtmlLink":"vo_gpu: optimize pass_info_reset"}},{"before":"e5d85704a3bbf4766ad64133b07d7c3a27f732ac","after":"940854c86ff500317a5f5934cb8574a05e4e0b53","ref":"refs/heads/master","pushedAt":"2024-06-22T18:21:28.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"Dudemanguy","name":null,"path":"/Dudemanguy","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/5105515?s=80&v=4"},"commit":{"message":"demux: allow refresh seek for non-video streams\n\nSince d41f0a54b07d855227b63a6b2c4e92794ff7b86f, enabling a stream will\nno longer perform a refresh seek, to fix issues with switching video\ntracks. Additionally, 62e9a0c5f6be63c4cbe6387cbd3419fe19e98b74 also\nprevents refresh seek on track switching when it happens right after a\nseek.\n\nUnfortunately, when external audio files are loaded, preventing refresh\nseeks can cause A-V sync issues. Since external tracks have separate demuxer\ninstances from the internal tracks, the demuxer instances from both\ninternal and external tracks are explicitly sought to the same pts when\nseeking is performed. When enabling an external audio track for the first\ntime, the existing logic prevents refresh seek because no packets have ever\nbeen read, so the track ends up not being sought. This means that switching\nthe track in the middle of playback results in a huge A-V desync.\n\nTo make it worse, unlike one demuxer instance with multiple tracks,\ntracks from multiple demuxer instances are not synced in any meaningful\nway beyond the separate explicit seeking. The only thing which keeps these\ntracks synced is the generic A-V sync logic, which is unfit for such large\ndesync above. This means the audio is at the start position after the track\nis switched, behind the video, so the audio is not considered ready, and\naudio is continuously filtered sequentially until it is synced to the video.\nWhile this is happening, the audio filtering exhausts all CPU resources.\n\nThere is also a case with cache enabled: if a seek causes some new data to\nbe cached, the demuxer is sought to the end of joined cache range.\nIf track is switched after this, the existing logic prevents a refresh seek,\nso the demuxer is at a wrong position after the track is switched.\n\nFix this by allowing refresh seek for non-video streams, even when no packets\nhave been read yet or immediately after a seek.","shortMessageHtmlLink":"demux: allow refresh seek for non-video streams"}},{"before":"8873beabc3e22d0ef9b2e1fe4a5068bebf71bfa4","after":"e5d85704a3bbf4766ad64133b07d7c3a27f732ac","ref":"refs/heads/master","pushedAt":"2024-06-22T14:12:14.000Z","pushType":"pr_merge","commitsCount":7,"pusher":{"login":"kasper93","name":"Kacper Michajłow","path":"/kasper93","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1126053?s=80&v=4"},"commit":{"message":"av_log: sort library version print and add missing libavdevice\n\nIncidentally sorted list put more important libs to the top.","shortMessageHtmlLink":"av_log: sort library version print and add missing libavdevice"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEd0lzFwA","startCursor":null,"endCursor":null}},"title":"Activity · mpv-player/mpv"}