Fix a bug where intermediate phase outputs could get too low height.
[movit] / test_util.h
1 #ifndef _TEST_UTIL_H
2 #define _TEST_UTIL_H 1
3
4 #include "effect_chain.h"
5
6 class EffectChainTester {
7 public:
8         EffectChainTester(const float *data, unsigned width, unsigned height,
9                           MovitPixelFormat pixel_format = FORMAT_GRAYSCALE,
10                           Colorspace color_space = COLORSPACE_sRGB,
11                           GammaCurve gamma_curve = GAMMA_LINEAR,
12                           GLenum framebuffer_format = GL_RGBA16F_ARB);
13         ~EffectChainTester();
14         
15         EffectChain *get_chain() { return &chain; }
16         Input *add_input(const float *data, MovitPixelFormat pixel_format, Colorspace color_space, GammaCurve gamma_curve);
17         Input *add_input(const unsigned char *data, MovitPixelFormat pixel_format, Colorspace color_space, GammaCurve gamma_curve);
18         void run(float *out_data, GLenum format, Colorspace color_space, GammaCurve gamma_curve, OutputAlphaFormat alpha_format = OUTPUT_ALPHA_POSTMULTIPLIED);
19         void run(unsigned char *out_data, GLenum format, Colorspace color_space, GammaCurve gamma_curve, OutputAlphaFormat alpha_format = OUTPUT_ALPHA_POSTMULTIPLIED);
20
21 private:
22         void finalize_chain(Colorspace color_space, GammaCurve gamma_curve, OutputAlphaFormat alpha_format);
23
24         EffectChain chain;
25         GLuint fbo, texnum;
26         unsigned width, height;
27         bool finalized;
28 };
29
30 void expect_equal(const float *ref, const float *result, unsigned width, unsigned height, float largest_difference_limit = 1.5 / 255.0, float rms_limit = 0.2 / 255.0);
31 void expect_equal(const unsigned char *ref, const unsigned char *result, unsigned width, unsigned height, unsigned largest_difference_limit = 1, float rms_limit = 0.2);
32
33 #endif  // !defined(_TEST_UTIL_H)