#include "format/flv.h"\r
\r
#include <tbb/concurrent_unordered_map.h>\r
-#include <tbb/concurrent_queue.h>\r
+#include <concurrent_queue.h>\r
\r
#include <core/producer/frame/frame_transform.h>\r
#include <core/producer/frame/frame_factory.h>\r
\r
#include <common/exception/exceptions.h>\r
\r
-#include <tbb/parallel_for.h>\r
+#include <ppl.h>\r
\r
#include <boost/filesystem.hpp>\r
#include <boost/lexical_cast.hpp>\r
\r
safe_ptr<core::write_frame> make_write_frame(const void* tag, const safe_ptr<AVFrame>& decoded_frame, const safe_ptr<core::frame_factory>& frame_factory, int hints)\r
{ \r
- static tbb::concurrent_unordered_map<size_t, tbb::concurrent_queue<std::shared_ptr<SwsContext>>> sws_contexts_;\r
+ static tbb::concurrent_unordered_map<size_t, Concurrency::concurrent_queue<std::shared_ptr<SwsContext>>> sws_contexts_;\r
\r
const auto width = decoded_frame->width;\r
const auto height = decoded_frame->height;\r
auto decoded_linesize = decoded_frame->linesize[n];\r
\r
// Copy line by line since ffmpeg sometimes pads each line.\r
- tbb::affinity_partitioner ap;\r
- tbb::parallel_for(tbb::blocked_range<size_t>(0, static_cast<int>(desc.planes[n].height)), [&](const tbb::blocked_range<size_t>& r)\r
+ Concurrency::parallel_for(0, static_cast<int>(desc.planes[n].height), [&](size_t y)\r
{\r
- for(size_t y = r.begin(); y != r.end(); ++y)\r
- memcpy(result + y*plane.linesize, decoded + y*decoded_linesize, plane.linesize);\r
- }, ap);\r
+ memcpy(result + y*plane.linesize, decoded + y*decoded_linesize, plane.linesize);\r
+ });\r
\r
write->commit(n);\r
}\r
video_context.time_base.den = static_cast<int>(closest_fps*1000000.0);\r
}\r
\r
+std::shared_ptr<AVPacket> create_packet()\r
+{\r
+ std::shared_ptr<AVPacket> packet(new AVPacket, [](AVPacket* p)\r
+ {\r
+ av_free_packet(p);\r
+ delete p;\r
+ });\r
+ \r
+ av_init_packet(packet.get());\r
+ return packet;\r
+}\r
+\r
+const std::shared_ptr<AVPacket>& loop_packet()\r
+{\r
+ static auto packet1 = create_packet();\r
+ return packet1;\r
+}\r
+\r
+const std::shared_ptr<AVPacket>& eof_packet()\r
+{\r
+ static auto packet2 = create_packet();\r
+ return packet2;\r
+}\r
+\r
+const std::shared_ptr<AVFrame>& loop_video()\r
+{\r
+ static auto frame1 = std::shared_ptr<AVFrame>(avcodec_alloc_frame(), av_free);\r
+ return frame1;\r
+}\r
+\r
+const std::shared_ptr<AVFrame>& empty_video()\r
+{\r
+ static auto frame1 = std::shared_ptr<AVFrame>(avcodec_alloc_frame(), av_free);\r
+ return frame1;\r
+}\r
+\r
+const std::shared_ptr<AVFrame>& eof_video()\r
+{\r
+ static auto frame2 = std::shared_ptr<AVFrame>(avcodec_alloc_frame(), av_free);\r
+ return frame2;\r
+}\r
+\r
+const std::shared_ptr<core::audio_buffer>& loop_audio()\r
+{\r
+ static auto audio1 = std::make_shared<core::audio_buffer>();\r
+ return audio1;\r
+}\r
+\r
+const std::shared_ptr<core::audio_buffer>& empty_audio()\r
+{\r
+ static auto audio1 = std::make_shared<core::audio_buffer>();\r
+ return audio1;\r
+}\r
+\r
+const std::shared_ptr<core::audio_buffer>& eof_audio()\r
+{\r
+ static auto audio2 = std::make_shared<core::audio_buffer>();\r
+ return audio2;\r
+}\r
+\r
}}
\ No newline at end of file