Monopoly — Portage moderne 0.1.0
Portage moderne C/C++23 du Monopoly de 1999
Loading...
Searching...
No Matches
SequenceVideoRuntime.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "ResourceRuntime.hpp"
4#include "SequenceRuntime.hpp"
5#include "VideoRuntime.hpp"
8
9#include <expected>
10#include <filesystem>
11#include <limits>
12#include <map>
13#include <optional>
14#include <span>
15#include <string>
16#include <string_view>
17#include <vector>
18#include <utility>
19
20namespace monopoly::video
21{
23 {
25 std::filesystem::path file;
28 std::optional<data::Sequence2DBoundingBoxAttribute> boundingBox;
32 std::optional<data::DataId> surface;
33 std::uint64_t consumedAudioBytes{};
34 };
35
42 {
43 public:
44 // Production owner-thread path; call before the one SequencePlayback update.
45 [[nodiscard]] std::expected<std::vector<SequenceJumpNotice>, std::string>
47 void setDecoderOptions(DecoderOptions options) { decoderOptions_ = std::move(options); }
48 [[nodiscard]] std::expected<void, std::string>
50
51 [[nodiscard]] std::expected<std::vector<SequenceJumpNotice>, std::string>
52 // Metadata/timeline inspection only; does not drive sequence lifecycle.
53 sync(
55 const data::ResourceSnapshot& resources);
56
57 [[nodiscard]] std::expected<void, std::string> setAlternative(
59 std::int32_t decisionFrame,
60 std::int32_t jumpToFrame);
61
62 [[nodiscard]] std::expected<void, std::string> chooseAlternative(
64 std::int32_t decisionFrame,
65 bool takeAlternative);
66
67 [[nodiscard]] std::expected<void, std::string> forgetAlternatives(
69
70 [[nodiscard]] std::expected<void, std::string> cutToFrame(
72 std::int32_t frame);
73
74 void reset() noexcept;
75
77 {
78 return states_;
79 }
80 private:
81 struct Active
82 {
84 std::shared_ptr<Presentation> presentation;
85 std::optional<data::DataId> surface;
86 sequence::Matrix2D publishedTransform{};
87 std::uint16_t publishedPriority{};
88 bool surfaceVisible{};
89 bool loop{};
90 std::int32_t durationTicks{};
91 std::uint64_t clipDurationMicroseconds{};
92 bool authoredClip{};
93 bool seekPending{};
94 std::uint64_t requestedSeek{};
95 std::filesystem::path file;
96 data::SequenceVideoData options{};
97 data::Sequence2DBoundingBoxAttribute boundingBox{};
98 std::int32_t lastSequenceClock{
99 std::numeric_limits<std::int32_t>::min()};
100 };
101
102 [[nodiscard]] std::expected<Active*, std::string> active(
104
105 std::map<sequence::SequenceNodeId, Active> active_;
106 std::vector<SequencePlaybackState> states_;
107 DecoderOptions decoderOptions_;
108 };
109}
fonts::Runtime & runtime
unsigned index
std::size_t frame
std::expected< void, std::string > forgetAlternatives(sequence::SequenceNodeId node)
std::expected< std::vector< SequenceJumpNotice >, std::string > sync(engine::SequencePlayback &playback)
void setDecoderOptions(DecoderOptions options)
std::expected< void, std::string > setAlternative(sequence::SequenceNodeId node, std::int32_t decisionFrame, std::int32_t jumpToFrame)
std::expected< void, std::string > chooseAlternative(sequence::SequenceNodeId node, std::int32_t decisionFrame, bool takeAlternative)
std::span< const SequencePlaybackState > states() const noexcept
std::expected< void, std::string > cutToFrame(sequence::SequenceNodeId node, std::int32_t frame)
std::uint64_t SequenceNodeId
std::optional< data::Sequence2DBoundingBoxAttribute > boundingBox