\r
#include <tbb/concurrent_queue.h>\r
#include <tbb/atomic.h>\r
-#include <tbb/task_group.h>\r
\r
#include <boost/algorithm/string.hpp>\r
#include <boost/timer.hpp>\r
std::unique_ptr<filter> filter_;\r
safe_ptr<core::frame_factory> frame_factory_;\r
std::deque<std::vector<int16_t>> audio_buffer_;\r
- tbb::task_group task_group_;\r
\r
std::vector<safe_ptr<AVFrame>> buffer_;\r
\r
\r
audio_buffer_.push_back(std::move(input_frame->audio_data()));\r
\r
- task_group_.wait();\r
-\r
- filter_->push(av_frame); \r
+ filter_->push(av_frame); \r
+ buffer_ = filter_->poll(); \r
\r
- bool result = try_pop(output_frame);\r
-\r
- task_group_.run([this]\r
- {\r
- buffer_ = filter_->poll();\r
- });\r
-\r
- return result; \r
+ return try_pop(output_frame);\r
}\r
\r
private: \r
\r
virtual HRESULT STDMETHODCALLTYPE VideoInputFrameArrived(IDeckLinkVideoInputFrame* video, IDeckLinkAudioInputPacket* audio)\r
{ \r
- if(!video || video->GetWidth() != static_cast<int>(format_desc_.width) || video->GetHeight() != static_cast<int>(format_desc_.height))\r
+ if(!video)\r
return S_OK;\r
\r
try\r
\r
core::pixel_format_desc desc;\r
desc.pix_fmt = core::pixel_format::ycbcr;\r
- desc.planes.push_back(core::pixel_format_desc::plane(format_desc_.width, format_desc_.height, 1));\r
- desc.planes.push_back(core::pixel_format_desc::plane(format_desc_.width/2, format_desc_.height, 1));\r
- desc.planes.push_back(core::pixel_format_desc::plane(format_desc_.width/2, format_desc_.height, 1)); \r
+ desc.planes.push_back(core::pixel_format_desc::plane(video->GetWidth(), video->GetHeight(), 1));\r
+ desc.planes.push_back(core::pixel_format_desc::plane(video->GetWidth()/2, video->GetHeight(), 1));\r
+ desc.planes.push_back(core::pixel_format_desc::plane(video->GetWidth()/2, video->GetHeight(), 1)); \r
auto frame = frame_factory_->create_frame(this, desc);\r
\r
void* bytes = nullptr;\r