\r
#include <tbb/cache_aligned_allocator.h>\r
#include <tbb/parallel_for_each.h>\r
+#include <tbb/concurrent_queue.h>\r
\r
#include <boost/assign.hpp>\r
#include <boost/foreach.hpp>\r
{\r
std::pair<std::vector<item>, boost::shared_future<boost::iterator_range<const uint8_t*>>> last_image_;\r
tbb::concurrent_unordered_map<int, tbb::concurrent_bounded_queue<std::shared_ptr<SwsContext>>> sws_contexts_;\r
- std::vector<spl::shared_ptr<host_buffer>> temp_buffers_;\r
+ tbb::concurrent_bounded_queue<spl::shared_ptr<host_buffer>> temp_buffers_;\r
public: \r
boost::shared_future<boost::iterator_range<const uint8_t*>> operator()(std::vector<item> items, const core::video_format_desc& format_desc)\r
{ \r
BOOST_THROW_EXCEPTION(operation_failed() << msg_info("Could not create software scaling context.") << boost::errinfo_api_function("sws_getContext")); \r
\r
auto dest_frame = spl::make_shared<host_buffer>(width*height*4);\r
+ temp_buffers_.push(dest_frame);\r
\r
{\r
spl::shared_ptr<AVFrame> dest_av_frame(avcodec_alloc_frame(), av_free); \r
sws_scale(sws_context.get(), input_av_frame->data, input_av_frame->linesize, 0, input_av_frame->height, dest_av_frame->data, dest_av_frame->linesize); \r
pool.push(sws_context);\r
}\r
-\r
- temp_buffers_.push_back(dest_frame);\r
- \r
+ \r
for(std::size_t n = 0; n < source_items.size(); ++n)\r
{\r
if(source_items[n].data == data)\r
\r
if(frame.pixel_format_desc().planes.empty())\r
return;\r
+ \r
+ if(frame.pixel_format_desc().planes.at(0).size < 16)\r
+ return;\r
\r
if(transform_stack_.back().field_mode == core::field_mode::empty)\r
return;\r