+ \r
+ virtual boost::unique_future<std::wstring> call(const std::wstring& param) override\r
+ {\r
+ boost::promise<std::wstring> promise;\r
+ promise.set_value(do_call(param));\r
+ return promise.get_future();\r
+ }\r
+ \r
+ virtual std::wstring print() const override\r
+ {\r
+ return L"ffmpeg[" + boost::filesystem::path(filename_).filename().wstring() + L"|" \r
+ + print_mode() + L"|" \r
+ + boost::lexical_cast<std::wstring>(file_frame_number()) + L"/" + boost::lexical_cast<std::wstring>(file_nb_frames()) + L"]";\r
+ }\r
+\r
+ virtual std::wstring name() const override\r
+ {\r
+ return L"ffmpeg";\r
+ }\r
+\r
+ boost::property_tree::wptree info() const override\r
+ {\r
+ boost::property_tree::wptree info;\r
+ info.add(L"type", L"ffmpeg");\r
+ info.add(L"filename", filename_);\r
+ info.add(L"width", video_decoder_ ? video_decoder_->width() : 0);\r
+ info.add(L"height", video_decoder_ ? video_decoder_->height() : 0);\r
+ info.add(L"progressive", video_decoder_ ? video_decoder_->is_progressive() : false);\r
+ info.add(L"fps", fps_);\r
+ info.add(L"loop", input_.loop());\r
+ info.add(L"frame-number", frame_number_);\r
+ auto nb_frames2 = nb_frames();\r
+ info.add(L"nb-frames", nb_frames2 == std::numeric_limits<int64_t>::max() ? -1 : nb_frames2);\r
+ info.add(L"file-frame-number", file_frame_number());\r
+ info.add(L"file-nb-frames", file_nb_frames());\r
+ return info;\r
+ }\r
+ \r
+ virtual void subscribe(const monitor::observable::observer_ptr& o) override\r
+ {\r
+ event_subject_.subscribe(o);\r
+ }\r
+\r
+ virtual void unsubscribe(const monitor::observable::observer_ptr& o) override\r
+ {\r
+ event_subject_.unsubscribe(o);\r
+ }\r
+\r
+ // ffmpeg_producer\r