[FFmpeg-user] Using custom thread pool via setting execute and execute2
Olzhas Zhumabek
anonymous.from.applecity at gmail.com
Wed Oct 13 14:40:10 EEST 2021
Hi,
Background of my problem:
I've got an app that has multiple video streams. Since thread pool is
created per context, I've got way too many threads that interfere with a
performance critical part of my app. The solution for this I believe is to
ask ffmpeg to use my threads that I pinned as a thread pool by setting the
execute and execute2 function pointer variables in AVCodecContext.
Current problem:
Here is the example of my AVCodecContext creation stripped of error
checking (further uses of AVCodecContext do work and behave as expected,
just the specified handlers are not called):
AVCodec* codec = /*properly init, tested that works*/;
AVCodecContext* context = avcodec_alloc_context3(codec_);
context_->execute = &thread_execute;
context_->execute2 = &thread_execute2;
context_->thread_count = 0;
context_->thread_type = FF_THREAD_SLICE;
context_->active_thread_type = FF_THREAD_SLICE;
avcodec_open2(context, codec, NULL);
/* some usage which works afterwards*/
The problem is that the functions thread_execute and thread_execute2 are
not called. The codec library used is libx264 (checked that it is the one
loaded).
Could you please advise on where I should search for errors in my code (why
the execute handler function is not called)?
Here are the functions I specified:
int thread_execute(AVCodecContext* s, int (*func)(AVCodecContext *c2, void
*arg2), void* arg, int* ret, int count, int size)
{
// Do it all serially for now
COMMON_LOG_SS(Info, "thread_execute IS CALLED !!!!!!!");
for (int k = 0; k < count; ++k)
{
ret[k] = func(s, arg);
}
return 0;
}
int thread_execute2(AVCodecContext* s, int (*func)(AVCodecContext* c2,
void* arg2, int, int), void* arg, int* ret, int count)
{
// Do it all serially for now
COMMON_LOG_SS(Info, "thread_execute2 IS CALLED !!!!!!!");
for (int k = 0; k < count; ++k)
{
ret[k] = func(s, arg, k, count);
}
return 0;
}
I have tried setting debug points into the functions I created, but they do
not hit (I used the debug build of my app). I have also verified via
debugger that the handler are not changed after calling avcodec_open2.
Best,
Olzhas
More information about the ffmpeg-user
mailing list