<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
<ConfigurationType>StaticLibrary</ConfigurationType>\r
<CharacterSet>Unicode</CharacterSet>\r
- <WholeProgramOptimization>true</WholeProgramOptimization>\r
+ <WholeProgramOptimization>false</WholeProgramOptimization>\r
</PropertyGroup>\r
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
<ConfigurationType>StaticLibrary</ConfigurationType>\r
class flash_renderer\r
{\r
public:\r
- flash_renderer() : last_frame_(draw_frame::empty()), current_frame_(draw_frame::empty()), bmp_data_(nullptr), ax_(nullptr) {}\r
+ flash_renderer() : tail_(draw_frame::empty()), head_(draw_frame::empty()), bmp_data_(nullptr), ax_(nullptr) {}\r
\r
~flash_renderer()\r
{ \r
\r
auto frame = frame_processor_->create_frame();\r
std::copy_n(bmp_data_, format_desc_.size, frame->image_data().begin());\r
- current_frame_ = frame;\r
+ head_ = frame;\r
} \r
- frame_buffer_.try_push(current_frame_);\r
+ if(!frame_buffer_.try_push(head_))\r
+ CASPAR_LOG(trace) << print() << " overflow";\r
}\r
\r
- safe_ptr<draw_frame> get_frame(video_mode::type mode)\r
+ safe_ptr<draw_frame> get_frame()\r
{ \r
- frame_buffer_.try_pop(last_frame_);\r
- auto frame1 = last_frame_;\r
- auto frame2 = frame1;\r
- if(mode != video_mode::progressive && frame_buffer_.size() > frame_buffer_.capacity()/2) // Regulate between interlaced and progressive\r
+ if(!frame_buffer_.try_pop(tail_))\r
+ CASPAR_LOG(trace) << print() << " underflow";\r
+\r
+ auto frame = tail_;\r
+ if(frame_buffer_.size() > frame_buffer_.capacity()/2) // Regulate between interlaced and progressive\r
{\r
- frame_buffer_.try_pop(last_frame_);\r
- frame2 = last_frame_;\r
+ frame_buffer_.try_pop(tail_);\r
+ frame = draw_frame::interlace(frame, tail_, format_desc_.mode);\r
}\r
- return draw_frame::interlace(frame1, frame2, mode);\r
+ return frame;\r
}\r
\r
void stop()\r
\r
CComObject<FlashAxContainer>* ax_;\r
tbb::concurrent_bounded_queue<safe_ptr<draw_frame>> frame_buffer_; \r
- safe_ptr<draw_frame> last_frame_;\r
- safe_ptr<draw_frame> current_frame_;\r
+ safe_ptr<draw_frame> tail_;\r
+ safe_ptr<draw_frame> head_;\r
\r
tbb::concurrent_queue<std::wstring> params_;\r
};\r
\r
virtual safe_ptr<draw_frame> receive()\r
{\r
- return renderer_->get_frame(frame_processor_->get_video_format_desc().mode);\r
+ return renderer_->get_frame();\r
}\r
\r
boost::thread thread_;\r