00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "downscale.h"
00012
00013
00014 const unsigned int S_BITS = 3;
00015
00016 inline
00017 VYApixel DESCALE(VYApixel x, unsigned int n)
00018 {
00019 return (x + (1 << (n-1)) - (x < 0)) >> n;
00020 }
00021
00022 DownScale::DownScale(
00023 const Id& n,
00024 In<VYApixel>& cin,
00025 Out<VYApixel>& cout)
00026 :
00027 Process(n),
00028 Cin( id("Cin"), cin),
00029 Cout( id("Cout"), cout)
00030 {
00031 }
00032
00033 void DownScale::main()
00034 {
00035 VYApixel pixelIn;
00036 VYApixel pixelOut;
00037
00038 while (true)
00039 {
00040 read(Cin, pixelIn);
00041
00042 pixelOut = 128 + DESCALE(pixelIn, S_BITS+3);
00043
00044 pixelOut = pixelOut > 0 ? (pixelOut < 255 ? pixelOut : 255) : 0;
00045
00046 write(Cout, pixelOut);
00047 }
00048 }