我有一个使用 ffmpeg 的 C++ 应用程序。
我想要做的是用我自己的基于任务调度程序的执行替换基于线程的过滤器执行。
但是,一旦我尝试在“自定义”函数中调用函数指针,我就会遇到访问冲突,即使“自定义”函数与 ffmpeg 中的函数完全相同。
什么可能导致这种情况?某种调用约定的东西?
例如
struct AVFilterInternal {
int (*execute)(AVFilterContext *ctx, int (*func)(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs), void *arg,
int *ret, int nb_jobs);
};
static int custom_execute(AVFilterContext *ctx, int (*func)(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs), void *arg,
int *ret, int nb_jobs)
{
int i;
for (i = 0; i < nb_jobs; i++) { // MY goal is to have this as tbb::parallel_for
int r = func(ctx, arg, i, nb_jobs); // Access Violation. If I replace "func" with an inline implementation everything works fine.
if (ret)
ret[i] = r;
}
return 0;
}
void init()
{
/* Create filter graph */
// For each filter in filtergraph
reinterpret_cast<AVFilterInternal*>(filter->internal)->execute = custom_execute;
}