Фильтр кадров VirtualDub - освобождение памяти - PullRequest
0 голосов
/ 23 мая 2018

Я пишу фильтр VirtualDub, который требует отдельного буфера кадров для промежуточной обработки изображений между fa-> src.data и fa-> dst.data (.data по сути является указателем на данные пикселей).

Я создаю указатель на символ выше, используя это:

/* Pointers to source and destination frame stores */
char *src = (char *)fa->src.data;
char *dst = (char *)fa->dst.data;

/* Image width and height */
int w = fa->src.w*sizeof(Pixel32);
int h = fa->src.h*sizeof(Pixel32);

Это затем позволяет мне копировать данные из исходного кадра в целевой кадр, строка за строкой:

memcpy(dst,src,w);

ТеперьЯ хотел бы иметь промежуточный буфер, который я могу скопировать из * dst в буфер, затем из буфера в * src.Как я могу это сделать?

Я пробовал несколько вещей с разной степенью успеха.

/* Define and initialise char array with malloc */
char *buf = (char*)malloc(w*h); 

Затем:

memcpy(buf,src,w); /* copy to buffer */
memcpy(dst,buf,w); /* copy from buffer to dst */

В большинстве случаев это кажетсяРабота.Однако через некоторое время я получаю «Доступ к памяти за пределами допустимого диапазона (нарушение прав доступа) в модуле».Проблема в том, что у меня, похоже, заканчивается системная память (VirtualDub забирает ВСЕ доступную память через некоторое время).

Нужно ли освобождать буфер?Кажется странным, так как он инициализируется каждый кадр.Как я могу освободить его?

Я пробовал бесплатно (dstbuf) и бесплатно (& dstbuf), но во время выполнения я получаю сообщение об ошибке «Debug Assertion Failed», выражение: _CrtIsValidHeapPointer (pUserData) ... и не более того.

Есть идеи?

1 Ответ

0 голосов
/ 25 мая 2018

Разрешается выделением памяти только один раз за цикл.Нет причин выделять память для каждого кадра, поскольку мне нужно удерживать только один кадр за раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...