]> git.sesse.net Git - casparcg/commitdiff
2.0.0.2:
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sat, 7 May 2011 21:42:27 +0000 (21:42 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sat, 7 May 2011 21:42:27 +0000 (21:42 +0000)
 flash_producer: Changed underflow handling.

git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.0.2@693 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

modules/decklink/consumer/decklink_consumer.cpp
modules/decklink/producer/decklink_producer.cpp
modules/flash/producer/flash_producer.cpp
shell/caspar.config

index 8e7666a3fecf2f4f515c40ea19416f19c709b3ac..30e1e47b287f66b081af92c87055f141c0294a6c 100644 (file)
@@ -222,7 +222,7 @@ public:
                        if(FAILED(reserved_frames_[n].second->GetBytes(&reserved_frames_[n].first)))\r
                                BOOST_THROW_EXCEPTION(caspar_exception() << msg_info(narrow(print()) + " Failed to get frame bytes."));\r
                }\r
-                                       \r
+\r
                CASPAR_LOG(info) << print() << L" Buffer-depth: " << BUFFER_SIZE;\r
                \r
                for(size_t n = 0; n < BUFFER_SIZE; ++n)\r
index 79f486a4c61f8ee91294977f23d9696d9c2beb76..e5eb6156c03962bf18e933ba5a5bf5a86558c3c7 100644 (file)
@@ -121,7 +121,7 @@ public:
                if(FAILED(input_->DoesSupportVideoMode((BMDDisplayMode)decklinkVideoFormat, bmdFormat8BitYUV, bmdVideoOutputFlagDefault, &displayModeSupport, nullptr)))\r
                        BOOST_THROW_EXCEPTION(caspar_exception() << msg_info(narrow(print()) + " Card does not support requested videoformat."));\r
 \r
-               // NOTE: bmdFormat8BitARGB does not seem to work with Decklink HD Extreme 3D\r
+               // NOTE: bmdFormat8BitARGB is not supported.\r
                if(FAILED(input_->EnableVideoInput((BMDDisplayMode)decklinkVideoFormat, bmdFormat8BitYUV, 0))) \r
                        BOOST_THROW_EXCEPTION(caspar_exception() << msg_info(narrow(print()) + " Could not enable video input."));\r
 \r
@@ -156,7 +156,6 @@ public:
                return S_OK;\r
        }\r
 \r
-       // TODO: Enable audio input\r
        virtual HRESULT STDMETHODCALLTYPE VideoInputFrameArrived(IDeckLinkVideoInputFrame* video, IDeckLinkAudioInputPacket* audio)\r
        {       \r
                graph_->update_value("tick-time", static_cast<float>(perf_timer_.elapsed()/format_desc_.interval*0.5));\r
index bf4813baef507c829a985f06b4443992f9aaff82..e141f2a0b16426a64fe3b79b2bd33baa9bbf77a8 100644 (file)
@@ -154,27 +154,24 @@ public:
 \r
                double frame_time = 1.0/ax_->GetFPS();\r
                \r
-               if(has_underflow)\r
-               {\r
-                       ax_->Tick();\r
-                       graph_->add_tag("underflow");\r
-               }\r
+               if(!has_underflow)                      \r
+                       timer_.tick(frame_time);        \r
                else\r
-               {\r
-                       timer_.tick(frame_time);                                \r
-                       perf_timer_.restart();\r
-\r
-                       ax_->Tick();\r
-                       if(ax_->InvalidRect())\r
-                       {                       \r
-                               fast_memclr(bmp_data_,  format_desc_.size);\r
-                               ax_->DrawControl(static_cast<HDC>(hdc_.get()));\r
+                       graph_->add_tag("underflow");\r
+                       \r
+               perf_timer_.restart();\r
+\r
+               ax_->Tick();\r
+               if(ax_->InvalidRect())\r
+               {                       \r
+                       fast_memclr(bmp_data_,  format_desc_.size);\r
+                       ax_->DrawControl(static_cast<HDC>(hdc_.get()));\r
+               \r
+                       auto frame = frame_factory_->create_frame(this);\r
+                       fast_memcpy(frame->image_data().begin(), bmp_data_, format_desc_.size);\r
+                       head_ = frame;\r
+               }               \r
                \r
-                               auto frame = frame_factory_->create_frame(this);\r
-                               fast_memcpy(frame->image_data().begin(), bmp_data_, format_desc_.size);\r
-                               head_ = frame;\r
-                       }               \r
-               }\r
                \r
                graph_->update_value("frame-time", static_cast<float>(perf_timer_.elapsed()/frame_time)*0.5f);\r
                return head_;\r
@@ -195,6 +192,7 @@ struct flash_producer : public core::frame_producer
 {      \r
        const std::wstring filename_;   \r
        tbb::atomic<int> fps_;\r
+       bool underfow_;\r
 \r
        std::shared_ptr<diagnostics::graph> graph_;\r
 \r
@@ -227,11 +225,6 @@ public:
                        init_renderer();\r
                });\r
                                \r
-               executor_.begin_invoke([=]\r
-               {\r
-                       render();\r
-               });             \r
-\r
                fps_ = 0;\r
        }\r
 \r
@@ -287,11 +280,15 @@ public:
        {\r
                renderer_.reset(new flash_renderer(safe_ptr<diagnostics::graph>(graph_), frame_factory_, filename_));\r
                while(frame_buffer_.try_push(core::basic_frame::empty())){}             \r
+               executor_.begin_invoke([=]\r
+               {\r
+                       render(renderer_);\r
+               });             \r
        }\r
 \r
-       void render()\r
+       void render(const std::shared_ptr<flash_renderer>& renderer)\r
        {\r
-               if(!renderer_)\r
+               if(renderer_ != renderer) // Make sure the recursive calls are only for a specific instance.\r
                {\r
                        frame_buffer_.push(core::basic_frame::empty());\r
                        return;\r
@@ -302,20 +299,20 @@ public:
                        auto frame = core::basic_frame::empty();\r
                        if(abs(renderer_->fps()/2.0 - format_desc_.fps) < 0.1) //flash 50, format 50i\r
                        {\r
-                               auto frame1 = renderer_->render_frame(frame_buffer_.size() < frame_buffer_.capacity()-3);\r
-                               auto frame2 = renderer_->render_frame(frame_buffer_.size() < frame_buffer_.capacity()-3);\r
+                               auto frame1 = renderer_->render_frame(frame_buffer_.size() < frame_buffer_.capacity());\r
+                               auto frame2 = renderer_->render_frame(frame_buffer_.size() < frame_buffer_.capacity());\r
                                frame_buffer_.push(core::basic_frame::interlace(frame1, frame2, format_desc_.mode));\r
                                frame = frame2;\r
                        }\r
                        else if(abs(renderer_->fps()- format_desc_.fps/2.0 ) < 0.1) //flash 25, format 50p\r
                        {\r
-                               frame = renderer_->render_frame(frame_buffer_.size() < frame_buffer_.capacity()-3);\r
+                               frame = renderer_->render_frame(frame_buffer_.size() < frame_buffer_.capacity());\r
                                frame_buffer_.push(frame);\r
                                frame_buffer_.push(frame);\r
                        }\r
                        else //if(abs(renderer_->fps() - format_desc_.fps) < 0.1) // flash 25, format 50i or flash 50, format 50p\r
                        {\r
-                               frame = renderer_->render_frame(frame_buffer_.size() < frame_buffer_.capacity()-3);\r
+                               frame = renderer_->render_frame(frame_buffer_.size() < frame_buffer_.capacity());\r
                                frame_buffer_.push(frame);\r
                        }\r
 \r
@@ -324,7 +321,7 @@ public:
 \r
                        executor_.begin_invoke([=]\r
                        {\r
-                               render();\r
+                               render(renderer);\r
                        });                     \r
                }\r
                catch(...)\r
index 65e587a6d619bfcd4efa94a14dcb96fe589c457c..90a55a107a2ac042bf2d932b35ed4003719fe6ea 100644 (file)
@@ -12,7 +12,7 @@
   </diagnostics>\r
   <channels>\r
     <channel>\r
-      <videomode>PAL</videomode>\r
+      <videomode>1080i5000</videomode>\r
       <consumers>\r
         <decklink>\r
           <device>1</device>\r