+// do using specified interpolation
+#define DO_LENS(type) \
+ int icolor_model = plugin->get_input()->get_color_model(); \
+ switch( plugin->config.interp ) { \
+ case LensConfig::INTERP_NEAREST: \
+ switch( icolor_model ) { \
+ case BC_RGB888: \
+ DO_LENS_##type(unsigned char, 3, 0xff, 0x0, nearest); \
+ break; \
+ case BC_RGBA8888: \
+ DO_LENS_##type(unsigned char, 4, 0xff, 0x0, nearest); \
+ break; \
+ case BC_RGB_FLOAT: \
+ DO_LENS_##type(float, 3, 1.0, 0.0, nearest); \
+ break; \
+ case BC_RGBA_FLOAT: \
+ DO_LENS_##type(float, 4, 1.0, 0.0, nearest); \
+ break; \
+ case BC_YUV888: \
+ DO_LENS_##type(unsigned char, 3, 0xff, 0x80, nearest); \
+ break; \
+ case BC_YUVA8888: \
+ DO_LENS_##type(unsigned char, 4, 0xff, 0x80, nearest); \
+ break; \
+ } \
+ break; \
+ case LensConfig::INTERP_DEFAULT: \
+ case LensConfig::INTERP_BILINEAR: \
+ switch( icolor_model ) { \
+ case BC_RGB888: \
+ DO_LENS_##type(unsigned char, 3, 0xff, 0x0, bi_linear); \
+ break; \
+ case BC_RGBA8888: \
+ DO_LENS_##type(unsigned char, 4, 0xff, 0x0, bi_linear); \
+ break; \
+ case BC_RGB_FLOAT: \
+ DO_LENS_##type(float, 3, 1.0, 0.0, bi_linear); \
+ break; \
+ case BC_RGBA_FLOAT: \
+ DO_LENS_##type(float, 4, 1.0, 0.0, bi_linear); \
+ break; \
+ case BC_YUV888: \
+ DO_LENS_##type(unsigned char, 3, 0xff, 0x80, bi_linear); \
+ break; \
+ case BC_YUVA8888: \
+ DO_LENS_##type(unsigned char, 4, 0xff, 0x80, bi_linear); \
+ break; \
+ } \
+ break; \
+ case LensConfig::INTERP_BICUBIC: \
+ switch( icolor_model ) { \
+ case BC_RGB888: \
+ DO_LENS_##type(unsigned char, 3, 0xff, 0x0, bi_cubic); \
+ break; \
+ case BC_RGBA8888: \
+ DO_LENS_##type(unsigned char, 4, 0xff, 0x0, bi_cubic); \
+ break; \
+ case BC_RGB_FLOAT: \
+ DO_LENS_##type(float, 3, 1.0, 0.0, bi_cubic); \
+ break; \
+ case BC_RGBA_FLOAT: \
+ DO_LENS_##type(float, 4, 1.0, 0.0, bi_cubic); \
+ break; \
+ case BC_YUV888: \
+ DO_LENS_##type(unsigned char, 3, 0xff, 0x80, bi_cubic); \
+ break; \
+ case BC_YUVA8888: \
+ DO_LENS_##type(unsigned char, 4, 0xff, 0x80, bi_cubic); \
+ break; \
+ } \
+ break; \
+ }