代码之家  ›  专栏  ›  技术社区  ›  creizyz

Android MediaCodec输出格式:GLES外部纹理(YUV/NV12)到GLES纹理(RGB)

  •  4
  • creizyz  · 技术社区  · 8 年前

    上下文: 我通过以下标准组合提取和解码视频: MediaExtractor/MediaCodec . 因为 我需要提取的帧作为OpenGLES纹理(RGB)可用 MediaCodec )因此,它提供了一个外部GLES纹理( GL\u TEXTURE\u EXTERNAL\u OES )通过表面纹理。我知道硬件解码器输出的数据在 NV12 (

    MediaCodec--->GLES外部纹理(NV12) [1] ---&燃气轮机;渲染--->GLES纹理(RGB)

    我挣扎的地方是 :如何访问GLES外部纹理中包含的特定Y、U和V值( [1] ). 我不知道如何设置GLES纹理内存,也不知道如何访问它(除了“texture()”和“texelFetch()”GLSL函数)。

    • 有没有像访问简单数组(指针+偏移量)那样访问数据的方法?
    • 我是不是想得太多了?
    • 处理转换?(我不这么认为)
    • 要么这样做 表面 表面纹理 填充外部纹理时更改数据的内存布局( [1]
    1 回复  |  直到 8 年前
        1
  •  5
  •   mstorsjo    8 年前

    是的,我想你想得太多了。你是否测试了一些东西,遇到了一个你可以描述的实际问题,或者这只是理论上的问题?

    SufaceTexture -然后,您可以将其作为任何RGB纹理进行访问。由于纹理的物理内存布局是隐藏的,因此在获取纹理之前,您实际上不知道它是否一次全部转换,或者纹理访问器是否在每次采样时进行即时转换。据我所知,实现可以通过这些方式中的任何一种进行,而关于如何实现的实现细节根本无法通过公共API观察到。

    推荐文章