\r
const int n_samples = audio_data_.back().size();\r
\r
- CASPAR_VERIFY(audio_data.empty() || static_cast<size_t>(audio_data.size()) == audio_data_.size());\r
+ const auto in_size = static_cast<size_t>(audio_data.size());\r
+ CASPAR_VERIFY(in_size == 0 || in_size == audio_data_.back().size());\r
\r
- if(static_cast<size_t>(audio_data.size()) > audio_data_.size())\r
+ if(in_size > audio_data_.size())\r
return;\r
\r
tbb::parallel_for\r
#include "frame_muxer.h"\r
\r
#include "frame/basic_frame.h"\r
+#include "frame/image_transform.h"\r
+#include "frame/pixel_format.h"\r
#include "../mixer/write_frame.h"\r
\r
namespace caspar { namespace core {\r
}\r
\r
void push(const safe_ptr<write_frame>& video_frame)\r
- {\r
+ { \r
+ // Fix field-order if needed\r
+ if(video_frame->get_type() == core::video_mode::lower && out_mode_ == core::video_mode::upper)\r
+ video_frame->get_image_transform().set_fill_translation(0.0f, 0.5/static_cast<double>(video_frame->get_pixel_format_desc().planes[0].height));\r
+ else if(video_frame->get_type() == core::video_mode::upper && out_mode_ == core::video_mode::lower)\r
+ video_frame->get_image_transform().set_fill_translation(0.0f, -0.5/static_cast<double>(video_frame->get_pixel_format_desc().planes[0].height));\r
+\r
video_frames_.push(video_frame);\r
+\r
process();\r
}\r
\r
{ \r
int errn;\r
\r
- buffer_.set_capacity(MAX_BUFFER_COUNT);\r
-\r
AVFormatContext* weak_format_context_ = nullptr;\r
- errn = av_open_input_file(&weak_format_context_, narrow(filename).c_str(), nullptr, 0, nullptr);\r
+ errn = avformat_open_input(&weak_format_context_, narrow(filename).c_str(), nullptr, nullptr);\r
if(errn < 0 || weak_format_context_ == nullptr)\r
{ \r
BOOST_THROW_EXCEPTION(\r
\r
if(start_ != 0) \r
seek_frame(start_);\r
+ \r
+ for(int n = 0; n < 16 && buffer_size_ < MAX_BUFFER_SIZE && buffer_.size() < MAX_BUFFER_COUNT; ++n)\r
+ read_next_packet();\r
+\r
+ buffer_.set_capacity(MAX_BUFFER_COUNT);\r
\r
graph_->set_color("seek", diagnostics::color(0.5f, 1.0f, 0.5f)); \r
graph_->set_color("buffer-count", diagnostics::color(0.2f, 0.8f, 1.0f));\r
{\r
bool result = buffer_.try_pop(packet);\r
graph_->update_value("buffer-count", MAX_BUFFER_SIZE/static_cast<double>(buffer_.size()));\r
- if(packet)\r
+ if(result)\r
{\r
- buffer_size_ -= packet->size;\r
+ if(packet)\r
+ buffer_size_ -= packet->size;\r
graph_->update_value("buffer-size", MAX_BUFFER_SIZE/static_cast<double>(buffer_size_));\r
cond_.notify_all();\r
}\r
else\r
{\r
av_dup_packet(read_packet.get());\r
- buffer_.push(read_packet);\r
\r
graph_->update_value("buffer-count", MAX_BUFFER_SIZE/static_cast<double>(buffer_.size()));\r
\r
boost::unique_lock<boost::mutex> lock(mutex_);\r
- while(buffer_size_ > MAX_BUFFER_SIZE && buffer_.size() > 2)\r
+ while(buffer_size_ > MAX_BUFFER_SIZE && buffer_.size() > MAX_BUFFER_COUNT)\r
cond_.wait(lock);\r
-\r
+ \r
+ buffer_.push(read_packet);\r
buffer_size_ += read_packet->size;\r
\r
graph_->update_value("buffer-size", MAX_BUFFER_SIZE/static_cast<double>(buffer_size_));\r
write->commit(n);\r
});\r
}\r
- \r
- // Fix field-order if needed\r
- if(decoded_frame->interlaced_frame)\r
- {\r
- switch(frame_factory->get_video_format_desc().mode)\r
- {\r
- case core::video_mode::upper:\r
- if(!decoded_frame->top_field_first)\r
- write->get_image_transform().set_fill_translation(0.0f, 0.5/static_cast<double>(height));\r
- break;\r
- case core::video_mode::lower:\r
- if(decoded_frame->top_field_first)\r
- write->get_image_transform().set_fill_translation(0.0f, -0.5/static_cast<double>(height));\r
- break;\r
- }\r
- }\r
\r
return write;\r
}\r
<?xml version="1.0" encoding="utf-8"?>\r
<configuration>\r
<paths>\r
- <media-path>L:\\casparcg\\_media\\</media-path>\r
- <log-path>L:\\casparcg\\_log\\</log-path>\r
- <data-path>L:\\casparcg\\_data\\</data-path>\r
- <template-path>L:\\casparcg\\_templates\\</template-path>\r
+ <media-path>C:\Lokala Filer\server\branches\2.0.0.2\bin\\_media\\</media-path>\r
+ <log-path>C:\Lokala Filer\server\branches\2.0.0.2\bin\\_log\\</log-path>\r
+ <data-path>C:\Lokala Filer\server\branches\2.0.0.2\bin\\_data\\</data-path>\r
+ <template-path>C:\Lokala Filer\server\branches\2.0.0.2\bin\\_templates\\</template-path>\r
<template-host>cg.fth.18</template-host>\r
</paths>\r
<diagnostics>\r
</ffmpeg>\r
<channels>\r
<channel>\r
- <video-mode>1080i5000</video-mode>\r
- <consumers>\r
- <decklink>\r
- <device>1</device>\r
- <embedded-audio>true</embedded-audio>\r
- </decklink>\r
- </consumers>\r
- </channel>\r
- <channel>\r
- <video-mode>1080i5000</video-mode>\r
+ <video-mode>PAL</video-mode>\r
<consumers>\r
<screen></screen>\r
- <audio></audio>\r
- <!--<decklink>\r
- <device>2</device>\r
- <embedded-audio>true</embedded-audio>\r
- </decklink>-->\r
</consumers>\r
</channel>\r
</channels>\r