HarmonyOS 鸿蒙Next OH_VideoDecoder_RenderOutputBuffer oes纹理没有释放内存

发布于 1周前 作者 sinazl 来自 鸿蒙OS

HarmonyOS 鸿蒙Next OH_VideoDecoder_RenderOutputBuffer oes纹理没有释放内存

在此处绑定了OES纹理,并与nativeimage绑定到解码器中。

m_image = OH_NativeImage_Create(m_eglCore.getTextureId(), GL_TEXTURE_EXTERNAL_OES);
m_nativeWindow = OH_NativeImage_AcquireNativeWindow(m_image);
OH_OnFrameAvailableListener listener;
listener.context = this;
listener.onFrameAvailable = &HarMonyosDecoder::OnFrameAvailable;
ret = OH_NativeImage_SetOnFrameAvailableListener(m_image, listener);
ret = OH_VideoDecoder_SetSurface(m_decoder, m_nativeWindow);



在解码的回调函数中,为什么OH_VideoDecoder_RenderOutputBuffer此处没有释放内存,导致一直没能从解码器中获取存储空间。一直在wait。
m_VideoCodecUsetData->outputCond.wait(lock, this{return !m_VideoCodecUsetData->outputBufferInfoQueue.empty();});
CodecBufferInfo bufferInfo = m_VideoCodecUsetData->outputBufferInfoQueue.front();
m_VideoCodecUsetData->outputBufferInfoQueue.pop();
m_VideoCodecUsetData->outputFrameCount++;
lock.unlock();
if (m_render) {
ret = OH_VideoDecoder_RenderOutputBuffer(m_decoder, bufferInfo.bufferIndex);
}

3 回复

已解决

OH_NativeImage_UpdateSurfaceImage

纹理没有更新

针对您提到的HarmonyOS鸿蒙系统中Next OH_VideoDecoder_RenderOutputBuffer OES纹理没有释放内存的问题,这通常涉及到视频解码和渲染框架中的资源管理。在鸿蒙系统中,确保纹理资源正确释放是维护系统稳定性和性能的关键。

首先,请检查您的代码中是否有显式释放OES纹理的调用。这通常涉及到调用相应的API来删除纹理对象。如果已经有相应的释放代码,但问题依旧存在,那么可能是资源管理的逻辑存在漏洞,比如重复创建纹理但未正确匹配释放,或者在某些异常路径下资源未被正确清理。

此外,还需检查是否有其他组件或库占用了该纹理资源,导致无法正常释放。这种情况下,可能需要深入分析组件间的交互逻辑。

最后,确认您的鸿蒙系统版本和Next库版本是否最新,因为软件更新可能修复了旧版本中的资源管理漏洞。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。在那里,您可以获得更专业的技术支持和解决方案。

回到顶部