- switch( engine->output->get_color_model() ) { \
- APPLY_MASK_ALPHA(BC_RGB888, uint8_t, 0xff, 3, 0); \
- APPLY_MASK_ALPHA(BC_RGB_FLOAT, float, 1.0, 3, 0); \
- APPLY_MASK_ALPHA(BC_YUV888, uint8_t, 0xff, 3, 1); \
- APPLY_MASK_ALPHA(BC_RGBA_FLOAT, float, 1.0, 4, 0); \
- APPLY_MASK_ALPHA(BC_YUVA8888, uint8_t, 0xff, 4, 1); \
- APPLY_MASK_ALPHA(BC_RGBA8888, uint8_t, 0xff, 4, 0); \
- APPLY_MASK_ALPHA(BC_RGB161616, uint16_t, 0xffff, 3, 0); \
- APPLY_MASK_ALPHA(BC_YUV161616, uint16_t, 0xffff, 3, 1); \
- APPLY_MASK_ALPHA(BC_YUVA16161616, uint16_t, 0xffff, 4, 1); \
- APPLY_MASK_ALPHA(BC_RGBA16161616, uint16_t, 0xffff, 4, 0); \
- }
+ switch( engine->output->get_color_model() ) { \
+ APPLY_MASK_ALPHA(BC_RGB888, uint8_t, 0xff, 3, 0); \
+ APPLY_MASK_ALPHA(BC_RGB_FLOAT, float, 1.0, 3, 0); \
+ APPLY_MASK_ALPHA(BC_YUV888, uint8_t, 0xff, 3, 1); \
+ APPLY_MASK_ALPHA(BC_RGBA_FLOAT, float, 1.0, 4, 0); \
+ APPLY_MASK_ALPHA(BC_YUVA8888, uint8_t, 0xff, 4, 1); \
+ APPLY_MASK_ALPHA(BC_RGBA8888, uint8_t, 0xff, 4, 0); \
+ APPLY_MASK_ALPHA(BC_RGB161616, uint16_t, 0xffff, 3, 0); \
+ APPLY_MASK_ALPHA(BC_YUV161616, uint16_t, 0xffff, 3, 1); \
+ APPLY_MASK_ALPHA(BC_YUVA16161616, uint16_t, 0xffff, 4, 1); \
+ APPLY_MASK_ALPHA(BC_RGBA16161616, uint16_t, 0xffff, 4, 0); \
+ }
+}
+
+
+void MaskUnit::process_package(LoadPackage *package)
+{
+ pkg = (MaskPackage*)package;
+ start_x = pkg->start_x; end_x = pkg->end_x;
+ start_y = pkg->start_y; end_y = pkg->end_y;
+ MaskEdge *edge = engine->edge;
+ float r = engine->r, v = engine->v;
+ VFrame *in = engine->in;
+ VFrame *out = engine->out;
+ VFrame *mask = engine->mask;
+ switch( engine->step ) {
+ case DO_MASK: {
+// Draw masked region of polygons on in
+ if( edge->size() < 3 ) break;
+ bc = r>=0 ? 0 : 0xffff;
+ fc = r>=0 ? 0xffff : 0;
+ clear_mask(in, bc);
+ if( bc == fc ) break;
+ draw_filled_polygon(*edge);
+ break; }
+ case DO_FEATHER_X: {
+ feather_x(in, out);
+ break; }
+ case DO_FEATHER_Y: {
+ feather_y(out, in);
+ break; }
+ case DO_MASK_BLEND: {
+ mask_blend(in, mask, r, v);
+ break; }
+ case DO_APPLY: {
+ apply_mask_alpha(engine->output, mask);
+ break; }