From e74449b7b746bbf5af451ed99d18ef30328a2460 Mon Sep 17 00:00:00 2001 From: Ronag Date: Sun, 21 Aug 2011 14:05:43 +0000 Subject: [PATCH] git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.0.2@1248 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d --- core/producer/frame/frame_transform.cpp | 64 +++++++++++-------------- core/producer/frame/frame_transform.h | 3 +- 2 files changed, 29 insertions(+), 38 deletions(-) diff --git a/core/producer/frame/frame_transform.cpp b/core/producer/frame/frame_transform.cpp index e4be8d527..60d93a1aa 100644 --- a/core/producer/frame/frame_transform.cpp +++ b/core/producer/frame/frame_transform.cpp @@ -32,8 +32,8 @@ frame_transform::frame_transform() , brightness(1.0) , contrast(1.0) , saturation(1.0) - , is_key(false) , field_mode(field_mode::progressive) + , is_key(false) { std::fill(fill_translation.begin(), fill_translation.end(), 0.0); std::fill(fill_scale.begin(), fill_scale.end(), 1.0); @@ -48,13 +48,6 @@ frame_transform& frame_transform::operator*=(const frame_transform &other) brightness *= other.brightness; contrast *= other.contrast; saturation *= other.saturation; - 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; - field_mode = static_cast(field_mode & other.field_mode); - is_key |= other.is_key; fill_translation[0] += other.fill_translation[0]*fill_scale[0]; fill_translation[1] += other.fill_translation[1]*fill_scale[1]; fill_scale[0] *= other.fill_scale[0]; @@ -63,6 +56,13 @@ frame_transform& frame_transform::operator*=(const frame_transform &other) clip_translation[1] += other.clip_translation[1]*clip_scale[1]; clip_scale[0] *= other.clip_scale[0]; clip_scale[1] *= other.clip_scale[1]; + 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; + field_mode = static_cast(field_mode & other.field_mode); + is_key |= other.is_key; return *this; } @@ -79,34 +79,26 @@ frame_transform tween(double time, const frame_transform& source, const frame_tr }; frame_transform result; - result.is_key = source.is_key | dest.is_key; - result.field_mode = static_cast(source.field_mode & dest.field_mode); - result.volume = do_tween(time, source.volume, dest.volume, duration, tweener); - result.brightness = do_tween(time, source.brightness, dest.brightness, duration, tweener); - result.contrast = do_tween(time, source.contrast, dest.contrast, duration, tweener); - result.saturation = do_tween(time, source.saturation, dest.saturation, duration, tweener); - result.opacity = do_tween(time, source.opacity, dest.opacity, duration, tweener); - - result.fill_translation[0] = do_tween(time, source.fill_translation[0], dest.fill_translation[0], duration, tweener), - result.fill_translation[1] = do_tween(time, source.fill_translation[1], dest.fill_translation[1], duration, tweener); - - result.fill_scale[0] = do_tween(time, source.fill_scale[0], dest.fill_scale[0], duration, tweener), - result.fill_scale[1] = do_tween(time, source.fill_scale[1], dest.fill_scale[1], duration, tweener); - - result.clip_translation[0] = do_tween(time, source.clip_translation[0], dest.clip_translation[0], duration, tweener), - result.clip_translation[1] = do_tween(time, source.clip_translation[1], dest.clip_translation[1], duration, tweener); - - result.clip_scale[0] = do_tween(time, source.clip_scale[0], dest.clip_scale[0], duration, tweener), - result.clip_scale[1] = do_tween(time, source.clip_scale[1], dest.clip_scale[1], duration, tweener); - - auto s_levels = source.levels; - auto d_levels = dest.levels; - - result.levels.max_input = do_tween(time, s_levels.max_input, d_levels.max_input, duration, tweener); - result.levels.min_input = do_tween(time, s_levels.min_input, d_levels.min_input, duration, tweener); - result.levels.max_output = do_tween(time, s_levels.max_output, d_levels.max_output, duration, tweener); - result.levels.min_output = do_tween(time, s_levels.min_output, d_levels.min_output, duration, tweener); - result.levels.gamma = do_tween(time, s_levels.gamma, d_levels.gamma, duration, tweener); + result.volume = do_tween(time, source.volume, dest.volume, duration, tweener); + result.brightness = do_tween(time, source.brightness, dest.brightness, duration, tweener); + result.contrast = do_tween(time, source.contrast, dest.contrast, duration, tweener); + result.saturation = do_tween(time, source.saturation, dest.saturation, duration, tweener); + result.opacity = do_tween(time, source.opacity, dest.opacity, duration, tweener); + result.fill_translation[0] = do_tween(time, source.fill_translation[0], dest.fill_translation[0], duration, tweener), + result.fill_translation[1] = do_tween(time, source.fill_translation[1], dest.fill_translation[1], duration, tweener); + result.fill_scale[0] = do_tween(time, source.fill_scale[0], dest.fill_scale[0], duration, tweener), + result.fill_scale[1] = do_tween(time, source.fill_scale[1], dest.fill_scale[1], duration, tweener); + result.clip_translation[0] = do_tween(time, source.clip_translation[0], dest.clip_translation[0], duration, tweener), + result.clip_translation[1] = do_tween(time, source.clip_translation[1], dest.clip_translation[1], duration, tweener); + result.clip_scale[0] = do_tween(time, source.clip_scale[0], dest.clip_scale[0], duration, tweener), + result.clip_scale[1] = do_tween(time, source.clip_scale[1], dest.clip_scale[1], duration, tweener); + result.levels.max_input = do_tween(time, source.levels.max_input, dest.levels.max_input, duration, tweener); + result.levels.min_input = do_tween(time, source.levels.min_input, dest.levels.min_input, duration, tweener); + result.levels.max_output = do_tween(time, source.levels.max_output, dest.levels.max_output, duration, tweener); + result.levels.min_output = do_tween(time, source.levels.min_output, dest.levels.min_output, duration, tweener); + result.levels.gamma = do_tween(time, source.levels.gamma, dest.levels.gamma, duration, tweener); + result.field_mode = static_cast(source.field_mode & dest.field_mode); + result.is_key = source.is_key | dest.is_key; return result; } diff --git a/core/producer/frame/frame_transform.h b/core/producer/frame/frame_transform.h index 512e9a20e..0fde0ec44 100644 --- a/core/producer/frame/frame_transform.h +++ b/core/producer/frame/frame_transform.h @@ -54,15 +54,14 @@ public: double volume; double opacity; - double gain; double contrast; double brightness; double saturation; - levels levels; boost::array fill_translation; boost::array fill_scale; boost::array clip_translation; boost::array clip_scale; + levels levels; field_mode::type field_mode; bool is_key; -- 2.39.2