1

我想在Android上使用OpenGL ES做HDR10的色调映射,首先是获取帧数据。在Android上通过mediacodec解码视频后,它的数据在一个外部的oes纹理上,我想知道解码hdr10视频时纹理的内部格式是什么。

我可以从这个外部 oes 纹理中获取 10 位数据,如果可能的话,如何在 OpenGL ES 中处理 10 位数据(使用浮点纹理?)。

我曾尝试查询纹理的格式,但失败了,报告的值似乎不正确。纹理的宽度和高度也是如此。

glGetTexLevelParameteriv(GL_TEXTURE_EXTERNAL_OES, 0, GL_TEXTURE_INTERNAL_FORMAT, &format);
4

2 回答 2

0

一般来说,对于 YUV,您需要使用外部采样器,其中包括将颜色转换为 RGB。对于 YUV 表面的 Android 内存布局没有标准,特别是对于有多个竞争“标准”的 10 位,因此您在此处所做的任何涉及原始 YUV 数据的操作都将是不可移植和设备的具体的。

我得到的 rgb 值是否与 HDR 视频中的 10 位值匹配?

假设它已正确转换,它应该是 10 位值的颜色转换表示。我显然没有办法验证它,这里也没有严格的规范。你能得到一个 8 位的等价物吗?是的,这当然是可能的。

于 2020-02-24T10:28:38.117 回答
0

您无法从 oe 纹理中获取 10 位数据。我们不能设置 oes 纹理格式(例如,浮动纹理)。您可以通过将 oes 纹理输出到 fbo 来验证此过程。实际上 oes 是 8bits。

于 2020-06-15T11:25:14.813 回答