namespace caspar {\r
\r
int thread_execute(AVCodecContext* s, int (*func)(AVCodecContext *c2, void *arg2), void* arg, int* ret, int count, int size)\r
-{\r
- tbb::parallel_for(tbb::blocked_range<size_t>(0, count), [&](const tbb::blocked_range<size_t>& r)\r
- {\r
- for(size_t n = r.begin(); n != r.end(); ++n) \r
- {\r
- int r = func(s, reinterpret_cast<uint8_t*>(arg) + n*size);\r
- if(ret)\r
- ret[n] = r;\r
- }\r
- });\r
+{
+ tbb::parallel_for(0, count, 1, [&](int i)
+ {
+ int r = func(s, (char*)arg + i*size);
+ if(ret)
+ ret[i] = r;
+ });\r
\r
return 0;\r
}\r
tbb::atomic<int> counter; \r
counter = 0; \r
\r
- CASPAR_ASSERT(tbb::tbb_thread::hardware_concurrency() < 16);\r
+ CASPAR_VERIFY(tbb::tbb_thread::hardware_concurrency() < 16);\r
// Note: this will probably only work when tbb::task_scheduler_init::num_threads() < 16.\r
tbb::parallel_for(tbb::blocked_range<int>(0, count, 2), [&](const tbb::blocked_range<int> &r) \r
{ \r
// Some codecs don't like to have multiple multithreaded decoding instances. Only enable for those we know work.\r
if(std::find(std::begin(supported_codecs), std::end(supported_codecs), codec->id) != std::end(supported_codecs) && \r
(codec->capabilities & CODEC_CAP_SLICE_THREADS) && \r
- (avctx->thread_type & FF_THREAD_SLICE))\r
+ (avctx->thread_type & FF_THREAD_SLICE)) \r
{\r
thread_init(avctx);\r
} \r