NHMLFixup v10
[jpcrr.git] / streamtools / rescalers / public.hpp
blob32e1a75b4d42f3871d805e3de35be25afa6043c0
1 #ifndef _rescalers__public__hpp__included__
2 #define _rescalers__public__hpp__included__
4 #include <stdint.h>
5 #include <string>
6 #include <list>
7 #include <map>
9 class rescaler
11 public:
12 virtual ~rescaler();
13 virtual void operator()(uint8_t* target, uint32_t twidth, uint32_t theight,
14 const uint8_t* source, uint32_t swidth, uint32_t sheight) = 0;
15 static rescaler& make(const std::string& type);
18 struct parsed_scaler
20 bool is_special;
21 uint32_t swidth; //Meaningful only if is_special is set.
22 uint32_t sheight; //Meaningful only if is_special is set.
23 rescaler* use_rescaler;
26 std::string get_rescaler_string();
27 std::list<std::string> get_rescaler_list();
28 rescaler& composite_rescaler(rescaler& s1, uint32_t iwidth, uint32_t iheight, rescaler& s2);
29 struct parsed_scaler parse_rescaler_expression(const std::string& expr);
30 rescaler& get_default_rescaler();
32 class rescaler_group
34 public:
35 rescaler_group(rescaler& _default_rescaler);
36 ~rescaler_group();
37 void set_default_rescaler(rescaler& _default_rescaler);
38 void set_special_rescaler(uint32_t width, uint32_t height, rescaler& rescaler);
39 void operator()(uint8_t* target, uint32_t twidth, uint32_t theight,
40 const uint8_t* source, uint32_t swidth, uint32_t sheight);
41 private:
42 rescaler* default_rescaler;
43 std::map<std::pair<uint32_t, uint32_t>, rescaler*> special_rescalers;
46 #endif