]> git.sesse.net Git - casparcg/commitdiff
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches...
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sun, 9 Jan 2011 15:26:28 +0000 (15:26 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sun, 9 Jan 2011 15:26:28 +0000 (15:26 +0000)
common/utility/timer.h
core/consumer/bluefish/util.h
core/consumer/decklink/util.h
core/consumer/frame_consumer_device.cpp
core/format/video_format.cpp
core/format/video_format.h
core/producer/flash/flash_producer.cpp
shell/shell.vcxproj

index a5d0d965b38224b8c05ebe40554e6f94b5241bde..fffed7c950c0835e53607ad880c1e726562c3489 100644 (file)
@@ -7,15 +7,10 @@ namespace caspar {
 class timer\r
 {\r
 public:\r
-       timer(double fps = 25.0) : fps_(fps)\r
+       timer()\r
        {\r
                QueryPerformanceFrequency(&freq_);\r
-               time_.QuadPart = 0;\r
-       }\r
-\r
-       void wait()\r
-       {\r
-               wait(fps_);\r
+               QueryPerformanceCounter(&time_);\r
        }\r
 \r
        // Author: Ryan M. Geiss\r
@@ -60,13 +55,10 @@ public:
                }\r
 \r
                time_ = t;\r
-       }\r
-               \r
-private:\r
-       \r
+       }               \r
+private:       \r
        LARGE_INTEGER freq_;\r
        LARGE_INTEGER time_;\r
-       double fps_;\r
 };\r
 \r
 }
\ No newline at end of file
index 5924468c5f1f1ea76956a1d0d53fb0ad0f2e1958..eb13e614939f41aace15b2d2b888076d020dd776 100644 (file)
@@ -23,9 +23,9 @@ inline EVideoMode vid_fmt_from_video_format(const video_format::type& fmt)
        {\r
        case video_format::pal:                 return VID_FMT_PAL;\r
        //case video_format::ntsc:              return VID_FMT_NTSC;\r
-       case video_format::x576p2500:   return VID_FMT_INVALID; //not supported\r
+       //case video_format::x576p2500: return VID_FMT_INVALID; //not supported\r
        case video_format::x720p2500:   return VID_FMT_720P_2500;\r
-       case video_format::x720p5000:   return VID_FMT_720P_5000;\r
+       //case video_format::x720p5000: return VID_FMT_720P_5000;\r
        //case video_format::x720p5994: return VID_FMT_720P_5994;\r
        //case video_format::x720p6000: return VID_FMT_720P_6000;\r
        //case video_format::x1080p2397:        return VID_FMT_1080P_2397;\r
index f8380aadda0e26c99d4ba410e9026f5110f49468..1c8a264f7235859ad727eb130db77ad3a3e59711 100644 (file)
@@ -12,8 +12,9 @@ namespace caspar { namespace core { namespace decklink {
                {\r
                case video_format::pal:                 return bmdModePAL;\r
                //case video_format::ntsc:              return bmdModeNTSC;\r
-               case video_format::x576p2500:   return ULONG_MAX;       //not supported\r
-               case video_format::x720p5000:   return bmdModeHD720p50;\r
+               //case video_format::x576p2500: return ULONG_MAX;\r
+               case video_format::x720p2500:   return ULONG_MAX;\r
+               //case video_format::x720p5000: return bmdModeHD720p50;\r
                //case video_format::x720p5994: return bmdModeHD720p5994;\r
                //case video_format::x720p6000: return bmdModeHD720p60;\r
                //case video_format::x1080p2397:        return bmdModeHD1080p2398;\r
index 1f1e18725984c260c1b4d6b9479bfb6ce468aae8..4fa38518276840db531279961cb62aace4802625 100644 (file)
@@ -27,48 +27,46 @@ public:
                executor_.set_capacity(3);\r
                executor_.start();\r
        }\r
-                                       \r
-       void tick(const safe_ptr<const read_frame>& frame)\r
-       {\r
-               buffer_.push_back(frame);\r
-       \r
-               boost::range::for_each(consumers_, [&](const safe_ptr<frame_consumer>& consumer)\r
-               {\r
-                       size_t offset = max_depth_ - consumer->buffer_depth();\r
-                       if(offset < buffer_.size())\r
-                               consumer->send(*(buffer_.begin() + offset));\r
-               });\r
                        \r
-               frame_consumer::sync_mode sync = frame_consumer::ready;\r
-               boost::range::for_each(consumers_, [&](const safe_ptr<frame_consumer>& consumer)\r
+       void consume(safe_ptr<const read_frame>&& frame)\r
+       {               \r
+               executor_.begin_invoke([=]\r
                {\r
-                       try\r
+                       buffer_.push_back(frame);\r
+       \r
+                       boost::range::for_each(consumers_, [&](const safe_ptr<frame_consumer>& consumer)\r
                        {\r
                                size_t offset = max_depth_ - consumer->buffer_depth();\r
-                               if(offset >= buffer_.size())\r
-                                       return;\r
-\r
-                               if(consumer->synchronize() == frame_consumer::clock)\r
-                                       sync = frame_consumer::clock;\r
-                       }\r
-                       catch(...)\r
+                               if(offset < buffer_.size())\r
+                                       consumer->send(*(buffer_.begin() + offset));\r
+                       });\r
+                       \r
+                       frame_consumer::sync_mode sync = frame_consumer::ready;\r
+                       boost::range::for_each(consumers_, [&](const safe_ptr<frame_consumer>& consumer)\r
                        {\r
-                               CASPAR_LOG_CURRENT_EXCEPTION();\r
-                               boost::range::remove_erase(consumers_, consumer);\r
-                               CASPAR_LOG(warning) << "Removed consumer from frame_consumer_device.";\r
-                       }\r
-               });\r
-       \r
-               if(sync != frame_consumer::clock)\r
-                       clock_.wait();\r
+                               try\r
+                               {\r
+                                       size_t offset = max_depth_ - consumer->buffer_depth();\r
+                                       if(offset >= buffer_.size())\r
+                                               return;\r
 \r
-               if(buffer_.size() >= max_depth_)\r
-                       buffer_.pop_front();\r
-       }\r
+                                       if(consumer->synchronize() == frame_consumer::clock)\r
+                                               sync = frame_consumer::clock;\r
+                               }\r
+                               catch(...)\r
+                               {\r
+                                       CASPAR_LOG_CURRENT_EXCEPTION();\r
+                                       boost::range::remove_erase(consumers_, consumer);\r
+                                       CASPAR_LOG(warning) << "Removed consumer from frame_consumer_device.";\r
+                               }\r
+                       });\r
+       \r
+                       if(sync != frame_consumer::clock)\r
+                               clock_.wait(fmt_.actual_fps);\r
 \r
-       void consume(safe_ptr<const read_frame>&& frame)\r
-       {               \r
-               executor_.begin_invoke([=]{tick(frame);});\r
+                       if(buffer_.size() >= max_depth_)\r
+                               buffer_.pop_front();\r
+               });\r
        }\r
 \r
        timer clock_;\r
@@ -79,7 +77,7 @@ public:
 \r
        std::vector<safe_ptr<frame_consumer>> consumers_;\r
        \r
-       const video_format_desc& fmt_;\r
+       const video_format_desc fmt_;\r
 };\r
 \r
 frame_consumer_device::frame_consumer_device(frame_consumer_device&& other) : impl_(std::move(other.impl_)){}\r
index 65b2bda1411ff2e55e0a9b0a1ed0ccce1ad0f4dd..65c787071159bd27fbd7ab2ff9718cf4f33517b0 100644 (file)
@@ -34,9 +34,9 @@ const video_format_desc format_descs[video_format::invalid] =
 {                                                                         \r
        DEFINE_VIDEOFORMATDESC(720,  576,  video_mode::upper,                   50,                     TEXT("PAL"),            video_format::pal               ), \r
        //DEFINE_VIDEOFORMATDESC(720,  486,  video_mode::lower,                 60/1.001,       TEXT("NTSC"),           video_format::ntsc              ), \r
-       DEFINE_VIDEOFORMATDESC(720,  576,  video_mode::progressive,             25,                     TEXT("576p2500"),       video_format::x576p2500 ),\r
+       //DEFINE_VIDEOFORMATDESC(720,  576,  video_mode::progressive,           25,                     TEXT("576p2500"),       video_format::x576p2500 ),\r
        DEFINE_VIDEOFORMATDESC(1280, 720,  video_mode::progressive,             25,                     TEXT("720p2500"),       video_format::x720p2500 ), \r
-       DEFINE_VIDEOFORMATDESC(1280, 720,  video_mode::progressive,             50,                     TEXT("720p5000"),       video_format::x720p5000 ), \r
+       //DEFINE_VIDEOFORMATDESC(1280, 720,  video_mode::progressive,   50,                     TEXT("720p5000"),       video_format::x720p5000 ), \r
        //DEFINE_VIDEOFORMATDESC(1280, 720,  video_mode::progressive,   60/1.001,       TEXT("720p5994"),       video_format::x720p5994 ),\r
        //DEFINE_VIDEOFORMATDESC(1280, 720,  video_mode::progressive,   60,                     TEXT("720p6000"),       video_format::x720p6000 ),\r
        //DEFINE_VIDEOFORMATDESC(1920, 1080, video_mode::progressive,   24/1.001,       TEXT("1080p2397"),      video_format::x1080p2397),\r
index 340da6c4c981a1d27ca65f150760eb680c9cf32c..7e3545e57a37f8b9cdc1f3ee15606dae06a671fc 100644 (file)
@@ -12,9 +12,9 @@ struct video_format
        {\r
                pal = 0,\r
                //ntsc,\r
-               x576p2500,\r
+               //x576p2500,\r
                x720p2500,\r
-               x720p5000,\r
+               //x720p5000,\r
                //x720p5994,\r
                //x720p6000,\r
                //x1080p2397,\r
index c4d15bbaf8e1d02b26765074fb1a161eee4afdf3..523b5f329b90fad033155867ec5d431217081c83 100644 (file)
@@ -109,10 +109,7 @@ public:
                        return draw_frame::empty();\r
 \r
                auto frame = render_simple_frame();\r
-               \r
-               auto running_fps = static_cast<int>(ax_->GetFPS());\r
-               auto target_fps = static_cast<int>(format_desc_.actual_fps);\r
-               if(target_fps < running_fps)\r
+               if(ax_->GetFPS()/2.0 - format_desc_.actual_fps >= 0.0)\r
                        frame = draw_frame::interlace(frame, render_simple_frame(), format_desc_.mode);\r
                return frame;\r
        }\r
@@ -166,9 +163,6 @@ struct flash_producer::implementation
                {\r
                        ::OleInitialize(nullptr);\r
                });\r
-\r
-               frame_buffer_.set_capacity(8);\r
-               while(frame_buffer_.try_push(draw_frame::empty())){}\r
        }\r
 \r
        ~implementation()\r
@@ -211,6 +205,8 @@ struct flash_producer::implementation
        virtual void initialize(const safe_ptr<frame_processor_device>& frame_processor)\r
        {\r
                frame_processor_ = frame_processor;\r
+               frame_buffer_.set_capacity(static_cast<size_t>(frame_processor->get_video_format_desc().actual_fps/2.0));\r
+               while(frame_buffer_.try_push(draw_frame::empty())){}\r
                executor_.start();\r
        }\r
        \r
index 04e09e1e56ff375741de9dc5296e1269b8fbf75b..ab5a544b75e57f350c35c80dc756da5f2365b93c 100644 (file)
@@ -69,7 +69,7 @@
     <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">release\</IntDir>\r
     <IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\dependencies\BluefishSDK_V5_8_0_31\Inc\;..\..\..\dependencies\BluefishSDK_V5_8_0_31\Inc\;..\..\dependencies\boost_1_44_0\;..\..\..\dependencies\boost_1_44_0\;..\..\dependencies\ffmpeg 0.6\include\;..\..\..\dependencies\ffmpeg 0.6\include\;..\..\dependencies\FreeImage\Dist\;..\..\..\dependencies\FreeImage\Dist\;..\..\dependencies\GLee5_4\;..\..\..\dependencies\GLee5_4\;..\..\dependencies\SFML-1.6\include\;..\..\..\dependencies\SFML-1.6\include\;..\..\dependencies\tbb30_20100406oss\include\;..\..\..\dependencies\tbb30_20100406oss\include\;$(IncludePath)</IncludePath>\r
     <IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\dependencies\BluefishSDK_V5_8_0_31\Inc\;..\..\..\dependencies\BluefishSDK_V5_8_0_31\Inc\;..\..\dependencies\boost_1_44_0\;..\..\..\dependencies\boost_1_44_0\;..\..\dependencies\ffmpeg 0.6\include\;..\..\..\dependencies\ffmpeg 0.6\include\;..\..\dependencies\FreeImage\Dist\;..\..\..\dependencies\FreeImage\Dist\;..\..\dependencies\GLee5_4\;..\..\..\dependencies\GLee5_4\;..\..\dependencies\SFML-1.6\include\;..\..\..\dependencies\SFML-1.6\include\;..\..\dependencies\tbb30_20100406oss\include\;..\..\..\dependencies\tbb30_20100406oss\include\;$(IncludePath)</IncludePath>\r
-    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\dependencies\BluefishSDK_V5_8_0_31\Lib\;..\..\..\dependencies\BluefishSDK_V5_8_0_31\Lib\;..\..\dependencies\boost_1_44_0\stage\lib\;..\..\..\dependencies\boost_1_44_0\stage\lib\;..\..\dependencies\ffmpeg 0.6\lib\;..\..\..\dependencies\ffmpeg 0.6\lib\;..\..\dependencies\FreeImage\Dist\;..\..\..\dependencies\FreeImage\Dist\;..\..\dependencies\GLee5_4\;..\..\..\dependencies\GLee5_4\;..\..\dependencies\SFML-1.6\lib\;..\..\..\dependencies\SFML-1.6\lib\;..\..\dependencies\tbb30_20100406oss\lib\ia32\vc10\;..\..\..\dependencies\tbb30_20100406oss\lib\ia32\vc10\;$(LibraryPath)</LibraryPath>\r
+    <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">C:\Program\Microsoft DirectX SDK (June 2010)\Lib\x86;..\..\dependencies\BluefishSDK_V5_8_0_31\Lib\;..\..\..\dependencies\BluefishSDK_V5_8_0_31\Lib\;..\..\dependencies\boost_1_44_0\stage\lib\;..\..\..\dependencies\boost_1_44_0\stage\lib\;..\..\dependencies\ffmpeg 0.6\lib\;..\..\..\dependencies\ffmpeg 0.6\lib\;..\..\dependencies\FreeImage\Dist\;..\..\..\dependencies\FreeImage\Dist\;..\..\dependencies\GLee5_4\;..\..\..\dependencies\GLee5_4\;..\..\dependencies\SFML-1.6\lib\;..\..\..\dependencies\SFML-1.6\lib\;..\..\dependencies\tbb30_20100406oss\lib\ia32\vc10\;..\..\..\dependencies\tbb30_20100406oss\lib\ia32\vc10\;$(LibraryPath)</LibraryPath>\r
     <LibraryPath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">C:\Program\Microsoft DirectX SDK (June 2010)\Lib\x86;..\..\dependencies\BluefishSDK_V5_8_0_31\Lib\;..\..\..\dependencies\BluefishSDK_V5_8_0_31\Lib\;..\..\dependencies\boost_1_44_0\stage\lib\;..\..\..\dependencies\boost_1_44_0\stage\lib\;..\..\dependencies\ffmpeg 0.6\lib\;..\..\..\dependencies\ffmpeg 0.6\lib\;..\..\dependencies\FreeImage\Dist\;..\..\..\dependencies\FreeImage\Dist\;..\..\dependencies\GLee5_4\;..\..\..\dependencies\GLee5_4\;..\..\dependencies\SFML-1.6\lib\;..\..\..\dependencies\SFML-1.6\lib\;..\..\dependencies\tbb30_20100406oss\lib\ia32\vc10\;..\..\..\dependencies\tbb30_20100406oss\lib\ia32\vc10\;$(LibraryPath)</LibraryPath>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectDir)debug\</OutDir>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectDir)release\</OutDir>\r