openMSX
SaI3xScaler.hh
Go to the documentation of this file.
1#ifndef SAI3XSCALER_HH
2#define SAI3XSCALER_HH
3
4#include "Scaler3.hh"
5#include "PixelOperations.hh"
6
7namespace openmsx {
8
12template<std::unsigned_integral Pixel>
13class SaI3xScaler final : public Scaler3<Pixel>
14{
15public:
16 explicit SaI3xScaler(const PixelOperations<Pixel>& pixelOps);
17 void scaleBlank1to3(
18 FrameSource& src, unsigned srcStartY, unsigned srcEndY,
19 ScalerOutput<Pixel>& dst, unsigned dstStartY, unsigned dstEndY) override;
20 void scale1x1to3x3(FrameSource& src,
21 unsigned srcStartY, unsigned srcEndY, unsigned srcWidth,
22 ScalerOutput<Pixel>& dst, unsigned dstStartY, unsigned dstEndY) override;
23
24private:
25 [[nodiscard]] inline Pixel blend(Pixel p1, Pixel p2) const;
26
27 template<unsigned NX, unsigned NY>
28 void scaleFixed(FrameSource& src,
29 unsigned srcStartY, unsigned srcEndY, unsigned srcWidth,
30 ScalerOutput<Pixel>& dst, unsigned dstStartY, unsigned dstEndY);
31 void scaleAny(FrameSource& src,
32 unsigned srcStartY, unsigned srcEndY, unsigned srcWidth,
33 ScalerOutput<Pixel>& dst, unsigned dstStartY, unsigned dstEndY);
34
36};
37
38} // namespace openmsx
39
40#endif
Interface for getting lines from a video frame.
Definition: FrameSource.hh:20
2xSaI algorithm: edge-detection which produces a rounded look.
Definition: SaI3xScaler.hh:14
void scale1x1to3x3(FrameSource &src, unsigned srcStartY, unsigned srcEndY, unsigned srcWidth, ScalerOutput< Pixel > &dst, unsigned dstStartY, unsigned dstEndY) override
Definition: SaI3xScaler.cc:546
void scaleBlank1to3(FrameSource &src, unsigned srcStartY, unsigned srcEndY, ScalerOutput< Pixel > &dst, unsigned dstStartY, unsigned dstEndY) override
Definition: SaI3xScaler.cc:26
SaI3xScaler(const PixelOperations< Pixel > &pixelOps)
Definition: SaI3xScaler.cc:19
Base class for 3x scalers.
Definition: Scaler3.hh:12
This file implemented 3 utility functions:
Definition: Autofire.cc:9
uint32_t Pixel