#include "layer.h"\r
\r
#include "frame_producer.h"\r
-\r
#include "frame/basic_frame.h"\r
\r
-\r
namespace caspar { namespace core {\r
\r
struct layer::implementation\r
: foreground_(frame_producer::empty())\r
, background_(frame_producer::empty())\r
, is_paused_(false)\r
- , auto_play_delta_(-1){}\r
+ , auto_play_delta_(-1)\r
+ , frame_number_(0){}\r
\r
- void pause(){is_paused_ = true;}\r
- void resume(){is_paused_ = false;}\r
+ void pause()\r
+ {\r
+ is_paused_ = true;\r
+ }\r
+\r
+ void resume()\r
+ {\r
+ is_paused_ = false;\r
+ }\r
\r
void load(const safe_ptr<frame_producer>& producer, bool preview, int auto_play_delta)\r
{ \r
- background_ = producer;\r
-\r
- if(auto_play_delta > -1)\r
- {\r
- if(producer->nb_frames() > 0)\r
- auto_play_delta_ = auto_play_delta;\r
- else\r
- CASPAR_LOG(warning) << producer->print() << L" Does not support auto-play.";\r
- }\r
+ background_ = producer;\r
+ auto_play_delta_ = auto_play_delta;\r
\r
if(preview) // Play the first frame and pause.\r
{ \r
receive();\r
pause();\r
}\r
-\r
- if(auto_play_delta >= 0 && foreground_ == frame_producer::empty())\r
- play();\r
}\r
\r
void play()\r
if(frame == core::basic_frame::late())\r
return foreground_->last_frame();\r
\r
- if(auto_play_delta_ == 0)\r
- {\r
- if(frame == core::basic_frame::eof())\r
- {\r
- CASPAR_ASSERT(frames_left == 0);\r
-\r
- CASPAR_LOG(info) << L"Automatically playing next clip with " << auto_play_delta_ << " frames offset.";\r
- \r
- play();\r
- frame = receive();\r
- }\r
- }\r
- else if(auto_play_delta_ > 0)\r
+ if(auto_play_delta_ >= 0)\r
{\r
if(frames_left <= 0 || frame == core::basic_frame::eof())\r
{\r
- CASPAR_VERIFY(frame != core::basic_frame::eof() && "Received early EOF. Media duration metadata incorrect.");\r
+ //CASPAR_ASSERT(frame != core::basic_frame::eof() && "Received early EOF. Media duration metadata incorrect.");\r
\r
- CASPAR_LOG(info) << L"Automatically playing next clip with " << auto_play_delta_ << " frames offset.";\r
+ CASPAR_LOG(info) << L"Automatically playing next clip with " << auto_play_delta_ << " frames offset. Frames left: " << frames_left;\r
\r
play();\r
frame = receive();\r
\r
return frame;\r
}\r
+\r
+ bool empty() const\r
+ {\r
+ return background_ == core::frame_producer::empty() && foreground_ == core::frame_producer::empty();\r
+ }\r
};\r
\r
layer::layer() : impl_(new implementation()){}\r
safe_ptr<basic_frame> layer::receive() {return impl_->receive();}\r
safe_ptr<frame_producer> layer::foreground() const { return impl_->foreground_;}\r
safe_ptr<frame_producer> layer::background() const { return impl_->background_;}\r
+bool layer::empty() const {return impl_->empty();}\r
}}
\ No newline at end of file