\r
struct audio_mixer::implementation\r
{\r
- std::stack<core::frame_transform> transform_stack_;\r
-\r
- std::map<const void*, core::frame_transform> prev_frame_transforms_;\r
- std::map<const void*, core::frame_transform> next_frame_transforms_;\r
-\r
- const core::video_format_desc format_desc_;\r
-\r
- std::vector<audio_item> items;\r
+ std::stack<core::frame_transform> transform_stack_;\r
+ std::map<const void*, core::frame_transform> prev_frame_transforms_;\r
+ const core::video_format_desc format_desc_;\r
+ std::vector<audio_item> items;\r
\r
public:\r
implementation(const core::video_format_desc& format_desc)\r
{\r
auto result = std::vector<int16_t>(format_desc_.audio_samples_per_frame);\r
\r
+ std::map<const void*, core::frame_transform> next_frame_transforms;\r
+\r
BOOST_FOREACH(auto& item, items)\r
{ \r
const auto next = item.transform;\r
if(it != prev_frame_transforms_.end())\r
prev = it->second;\r
\r
- next_frame_transforms_[item.tag] = next; // Store all active tags, inactive tags will be removed at the end.\r
+ next_frame_transforms[item.tag] = next; // Store all active tags, inactive tags will be removed at the end.\r
\r
if(next.volume < 0.001 && prev.volume < 0.001)\r
continue;\r
}\r
\r
items.clear();\r
- prev_frame_transforms_ = std::move(next_frame_transforms_); \r
+ prev_frame_transforms_ = std::move(next_frame_transforms); \r
\r
return std::move(result);\r
}\r
class image_renderer\r
{\r
ogl_device& ogl_;\r
- video_format_desc format_desc_;\r
+ const video_format_desc format_desc_;\r
image_kernel kernel_; \r
- std::shared_ptr<device_buffer> active_buffer_;\r
+ std::shared_ptr<device_buffer> transferring_buffer_;\r
public:\r
image_renderer(ogl_device& ogl, const video_format_desc& format_desc)\r
: ogl_(ogl)\r
{\r
}\r
\r
- boost::unique_future<safe_ptr<host_buffer>> render(std::vector<layer>&& layers)\r
+ boost::unique_future<safe_ptr<host_buffer>> operator()(std::vector<layer>&& layers)\r
{ \r
auto layers2 = make_move_on_copy(std::move(layers));\r
return ogl_.begin_invoke([=]\r
ogl_.attach(*draw_buffer);\r
host_buffer->begin_read(draw_buffer->width(), draw_buffer->height(), format(draw_buffer->stride()));\r
\r
- active_buffer_ = std::move(draw_buffer);\r
+ transferring_buffer_ = std::move(draw_buffer);\r
\r
ogl_.flush(); // NOTE: This is important, otherwise fences will deadlock.\r
\r
\r
boost::unique_future<safe_ptr<host_buffer>> render()\r
{\r
- return renderer_.render(std::move(layers_));\r
+ return renderer_(std::move(layers_));\r
}\r
\r
safe_ptr<write_frame> create_frame(const void* tag, const pixel_format_desc& desc)\r