]> git.sesse.net Git - casparcg/blobdiff - core/frame/frame_transform.cpp
[bluefish_consumer] Install GPF handler for custom thread.
[casparcg] / core / frame / frame_transform.cpp
index 393214b69aa1326a3c6f7f6d6f27fc30ee770fca..aba667b59324e8fa71ad9e9d690ad36c30c470e4 100644 (file)
@@ -86,27 +86,27 @@ image_transform& image_transform::operator*=(const image_transform &other)
        transform_rect(crop, other.crop);
        transform_corners(perspective, other.perspective);
 
-       levels.min_input                 = std::max(levels.min_input,  other.levels.min_input);
-       levels.max_input                 = std::min(levels.max_input,  other.levels.max_input);
-       levels.min_output                = std::max(levels.min_output, other.levels.min_output);
-       levels.max_output                = std::min(levels.max_output, other.levels.max_output);
-       levels.gamma                    *= other.levels.gamma;
-       chroma.enable                   |= other.chroma.enable;
-       chroma.show_mask                |= other.chroma.show_mask;
-       chroma.target_hue                = std::max(other.chroma.target_hue, chroma.target_hue);
-       chroma.min_saturation    = std::max(other.chroma.min_saturation, chroma.min_saturation);
-       chroma.min_brightness    = std::max(other.chroma.min_brightness, chroma.min_brightness);
-       chroma.hue_width                 = std::max(other.chroma.hue_width, chroma.hue_width);
-       chroma.softness                  = std::max(other.chroma.softness, chroma.softness);
-       chroma.spill                     = std::min(other.chroma.spill, chroma.spill);
-       chroma.spill_darken              = std::max(other.chroma.spill_darken, chroma.spill_darken);
-       field_mode                               = field_mode & other.field_mode;
-       is_key                                  |= other.is_key;
-       is_mix                                  |= other.is_mix;
-       is_still                                |= other.is_still;
-       use_mipmap                              |= other.use_mipmap;
-       blend_mode                               = std::max(blend_mode, other.blend_mode);
-       layer_depth                             += other.layer_depth;
+       levels.min_input                                         = std::max(levels.min_input,  other.levels.min_input);
+       levels.max_input                                         = std::min(levels.max_input,  other.levels.max_input);
+       levels.min_output                                        = std::max(levels.min_output, other.levels.min_output);
+       levels.max_output                                        = std::min(levels.max_output, other.levels.max_output);
+       levels.gamma                                            *= other.levels.gamma;
+       chroma.enable                                           |= other.chroma.enable;
+       chroma.show_mask                                        |= other.chroma.show_mask;
+       chroma.target_hue                                        = std::max(other.chroma.target_hue, chroma.target_hue);
+       chroma.min_saturation                            = std::max(other.chroma.min_saturation, chroma.min_saturation);
+       chroma.min_brightness                            = std::max(other.chroma.min_brightness, chroma.min_brightness);
+       chroma.hue_width                                         = std::max(other.chroma.hue_width, chroma.hue_width);
+       chroma.softness                                          = std::max(other.chroma.softness, chroma.softness);
+       chroma.spill_suppress                            = std::max(other.chroma.spill_suppress, chroma.spill_suppress);
+       chroma.spill_suppress_saturation         = std::min(other.chroma.spill_suppress_saturation, chroma.spill_suppress_saturation);
+       field_mode                                                       = field_mode & other.field_mode;
+       is_key                                                          |= other.is_key;
+       is_mix                                                          |= other.is_mix;
+       is_still                                                        |= other.is_still;
+       use_mipmap                                                      |= other.use_mipmap;
+       blend_mode                                                       = std::max(blend_mode, other.blend_mode);
+       layer_depth                                                     += other.layer_depth;
 
        return *this;
 }
@@ -144,42 +144,42 @@ image_transform image_transform::tween(double time, const image_transform& sourc
 {
        image_transform result;
 
-       result.brightness                               = do_tween(time, source.brightness,                             dest.brightness,                        duration, tween);
-       result.contrast                                 = do_tween(time, source.contrast,                               dest.contrast,                          duration, tween);
-       result.saturation                               = do_tween(time, source.saturation,                             dest.saturation,                        duration, tween);
-       result.opacity                                  = do_tween(time, source.opacity,                                dest.opacity,                           duration, tween);
-       result.anchor[0]                                = do_tween(time, source.anchor[0],                              dest.anchor[0],                         duration, tween);
-       result.anchor[1]                                = do_tween(time, source.anchor[1],                              dest.anchor[1],                         duration, tween);
-       result.fill_translation[0]              = do_tween(time, source.fill_translation[0],    dest.fill_translation[0],       duration, tween);
-       result.fill_translation[1]              = do_tween(time, source.fill_translation[1],    dest.fill_translation[1],       duration, tween);
-       result.fill_scale[0]                    = do_tween(time, source.fill_scale[0],                  dest.fill_scale[0],                     duration, tween);
-       result.fill_scale[1]                    = do_tween(time, source.fill_scale[1],                  dest.fill_scale[1],                     duration, tween);
-       result.clip_translation[0]              = do_tween(time, source.clip_translation[0],    dest.clip_translation[0],       duration, tween);
-       result.clip_translation[1]              = do_tween(time, source.clip_translation[1],    dest.clip_translation[1],       duration, tween);
-       result.clip_scale[0]                    = do_tween(time, source.clip_scale[0],                  dest.clip_scale[0],                     duration, tween);
-       result.clip_scale[1]                    = do_tween(time, source.clip_scale[1],                  dest.clip_scale[1],                     duration, tween);
-       result.angle                                    = do_tween(time, source.angle,                                  dest.angle,                                     duration, tween);
-       result.levels.max_input                 = do_tween(time, source.levels.max_input,               dest.levels.max_input,          duration, tween);
-       result.levels.min_input                 = do_tween(time, source.levels.min_input,               dest.levels.min_input,          duration, tween);
-       result.levels.max_output                = do_tween(time, source.levels.max_output,              dest.levels.max_output,         duration, tween);
-       result.levels.min_output                = do_tween(time, source.levels.min_output,              dest.levels.min_output,         duration, tween);
-       result.levels.gamma                             = do_tween(time, source.levels.gamma,                   dest.levels.gamma,                      duration, tween);
-       result.chroma.target_hue                = do_tween(time, source.chroma.target_hue,              dest.chroma.target_hue,         duration, tween);
-       result.chroma.hue_width                 = do_tween(time, source.chroma.hue_width,               dest.chroma.hue_width,          duration, tween);
-       result.chroma.min_saturation    = do_tween(time, source.chroma.min_saturation,  dest.chroma.min_saturation,     duration, tween);
-       result.chroma.min_brightness    = do_tween(time, source.chroma.min_brightness,  dest.chroma.min_brightness,     duration, tween);
-       result.chroma.softness                  = do_tween(time, source.chroma.softness,                dest.chroma.softness,           duration, tween);
-       result.chroma.spill                             = do_tween(time, source.chroma.spill,                   dest.chroma.spill,                      duration, tween);
-       result.chroma.spill_darken              = do_tween(time, source.chroma.spill_darken,    dest.chroma.spill_darken,       duration, tween);
-       result.chroma.enable                    = dest.chroma.enable;
-       result.chroma.show_mask                 = dest.chroma.show_mask;
-       result.field_mode                               = source.field_mode & dest.field_mode;
-       result.is_key                                   = source.is_key | dest.is_key;
-       result.is_mix                                   = source.is_mix | dest.is_mix;
-       result.is_still                                 = source.is_still | dest.is_still;
-       result.use_mipmap                               = source.use_mipmap | dest.use_mipmap;
-       result.blend_mode                               = std::max(source.blend_mode, dest.blend_mode);
-       result.layer_depth                              = dest.layer_depth;
+       result.brightness                                               = do_tween(time, source.brightness,                                                     dest.brightness,                                                duration, tween);
+       result.contrast                                                 = do_tween(time, source.contrast,                                                       dest.contrast,                                                  duration, tween);
+       result.saturation                                               = do_tween(time, source.saturation,                                                     dest.saturation,                                                duration, tween);
+       result.opacity                                                  = do_tween(time, source.opacity,                                                        dest.opacity,                                                   duration, tween);
+       result.anchor[0]                                                = do_tween(time, source.anchor[0],                                                      dest.anchor[0],                                                 duration, tween);
+       result.anchor[1]                                                = do_tween(time, source.anchor[1],                                                      dest.anchor[1],                                                 duration, tween);
+       result.fill_translation[0]                              = do_tween(time, source.fill_translation[0],                            dest.fill_translation[0],                               duration, tween);
+       result.fill_translation[1]                              = do_tween(time, source.fill_translation[1],                            dest.fill_translation[1],                               duration, tween);
+       result.fill_scale[0]                                    = do_tween(time, source.fill_scale[0],                                          dest.fill_scale[0],                                             duration, tween);
+       result.fill_scale[1]                                    = do_tween(time, source.fill_scale[1],                                          dest.fill_scale[1],                                             duration, tween);
+       result.clip_translation[0]                              = do_tween(time, source.clip_translation[0],                            dest.clip_translation[0],                               duration, tween);
+       result.clip_translation[1]                              = do_tween(time, source.clip_translation[1],                            dest.clip_translation[1],                               duration, tween);
+       result.clip_scale[0]                                    = do_tween(time, source.clip_scale[0],                                          dest.clip_scale[0],                                             duration, tween);
+       result.clip_scale[1]                                    = do_tween(time, source.clip_scale[1],                                          dest.clip_scale[1],                                             duration, tween);
+       result.angle                                                    = do_tween(time, source.angle,                                                          dest.angle,                                                             duration, tween);
+       result.levels.max_input                                 = do_tween(time, source.levels.max_input,                                       dest.levels.max_input,                                  duration, tween);
+       result.levels.min_input                                 = do_tween(time, source.levels.min_input,                                       dest.levels.min_input,                                  duration, tween);
+       result.levels.max_output                                = do_tween(time, source.levels.max_output,                                      dest.levels.max_output,                                 duration, tween);
+       result.levels.min_output                                = do_tween(time, source.levels.min_output,                                      dest.levels.min_output,                                 duration, tween);
+       result.levels.gamma                                             = do_tween(time, source.levels.gamma,                                           dest.levels.gamma,                                              duration, tween);
+       result.chroma.target_hue                                = do_tween(time, source.chroma.target_hue,                                      dest.chroma.target_hue,                                 duration, tween);
+       result.chroma.hue_width                                 = do_tween(time, source.chroma.hue_width,                                       dest.chroma.hue_width,                                  duration, tween);
+       result.chroma.min_saturation                    = do_tween(time, source.chroma.min_saturation,                          dest.chroma.min_saturation,                             duration, tween);
+       result.chroma.min_brightness                    = do_tween(time, source.chroma.min_brightness,                          dest.chroma.min_brightness,                             duration, tween);
+       result.chroma.softness                                  = do_tween(time, source.chroma.softness,                                        dest.chroma.softness,                                   duration, tween);
+       result.chroma.spill_suppress                    = do_tween(time, source.chroma.spill_suppress,                          dest.chroma.spill_suppress,                             duration, tween);
+       result.chroma.spill_suppress_saturation = do_tween(time, source.chroma.spill_suppress_saturation,       dest.chroma.spill_suppress_saturation,  duration, tween);
+       result.chroma.enable                                    = dest.chroma.enable;
+       result.chroma.show_mask                                 = dest.chroma.show_mask;
+       result.field_mode                                               = source.field_mode & dest.field_mode;
+       result.is_key                                                   = source.is_key | dest.is_key;
+       result.is_mix                                                   = source.is_mix | dest.is_mix;
+       result.is_still                                                 = source.is_still | dest.is_still;
+       result.use_mipmap                                               = source.use_mipmap | dest.use_mipmap;
+       result.blend_mode                                               = std::max(source.blend_mode, dest.blend_mode);
+       result.layer_depth                                              = dest.layer_depth;
 
        do_tween_rectangle(source.crop, dest.crop, result.crop, time, duration, tween);
        do_tween_corners(source.perspective, dest.perspective, result.perspective, time, duration, tween);
@@ -235,8 +235,8 @@ bool operator==(const image_transform& lhs, const image_transform& rhs)
                eq(lhs.chroma.min_saturation, rhs.chroma.min_saturation) &&
                eq(lhs.chroma.min_brightness, rhs.chroma.min_brightness) &&
                eq(lhs.chroma.softness, rhs.chroma.softness) &&
-               eq(lhs.chroma.spill, rhs.chroma.spill) &&
-               eq(lhs.chroma.spill_darken, rhs.chroma.spill_darken) &&
+               eq(lhs.chroma.spill_suppress, rhs.chroma.spill_suppress) &&
+               eq(lhs.chroma.spill_suppress_saturation, rhs.chroma.spill_suppress_saturation) &&
                lhs.crop == rhs.crop &&
                lhs.perspective == rhs.perspective;
 }