#include <epoxy/gl.h>
#include <stddef.h>
+#include <string>
+
#include "effect_chain.h"
#include "gtest/gtest.h"
#include "test_util.h"
#include "resize_effect.h"
#include "ycbcr_422interleaved_input.h"
+using namespace std;
+
namespace movit {
// Adapted from the Simple444 test from YCbCrInputTest.
};
float out_data[4 * width * height];
- EffectChainTester tester(NULL, width, height);
+ EffectChainTester tester(nullptr, width, height);
ImageFormat format;
format.color_space = COLORSPACE_sRGB;
expect_equal(expected_data, out_data, 4 * width, height, 0.025, 0.002);
}
+// An effect that does nothing except changing its output sizes.
+class VirtualResizeEffect : public Effect {
+public:
+ VirtualResizeEffect(int width, int height, int virtual_width, int virtual_height)
+ : width(width),
+ height(height),
+ virtual_width(virtual_width),
+ virtual_height(virtual_height) {}
+ string effect_type_id() const override { return "VirtualResizeEffect"; }
+ string output_fragment_shader() override { return read_file("identity.frag"); }
+
+ bool changes_output_size() const override { return true; }
+
+ void get_output_size(unsigned *width, unsigned *height,
+ unsigned *virtual_width, unsigned *virtual_height) const override {
+ *width = this->width;
+ *height = this->height;
+ *virtual_width = this->virtual_width;
+ *virtual_height = this->virtual_height;
+ }
+
+private:
+ int width, height, virtual_width, virtual_height;
+};
+
TEST(YCbCr422InterleavedInputTest, LumaLinearInterpolation) {
const int width = 4;
const int height = 1;
};
float out_data[out_width * height];
- EffectChainTester tester(NULL, out_width, height);
+ EffectChainTester tester(nullptr, out_width, height);
ImageFormat format;
format.color_space = COLORSPACE_sRGB;
YCbCr422InterleavedInput *input = new YCbCr422InterleavedInput(format, ycbcr_format, width, height);
input->set_pixel_data(uyvy);
tester.get_chain()->add_input(input);
-
- ResizeEffect *upscale = new ResizeEffect();
- ASSERT_TRUE(upscale->set_int("width", out_width));
- ASSERT_TRUE(upscale->set_int("height", height));
- tester.get_chain()->add_effect(upscale);
+ tester.get_chain()->add_effect(new VirtualResizeEffect(out_width, height, out_width, height));
tester.run(out_data, GL_RED, COLORSPACE_sRGB, GAMMA_sRGB);
};
float out_data[width * height];
- EffectChainTester tester(NULL, width, height);
+ EffectChainTester tester(nullptr, width, height);
ImageFormat format;
format.color_space = COLORSPACE_sRGB;
glBufferData(GL_PIXEL_UNPACK_BUFFER_ARB, width * height * 2, uyvy, GL_STREAM_DRAW);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB, 0);
- EffectChainTester tester(NULL, width, height);
+ EffectChainTester tester(nullptr, width, height);
ImageFormat format;
format.color_space = COLORSPACE_sRGB;