gpt4 book ai didi

android - 如何理解 setDisplay/setSurface/setPrewviewDisplay/setPreviewTexture for Android 的底层

转载 作者:行者123 更新时间:2023-11-29 20:09:29 29 4
gpt4 key购买 nike

从 Android api 级别 1 开始,我们可以使用 setDisplay 或 setPrewviewDisplay 将 MediaPlayer 或 Camera 附加到 Surface,然后图像数据可以传输到 gpu 并更快地处理。

引入 SurfaceTexture 后,我们可以使用目标 GL_TEXTURE_EXTERNAL_OES 创建自己的纹理,并将 MediaPlayer 或 Camera 附加到 opengl es。

这些都是众所周知的,但我想说的是底层的Android图形架构。( Android Graphics architecture )

产生的数据是在CPU端,所以必须以非常快的方式传输到GPU。

为什么每台 Android 设备传输数据的速度都如此之快,以及如何在底层传输数据?

或者这是与 Android 无关的硬件问题?

最佳答案

数据不是在CPU端产生的。相机和硬件视频编解码器将它们的数据存储在由内核 gralloc 机制分配的缓冲区中(通过非公共(public) GraphicBuffer 从 native 代码引用)。 Surfaces 通过 BufferQueue 对象进行通信,该对象通过句柄传递帧,而不复制数据本身。

由 OEM 确保相机、视频编解码器和 GPU 可以使用通用格式。视频编解码器输出的 YUV 必须是 GLES 实现可以作为外部纹理处理的东西。这也是为什么在将 GLES 渲染发送到 MediaCodec 时需要 EGL_RECORDABLE_ANDROID 的原因...需要让 EGL 实现知道它正在渲染的帧必须可以被视频编解码器识别。

关于android - 如何理解 setDisplay/setSurface/setPrewviewDisplay/setPreviewTexture for Android 的底层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35236964/

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