\r
void* memcpy_SSE2(void* dest, const void* source, size_t num)\r
{ \r
- assert(dest != nullptr);\r
- assert(source != nullptr);\r
- assert(dest != source);\r
- assert(num % 256 == 0);\r
__asm\r
{\r
mov esi, source; \r
\r
namespace caspar {\r
\r
-class frame_consumer : boost::noncopyable\r
+struct frame_consumer : boost::noncopyable\r
{\r
-public:\r
virtual ~frame_consumer() {}\r
\r
virtual const frame_format_desc& get_frame_format_desc() const = 0;\r
\r
namespace caspar {\r
\r
-struct composite_gpu_frame::implementation\r
+struct composite_gpu_frame::implementation : boost::noncopyable\r
{\r
implementation(composite_gpu_frame* self) : self_(self){}\r
\r
void draw();\r
void reset();\r
\r
- unsigned char* data();\r
+ virtual unsigned char* data();\r
\r
- const std::vector<short>& audio_data() const; \r
- std::vector<short>& audio_data();\r
+ virtual const std::vector<short>& audio_data() const; \r
+ virtual std::vector<short>& audio_data();\r
\r
void add(const gpu_frame_ptr& frame);\r
\r
\r
struct frame_factory\r
{\r
+ virtual ~frame_factory(){}\r
virtual gpu_frame_ptr create_frame(size_t width, size_t height) = 0;\r
gpu_frame_ptr create_frame(const frame_format_desc format_desc)\r
{\r
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,\r
0xff, 0xff, 0xff, 0xff};\r
\r
-struct gpu_frame::implementation\r
+struct gpu_frame::implementation : boost::noncopyable\r
{\r
implementation(size_t width, size_t height) \r
: pbo_(0), data_(nullptr), width_(width), height_(height), size_(width*height*4), \r
\r
#include <memory>\r
\r
+#include <boost/noncopyable.hpp>\r
+\r
#include <Glee.h>\r
\r
namespace caspar {\r
\r
-class gpu_frame\r
+class gpu_frame : boost::noncopyable\r
{\r
public:\r
gpu_frame(size_t width, size_t height);\r
-\r
+ virtual ~gpu_frame(){}\r
virtual void write_lock();\r
virtual bool write_unlock();\r
virtual void read_lock(GLenum mode);\r
\r
namespace caspar {\r
\r
-class frame_buffer\r
+class frame_buffer : boost::noncopyable\r
{\r
public:\r
frame_buffer(size_t width, size_t height)\r
};\r
typedef std::shared_ptr<frame_buffer> frame_buffer_ptr;\r
\r
-struct gpu_frame_processor::implementation\r
+struct gpu_frame_processor::implementation : boost::noncopyable\r
{ \r
implementation(const frame_format_desc& format_desc) : format_desc_(format_desc)\r
{ \r
\r
namespace caspar { namespace renderer {\r
\r
-struct layer::implementation\r
+struct layer::implementation : boost::noncopyable\r
{ \r
- implementation() : preview_frame_(nullptr), active_(nullptr), background_(nullptr) {}\r
+ implementation() : preview_frame_(nullptr), active_(nullptr), background_(nullptr), last_frame_(nullptr) {}\r
\r
void load(const frame_producer_ptr& frame_producer, load_option option)\r
{\r
{\r
active_ = nullptr;\r
background_ = nullptr;\r
+ last_frame_ = nullptr;\r
}\r
\r
gpu_frame_ptr get_frame()\r
{\r
CASPAR_LOG_CURRENT_EXCEPTION();\r
active_ = nullptr;\r
+ last_frame_ = nullptr;\r
CASPAR_LOG(warning) << "Removed producer from layer.";\r
}\r
\r
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>\r
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
</PrecompiledHeaderFile>\r
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>\r
</ClCompile>\r
</ItemGroup>\r
<ItemGroup>\r