]> git.sesse.net Git - casparcg/commitdiff
2.0. video_format: Renamed video_mode to field_mode. image_mixer: Refactored field...
authorRonag <Ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sat, 20 Aug 2011 21:27:09 +0000 (21:27 +0000)
committerRonag <Ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sat, 20 Aug 2011 21:27:09 +0000 (21:27 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.0.2@1242 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

20 files changed:
core/mixer/image/image_kernel.cpp
core/mixer/image/image_kernel.h
core/mixer/image/image_mixer.cpp
core/mixer/mixer.cpp
core/mixer/write_frame.cpp
core/mixer/write_frame.h
core/producer/frame/basic_frame.cpp
core/producer/frame/basic_frame.h
core/producer/frame/image_transform.cpp
core/producer/frame/image_transform.h
core/producer/transition/transition_producer.cpp
core/producer/transition/transition_producer.h
core/video_format.cpp
core/video_format.h
modules/decklink/producer/decklink_producer.cpp
modules/ffmpeg/producer/frame_muxer.cpp
modules/ffmpeg/producer/util.cpp
modules/ffmpeg/producer/util.h
modules/flash/producer/flash_producer.cpp
shell/casparcg.config

index 4a837172d2581cb08d3e103fdfa1e55c04c0f515..b4505d06510c49225bb9dcba647166d7b6676607 100644 (file)
@@ -63,7 +63,7 @@ struct image_kernel::implementation : boost::noncopyable
                                                        \r
        void draw(ogl_device&                                                                   ogl,\r
                          render_item&&                                                                 item,\r
-                         const safe_ptr<device_buffer>&                                background,\r
+                         device_buffer&                                                                background,\r
                          const std::shared_ptr<device_buffer>&                 local_key,                        \r
                          const std::shared_ptr<device_buffer>&                 layer_key)\r
        {\r
@@ -120,7 +120,7 @@ struct image_kernel::implementation : boost::noncopyable
 \r
                if(blend_modes_)\r
                {\r
-                       background->bind(6);\r
+                       background.bind(6);\r
 \r
                        shader_->set("background",      texture_id::background);\r
                        shader_->set("blend_mode",      item.blend_mode);\r
@@ -174,21 +174,21 @@ struct image_kernel::implementation : boost::noncopyable
                \r
                // Setup interlacing\r
 \r
-               if(item.mode == core::video_mode::progressive)                  \r
+               if(item.transform.get_field_mode() == core::field_mode::progressive)                    \r
                        ogl.disable(GL_POLYGON_STIPPLE);                        \r
                else                    \r
                {\r
                        ogl.enable(GL_POLYGON_STIPPLE);\r
 \r
-                       if(item.mode == core::video_mode::upper)\r
+                       if(item.transform.get_field_mode() == core::field_mode::upper)\r
                                ogl.stipple_pattern(upper_pattern);\r
-                       else if(item.mode == core::video_mode::lower)\r
+                       else if(item.transform.get_field_mode() == core::field_mode::lower)\r
                                ogl.stipple_pattern(lower_pattern);\r
                }\r
 \r
                // Setup drawing area\r
                \r
-               ogl.viewport(0, 0, background->width(), background->height());\r
+               ogl.viewport(0, 0, background.width(), background.height());\r
                                                                \r
                auto m_p = item.transform.get_clip_translation();\r
                auto m_s = item.transform.get_clip_scale();\r
@@ -198,8 +198,8 @@ struct image_kernel::implementation : boost::noncopyable
 \r
                if(scissor)\r
                {\r
-                       double w = static_cast<double>(background->width());\r
-                       double h = static_cast<double>(background->height());\r
+                       double w = static_cast<double>(background.width());\r
+                       double h = static_cast<double>(background.height());\r
                \r
                        ogl.enable(GL_SCISSOR_TEST);\r
                        ogl.scissor(static_cast<size_t>(m_p[0]*w), static_cast<size_t>(m_p[1]*h), static_cast<size_t>(m_s[0]*w), static_cast<size_t>(m_s[1]*h));\r
@@ -210,7 +210,7 @@ struct image_kernel::implementation : boost::noncopyable
                \r
                // Set render target\r
                \r
-               ogl.attach(*background);\r
+               ogl.attach(background);\r
                \r
                // Draw\r
 \r
@@ -240,7 +240,7 @@ struct image_kernel::implementation : boost::noncopyable
 image_kernel::image_kernel() : impl_(new implementation()){}\r
 void image_kernel::draw(ogl_device& ogl, \r
                                                render_item&& item, \r
-                                               const safe_ptr<device_buffer>& background,\r
+                                               device_buffer& background,\r
                                                const std::shared_ptr<device_buffer>& local_key, \r
                                                const std::shared_ptr<device_buffer>& layer_key)\r
 {\r
@@ -249,7 +249,7 @@ void image_kernel::draw(ogl_device& ogl,
 \r
 bool operator==(const render_item& lhs, const render_item& rhs)\r
 {\r
-       return lhs.textures == rhs.textures && lhs.transform == rhs.transform && lhs.tag == rhs.tag && lhs.mode == rhs.mode;\r
+       return lhs.textures == rhs.textures && lhs.transform == rhs.transform && lhs.tag == rhs.tag;\r
 }\r
 \r
 }}
\ No newline at end of file
index 6ef4d33071c6f9f8f4795f93749ed6da877f9eba..6b0fd32ef7355d5bd8385579a3fa8c825173a483 100644 (file)
@@ -38,7 +38,6 @@ struct render_item
        pixel_format_desc                                               pix_desc;\r
        std::vector<safe_ptr<device_buffer>>    textures;\r
        image_transform                                                 transform;\r
-       video_mode::type                                                mode;\r
        const void*                                                             tag;\r
        blend_mode::type                                                blend_mode;\r
 };\r
@@ -51,7 +50,7 @@ public:
        image_kernel();\r
        void draw(ogl_device& ogl, \r
                          render_item&& item, \r
-                         const safe_ptr<device_buffer>& background, \r
+                         device_buffer& background, \r
                          const std::shared_ptr<device_buffer>& local_key = nullptr, \r
                          const std::shared_ptr<device_buffer>& layer_key = nullptr);\r
 private:\r
index cc4da64ba883b44a99f50b34093a822d9b442b50..906ceea5a9fc84cda7d5fdbbb60debee5e8b96ca 100644 (file)
@@ -57,7 +57,6 @@ struct image_mixer::implementation : boost::noncopyable
        video_channel_context&                                  channel_;\r
 \r
        std::vector<image_transform>                    transform_stack_;\r
-       std::vector<video_mode::type>                   video_mode_stack_;\r
        std::stack<blend_mode::type>                    blend_mode_stack_;\r
 \r
        std::deque<std::deque<render_item>>             layers_; // layer/stream/items\r
@@ -69,7 +68,6 @@ public:
        implementation(video_channel_context& video_channel) \r
                : channel_(video_channel)\r
                , transform_stack_(1)\r
-               , video_mode_stack_(1, video_mode::progressive)\r
        {\r
        }\r
 \r
@@ -81,22 +79,17 @@ public:
        void begin(core::basic_frame& frame)\r
        {\r
                transform_stack_.push_back(transform_stack_.back()*frame.get_image_transform());\r
-               video_mode_stack_.push_back(frame.get_mode() == video_mode::progressive ? video_mode_stack_.back() : frame.get_mode());\r
        }\r
                \r
        void visit(core::write_frame& frame)\r
        {       \r
-               CASPAR_ASSERT(!layers_.empty());\r
-\r
-               // Check if frame has been discarded by interlacing\r
-               if(boost::range::find(video_mode_stack_, video_mode::upper) != video_mode_stack_.end() && boost::range::find(video_mode_stack_, video_mode::lower) != video_mode_stack_.end())\r
+               if(transform_stack_.back().get_field_mode() == field_mode::empty)\r
                        return;\r
                \r
                core::render_item item;\r
                item.pix_desc           = frame.get_pixel_format_desc();\r
                item.textures           = frame.get_textures();\r
                item.transform          = transform_stack_.back();\r
-               item.mode                       = video_mode_stack_.back();\r
                item.tag                        = frame.tag();\r
                item.blend_mode         = blend_mode_stack_.top();      \r
 \r
@@ -108,7 +101,6 @@ public:
        void end()\r
        {\r
                transform_stack_.pop_back();\r
-               video_mode_stack_.pop_back();\r
        }\r
 \r
        void begin_layer(blend_mode::type blend_mode)\r
@@ -168,15 +160,15 @@ public:
                        int fields = 0;\r
                        BOOST_FOREACH(auto& item, layer)\r
                        {\r
-                               if(fields & item.mode)\r
+                               if(fields & item.transform.get_field_mode())\r
                                        item.blend_mode = blend_mode::normal; // Disable blending, it will be used when merging back into render stack.\r
                                else\r
                                {\r
                                        item.blend_mode = blend_mode::replace; // Target field is empty, no blending, just copy\r
-                                       fields |= item.mode;\r
+                                       fields |= item.transform.get_field_mode();\r
                                }\r
 \r
-                               draw_item(std::move(item), local_draw_buffer, local_key_buffer, layer_key_buffer);              \r
+                               draw_item(std::move(item), *local_draw_buffer, local_key_buffer, layer_key_buffer);             \r
                        }\r
                        \r
                        render_item item;\r
@@ -185,21 +177,21 @@ public:
                        item.textures.push_back(local_draw_buffer);\r
                        item.blend_mode = local_blend_mode;\r
 \r
-                       kernel_.draw(channel_.ogl(), std::move(item), draw_buffer, nullptr, nullptr);\r
+                       kernel_.draw(channel_.ogl(), std::move(item), *draw_buffer, nullptr, nullptr);\r
                }\r
                else // fast path\r
                {\r
                        BOOST_FOREACH(auto& item, layer)                \r
-                               draw_item(std::move(item), draw_buffer, local_key_buffer, layer_key_buffer);            \r
+                               draw_item(std::move(item), *draw_buffer, local_key_buffer, layer_key_buffer);           \r
                }                                       \r
 \r
-               CASPAR_ASSERT(local_key_buffer.first == 0 || local_key_buffer.first == core::video_mode::progressive);\r
+               CASPAR_ASSERT(local_key_buffer.first == 0 || local_key_buffer.first == core::field_mode::progressive);\r
 \r
                std::swap(local_key_buffer.second, layer_key_buffer);\r
        }\r
 \r
        void draw_item(render_item&&                                                                    item, \r
-                                  const safe_ptr<device_buffer>&                                       draw_buffer, \r
+                                  device_buffer&                                                                       draw_buffer, \r
                                   std::pair<int, std::shared_ptr<device_buffer>>&      local_key_buffer, \r
                                   std::shared_ptr<device_buffer>&                                      layer_key_buffer)\r
        {                                                                                       \r
@@ -211,13 +203,13 @@ public:
                                local_key_buffer.second = create_device_buffer(1);\r
                        }\r
                        \r
-                       local_key_buffer.first |= item.mode; // Add field to flag.\r
-                       kernel_.draw(channel_.ogl(), std::move(item), make_safe(local_key_buffer.second), nullptr, nullptr);\r
+                       local_key_buffer.first |= item.transform.get_field_mode(); // Add field to flag.\r
+                       kernel_.draw(channel_.ogl(), std::move(item), *local_key_buffer.second, nullptr, nullptr);\r
                }\r
                else\r
                {\r
                        kernel_.draw(channel_.ogl(), std::move(item), draw_buffer, local_key_buffer.second, layer_key_buffer);\r
-                       local_key_buffer.first ^= item.mode; // Remove field from flag.\r
+                       local_key_buffer.first ^= item.transform.get_field_mode(); // Remove field from flag.\r
                        \r
                        if(local_key_buffer.first == 0) // If all fields from key has been used, reset it\r
                        {\r
index e06bd2df1c9ff0c5fb0e7c1f86d8a02b6f11b17e..c663d7d2250cdb222a3f35b585b102dcbd361c4e 100644 (file)
@@ -210,7 +210,7 @@ private:
                        auto frame1 = make_safe<core::basic_frame>(frame.second);\r
                        frame1->get_image_transform() = image_transforms[frame.first].fetch_and_tick(1);\r
                                                \r
-                       if(channel_.get_format_desc().mode != core::video_mode::progressive)\r
+                       if(channel_.get_format_desc().mode != core::field_mode::progressive)\r
                        {\r
                                auto frame2 = make_safe<core::basic_frame>(frame.second);\r
                                frame2->get_image_transform() = image_transforms[frame.first].fetch_and_tick(1);\r
@@ -232,7 +232,7 @@ private:
 \r
                BOOST_FOREACH(auto& frame, frames)\r
                {\r
-                       const unsigned int num = channel_.get_format_desc().mode == core::video_mode::progressive ? 1 : 2;\r
+                       const unsigned int num = channel_.get_format_desc().mode == core::field_mode::progressive ? 1 : 2;\r
 \r
                        auto frame1 = make_safe<core::basic_frame>(frame.second);\r
                        frame1->get_audio_transform() = audio_transforms[frame.first].fetch_and_tick(num);\r
index 1bb3a8a5d5e964536c2a6e7d532b880c04c9ea33..9bd533b099c004c6b62ebd5bc45607e63f7ee2b3 100644 (file)
@@ -40,7 +40,7 @@ struct write_frame::implementation
        std::vector<int16_t>                                            audio_data_;\r
        const core::pixel_format_desc                           desc_;\r
        const void*                                                                     tag_;\r
-       core::video_mode::type                                          mode_;\r
+       core::field_mode::type                                          mode_;\r
 \r
        implementation(const void* tag)\r
                : tag_(tag)\r
@@ -51,7 +51,7 @@ struct write_frame::implementation
                : ogl_(&ogl)\r
                , desc_(desc)\r
                , tag_(tag)\r
-               , mode_(core::video_mode::progressive)\r
+               , mode_(core::field_mode::progressive)\r
        {\r
                ogl_->invoke([&]\r
                {\r
@@ -156,8 +156,8 @@ const core::pixel_format_desc& write_frame::get_pixel_format_desc() const{return
 const std::vector<safe_ptr<device_buffer>>& write_frame::get_textures() const{return impl_->textures_;}\r
 void write_frame::commit(size_t plane_index){impl_->commit(plane_index);}\r
 void write_frame::commit(){impl_->commit();}\r
-void write_frame::set_type(const video_mode::type& mode){impl_->mode_ = mode;}\r
-core::video_mode::type write_frame::get_type() const{return impl_->mode_;}\r
+void write_frame::set_type(const field_mode::type& mode){impl_->mode_ = mode;}\r
+core::field_mode::type write_frame::get_type() const{return impl_->mode_;}\r
 \r
 std::wstring write_frame::print() const{return impl_->print();}\r
 void write_frame::accept(core::frame_visitor& visitor){impl_->accept(*this, visitor);}\r
index 083e636ce1e40976dc33ee66de94a7ae4395c670..6566fe83894f3b4cec427a907be26d2605861e3c 100644 (file)
@@ -60,8 +60,8 @@ public:
        void commit(uint32_t plane_index);\r
        void commit();\r
        \r
-       void set_type(const core::video_mode::type& mode);\r
-       core::video_mode::type get_type() const;\r
+       void set_type(const core::field_mode::type& mode);\r
+       core::field_mode::type get_type() const;\r
        \r
        const void* tag() const;\r
 \r
index 1eed000ac3b5eb87e21fd685f06ec0eaae70a4e7..c2669c0f909965bedb81a44d8ce1d0429c5f5675 100644 (file)
@@ -35,25 +35,19 @@ struct basic_frame::implementation
 \r
        image_transform image_transform_;       \r
        audio_transform audio_transform_;\r
-\r
-       core::video_mode::type mode_;\r
        \r
 public:\r
-       implementation(const std::vector<safe_ptr<basic_frame>>& frames) \r
-               : mode_(core::video_mode::progressive), frames_(frames) \r
+       implementation(const std::vector<safe_ptr<basic_frame>>& frames) : frames_(frames) \r
        {\r
        }\r
-       implementation(std::vector<safe_ptr<basic_frame>>&& frames) \r
-               : mode_(core::video_mode::progressive), frames_(std::move(frames))\r
+       implementation(std::vector<safe_ptr<basic_frame>>&& frames) : frames_(std::move(frames))\r
        {\r
        }\r
        implementation(safe_ptr<basic_frame>&& frame) \r
-               : mode_(core::video_mode::progressive)\r
        {\r
                frames_.push_back(std::move(frame));\r
        }\r
-       implementation(const safe_ptr<basic_frame>& frame) \r
-               : mode_(core::video_mode::progressive)          \r
+       implementation(const safe_ptr<basic_frame>& frame)              \r
        { \r
                frames_.push_back(frame);\r
        }\r
@@ -97,7 +91,6 @@ basic_frame& basic_frame::operator=(basic_frame&& other)
 }\r
 void basic_frame::swap(basic_frame& other){impl_.swap(other.impl_);}\r
 \r
-core::video_mode::type basic_frame::get_mode() const{return impl_->mode_;}\r
 const image_transform& basic_frame::get_image_transform() const { return impl_->image_transform_;}\r
 image_transform& basic_frame::get_image_transform() { return impl_->image_transform_;}\r
 const audio_transform& basic_frame::get_audio_transform() const { return impl_->audio_transform_;}\r
@@ -106,7 +99,7 @@ audio_transform& basic_frame::get_audio_transform() { return impl_->audio_transf
 std::wstring basic_frame::print() const{return impl_->print();}\r
 void basic_frame::accept(frame_visitor& visitor){impl_->accept(*this, visitor);}\r
 \r
-safe_ptr<basic_frame> basic_frame::interlace(const safe_ptr<basic_frame>& frame1, const safe_ptr<basic_frame>& frame2, video_mode::type mode)\r
+safe_ptr<basic_frame> basic_frame::interlace(const safe_ptr<basic_frame>& frame1, const safe_ptr<basic_frame>& frame2, field_mode::type mode)\r
 {                              \r
        if(frame1 == basic_frame::eof() || frame2 == basic_frame::eof())\r
                return basic_frame::eof();\r
@@ -114,20 +107,20 @@ safe_ptr<basic_frame> basic_frame::interlace(const safe_ptr<basic_frame>& frame1
        if(frame1 == basic_frame::empty() && frame2 == basic_frame::empty())\r
                return basic_frame::empty();\r
        \r
-       if(frame1 == frame2 || mode == video_mode::progressive)\r
+       if(frame1 == frame2 || mode == field_mode::progressive)\r
                return frame2;\r
 \r
        auto my_frame1 = make_safe<basic_frame>(frame1);\r
        auto my_frame2 = make_safe<basic_frame>(frame2);\r
-       if(mode == video_mode::upper)\r
+       if(mode == field_mode::upper)\r
        {\r
-               my_frame1->impl_->mode_ = video_mode::upper;    \r
-               my_frame2->impl_->mode_ = video_mode::lower;    \r
+               my_frame1->get_image_transform().set_field_mode(field_mode::upper);     \r
+               my_frame2->get_image_transform().set_field_mode(field_mode::lower);     \r
        }                                                                                        \r
        else                                                                             \r
        {                                                                                        \r
-               my_frame1->impl_->mode_ = video_mode::lower;    \r
-               my_frame2->impl_->mode_ = video_mode::upper;    \r
+               my_frame1->get_image_transform().set_field_mode(field_mode::lower);     \r
+               my_frame2->get_image_transform().set_field_mode(field_mode::upper);     \r
        }\r
 \r
        std::vector<safe_ptr<basic_frame>> frames;\r
index 9f326f2d452be28602cb3eafd1ae148963064938..d68d8e4f650ad2518c6714780638fe972afe7427 100644 (file)
@@ -55,10 +55,8 @@ public:
 \r
        const audio_transform& get_audio_transform() const;\r
        audio_transform& get_audio_transform();\r
-\r
-       core::video_mode::type get_mode() const;\r
-               \r
-       static safe_ptr<basic_frame> interlace(const safe_ptr<basic_frame>& frame1, const safe_ptr<basic_frame>& frame2, video_mode::type mode);\r
+                       \r
+       static safe_ptr<basic_frame> interlace(const safe_ptr<basic_frame>& frame1, const safe_ptr<basic_frame>& frame2, field_mode::type mode);\r
        static safe_ptr<basic_frame> combine(const safe_ptr<basic_frame>& frame1, const safe_ptr<basic_frame>& frame2);\r
        static safe_ptr<basic_frame> fill_and_key(const safe_ptr<basic_frame>& fill, const safe_ptr<basic_frame>& key);\r
                \r
index 369da5891c1f29e27574f5fe0e46bd3e0f382f42..9d78faa7b0f6c54e1f91d06a437b82a94277a398 100644 (file)
@@ -32,6 +32,7 @@ image_transform::image_transform()
        , contrast_(1.0)\r
        , saturation_(1.0)\r
        , is_key_(false)\r
+       , field_mode_(field_mode::progressive)\r
 {\r
        std::fill(fill_translation_.begin(), fill_translation_.end(), 0.0);\r
        std::fill(fill_scale_.begin(), fill_scale_.end(), 1.0);\r
@@ -134,6 +135,16 @@ std::array<double, 2> image_transform::get_clip_scale() const
        return clip_scale_;\r
 }\r
 \r
+void image_transform::set_field_mode(field_mode::type field_mode)\r
+{\r
+       field_mode_ = field_mode;\r
+}\r
+\r
+field_mode::type image_transform::get_field_mode() const\r
+{\r
+       return field_mode_;\r
+}\r
+\r
 image_transform& image_transform::operator*=(const image_transform &other)\r
 {\r
        opacity_                                *= other.opacity_;      \r
@@ -149,6 +160,7 @@ image_transform& image_transform::operator*=(const image_transform &other)
 \r
        levels_.gamma                   *= other.levels_.gamma;\r
 \r
+       field_mode_                             = static_cast<field_mode::type>(field_mode_ & other.field_mode_);\r
        is_key_                                 |= other.is_key_;\r
        fill_translation_[0]    += other.fill_translation_[0]*fill_scale_[0];\r
        fill_translation_[1]    += other.fill_translation_[1]*fill_scale_[1];\r
@@ -178,6 +190,7 @@ image_transform tween(double time, const image_transform& source, const image_tr
        \r
        image_transform result; \r
        result.set_is_key                       (source.get_is_key() | dest.get_is_key());\r
+       result.set_field_mode           (static_cast<field_mode::type>(source.get_field_mode() & dest.get_field_mode()));\r
        result.set_brightness           (do_tween(time, source.get_brightness(), dest.get_brightness(), duration, tweener));\r
        result.set_contrast                     (do_tween(time, source.get_contrast(), dest.get_contrast(), duration, tweener));\r
        result.set_saturation           (do_tween(time, source.get_saturation(), dest.get_saturation(), duration, tweener));\r
index f116d383e27cdf2d4ef7810c3d29850726fe254e..385aeb09493f38a2d933cf3aaacc18f9b2a3d9a4 100644 (file)
@@ -84,6 +84,9 @@ public:
 \r
        void set_is_key(bool value);\r
        bool get_is_key() const;\r
+\r
+       void set_field_mode(field_mode::type field_mode);\r
+       field_mode::type get_field_mode() const;\r
                \r
 private:\r
        double opacity_;\r
@@ -97,7 +100,7 @@ private:
        std::array<double, 2> fill_scale_; \r
        std::array<double, 2> clip_translation_; \r
        std::array<double, 2> clip_scale_; \r
-       video_mode::type mode_;\r
+       field_mode::type field_mode_;\r
        bool is_key_;\r
 };\r
 \r
index 6fe58ec62ebc9578d7e7ee0c8fd79a0165b8efee..f0ad622ef70d87cec302e2edecd4ab0c5d1bb9c1 100644 (file)
@@ -33,7 +33,7 @@ namespace caspar { namespace core {
 \r
 struct transition_producer : public frame_producer\r
 {      \r
-       const video_mode::type          mode_;\r
+       const field_mode::type          mode_;\r
        unsigned int                            current_frame_;\r
        \r
        const transition_info           info_;\r
@@ -43,7 +43,7 @@ struct transition_producer : public frame_producer
 \r
        safe_ptr<basic_frame>           last_frame_;\r
                \r
-       explicit transition_producer(const video_mode::type& mode, const safe_ptr<frame_producer>& dest, const transition_info& info) \r
+       explicit transition_producer(const field_mode::type& mode, const safe_ptr<frame_producer>& dest, const transition_info& info) \r
                : mode_(mode)\r
                , current_frame_(0)\r
                , info_(info)\r
@@ -165,7 +165,7 @@ struct transition_producer : public frame_producer
        }\r
 };\r
 \r
-safe_ptr<frame_producer> create_transition_producer(const video_mode::type& mode, const safe_ptr<frame_producer>& destination, const transition_info& info)\r
+safe_ptr<frame_producer> create_transition_producer(const field_mode::type& mode, const safe_ptr<frame_producer>& destination, const transition_info& info)\r
 {\r
        return make_safe<transition_producer>(mode, destination, info);\r
 }\r
index 56d9fd6e57b12b583bf58b80b8df54270e34e842..19ec9248dc0caedc34ff0bb168652f792f80af67 100644 (file)
@@ -65,6 +65,6 @@ struct transition_info
        tweener_t                                       tweener;\r
 };\r
 \r
-safe_ptr<frame_producer> create_transition_producer(const video_mode::type& mode, const safe_ptr<frame_producer>& destination, const transition_info& info);\r
+safe_ptr<frame_producer> create_transition_producer(const field_mode::type& mode, const safe_ptr<frame_producer>& destination, const transition_info& info);\r
 \r
 }}
\ No newline at end of file
index 56e7502cb94b6817567fa135a7855ed9590e0eb1..c7ed5ccafbdd3f8088fafb12a44d8fc09a9b5a97 100644 (file)
@@ -33,7 +33,7 @@
        ((double)scale/(double)duration),\\r
        (scale),\\r
        (duration),\\r
-       (m == video_mode::progressive ? 1 : 2),\\r
+       (m == field_mode::progressive ? 1 : 2),\\r
        ((w)*(h)*4),\\r
        (name),\\r
        (2),\\r
@@ -46,23 +46,23 @@ namespace caspar { namespace core {
        \r
 const video_format_desc format_descs[video_format::count] =  \r
 {                                                                         \r
-       DEFINE_VIDEOFORMATDESC(video_format::pal                ,720,  576,  video_mode::upper,                 25,             1,              L"PAL"), \r
-       DEFINE_VIDEOFORMATDESC(video_format::ntsc               ,720,  486,  video_mode::lower,                 30000,  1001,   L"NTSC"), \r
-       DEFINE_VIDEOFORMATDESC(video_format::x576p2500  ,720,  576,  video_mode::progressive,   25,             1,              L"576p2500"),\r
-       DEFINE_VIDEOFORMATDESC(video_format::x720p2500  ,1280, 720,  video_mode::progressive,   25,             1,              L"720p2500"), \r
-       DEFINE_VIDEOFORMATDESC(video_format::x720p5000  ,1280, 720,  video_mode::progressive,   50,             1,              L"720p5000"), \r
-       DEFINE_VIDEOFORMATDESC(video_format::x720p5994  ,1280, 720,  video_mode::progressive,   60000,  1001,   L"720p5994"),\r
-       DEFINE_VIDEOFORMATDESC(video_format::x720p6000  ,1280, 720,  video_mode::progressive,   60,             1,              L"720p6000"),\r
-       DEFINE_VIDEOFORMATDESC(video_format::x1080p2397 ,1920, 1080, video_mode::progressive,   24000,  1001,   L"1080p2398"),\r
-       DEFINE_VIDEOFORMATDESC(video_format::x1080p2400 ,1920, 1080, video_mode::progressive,   24,             1,              L"1080p2400"),\r
-       DEFINE_VIDEOFORMATDESC(video_format::x1080i5000 ,1920, 1080, video_mode::upper,                 25,             1,              L"1080i5000"),\r
-       DEFINE_VIDEOFORMATDESC(video_format::x1080i5994 ,1920, 1080, video_mode::upper,                 30000,  1001,   L"1080i5994"),\r
-       DEFINE_VIDEOFORMATDESC(video_format::x1080i6000 ,1920, 1080, video_mode::upper,                 30,             1,              L"1080i6000"),\r
-       DEFINE_VIDEOFORMATDESC(video_format::x1080p2500 ,1920, 1080, video_mode::progressive,   25,             1,              L"1080p2500"),\r
-       DEFINE_VIDEOFORMATDESC(video_format::x1080p2997 ,1920, 1080, video_mode::progressive,   30000,  1001,   L"1080p2997"),\r
-       DEFINE_VIDEOFORMATDESC(video_format::x1080p3000 ,1920, 1080, video_mode::progressive,   30,             1,              L"1080p3000"),\r
-       DEFINE_VIDEOFORMATDESC(video_format::x1080p5000 ,1920, 1080, video_mode::progressive,   50,             1,              L"1080p5000"),\r
-       DEFINE_VIDEOFORMATDESC(video_format::invalid    ,0,             0,   video_mode::progressive,   1,              1,              L"invalid")\r
+       DEFINE_VIDEOFORMATDESC(video_format::pal                ,720,  576,  field_mode::upper,                 25,             1,              L"PAL"), \r
+       DEFINE_VIDEOFORMATDESC(video_format::ntsc               ,720,  486,  field_mode::lower,                 30000,  1001,   L"NTSC"), \r
+       DEFINE_VIDEOFORMATDESC(video_format::x576p2500  ,720,  576,  field_mode::progressive,   25,             1,              L"576p2500"),\r
+       DEFINE_VIDEOFORMATDESC(video_format::x720p2500  ,1280, 720,  field_mode::progressive,   25,             1,              L"720p2500"), \r
+       DEFINE_VIDEOFORMATDESC(video_format::x720p5000  ,1280, 720,  field_mode::progressive,   50,             1,              L"720p5000"), \r
+       DEFINE_VIDEOFORMATDESC(video_format::x720p5994  ,1280, 720,  field_mode::progressive,   60000,  1001,   L"720p5994"),\r
+       DEFINE_VIDEOFORMATDESC(video_format::x720p6000  ,1280, 720,  field_mode::progressive,   60,             1,              L"720p6000"),\r
+       DEFINE_VIDEOFORMATDESC(video_format::x1080p2397 ,1920, 1080, field_mode::progressive,   24000,  1001,   L"1080p2398"),\r
+       DEFINE_VIDEOFORMATDESC(video_format::x1080p2400 ,1920, 1080, field_mode::progressive,   24,             1,              L"1080p2400"),\r
+       DEFINE_VIDEOFORMATDESC(video_format::x1080i5000 ,1920, 1080, field_mode::upper,                 25,             1,              L"1080i5000"),\r
+       DEFINE_VIDEOFORMATDESC(video_format::x1080i5994 ,1920, 1080, field_mode::upper,                 30000,  1001,   L"1080i5994"),\r
+       DEFINE_VIDEOFORMATDESC(video_format::x1080i6000 ,1920, 1080, field_mode::upper,                 30,             1,              L"1080i6000"),\r
+       DEFINE_VIDEOFORMATDESC(video_format::x1080p2500 ,1920, 1080, field_mode::progressive,   25,             1,              L"1080p2500"),\r
+       DEFINE_VIDEOFORMATDESC(video_format::x1080p2997 ,1920, 1080, field_mode::progressive,   30000,  1001,   L"1080p2997"),\r
+       DEFINE_VIDEOFORMATDESC(video_format::x1080p3000 ,1920, 1080, field_mode::progressive,   30,             1,              L"1080p3000"),\r
+       DEFINE_VIDEOFORMATDESC(video_format::x1080p5000 ,1920, 1080, field_mode::progressive,   50,             1,              L"1080p5000"),\r
+       DEFINE_VIDEOFORMATDESC(video_format::invalid    ,0,             0,   field_mode::progressive,   1,              1,              L"invalid")\r
 };\r
 \r
 const video_format_desc& video_format_desc::get(video_format::type format)     \r
index ee510e2f627ebf3f08bd4be0299b77fd2d29f0fb..da8a6565a03b8d8c40d98a9013610f2d7d7a48e1 100644 (file)
@@ -51,16 +51,17 @@ struct video_format
        };\r
 };\r
 \r
-struct video_mode \r
+struct field_mode \r
 { \r
        enum type\r
        {\r
+               empty           = 0,\r
                lower           = 1,\r
                upper           = 2,\r
                progressive = 3 // NOTE: progressive == lower | upper;\r
        };\r
 \r
-       static std::wstring print(video_mode::type value)\r
+       static std::wstring print(field_mode::type value)\r
        {\r
                switch(value)\r
                {\r
@@ -82,7 +83,7 @@ struct video_format_desc
 \r
        size_t                                  width;          // output frame width\r
        size_t                                  height;         // output frame height\r
-       video_mode::type                mode;           // progressive, interlaced upper field first, interlaced lower field first\r
+       field_mode::type                mode;           // progressive, interlaced upper field first, interlaced lower field first\r
        double                                  fps;            // actual framerate, e.g. i50 = 25 fps, p50 = 50 fps\r
        size_t                                  time_scale;\r
        size_t                                  duration;\r
index 54c84152be7b6dd9da1cb8c9d036b2c19f53d17d..c8304bddf07cc2973fddc0fb7e39d50183039eed 100644 (file)
@@ -184,8 +184,8 @@ public:
                        av_frame->format                        = PIX_FMT_UYVY422;\r
                        av_frame->width                         = video->GetWidth();\r
                        av_frame->height                        = video->GetHeight();\r
-                       av_frame->interlaced_frame      = format_desc_.mode != core::video_mode::progressive;\r
-                       av_frame->top_field_first       = format_desc_.mode == core::video_mode::upper ? 1 : 0;\r
+                       av_frame->interlaced_frame      = format_desc_.mode != core::field_mode::progressive;\r
+                       av_frame->top_field_first       = format_desc_.mode == core::field_mode::upper ? 1 : 0;\r
                                        \r
                        BOOST_FOREACH(auto& av_frame2, filter_.execute(av_frame))\r
                                muxer_.push(av_frame2);         \r
index 89c51a68bc5ff1264f8c0a15cea0c7a592d35c49..ff32adb44f5604994d8aab4ac5eedb039d10e35a 100644 (file)
@@ -82,16 +82,16 @@ struct display_mode
        }\r
 };\r
 \r
-display_mode::type get_display_mode(const core::video_mode::type in_mode, double in_fps, const core::video_mode::type out_mode, double out_fps)\r
+display_mode::type get_display_mode(const core::field_mode::type in_mode, double in_fps, const core::field_mode::type out_mode, double out_fps)\r
 {              \r
        static const auto epsilon = 2.0;\r
 \r
        if(in_fps < 20.0 || in_fps > 80.0)\r
        {\r
-               //if(out_mode != core::video_mode::progressive && in_mode == core::video_mode::progressive)\r
+               //if(out_mode != core::field_mode::progressive && in_mode == core::field_mode::progressive)\r
                //      return display_mode::interlace;\r
                \r
-               if(out_mode == core::video_mode::progressive && in_mode != core::video_mode::progressive)\r
+               if(out_mode == core::field_mode::progressive && in_mode != core::field_mode::progressive)\r
                {\r
                        if(in_fps < 35.0)\r
                                return display_mode::deinterlace;\r
@@ -102,29 +102,29 @@ display_mode::type get_display_mode(const core::video_mode::type in_mode, double
 \r
        if(std::abs(in_fps - out_fps) < epsilon)\r
        {\r
-               if(in_mode != core::video_mode::progressive && out_mode == core::video_mode::progressive)\r
+               if(in_mode != core::field_mode::progressive && out_mode == core::field_mode::progressive)\r
                        return display_mode::deinterlace;\r
-               //else if(in_mode == core::video_mode::progressive && out_mode != core::video_mode::progressive)\r
+               //else if(in_mode == core::field_mode::progressive && out_mode != core::field_mode::progressive)\r
                //      simple(); // interlace_duplicate();\r
                else\r
                        return display_mode::simple;\r
        }\r
        else if(std::abs(in_fps/2.0 - out_fps) < epsilon)\r
        {\r
-               if(in_mode != core::video_mode::progressive)\r
+               if(in_mode != core::field_mode::progressive)\r
                        return display_mode::invalid;\r
 \r
-               if(out_mode != core::video_mode::progressive)\r
+               if(out_mode != core::field_mode::progressive)\r
                        return display_mode::interlace;\r
                else\r
                        return display_mode::half;\r
        }\r
        else if(std::abs(in_fps - out_fps/2.0) < epsilon)\r
        {\r
-               if(out_mode != core::video_mode::progressive)\r
+               if(out_mode != core::field_mode::progressive)\r
                        return display_mode::invalid;\r
 \r
-               if(in_mode != core::video_mode::progressive)\r
+               if(in_mode != core::field_mode::progressive)\r
                        return display_mode::deinterlace_bob;\r
                else\r
                        return display_mode::duplicate;\r
@@ -190,7 +190,7 @@ struct frame_muxer::implementation : boost::noncopyable
                                auto in_mode = get_mode(*video_frame);\r
                                display_mode_ = get_display_mode(in_mode, in_fps_, format_desc_.mode, format_desc_.fps);\r
                        \r
-                               if(display_mode_ == display_mode::simple && in_mode != core::video_mode::progressive && format_desc_.mode != core::video_mode::progressive && video_frame->height != static_cast<int>(format_desc_.height))\r
+                               if(display_mode_ == display_mode::simple && in_mode != core::field_mode::progressive && format_desc_.mode != core::field_mode::progressive && video_frame->height != static_cast<int>(format_desc_.height))\r
                                        display_mode_ = display_mode::deinterlace_bob_reinterlace; // The frame will most likely be scaled, we need to deinterlace->reinterlace \r
                                \r
                                if(display_mode_ == display_mode::deinterlace)\r
@@ -225,9 +225,9 @@ struct frame_muxer::implementation : boost::noncopyable
                        auto frame = make_write_frame(this, av_frame, frame_factory_, hints);\r
 \r
                        // Fix field-order if needed\r
-                       if(frame->get_type() == core::video_mode::lower && format_desc_.mode == core::video_mode::upper)\r
+                       if(frame->get_type() == core::field_mode::lower && format_desc_.mode == core::field_mode::upper)\r
                                frame->get_image_transform().set_fill_translation(0.0f, 0.5/static_cast<double>(frame->get_pixel_format_desc().planes[0].height));\r
-                       else if(frame->get_type() == core::video_mode::upper && format_desc_.mode == core::video_mode::lower)\r
+                       else if(frame->get_type() == core::field_mode::upper && format_desc_.mode == core::field_mode::lower)\r
                                frame->get_image_transform().set_fill_translation(0.0f, -0.5/static_cast<double>(frame->get_pixel_format_desc().planes[0].height));\r
 \r
                        video_streams_.back().push(frame);\r
index 8e1d26c48effc3ca49286dacb306395a0eaaf592..5336aca50630a1741d8fb350f686ae23e854461e 100644 (file)
@@ -35,12 +35,12 @@ extern "C"
 \r
 namespace caspar {\r
 \r
-core::video_mode::type get_mode(AVFrame& frame)\r
+core::field_mode::type get_mode(AVFrame& frame)\r
 {\r
        if(!frame.interlaced_frame)\r
-               return core::video_mode::progressive;\r
+               return core::field_mode::progressive;\r
 \r
-       return frame.top_field_first ? core::video_mode::upper : core::video_mode::lower;\r
+       return frame.top_field_first ? core::field_mode::upper : core::field_mode::lower;\r
 }\r
 \r
 core::pixel_format::type get_pixel_format(PixelFormat pix_fmt)\r
index 70b7f2b81e2f258b8e6c27b960dd5d20f1e0e056..67560676c4cf9979012eb5d94e14a7396d857f94 100644 (file)
@@ -25,7 +25,7 @@ struct frame_factory;
 \r
 static const PixelFormat       CASPAR_PIX_FMT_LUMA = PIX_FMT_MONOBLACK; // Just hijack some unual pixel format.\r
 \r
-core::video_mode::type         get_mode(AVFrame& frame);\r
+core::field_mode::type         get_mode(AVFrame& frame);\r
 core::pixel_format::type       get_pixel_format(PixelFormat pix_fmt);\r
 core::pixel_format_desc                get_pixel_format_desc(PixelFormat pix_fmt, size_t width, size_t height);\r
 int                                                    make_alpha_format(int format); // NOTE: Be careful about CASPAR_PIX_FMT_LUMA, change it to PIX_FMT_GRAY8 if you want to use the frame inside some ffmpeg function.\r
index e9338c340bf81c920f49464161c2f8047eb2b92c..2eac9084fc584a7be1dbcb39f810086369dac68d 100644 (file)
@@ -85,7 +85,7 @@ private:
 \r
 struct template_host\r
 {\r
-       std::string  video_mode;\r
+       std::string  field_mode;\r
        std::string  filename;\r
        size_t           width;\r
        size_t           height;\r
@@ -99,7 +99,7 @@ template_host get_template_host(const core::video_format_desc& desc)
                try\r
                {\r
                        template_host template_host;\r
-                       template_host.video_mode                = xml_mapping.second.get("video-mode", narrow(desc.name));\r
+                       template_host.field_mode                = xml_mapping.second.get("video-mode", narrow(desc.name));\r
                        template_host.filename                  = xml_mapping.second.get("filename", "cg.fth");\r
                        template_host.width                             = xml_mapping.second.get("width", desc.width);\r
                        template_host.height                    = xml_mapping.second.get("height", desc.height);\r
@@ -108,9 +108,9 @@ template_host get_template_host(const core::video_format_desc& desc)
                catch(...){}\r
        }\r
 \r
-       auto template_host_it = boost::find_if(template_hosts, [&](template_host template_host){return template_host.video_mode == narrow(desc.name);});\r
+       auto template_host_it = boost::find_if(template_hosts, [&](template_host template_host){return template_host.field_mode == narrow(desc.name);});\r
        if(template_host_it == template_hosts.end())\r
-               template_host_it = boost::find_if(template_hosts, [&](template_host template_host){return template_host.video_mode == "";});\r
+               template_host_it = boost::find_if(template_hosts, [&](template_host template_host){return template_host.field_mode == "";});\r
 \r
        if(template_host_it != template_hosts.end())\r
                return *template_host_it;\r
index 5b6f1bd91b43d90d7eaa2ce824663fd48372a6e9..0b6b9a6cabd76189f784b114fdb25ee3658b62d9 100644 (file)
@@ -49,7 +49,7 @@
   </producers>\r
   <channels>\r
     <channel>\r
-      <video-mode>720p5000</video-mode>\r
+      <video-mode>PAL</video-mode>\r
       <consumers>\r
         <screen>\r
           <key-only>false</key-only>\r