Scale2xScaler.hh 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #ifndef SCALE2XSCALER_HH
  2. #define SCALE2XSCALER_HH
  3. #include "Scaler2.hh"
  4. namespace openmsx {
  5. /** Runs the Scale2x scaler algorithm.
  6. */
  7. template <class Pixel>
  8. class Scale2xScaler final : public Scaler2<Pixel>
  9. {
  10. public:
  11. explicit Scale2xScaler(const PixelOperations<Pixel>& pixelOps);
  12. void scale1x1to2x2(FrameSource& src,
  13. unsigned srcStartY, unsigned srcEndY, unsigned srcWidth,
  14. ScalerOutput<Pixel>& dst, unsigned dstStartY, unsigned dstEndY) override;
  15. void scale1x1to1x2(FrameSource& src,
  16. unsigned srcStartY, unsigned srcEndY, unsigned srcWidth,
  17. ScalerOutput<Pixel>& dst, unsigned dstStartY, unsigned dstEndY) override;
  18. private:
  19. void scaleLine_1on2(Pixel* dst0, Pixel* dst1,
  20. const Pixel* src0, const Pixel* src1, const Pixel* src2,
  21. size_t srcWidth) __restrict;
  22. void scaleLineHalf_1on2(Pixel* dst,
  23. const Pixel* src0, const Pixel* src1, const Pixel* src2,
  24. size_t srcWidth) __restrict;
  25. void scaleLine_1on1(Pixel* dst0, Pixel* dst1,
  26. const Pixel* src0, const Pixel* src1, const Pixel* src2,
  27. size_t srcWidth) __restrict;
  28. void scaleLineHalf_1on1(Pixel* dst,
  29. const Pixel* src0, const Pixel* src1, const Pixel* src2,
  30. size_t srcWidth) __restrict;
  31. };
  32. } // namespace openmsx
  33. #endif