我有一个使用ffmpeg的C ++应用程序。
我想要做的是用我自己的基于任务调度程序的执行替换基于线程的过滤器执行。
但是,只要我尝试在“自定义”函数中调用函数指针,即使“自定义”函数与ffmpeg中的函数完全相同,我也会遇到访问冲突。
是什么导致这个?某种召唤惯例?
e.g。
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;
}