boost::errinfo_api_function("avfilter_graph_create_filter") << boost::errinfo_errno(AVUNERROR(errn)));\r
}\r
\r
- PixelFormat pix_fmts[] = { PIX_FMT_BGRA, PIX_FMT_NONE };\r
-\r
- // Output\r
+ PixelFormat pix_fmts[] = \r
+ {\r
+ PIX_FMT_YUV420P,\r
+ PIX_FMT_YUVA420P,\r
+ PIX_FMT_YUV422P,\r
+ PIX_FMT_YUV444P,\r
+ PIX_FMT_YUV411P,\r
+ PIX_FMT_ARGB, \r
+ PIX_FMT_RGBA,\r
+ PIX_FMT_ABGR,\r
+ PIX_FMT_GRAY8,\r
+ PIX_FMT_NONE\r
+ }; \r
+ // OPIX_FMT_BGRAutput\r
errn = avfilter_graph_create_filter(&buffersink_ctx_, avfilter_get_by_name("buffersink"), "out", NULL, pix_fmts, graph_.get());\r
if(errn < 0)\r
{\r
explicit implementation(const std::shared_ptr<AVFormatContext>& context, const safe_ptr<core::frame_factory>& frame_factory, const std::wstring& filter) \r
: frame_factory_(frame_factory)\r
, mode_(core::video_mode::invalid)\r
- //, filter_(filter.empty() ? nullptr : new caspar::filter(filter))\r
+ , filter_(filter.empty() ? nullptr : new caspar::filter(filter))\r
{\r
AVCodec* dec;\r
index_ = av_find_best_stream(context.get(), AVMEDIA_TYPE_VIDEO, -1, -1, &dec, 0);\r
\r
if(filter_)\r
{\r
+ auto av_frames2 = std::move(av_frames);\r
+\r
filter_tasks_.wait();\r
- \r
- av_frames.clear();\r
+\r
boost::range::push_back(av_frames, filter_->poll());\r
\r
filter_tasks_.run([=]\r
{\r
- BOOST_FOREACH(auto& frame, av_frames) \r
+ BOOST_FOREACH(auto& frame, av_frames2) \r
filter_->push(frame);\r
});\r
}\r