使用 MediaCodec 在 Android 上处理 HDR10 视频

Process HDR10 video on Android with MediaCodec

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

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

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

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

一般来说,对于 YUV,您需要使用外部采样器,其中包括到 RGB 的颜色转换。对于 YUV 表面的 Android 内存布局没有标准,特别是对于有多个竞争 "standards" 的 10 位,所以你在这里做的任何接触原始 YUV 数据的事情都会是非便携式和特定于设备的。

Does the rgb value I get match the 10 bit value in HDR video?

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

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