在做视频播放硬解适配,参考demo https://gitee.com/openharmony-sig/ohos_videocompressor/blob/m...
int32_t VideoDec::SetOutputSurface()
{
return OH_VideoDecoder_SetSurface(vdec_, mutexManager->nativeWindow);
}
这里的 nativeWindow 是怎样获取或者创建的,在 demo中没有看到
在做视频播放硬解适配,参考demo https://gitee.com/openharmony-sig/ohos_videocompressor/blob/m...
int32_t VideoDec::SetOutputSurface()
{
return OH_VideoDecoder_SetSurface(vdec_, mutexManager->nativeWindow);
}
这里的 nativeWindow 是怎样获取或者创建的,在 demo中没有看到
在视频解码的上下文中,nativeWindow
通常是一个指向渲染表面的指针,该表面用于接收解码后的视频帧。这个表面的具体实现和获取方式取决于你使用的操作系统和图形框架。对于 OpenHarmony 这样的系统,以及基于 Android 或 Linux 的环境,nativeWindow
可能是一个与 Android 的 ANativeWindow
类似的结构体,或者是一个与特定图形库(如 EGL、OpenGL ES 或 Vulkan)兼容的渲染目标。
在提供的代码示例中,nativeWindow
是通过 mutexManager
对象获取的,但没有直接展示 mutexManager
的定义和 nativeWindow
的具体创建过程。这通常意味着 mutexManager
是一个封装了视频渲染相关资源(包括渲染表面)的类。以下是一些可能的步骤和考虑因素,用于获取或创建 nativeWindow
:
系统接口或API:
nativeWindow
可能通过 ANativeWindow_fromSurface()
等函数从 Java 层的 Surface
对象转换而来。nativeWindow
。图形库接口:
nativeWindow
可能是通过 EGL 创建的 EGLSurface。eglGetDisplay()
获取 EGLDisplay,然后通过 eglCreateWindowSurface()
创建 EGLSurface,这个 EGLSurface 就可以作为 nativeWindow
使用。自定义实现:
nativeWindow
时,可能需要自定义实现。这通常涉及到与底层图形驱动或渲染系统的直接交互。查看相关文档和源代码:
nativeWindow
的详细说明。mutexManager
是项目特定的类或库的一部分,查看其实现或文档将提供关于如何获取 nativeWindow
的线索。社区和论坛:
由于具体的实现细节依赖于你的开发环境和使用的技术栈,因此建议根据上述建议进行调查和实验。如果 mutexManager
是项目的一部分,并且没有提供足够的文档,那么查看其源代码将是获取 nativeWindow
创建和获取方式的关键。
1 回答414 阅读
1 回答225 阅读
161 阅读
口味你好,其实nativeWindow通常可以通过以下方式获取或创建:
如果是在 Java 层调用,可以通过SurfaceProvider获取Surface,然后通过 JNI 转换为nativeWindow。
在 C++层,可以通过系统提供的图形接口(如EGL等)来创建窗口并获取对应的nativeWindow。具体的实现方式可能因应用场景和需求的不同而有所变化。