1 #include "frei0r.hpp" 2 3 #include <algorithm> 4 5 class xfade0r : public frei0r::mixer2 6 { 7 public: xfade0r(unsigned int width,unsigned int height)8 xfade0r(unsigned int width, unsigned int height) 9 { 10 fader = 0.0; 11 register_param(fader,"fader","the fader position"); 12 } 13 14 struct fade_fun 15 { fade_funxfade0r::fade_fun16 fade_fun(double pos) 17 { 18 fader_pos=uint8_t(std::max(0.,std::min(255.,pos*255.))); 19 } 20 operator ()xfade0r::fade_fun21 uint8_t operator()(uint8_t in1,uint8_t in2) 22 { 23 return ((255-fader_pos)*in1 + fader_pos*in2) / 256; 24 } 25 26 uint8_t fader_pos; 27 }; 28 update(double time,uint32_t * out,const uint32_t * in1,const uint32_t * in2)29 void update(double time, 30 uint32_t* out, 31 const uint32_t* in1, 32 const uint32_t* in2) 33 { 34 std::transform(reinterpret_cast<const uint8_t*>(in1), 35 reinterpret_cast<const uint8_t*>(in1)+(width*height*4), 36 reinterpret_cast<const uint8_t*>(in2), 37 reinterpret_cast<uint8_t*>(out), 38 fade_fun(fader)); 39 } 40 41 private: 42 double fader; 43 }; 44 45 46 frei0r::construct<xfade0r> plugin("xfade0r", 47 "a simple xfader", 48 "Martin Bayer", 49 0,2); 50 51