int width_;\r
int height_;\r
\r
+ tbb::atomic<bool> is_running_;\r
std::unique_ptr<flash_renderer> renderer_;\r
\r
executor executor_; \r
, executor_(L"flash_producer")\r
{ \r
fps_ = 0;\r
+ is_running_ = true;\r
\r
graph_->set_color("output-buffer-count", diagnostics::color(1.0f, 1.0f, 0.0f)); \r
graph_->set_color("underflow", diagnostics::color(0.6f, 0.3f, 0.9f)); \r
\r
~flash_producer()\r
{\r
+ is_running_ = false;\r
+\r
safe_ptr<core::basic_frame> frame;\r
for(int n = 0; n < 3; ++n)\r
frame_buffer_.try_pop(frame);\r
\r
- executor_.invoke([]\r
+ executor_.invoke([this]\r
{\r
+ renderer_.reset();\r
::CoUninitialize();\r
});\r
}\r
{ \r
return executor_.begin_invoke([=]() -> std::wstring\r
{\r
+ if(!is_running_)\r
+ return;\r
+\r
if(!renderer_)\r
{\r
renderer_.reset(new flash_renderer(safe_ptr<diagnostics::graph>(graph_), frame_factory_, filename_, width_, height_));\r
{ \r
executor_.begin_invoke([=]\r
{\r
- if(renderer_.get() != renderer) // Since initialize will start a new recursive call make sure the recursive calls are only for a specific instance.\r
+ if(!is_running_ || renderer_.get() != renderer) // Since initialize will start a new recursive call make sure the recursive calls are only for a specific instance.\r
return;\r
\r
try\r