else if(result == bmdOutputFrameFlushed)\r
graph_->add_tag("flushed-frame");\r
\r
- frame_container_.erase(std::find_if(frame_container_.begin(), frame_container_.end(), completed_frame));\r
+ frame_container_.erase(std::find_if(frame_container_.begin(), frame_container_.end(), [&](const std::shared_ptr<IDeckLinkVideoFrame>& frame)\r
+ {\r
+ return frame.get() == completed_frame;\r
+ }));\r
\r
std::shared_ptr<const core::read_frame> frame; \r
video_frame_buffer_.pop(frame); \r
index_ = (*it)->index;\r
\r
int errn = tbb_avcodec_open((*it)->codec, codec);\r
- if(errn >= 0)\r
- {\r
- ctx_.reset((*it)->codec, tbb_avcodec_close);\r
+ if(errn < 0)\r
+ return errn;\r
+ \r
+ ctx_.reset((*it)->codec, tbb_avcodec_close);\r
\r
- // Some files give an invalid time_base numerator, try to fix it.\r
- if(ctx_ && ctx_->time_base.num == 1)\r
- ctx_->time_base.num = static_cast<int>(std::pow(10.0, static_cast<int>(std::log10(static_cast<float>(ctx_->time_base.den)))-1));\r
- }\r
+ // Some files give an invalid time_base numerator, try to fix it.\r
+ if(ctx_ && ctx_->time_base.num == 1)\r
+ ctx_->time_base.num = static_cast<int>(std::pow(10.0, static_cast<int>(std::log10(static_cast<float>(ctx_->time_base.den)))-1));\r
+ \r
return errn; \r
}\r
\r
{ \r
try\r
{\r
- std::shared_ptr<AVPacket> read_packet(new AVPacket(), [](AVPacket* p)\r
+ std::shared_ptr<AVPacket> read_packet(new AVPacket, [](AVPacket* p)\r
{\r
av_free_packet(p);\r
delete p;\r