本文整理汇总了C++中safe_ptr::last_frame方法的典型用法代码示例。如果您正苦于以下问题:C++ safe_ptr::last_frame方法的具体用法?C++ safe_ptr::last_frame怎么用?C++ safe_ptr::last_frame使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类safe_ptr
的用法示例。
在下文中一共展示了safe_ptr::last_frame方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: disable_audio
safe_ptr<basic_frame> receive(int hints)
{
try
{
if(is_paused_)
return disable_audio(foreground_->last_frame());
auto frame = receive_and_follow(foreground_, hints);
if(frame == core::basic_frame::late())
return foreground_->last_frame();
auto frames_left = static_cast<int64_t>(foreground_->nb_frames()) - static_cast<int64_t>(++frame_number_) - static_cast<int64_t>(auto_play_delta_);
if(auto_play_delta_ > -1 && frames_left < 1)
{
play();
return receive(hints);
}
return frame;
}
catch(...)
{
CASPAR_LOG_CURRENT_EXCEPTION();
stop();
return core::basic_frame::empty();
}
}
示例2: disable_audio
safe_ptr<basic_frame> receive()
{
try
{
if(is_paused_)
return disable_audio(foreground_->last_frame());
auto frame = receive_and_follow(foreground_, frame_producer::NO_HINT);
if(frame == core::basic_frame::late())
return foreground_->last_frame();
auto frames_left = foreground_->nb_frames() - (++frame_number_) - auto_play_delta_;
if(auto_play_delta_ > -1 && frames_left < 1)
{
play();
return receive();
}
return frame;
}
catch(...)
{
CASPAR_LOG_CURRENT_EXCEPTION();
stop();
return core::basic_frame::empty();
}
}
示例3: disable_audio
safe_ptr<basic_frame> receive(int hints)
{
try
{
monitor_subject_ << monitor::message("/paused") % is_paused_;
if(is_paused_)
{
if(foreground_->last_frame() == basic_frame::empty())
foreground_->receive(frame_producer::NO_HINT);
return disable_audio(foreground_->last_frame());
}
auto foreground = foreground_;
auto frame = receive_and_follow(foreground, hints);
if(foreground != foreground_)
set_foreground(foreground);
if(frame == core::basic_frame::late())
return foreground_->last_frame();
auto frames_left = static_cast<int64_t>(foreground_->nb_frames()) - static_cast<int64_t>(++frame_number_) - static_cast<int64_t>(auto_play_delta_);
if(auto_play_delta_ > -1 && frames_left < 1)
{
play();
return receive(hints);
}
return frame;
}
catch(...)
{
CASPAR_LOG_CURRENT_EXCEPTION();
stop();
return core::basic_frame::empty();
}
}
示例4: eof
virtual safe_ptr<basic_frame> receive(int hints) override
{
if(++current_frame_ >= info_.duration)
return basic_frame::eof();
auto dest = basic_frame::empty();
auto source = basic_frame::empty();
tbb::parallel_invoke(
[&]
{
dest = receive_and_follow(dest_producer_, hints);
if(dest == core::basic_frame::late())
dest = dest_producer_->last_frame();
},
[&]
{
source = receive_and_follow(source_producer_, hints);
if(source == core::basic_frame::late())
source = source_producer_->last_frame();
});
monitor_subject_ << monitor::message("/transition/frame") % static_cast<std::int32_t>(current_frame_) % static_cast<std::int32_t>(info_.duration)
<< monitor::message("/transition/type") % [&]() -> std::string
{
switch(info_.type)
{
case transition::mix: return "mix";
case transition::wipe: return "wipe";
case transition::slide: return "slide";
case transition::push: return "push";
case transition::cut: return "cut";
default: return "n/a";
}
}();
return compose(dest, source);
}
示例5: eof
virtual safe_ptr<basic_frame> receive(int hints)
{
if(++current_frame_ >= info_.duration)
return basic_frame::eof();
auto dest = basic_frame::empty();
auto source = basic_frame::empty();
tbb::parallel_invoke(
[&]
{
dest = receive_and_follow(dest_producer_, hints);
if(dest == core::basic_frame::late())
dest = dest_producer_->last_frame();
},
[&]
{
source = receive_and_follow(source_producer_, hints);
if(source == core::basic_frame::late())
source = source_producer_->last_frame();
});
return compose(dest, source);
}
示例6:
last_frame_producer(const safe_ptr<frame_producer>& producer)
: print_(producer->print())
, frame_(producer->last_frame() != basic_frame::eof() ? producer->last_frame() : basic_frame::empty())
, nb_frames_(producer->nb_frames())
{
}