<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
<MultiProcessorCompilation>true</MultiProcessorCompilation>\r
<PreprocessorDefinitions>TBB_USE_CAPTURED_EXCEPTION=0;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
- <WholeProgramOptimization>true</WholeProgramOptimization>\r
+ <WholeProgramOptimization>false</WholeProgramOptimization>\r
<TreatWarningAsError>true</TreatWarningAsError>\r
<OmitFramePointers>true</OmitFramePointers>\r
<FloatingPointModel>Fast</FloatingPointModel>\r
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>\r
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
<RuntimeTypeInfo>true</RuntimeTypeInfo>\r
- <WholeProgramOptimization>true</WholeProgramOptimization>\r
+ <WholeProgramOptimization>false</WholeProgramOptimization>\r
<TreatWarningAsError>true</TreatWarningAsError>\r
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
<ForcedIncludeFiles>compiler/vs/disable_silly_warnings.h</ForcedIncludeFiles>\r
</Command>\r
</PreBuildEvent>\r
<Lib>\r
- <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>\r
+ <LinkTimeCodeGeneration>false</LinkTimeCodeGeneration>\r
</Lib>\r
</ItemDefinitionGroup>\r
<ItemGroup>\r
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
<MultiProcessorCompilation>true</MultiProcessorCompilation>\r
<PreprocessorDefinitions>TBB_USE_CAPTURED_EXCEPTION=0;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
- <WholeProgramOptimization>true</WholeProgramOptimization>\r
+ <WholeProgramOptimization>false</WholeProgramOptimization>\r
<TreatWarningAsError>true</TreatWarningAsError>\r
<OmitFramePointers>true</OmitFramePointers>\r
<FloatingPointModel>Fast</FloatingPointModel>\r
</Command>\r
</PostBuildEvent>\r
<Lib>\r
- <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>\r
+ <LinkTimeCodeGeneration>false</LinkTimeCodeGeneration>\r
</Lib>\r
</ItemDefinitionGroup>\r
<ItemGroup>\r
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
<MultiProcessorCompilation>true</MultiProcessorCompilation>\r
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;TBB_USE_CAPTURED_EXCEPTION=0;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
- <WholeProgramOptimization>true</WholeProgramOptimization>\r
+ <WholeProgramOptimization>false</WholeProgramOptimization>\r
<TreatWarningAsError>true</TreatWarningAsError>\r
<OmitFramePointers>true</OmitFramePointers>\r
<FloatingPointModel>Fast</FloatingPointModel>\r
<Lib>\r
<AdditionalDependencies>\r
</AdditionalDependencies>\r
- <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>\r
+ <LinkTimeCodeGeneration>false</LinkTimeCodeGeneration>\r
</Lib>\r
</ItemDefinitionGroup>\r
<ItemGroup>\r
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
<MultiProcessorCompilation>true</MultiProcessorCompilation>\r
<PreprocessorDefinitions>TBB_USE_CAPTURED_EXCEPTION=0;NDEBUG;_VC80_UPGRADE=0x0710;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
- <WholeProgramOptimization>true</WholeProgramOptimization>\r
+ <WholeProgramOptimization>false</WholeProgramOptimization>\r
<TreatWarningAsError>true</TreatWarningAsError>\r
<OmitFramePointers>true</OmitFramePointers>\r
<FloatingPointModel>Fast</FloatingPointModel>\r
</Command>\r
</PostBuildEvent>\r
<Lib>\r
- <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>\r
+ <LinkTimeCodeGeneration>false</LinkTimeCodeGeneration>\r
</Lib>\r
</ItemDefinitionGroup>\r
<ItemGroup>\r
auto filter_str = get_param(L"FILTER", params); \r
auto length = get_param(L"LENGTH", params, std::numeric_limits<uint32_t>::max()); \r
auto in_format_desc = core::video_format_desc(get_param(L"FORMAT", params, L"INVALID"));\r
- \r
- boost::replace_all(filter_str, L"DEINTERLACE", L"YADIF=0:-1");\r
- boost::replace_all(filter_str, L"DEINTERLACE_BOB", L"YADIF=1:-1");\r
- \r
+ \r
if(in_format_desc.format == core::video_format::invalid)\r
in_format_desc = out_format_desc;\r
\r
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
<MultiProcessorCompilation>true</MultiProcessorCompilation>\r
<PreprocessorDefinitions>TBB_USE_CAPTURED_EXCEPTION=0;NDEBUG;_VC80_UPGRADE=0x0710;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
- <WholeProgramOptimization>true</WholeProgramOptimization>\r
+ <WholeProgramOptimization>false</WholeProgramOptimization>\r
<TreatWarningAsError>true</TreatWarningAsError>\r
<OmitFramePointers>true</OmitFramePointers>\r
<FloatingPointModel>Fast</FloatingPointModel>\r
</Command>\r
</PostBuildEvent>\r
<Lib>\r
- <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>\r
+ <LinkTimeCodeGeneration>false</LinkTimeCodeGeneration>\r
</Lib>\r
</ItemDefinitionGroup>\r
<ItemGroup>\r
\r
void push(const std::shared_ptr<AVPacket>& packet)\r
{ \r
- if(!packet)\r
+ if(!packet || !codec_context_)\r
return;\r
\r
if(packet->stream_index == index_ || packet->data == nullptr)\r
\r
std::shared_ptr<core::audio_buffer> poll()\r
{\r
+ if(!codec_context_)\r
+ return empty_audio();\r
+\r
if(packets_.empty())\r
return nullptr;\r
\r
auto packet = packets_.front();\r
\r
- if(!codec_context_) \r
+ if(packet->data == nullptr)\r
{\r
packets_.pop();\r
- return packet->data == nullptr ? flush_audio() : empty_audio();\r
+ avcodec_flush_buffers(codec_context_.get());\r
+ return nullptr;\r
}\r
- else\r
- {\r
- if(packet->data == nullptr)\r
- {\r
- packets_.pop();\r
- avcodec_flush_buffers(codec_context_.get());\r
- return flush_audio();\r
- }\r
\r
- auto audio = decode(*packet);\r
+ auto audio = decode(*packet);\r
\r
- if(packet->size == 0) \r
- packets_.pop();\r
+ if(packet->size == 0) \r
+ packets_.pop();\r
\r
- return audio;\r
- }\r
+ return audio;\r
}\r
\r
std::shared_ptr<core::audio_buffer> decode(AVPacket& pkt)\r
\r
bool ready() const\r
{\r
- return !packets_.empty();\r
+ return !codec_context_ || !packets_.empty();\r
}\r
\r
void clear()\r
auto start = get_param(L"START", params, get_param(L"SEEK", params, static_cast<uint32_t>(0)));\r
auto length = get_param(L"LENGTH", params, std::numeric_limits<uint32_t>::max());\r
auto filter_str = get_param(L"FILTER", params, L""); \r
- \r
- boost::replace_all(filter_str, L"DEINTERLACE", L"YADIF=0:-1");\r
- boost::replace_all(filter_str, L"DEINTERLACE_BOB", L"YADIF=1:-1");\r
\r
return spl::make_shared_ptr(std::make_shared<ffmpeg_producer>(frame_factory, format_desc, filename, filter_str, loop, start, length));\r
}\r
int mode;\r
};\r
\r
- arg args[4096];\r
- int index;\r
- int last_index;\r
-\r
- parallel_yadif_context() : index(0){}\r
+ int size;\r
+ std::vector<arg> args;\r
};\r
\r
void (*org_yadif_filter_line)(uint8_t *dst, uint8_t *prev, uint8_t *cur, uint8_t *next, int w, int prefs, int mrefs, int parity, int mode) = 0;\r
void parallel_yadif_filter_line(parallel_yadif_context& ctx, uint8_t *dst, uint8_t *prev, uint8_t *cur, uint8_t *next, int w, int prefs, int mrefs, int parity, int mode)\r
{\r
parallel_yadif_context::arg arg = {dst, prev, cur, next, w, prefs, mrefs, parity, mode};\r
- ctx.args[ctx.index++] = arg;\r
+ ctx.args.push_back(arg);\r
\r
- if(ctx.index == ctx.last_index)\r
+ if(ctx.args.size() == ctx.size)\r
{ \r
- tbb::parallel_for(tbb::blocked_range<size_t>(0, ctx.index), [=](const tbb::blocked_range<size_t>& r)\r
+ tbb::parallel_for(tbb::blocked_range<size_t>(0, ctx.args.size()), [=](const tbb::blocked_range<size_t>& r)\r
{\r
for(auto n = r.begin(); n != r.end(); ++n)\r
org_yadif_filter_line(ctx.args[n].dst, ctx.args[n].prev, ctx.args[n].cur, ctx.args[n].next, ctx.args[n].w, ctx.args[n].prefs, ctx.args[n].mrefs, ctx.args[n].parity, ctx.args[n].mode);\r
});\r
- ctx.index = 0;\r
+ ctx.args.clear();\r
}\r
}\r
\r
while(index < sizeof(fs)/sizeof(fs[0]) && fs[index] != func)\r
++index;\r
\r
- ctxs[index].last_index = 0;\r
+ ctxs[index].size = 0;\r
for (int y = 0; y < ctx->inputs[0]->h; y++)\r
{\r
if ((y ^ yadif->parity) & 1)\r
- ++ctxs[index].last_index;\r
+ ++ctxs[index].size;\r
}\r
\r
yadif->filter_line = func;\r
\r
struct frame_muxer::impl : boost::noncopyable\r
{ \r
- std::queue<std::queue<core::mutable_frame>> video_streams_;\r
- std::queue<core::audio_buffer> audio_streams_;\r
+ std::queue<core::mutable_frame> video_stream_;\r
+ core::audio_buffer audio_stream_;\r
std::queue<draw_frame> frame_buffer_;\r
display_mode display_mode_;\r
const double in_fps_;\r
, audio_cadence_(format_desc_.audio_cadence)\r
, frame_factory_(frame_factory)\r
, filter_str_(filter_str)\r
- {\r
- video_streams_.push(std::queue<core::mutable_frame>());\r
- audio_streams_.push(core::audio_buffer());\r
- \r
+ { \r
// Note: Uses 1 step rotated cadence for 1001 modes (1602, 1602, 1601, 1602, 1601)\r
// This cadence fills the audio mixer most optimally.\r
boost::range::rotate(audio_cadence_, std::end(audio_cadence_)-1);\r
}\r
\r
- void push(const std::shared_ptr<AVFrame>& video_frame)\r
+ void push(const std::shared_ptr<AVFrame>& video)\r
{ \r
- if(!video_frame)\r
- {\r
- merge();\r
- return;\r
- }\r
-\r
- if(video_frame == flush_video()) \r
- video_streams_.push(std::queue<core::mutable_frame>()); \r
- else if(video_frame == empty_video())\r
+ if(video == empty_video())\r
{\r
auto empty_frame = frame_factory_->create_frame(this, core::pixel_format_desc(core::pixel_format::invalid));\r
- video_streams_.back().push(std::move(empty_frame));\r
+ video_stream_.push(std::move(empty_frame));\r
display_mode_ = display_mode::simple;\r
}\r
- else\r
+ else if(video)\r
{\r
if(display_mode_ == display_mode::invalid)\r
- update_display_mode(video_frame);\r
+ update_display_mode(video);\r
\r
- filter_.push(video_frame);\r
+ filter_.push(video);\r
BOOST_FOREACH(auto& av_frame, filter_.poll_all()) \r
- video_streams_.back().push(make_frame(this, av_frame, format_desc_.fps, *frame_factory_)); \r
+ video_stream_.push(make_frame(this, av_frame, format_desc_.fps, *frame_factory_)); \r
}\r
\r
- if(video_streams_.back().size() > 32)\r
- BOOST_THROW_EXCEPTION(invalid_operation() << source_info("frame_muxer") << msg_info("video-stream overflow. This can be caused by incorrect frame-rate. Check clip meta-data."));\r
- \r
merge();\r
}\r
\r
void push(const std::shared_ptr<core::audio_buffer>& audio)\r
{\r
- if(!audio)\r
- {\r
- merge();\r
- return;\r
- }\r
-\r
- if(audio == flush_audio()) \r
- audio_streams_.push(core::audio_buffer()); \r
- else if(audio == empty_audio()) \r
- boost::range::push_back(audio_streams_.back(), core::audio_buffer(audio_cadence_.front(), 0)); \r
- else \r
- boost::range::push_back(audio_streams_.back(), *audio); \r
-\r
- if(audio_streams_.back().size() > static_cast<size_t>(32*audio_cadence_.front()))\r
- BOOST_THROW_EXCEPTION(invalid_operation() << source_info("frame_muxer") << msg_info("audio-stream overflow. This can be caused by incorrect frame-rate. Check clip meta-data."));\r
+ if(audio == empty_audio()) \r
+ boost::range::push_back(audio_stream_, core::audio_buffer(audio_cadence_.front(), 0)); \r
+ else if(audio) \r
+ boost::range::push_back(audio_stream_, *audio); \r
\r
merge();\r
}\r
\r
bool video_ready() const\r
- { \r
- return video_streams_.size() > 1 || (video_streams_.size() >= audio_streams_.size() && video_ready2());\r
- }\r
- \r
- bool audio_ready() const\r
- {\r
- return audio_streams_.size() > 1 || (audio_streams_.size() >= video_streams_.size() && audio_ready2());\r
- }\r
-\r
- bool video_ready2() const\r
{ \r
switch(display_mode_)\r
{\r
case display_mode::deinterlace_bob_reinterlace: \r
case display_mode::interlace: \r
case display_mode::half:\r
- return video_streams_.front().size() >= 2;\r
+ return video_stream_.size() >= 2;\r
default: \r
- return video_streams_.front().size() >= 1;\r
+ return video_stream_.size() >= 1;\r
}\r
}\r
\r
- bool audio_ready2() const\r
+ bool audio_ready() const\r
{\r
switch(display_mode_)\r
{\r
case display_mode::duplicate: \r
- return audio_streams_.front().size()/2 >= static_cast<size_t>(audio_cadence_.front());\r
+ return audio_stream_.size()/2 >= static_cast<size_t>(audio_cadence_.front());\r
default: \r
- return audio_streams_.front().size() >= static_cast<size_t>(audio_cadence_.front());\r
+ return audio_stream_.size() >= static_cast<size_t>(audio_cadence_.front());\r
}\r
}\r
\r
\r
void merge()\r
{\r
- if(video_streams_.size() > 1 && audio_streams_.size() > 1 && (!video_ready2() || !audio_ready2()))\r
- {\r
- if(!video_streams_.front().empty() || !audio_streams_.front().empty())\r
- CASPAR_LOG(trace) << "Truncating: " << video_streams_.front().size() << L" video-frames, " << audio_streams_.front().size() << L" audio-samples.";\r
+ if(video_ready() && audio_ready() && display_mode_ != display_mode::invalid)\r
+ { \r
+ auto frame1 = pop_video();\r
+ frame1.audio_data() = pop_audio();\r
\r
- video_streams_.pop();\r
- audio_streams_.pop();\r
- }\r
-\r
- if(!video_ready2() || !audio_ready2() || display_mode_ == display_mode::invalid)\r
- return;\r
- \r
- auto frame1 = pop_video();\r
- frame1.audio_data() = pop_audio();\r
-\r
- switch(display_mode_)\r
- {\r
- case display_mode::simple: \r
- case display_mode::deinterlace_bob: \r
- case display_mode::deinterlace: \r
- {\r
- frame_buffer_.push(core::draw_frame(std::move(frame1)));\r
- break;\r
- }\r
- case display_mode::interlace: \r
- case display_mode::deinterlace_bob_reinterlace: \r
- { \r
- auto frame2 = pop_video();\r
-\r
- frame_buffer_.push(core::draw_frame::interlace(\r
- core::draw_frame(std::move(frame1)),\r
- core::draw_frame(std::move(frame2)),\r
- format_desc_.field_mode)); \r
- break;\r
- }\r
- case display_mode::duplicate: \r
+ switch(display_mode_)\r
{\r
- boost::range::push_back(frame1.audio_data(), pop_audio());\r
-\r
- auto draw_frame = core::draw_frame(std::move(frame1));\r
- frame_buffer_.push(draw_frame);\r
- frame_buffer_.push(draw_frame);\r
- break;\r
- }\r
- case display_mode::half: \r
- { \r
- pop_video(); // Throw away\r
-\r
- frame_buffer_.push(core::draw_frame(std::move(frame1)));\r
- break;\r
+ case display_mode::simple: \r
+ case display_mode::deinterlace_bob: \r
+ case display_mode::deinterlace: \r
+ {\r
+ frame_buffer_.push(core::draw_frame(std::move(frame1)));\r
+ break;\r
+ }\r
+ case display_mode::interlace: \r
+ case display_mode::deinterlace_bob_reinterlace: \r
+ { \r
+ auto frame2 = pop_video();\r
+\r
+ frame_buffer_.push(core::draw_frame::interlace(\r
+ core::draw_frame(std::move(frame1)),\r
+ core::draw_frame(std::move(frame2)),\r
+ format_desc_.field_mode)); \r
+ break;\r
+ }\r
+ case display_mode::duplicate: \r
+ {\r
+ boost::range::push_back(frame1.audio_data(), pop_audio());\r
+\r
+ auto draw_frame = core::draw_frame(std::move(frame1));\r
+ frame_buffer_.push(draw_frame);\r
+ frame_buffer_.push(draw_frame);\r
+ break;\r
+ }\r
+ case display_mode::half: \r
+ { \r
+ pop_video(); // Throw away\r
+\r
+ frame_buffer_.push(core::draw_frame(std::move(frame1)));\r
+ break;\r
+ }\r
+ default:\r
+ BOOST_THROW_EXCEPTION(invalid_operation());\r
}\r
- default:\r
- BOOST_THROW_EXCEPTION(invalid_operation());\r
}\r
}\r
\r
core::mutable_frame pop_video()\r
{\r
- auto frame = std::move(video_streams_.front().front());\r
- video_streams_.front().pop(); \r
+ auto frame = std::move(video_stream_.front());\r
+ video_stream_.pop(); \r
return std::move(frame);\r
}\r
\r
core::audio_buffer pop_audio()\r
{\r
- CASPAR_VERIFY(audio_streams_.front().size() >= static_cast<size_t>(audio_cadence_.front()));\r
-\r
- auto begin = audio_streams_.front().begin();\r
+ auto begin = audio_stream_.begin();\r
auto end = begin + audio_cadence_.front();\r
\r
core::audio_buffer samples(begin, end);\r
- audio_streams_.front().erase(begin, end);\r
+ audio_stream_.erase(begin, end);\r
\r
boost::range::rotate(audio_cadence_, std::begin(audio_cadence_)+1);\r
\r
\r
void clear()\r
{\r
- while(!video_streams_.empty())\r
- video_streams_.pop(); \r
- while(!audio_streams_.empty())\r
- audio_streams_.pop();\r
+ while(!video_stream_.empty())\r
+ video_stream_.pop(); \r
+\r
+ audio_stream_.clear();\r
+\r
while(!frame_buffer_.empty())\r
frame_buffer_.pop();\r
-\r
- video_streams_.push(std::queue<core::mutable_frame>());\r
- audio_streams_.push(core::audio_buffer());\r
}\r
};\r
\r
\r
void push(const std::shared_ptr<AVPacket>& packet)\r
{\r
- if(!packet)\r
+ if(!packet || !codec_context_)\r
return;\r
\r
if(packet->stream_index == index_ || packet->data == nullptr)\r
\r
std::shared_ptr<AVFrame> poll()\r
{ \r
+ if(!codec_context_)\r
+ return empty_video();\r
+\r
if(packets_.empty())\r
return nullptr;\r
\r
auto packet = packets_.front();\r
\r
- if(!codec_context_) \r
- {\r
- packets_.pop();\r
- return packet->data == nullptr ? flush_video() : empty_video();\r
- }\r
- else\r
- {\r
- if(packet->data == nullptr)\r
- { \r
- if(codec_context_->codec->capabilities & CODEC_CAP_DELAY)\r
- {\r
- auto video = decode(*packet);\r
- if(video)\r
- return video;\r
- }\r
- \r
- packets_.pop();\r
- avcodec_flush_buffers(codec_context_.get()); \r
- return flush_video(); \r
+ if(packet->data == nullptr)\r
+ { \r
+ if(codec_context_->codec->capabilities & CODEC_CAP_DELAY)\r
+ {\r
+ auto video = decode(*packet);\r
+ if(video)\r
+ return video;\r
}\r
- \r
+ \r
packets_.pop();\r
- return decode(*packet);\r
+ avcodec_flush_buffers(codec_context_.get()); \r
+ return nullptr; \r
}\r
- \r
+ \r
+ packets_.pop();\r
+ return decode(*packet); \r
}\r
\r
std::shared_ptr<AVFrame> decode(AVPacket& pkt)\r
\r
bool ready() const\r
{\r
- return !packets_.empty();\r
+ return !codec_context_ || !packets_.empty();\r
}\r
\r
void clear()\r
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
<MultiProcessorCompilation>true</MultiProcessorCompilation>\r
<PreprocessorDefinitions>TBB_USE_CAPTURED_EXCEPTION=0;NDEBUG;_VC80_UPGRADE=0x0710;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
- <WholeProgramOptimization>true</WholeProgramOptimization>\r
+ <WholeProgramOptimization>false</WholeProgramOptimization>\r
<TreatWarningAsError>true</TreatWarningAsError>\r
<OmitFramePointers>true</OmitFramePointers>\r
<FloatingPointModel>Fast</FloatingPointModel>\r
</Command>\r
</PostBuildEvent>\r
<Lib>\r
- <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>\r
+ <LinkTimeCodeGeneration>false</LinkTimeCodeGeneration>\r
</Lib>\r
</ItemDefinitionGroup>\r
<ItemGroup>\r
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
<MultiProcessorCompilation>true</MultiProcessorCompilation>\r
<PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;TBB_USE_CAPTURED_EXCEPTION=0;NDEBUG;FREEIMAGE_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
- <WholeProgramOptimization>true</WholeProgramOptimization>\r
+ <WholeProgramOptimization>false</WholeProgramOptimization>\r
<TreatWarningAsError>true</TreatWarningAsError>\r
<OmitFramePointers>true</OmitFramePointers>\r
<FloatingPointModel>Fast</FloatingPointModel>\r
</Command>\r
</PostBuildEvent>\r
<Lib>\r
- <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>\r
+ <LinkTimeCodeGeneration>false</LinkTimeCodeGeneration>\r
</Lib>\r
</ItemDefinitionGroup>\r
<ItemGroup>\r
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
<MultiProcessorCompilation>true</MultiProcessorCompilation>\r
<PreprocessorDefinitions>TBB_USE_CAPTURED_EXCEPTION=0;NDEBUG;_VC80_UPGRADE=0x0710;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
- <WholeProgramOptimization>true</WholeProgramOptimization>\r
+ <WholeProgramOptimization>false</WholeProgramOptimization>\r
<TreatWarningAsError>true</TreatWarningAsError>\r
<OmitFramePointers>true</OmitFramePointers>\r
<FloatingPointModel>Fast</FloatingPointModel>\r
</Command>\r
</PostBuildEvent>\r
<Lib>\r
- <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>\r
+ <LinkTimeCodeGeneration>false</LinkTimeCodeGeneration>\r
</Lib>\r
</ItemDefinitionGroup>\r
<ItemGroup>\r
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
<MultiProcessorCompilation>true</MultiProcessorCompilation>\r
<PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;TBB_USE_CAPTURED_EXCEPTION=0;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
- <WholeProgramOptimization>true</WholeProgramOptimization>\r
+ <WholeProgramOptimization>false</WholeProgramOptimization>\r
<TreatWarningAsError>true</TreatWarningAsError>\r
<OmitFramePointers>true</OmitFramePointers>\r
<FloatingPointModel>Fast</FloatingPointModel>\r
</Command>\r
</PostBuildEvent>\r
<Lib>\r
- <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>\r
+ <LinkTimeCodeGeneration>false</LinkTimeCodeGeneration>\r
</Lib>\r
</ItemDefinitionGroup>\r
<ItemGroup>\r
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
<MultiProcessorCompilation>true</MultiProcessorCompilation>\r
<PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;TBB_USE_CAPTURED_EXCEPTION=0;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
- <WholeProgramOptimization>true</WholeProgramOptimization>\r
+ <WholeProgramOptimization>false</WholeProgramOptimization>\r
<TreatWarningAsError>true</TreatWarningAsError>\r
<OmitFramePointers>true</OmitFramePointers>\r
<FloatingPointModel>Fast</FloatingPointModel>\r
</Command>\r
</PostBuildEvent>\r
<Lib>\r
- <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>\r
+ <LinkTimeCodeGeneration>false</LinkTimeCodeGeneration>\r
</Lib>\r
</ItemDefinitionGroup>\r
<ItemGroup>\r
<ForcedIncludeFiles>common/compiler/vs/disable_silly_warnings.h</ForcedIncludeFiles>\r
<TreatWarningAsError>true</TreatWarningAsError>\r
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>\r
+ <WholeProgramOptimization>false</WholeProgramOptimization>\r
</ClCompile>\r
<Lib>\r
- <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>\r
+ <LinkTimeCodeGeneration>false</LinkTimeCodeGeneration>\r
</Lib>\r
</ItemDefinitionGroup>\r
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
<screen>\r
<auto-deinterlace>false</auto-deinterlace>\r
</screen>\r
+ <system-audio></system-audio>\r
</consumers>\r
</channel>\r
</channels>\r
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
<MultiProcessorCompilation>true</MultiProcessorCompilation>\r
<PreprocessorDefinitions>TBB_USE_CAPTURED_EXCEPTION=0;NDEBUG;COMPILE_RELEASE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
- <WholeProgramOptimization>true</WholeProgramOptimization>\r
+ <WholeProgramOptimization>false</WholeProgramOptimization>\r
<TreatWarningAsError>true</TreatWarningAsError>\r
<OmitFramePointers>true</OmitFramePointers>\r
<FloatingPointModel>Fast</FloatingPointModel>\r
<SubSystem>Console</SubSystem>\r
<RandomizedBaseAddress>false</RandomizedBaseAddress>\r
<MapExports>false</MapExports>\r
+ <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>\r
</Link>\r
<PostBuildEvent>\r
<Command>copy "$(SolutionDir)dependencies64\ffmpeg\bin\*.dll" "$(OutDir)"\r