如何在 Gstreamer 中复制和释放缓冲区
How to copy and release a buffer in Gstreamer
我正在使用 Gstreamer 的 Python 绑定。我有一个 Buffer
个对象,我想将其复制并添加到队列中,以便以后可以由另一个线程处理。
我的应用程序有内存泄漏,但我不确定这是否与 Gstreamer 有关。
复制缓冲区
目前我正在像这样复制缓冲区:
gst_buffer_copied = gst_buffer.copy_deep()
这是正确的吗?
释放内存
我需要稍后显式释放资源吗?我怎样才能做到这一点?
我试过
gst_buffer_copied.remove_all_memory()
但我有时会遇到 Segmentation fault (core dumped)
错误。不知道这样说对不对。
gst_buffer_copied
缓冲区应该拥有它自己的内存。因此,当此缓冲区的生命周期结束时,它将负责释放它的内存。
如果您手动删除内存块,您应该确保您的应用程序或管道中没有代码在之后尝试访问缓冲区的内存。
因此,当您这样做但管道尚未完成对该缓冲区的处理时,它将尝试访问您刚刚释放的内存,从而导致分段错误。
我正在使用 Gstreamer 的 Python 绑定。我有一个 Buffer
个对象,我想将其复制并添加到队列中,以便以后可以由另一个线程处理。
我的应用程序有内存泄漏,但我不确定这是否与 Gstreamer 有关。
复制缓冲区
目前我正在像这样复制缓冲区:
gst_buffer_copied = gst_buffer.copy_deep()
这是正确的吗?
释放内存
我需要稍后显式释放资源吗?我怎样才能做到这一点? 我试过
gst_buffer_copied.remove_all_memory()
但我有时会遇到 Segmentation fault (core dumped)
错误。不知道这样说对不对。
gst_buffer_copied
缓冲区应该拥有它自己的内存。因此,当此缓冲区的生命周期结束时,它将负责释放它的内存。
如果您手动删除内存块,您应该确保您的应用程序或管道中没有代码在之后尝试访问缓冲区的内存。
因此,当您这样做但管道尚未完成对该缓冲区的处理时,它将尝试访问您刚刚释放的内存,从而导致分段错误。