1#ifndef POSTPROCESSOR_HH
2#define POSTPROCESSOR_HH
15class DeinterlacedFrame;
18class EventDistributor;
22class SuperImposedFrame;
45 [[nodiscard]]
virtual std::unique_ptr<RawFrame>
rotateFrames(
46 std::unique_ptr<RawFrame> finishedFrame, EmuTime::param time);
82 [[nodiscard]]
unsigned getBpp()
const;
148 void executeUntil(EmuTime::param time)
override;
157 const bool canDoInterlace;
Represents the output window/screen of openMSX.
Interface for getting lines from a video frame.
A frame buffer where pixels can be written to.
Abstract base class for post processors.
virtual std::unique_ptr< RawFrame > rotateFrames(std::unique_ptr< RawFrame > finishedFrame, EmuTime::param time)
Sets up the "abcdFrame" variables for a new frame.
PostProcessor(MSXMotherBoard &motherBoard, Display &display, OutputSurface &screen, const std::string &videoSource, unsigned maxWidth, unsigned height, bool canDoInterlace)
void takeRawScreenShot(unsigned height, const std::string &filename) override
Create a raw (=non-post-processed) screenshot.
FrameSource * paintFrame
Represents a frame as it should be displayed.
std::unique_ptr< SuperImposedFrame > superImposedFrame
Result of superimposing 2 frames.
const RawFrame * superImposeVideoFrame
Video frame on which to superimpose the (VDP) output.
unsigned getBpp() const
Get the number of bits per pixel for the pixels in these frames.
static unsigned getLineWidth(FrameSource *frame, unsigned y, unsigned step)
Returns the maximum width for lines [y..y+step).
void setRecorder(AviRecorder *recorder_)
Start/stop recording.
std::unique_ptr< DeinterlacedFrame > deinterlacedFrame
Combined the last two frames in a deinterlaced frame.
const FrameSource * superImposeVdpFrame
std::array< std::unique_ptr< RawFrame >, 4 > lastFrames
The last 4 fully rendered (unscaled) MSX frames.
std::unique_ptr< DoubledFrame > interlacedFrame
Each line of the last frame twice, to get double vertical resolution.
RenderSettings & renderSettings
Render settings.
void setSuperimposeVdpFrame(const FrameSource *vdpSource)
Set the VDP frame on which to superimpose the 'normal' output of this PostProcessor.
std::unique_ptr< Deflicker > deflicker
Combine the last 4 frames into one 'flicker-free' frame.
AviRecorder * recorder
Video recorder, nullptr when not recording.
bool isRecording() const
Is recording active.
~PostProcessor() override
FrameSource * getPaintFrame() const
Get the frame that would be displayed.
OutputSurface & screen
The surface which is visible to the user.
void setSuperimposeVideoFrame(const RawFrame *videoSource)
Set the Video frame on which to superimpose the 'normal' output of this PostProcessor.
A video frame as output by the VDP scanline conversion unit, before any postprocessing filters are ap...
Class containing all settings for renderers.
Every class that wants to get scheduled at some point must inherit from this class.
This file implemented 3 utility functions: