Провел статический анализ с помощью PVS
Для проекта mvtools2:
файл MVBlockFps.cpp в конструкторе MVBlockFps строка 40-41
if (nOverlapX!=0 || nOverlapX!=0)
env->ThrowError("MBlockFps: Overlap must be 0"); // may be implemented later but some modes are not clear
явно ошибка копи-паста, скорее всего нужно
if (nOverlapX!=0 || nOverlapY!=0)
env->ThrowError("MBlockFps: Overlap must be 0"); // may be implemented later but some modes are not clear
Далее набор из однотипных
DebugPrintf("Degrain2: get source frame %d clip %d",n,super);
Для PClip и IClip не перегружены операторы преобразования к int. Либо нужно ввести перегрузку, либо заменить %d на %p
файл MVDegrain2.cpp строчки 237, 338, 345, 352, 359; файл MVSuper.cpp строка 157
Файл MVDepan.cpp строка 711
int nf = (backward) ? ndest: ndest; // set next frame number as data frame if backward
Ошибка копи-паста, скорее всего нужно так:
int nf = (backward) ? ndest - 1 : ndest; // set next frame number as data frame if backward
Функция GetAbsolutePelPointer полностью идентична GetAbsolutePointerPel1. Файл mvinterface.h строки 710 и 665.
Типичная ошибка оперирования с IEEE754 double
Рекомендуется заменить на
if (fabs(fGamma - 1.0) <= 1e-4)
Точность 10^(-4) вполне достаточна.
Файлы maskfun.cpp строки 27, 167, 218. Схожее в файле mvdepan.cpp строках 313, 414, 547
Обратите внимание на возможное переполнение в MVMask::Length файл MVMask.cpp строки 89-97
double norme = double(v.x * v.x + v.y * v.y) / ( pel * pel);
Прошу не воспринимать этот пост как упрек или что-то подобное. Я лишь хочу, чтобы SVP был быстрым и содержал по возможности меньше ошибок.