]> git.sesse.net Git - casparcg/commitdiff
[mixer] #600 Removed is_still handling completely which fixes the incorrect 25p anima... origin/2.1.0
authorHelge Norberg <helge.norberg@svt.se>
Mon, 24 Apr 2017 18:10:06 +0000 (20:10 +0200)
committerHelge Norberg <helge.norberg@svt.se>
Mon, 24 Apr 2017 18:10:06 +0000 (20:10 +0200)
accelerator/cpu/image/image_mixer.cpp
accelerator/ogl/image/image_mixer.cpp
core/frame/draw_frame.cpp
core/frame/frame_transform.cpp
core/frame/frame_transform.h

index 9a4fca32673d41da1f20549403f34acfe9ea9f9f..0fa41502392709a58880d3f45e870817abfb53e5 100644 (file)
@@ -161,19 +161,6 @@ public:
 
                convert(items, format_desc.width, format_desc.height);
 
-               // Remove first field stills.
-               boost::range::remove_erase_if(items, [&](const item& item)
-               {
-                       return item.transform.is_still && item.transform.field_mode == format_desc.field_mode; // only us last field for stills.
-               });
-
-               // Stills are progressive
-               for (auto& item : items)
-               {
-                       if(item.transform.is_still)
-                               item.transform.field_mode = core::field_mode::progressive;
-               }
-
                auto result = spl::make_shared<buffer>(format_desc.size, 0);
                if(format_desc.field_mode != core::field_mode::progressive)
                {
index fd1f854d43e854ba21952ae7d6918e21d9d26d96..1e7ce2784dfae3bef9df157043ed9ec437947dcc 100644 (file)
@@ -98,25 +98,6 @@ public:
                        return make_ready_future(array<const std::uint8_t>(buffer.data(), format_desc.size, true));
                }
 
-               if(format_desc.field_mode != core::field_mode::progressive)
-               { // Remove jitter from still.
-                       for (auto& layer : layers)
-                       {
-                               // Remove first field stills.
-                               boost::range::remove_erase_if(layer.items, [&](const item& item)
-                               {
-                                       return item.transform.is_still && item.transform.field_mode == format_desc.field_mode; // only us last field for stills.
-                               });
-
-                               // Stills are progressive
-                               for (auto& item : layer.items)
-                               {
-                                       if(item.transform.is_still)
-                                               item.transform.field_mode = core::field_mode::progressive;
-                               }
-                       }
-               }
-
                return flatten(ogl_->begin_invoke([=]() mutable -> std::shared_future<array<const std::uint8_t>>
                {
                        auto target_texture = ogl_->create_texture(format_desc.width, format_desc.height, 4, false);
index 7284a8d7e5748d144433a7f5b65beab8d5e115ec..f5e2d26bc70930c50eb6696e1309fc2f5cfd3ac6 100644 (file)
@@ -26,7 +26,7 @@
 #include "frame_transform.h"
 
 namespace caspar { namespace core {
-               
+
 enum class tags
 {
        frame_tag = 0,
@@ -36,22 +36,22 @@ enum class tags
 };
 
 struct draw_frame::impl
-{              
+{
        std::shared_ptr<const_frame>    frame_;
        std::vector<draw_frame>                 frames_;
        core::frame_transform                   frame_transform_;
-public:                
+public:
 
        impl()
        {
        }
 
-       impl(const_frame&& frame) 
+       impl(const_frame&& frame)
                : frame_(new const_frame(std::move(frame)))
        {
        }
-       
-       impl(mutable_frame&& frame) 
+
+       impl(mutable_frame&& frame)
                : frame_(new const_frame(std::move(frame)))
        {
        }
@@ -67,7 +67,7 @@ public:
                , frame_transform_(other.frame_transform_)
        {
        }
-                       
+
        void accept(frame_visitor& visitor) const
        {
                visitor.push(frame_transform_);
@@ -81,11 +81,11 @@ public:
                                frame.accept(visitor);
                }
                visitor.pop();
-       }       
-               
+       }
+
        bool operator==(const impl& other)
        {
-               return  frames_                         == other.frames_ && 
+               return  frames_                         == other.frames_ &&
                                frame_                          == other.frame_ &&
                                frame_transform_        == other.frame_transform_;
        }
@@ -106,7 +106,7 @@ public:
                return result;
        }
 };
-       
+
 draw_frame::draw_frame() : impl_(new impl()){}
 draw_frame::draw_frame(const draw_frame& other) : impl_(new impl(*other.impl_)){}
 draw_frame::draw_frame(draw_frame&& other) : impl_(std::move(other.impl_)){}
@@ -129,22 +129,22 @@ bool draw_frame::operator==(const draw_frame& other)const{return *impl_ == *othe
 bool draw_frame::operator!=(const draw_frame& other)const{return !(*this == other);}
 
 draw_frame draw_frame::interlace(draw_frame frame1, draw_frame frame2, core::field_mode mode)
-{                              
+{
        if(frame1 == draw_frame::empty() && frame2 == draw_frame::empty())
                return draw_frame::empty();
-       
+
        if(frame1 == frame2 || mode == field_mode::progressive)
                return frame2;
 
        if(mode == field_mode::upper)
        {
-               frame1.transform().image_transform.field_mode = field_mode::upper;      
-               frame2.transform().image_transform.field_mode = field_mode::lower;      
-       }                                                                        
-       else                                                             
-       {                                                                        
-               frame1.transform().image_transform.field_mode = field_mode::lower;      
-               frame2.transform().image_transform.field_mode = field_mode::upper;      
+               frame1.transform().image_transform.field_mode = field_mode::upper;
+               frame2.transform().image_transform.field_mode = field_mode::lower;
+       }
+       else
+       {
+               frame1.transform().image_transform.field_mode = field_mode::lower;
+               frame2.transform().image_transform.field_mode = field_mode::upper;
        }
 
        std::vector<draw_frame> frames;
@@ -154,7 +154,7 @@ draw_frame draw_frame::interlace(draw_frame frame1, draw_frame frame2, core::fie
 }
 
 draw_frame draw_frame::over(draw_frame frame1, draw_frame frame2)
-{              
+{
        if(frame1 == draw_frame::empty() && frame2 == draw_frame::empty())
                return draw_frame::empty();
 
@@ -165,7 +165,7 @@ draw_frame draw_frame::over(draw_frame frame1, draw_frame frame2)
 }
 
 draw_frame draw_frame::mask(draw_frame fill, draw_frame key)
-{      
+{
        if(fill == draw_frame::empty() || key == draw_frame::empty())
                return draw_frame::empty();
 
@@ -189,8 +189,7 @@ draw_frame late_frame(const_frame(0));
 
 draw_frame draw_frame::still(draw_frame frame)
 {
-       frame.transform().image_transform.is_still = true;      
-       frame.transform().audio_transform.is_still = true;              
+       frame.transform().audio_transform.is_still = true;
        return frame;
 }
 
@@ -203,6 +202,6 @@ const draw_frame& draw_frame::late()
 {
        return late_frame;
 }
-       
+
 
 }}
index aba667b59324e8fa71ad9e9d690ad36c30c470e4..a7a4ea186ea7f0f354d57035f64f315d36844ee4 100644 (file)
@@ -103,7 +103,6 @@ image_transform& image_transform::operator*=(const image_transform &other)
        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;
@@ -176,7 +175,6 @@ image_transform image_transform::tween(double time, const image_transform& sourc
        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;
@@ -224,7 +222,6 @@ bool operator==(const image_transform& lhs, const image_transform& rhs)
                lhs.field_mode == rhs.field_mode &&
                lhs.is_key == rhs.is_key &&
                lhs.is_mix == rhs.is_mix &&
-               lhs.is_still == rhs.is_still &&
                lhs.use_mipmap == rhs.use_mipmap &&
                lhs.blend_mode == rhs.blend_mode &&
                lhs.layer_depth == rhs.layer_depth &&
index 4bea1ca88042667dec2ef864b13d37b9ec4f4b10..c73ac29bb15aaa48514056a39a0f7745c9c839b1 100644 (file)
@@ -100,7 +100,6 @@ struct image_transform final
        core::field_mode                field_mode                      = core::field_mode::progressive;
        bool                                    is_key                          = false;
        bool                                    is_mix                          = false;
-       bool                                    is_still                        = false;
        bool                                    use_mipmap                      = false;
        core::blend_mode                blend_mode                      = core::blend_mode::normal;
        int                                             layer_depth                     = 0;