gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:31:36 27 4
gpt4 key购买 nike

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

我使用以下命令创建一个指向上面内容的 char 指针:

/* 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 会在一段时间后占用所有可用内存)。

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

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

有什么想法吗?

最佳答案

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

关于c - VirtualDub 过滤器帧缓冲区 - 释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50494401/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com