首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VirtualDub过滤器帧缓冲区释放内存

VirtualDub过滤器帧缓冲区释放内存
EN

Stack Overflow用户
提问于 2018-05-24 01:39:00
回答 1查看 32关注 0票数 0

我正在编写一个VirtualDub过滤器,它需要一个单独的帧缓冲区,用于在fa->src.data和fa->dst.data之间进行中间图像处理(.data本质上是一个指向像素数据的指针)。

我用下面的代码创建了一个指向上面代码的char指针:

代码语言:javascript
复制
/* 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);

这样,我就可以逐行将数据从源帧复制到目标帧:

代码语言:javascript
复制
memcpy(dst,src,w);

现在我想要一个中间缓冲区,可以从*dst复制到buffer,然后从buffer复制到*src。我该怎么做呢?

我尝试了几种方法,都取得了不同程度的成功。

代码语言:javascript
复制
/* Define and initialise char array with malloc */
char *buf = (char*)malloc(w*h); 

然后:

代码语言:javascript
复制
memcpy(buf,src,w); /* copy to buffer */
memcpy(dst,buf,w); /* copy from buffer to dst */

大多数情况下,这似乎是可行的。然而,过了一段时间后,我得到了“模块中发生了越界内存访问(访问冲突)”。问题是我似乎耗尽了系统内存(VirtualDub会在一段时间后占用所有可用内存)。

我需要释放缓冲区吗?看起来很奇怪,因为它每一帧都会被初始化。我怎样才能释放它?

我尝试了free(dstbuf)和free(&dstbuf),但在运行时得到“调试断言失败”错误,表达式:_CrtIsValidHeapPointer(pUserData)...没有太多其他东西。

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2018-05-25 14:33:40

通过每次运行仅分配一次内存来解决。没有理由为每个帧分配内存,因为我一次只需要保存一个帧。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50494401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档