Я пишу фильтр 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) ... и не более того.
Есть идеи?