38 [[nodiscard]] int16_t
readSample(EmuTime::param time);
41 void setMuting(
bool left,
bool right, EmuTime::param time);
42 [[nodiscard]]
bool extAck(EmuTime::param )
const {
return ack; }
43 void extControl(
bool bit, EmuTime::param time);
46 template<
typename Archive>
47 void serialize(Archive& ar,
unsigned version);
89 std::string getStateString()
const;
90 void setImageName(std::string newImage, EmuTime::param time);
91 [[nodiscard]]
const Filename& getImageName()
const {
return oggImage; }
96 void play(EmuTime::param time);
97 void pause(EmuTime::param time);
98 void stop(EmuTime::param time);
99 void eject(EmuTime::param time);
100 void seekFrame(
size_t frame, EmuTime::param time);
101 void stepFrame(
bool forwards);
102 void seekChapter(
int chapter, EmuTime::param time);
108 void scheduleDisplayStart(EmuTime::param time);
109 [[nodiscard]]
bool isVideoOutputAvailable(EmuTime::param time);
110 void remoteButtonNEC(uint8_t code, EmuTime::param time);
112 void setAck(EmuTime::param time,
int wait);
113 [[nodiscard]]
size_t getCurrentSample(EmuTime::param time);
114 void createRenderer();
117 void generateChannels(std::span<float*> buffers,
unsigned num)
override;
118 bool updateBuffer(
size_t length,
float* buffer,
119 EmuTime::param time)
override;
120 [[nodiscard]]
float getAmplificationFactorImpl()
const override;
123 struct SyncAck final :
public Schedulable {
124 friend class LaserdiscPlayer;
125 explicit SyncAck(Scheduler& s) : Schedulable(s) {}
126 void executeUntil(EmuTime::param time)
override {
127 auto& player =
OUTER(LaserdiscPlayer, syncAck);
128 player.execSyncAck(time);
134 void executeUntil(EmuTime::param time)
override {
135 auto& player =
OUTER(LaserdiscPlayer, syncOdd);
136 player.execSyncFrame(time,
true);
141 explicit SyncEven(Scheduler& s) :
Schedulable(s) {}
142 void executeUntil(EmuTime::param time)
override {
143 auto& player =
OUTER(LaserdiscPlayer, syncEven);
144 player.execSyncFrame(time,
false);
148 void execSyncAck(EmuTime::param time);
149 void execSyncFrame(EmuTime::param time,
bool odd);
150 [[nodiscard]] EmuTime::param getCurrentTime()
const {
return syncAck.getCurrentTime(); }
153 bool signalEvent(
const Event& event)
override;
156 void preVideoSystemChange() noexcept override;
157 void postVideoSystemChange() noexcept override;
159 MSXMotherBoard& motherBoard;
160 PioneerLDControl& ldControl;
162 struct Command final : RecordedCommand {
163 Command(CommandController& commandController,
164 StateChangeDistributor& stateChangeDistributor,
165 Scheduler& scheduler);
166 void execute(std::span<const TclObject> tokens, TclObject& result,
167 EmuTime::param time)
override;
168 [[nodiscard]] std::string help(std::span<const TclObject> tokens)
const override;
169 void tabCompletion(std::vector<std::string>& tokens)
const override;
172 std::optional<OggReader> video;
174 std::unique_ptr<LDRenderer> renderer;
176 void nextFrame(EmuTime::param time);
183 EmuTime start = EmuTime::zero();
184 size_t playingFromSample;
185 size_t lastPlayedSample;
186 bool muteLeft =
false, muteRight =
false;
191 EmuTime remoteLastEdge = EmuTime::zero();
192 unsigned remoteBitNr;
194 bool remoteLastBit =
false;
197 bool remoteExecuteDelayed;
199 int remoteVblanksBack;
208 bool stillOnWaitFrame;
217 bool seeking =
false;
235 BooleanSetting autoRunSetting;
236 LoadingIndicator loadingIndicator;
std::variant< KeyUpEvent, KeyDownEvent, MouseMotionEvent, MouseButtonUpEvent, MouseButtonDownEvent, MouseWheelEvent, JoystickAxisMotionEvent, JoystickHatEvent, JoystickButtonUpEvent, JoystickButtonDownEvent, OsdControlReleaseEvent, OsdControlPressEvent, WindowEvent, TextEvent, FileDropEvent, QuitEvent, FinishFrameEvent, CliCommandEvent, GroupEvent, BootEvent, FrameDrawnEvent, BreakEvent, SwitchRendererEvent, TakeReverseSnapshotEvent, AfterTimedEvent, MachineLoadedEvent, MachineActivatedEvent, MachineDeactivatedEvent, MidiInReaderEvent, MidiInWindowsEvent, MidiInCoreMidiEvent, MidiInCoreMidiVirtualEvent, MidiInALSAEvent, Rs232TesterEvent, Rs232NetEvent, ImGuiDelayedActionEvent, ImGuiActiveEvent > Event