fix: keep seek target visible until acknowledged and make volume thumb opaque

This commit is contained in:
2026-10-10 16:09:29 +02:00
parent c9b9264109
commit 9356ed8b4d
5 changed files with 48 additions and 15 deletions
+14 -3
View File
@@ -69,22 +69,33 @@ int main(int argc, char **argv) {
"pause freezes authoritative position");
uint64_t revision = paused.revision;
require(player_seek(player.get(), 1.5), "paused seek accepted");
auto pending = player_get_state(player.get());
require(pending.seek_pending || std::abs(pending.position - 1.5) < .03,
"accepted seek reports pending until the target is authoritative");
auto sought = until(player.get(), [revision](auto s) {
return s.revision != revision && s.status == PLAYER_PAUSED && std::abs(s.position - 1.5) < .03;
return !s.seek_pending && s.revision != revision && s.status == PLAYER_PAUSED && std::abs(s.position - 1.5) < .03;
});
[view draw];
require(sought.status == PLAYER_PAUSED, "seek preserves paused state");
require(player_seek(player.get(), .8) && player_seek(player.get(), 1.5), "queued seeks accepted");
pending = player_get_state(player.get());
require(pending.seek_pending || std::abs(pending.position - 1.5) < .03,
"an earlier queued seek cannot acknowledge the final seek");
until(player.get(), [](auto s) {
return !s.seek_pending && s.status == PLAYER_PAUSED && std::abs(s.position - 1.5) < .03;
});
require(player_play(player.get()), "resume accepted");
until(player.get(), [](auto s) { return s.status == PLAYER_PLAYING && s.position > 1.7; });
require(player_seek(player.get(), 3.2), "playing seek accepted");
until(player.get(), [](auto s) { return s.status == PLAYER_PLAYING && s.position >= 3.2; });
until(player.get(), [](auto s) { return !s.seek_pending && s.status == PLAYER_PLAYING && s.position >= 3.2; });
auto ended = until(player.get(), [](auto s) { return s.status == PLAYER_ENDED; });
require(ended.position >= 3.8, "EOF drains media before completion");
require(player_play(player.get()), "replay accepted");
until(player.get(), [](auto s) { return s.status == PLAYER_PLAYING && s.position > .1 && s.position < 1; });
require(player_close(player.get()), "close accepted while playing");
auto closed = until(player.get(), [](auto s) { return s.status == PLAYER_EMPTY; });
require(closed.position == 0 && !closed.has_audio && !closed.has_video, "close clears media state");
require(closed.position == 0 && !closed.has_audio && !closed.has_video && !closed.seek_pending,
"close clears media state and pending seeks");
std::printf("PASS %s: open/play/pause/seek/end/replay/close\n", fixture);
}
require(player_open(player.get(), (std::string(argv[1]) + "/hdr.mkv").c_str()), "HDR open accepted");