【问题标题】:How to scale the YUV image from MediaCodec output with any color format?如何使用任何颜色格式从 MediaCodec 输出缩放 YUV 图像?
【发布时间】:2014-12-12 16:47:54
【问题描述】:

我正在使用 MediaCodec 解码视频并使用 sws_scale(来自 ffmpeg)重新缩放它。我可以处理一种特殊的颜色格式,例如。 YUV420P,并将其重新缩放到目标大小。但是我必须做一些准备工作,例如将输出缓冲区的linesize和memcpy到三个普通切片(data [0],data [1],data [2])。并且解码器输出颜色格式因设备而异.如果我得到colorformat,ffmpeg中是否有方法可以自动重新缩放而不需要特殊处理(当然,颜色格式应该是ffmpeg支持的)?

【问题讨论】:

    标签: android ffmpeg yuv android-mediacodec


    【解决方案1】:

    swscale/libavutil 中没有直接获取 OMX (MediaCodec) 颜色格式的功​​能,您需要手动映射格式。但是您不需要将输出缓冲区memcpy成三个单独的缓冲区,您只需将三个数据指针data[0]、data[1]和data[2]设置为从MediaCodec指向输出缓冲区(同一点在缓冲区中,否则你会从那里 memcpied)。

    正常的颜色格式(例如 YUV420P 和 NV12)应该可以正常工作,您只需要设置格式常量之间的映射即可。但是一些 MediaCodec 解码器(尤其是高通的)通常使用专有的平铺格式,需要花费更多的精力来解扰,而 swscale 不直接支持该解码器,您需要自己解扰。

    【讨论】:

    • 谢谢,mstorsjo。是的,我知道我需要用 ffmpeg 中的 pix_fmt 映射 MediaCodec 颜色格式。除此之外,我必须设置数据指针并处理 dest 数据指针。如果可以通过pix_fmt自动完成,会很精彩。因为要处理的格式太多了。我发现 av_image_alloc 传回的 linesize 可能有一些帮助,但其他方向的大小(与高度的关系)也因不同的 pix_fmt 而异。你有什么建议吗?
    【解决方案2】:

    这只是一个基于我在 Raspberry Pi 上使用 OMX 的经验的直观建议,但是,您可以查看 Stagefright 库是否为 NDK 提供了任何 OMX(如 C/C++)接口 - 在这种情况下,如果不仅一个解码器组件,也是一个调整大小的组件(Raspberry Pi 有这样一个component),然后你可以创建一个 OMX 管道,然后组件可以自动协商格式,但这只是一个假设,我从来没有看过那么深我自己进入 Stagefright,我知道它是从 Java 级别通过 MediaCodec 和其他类使用的,但你仍然可以看看。如果 Stagefright 有这样的 API,我可以提供一些 OMX 包装器代码,以简化我为 Raspberry Pi 制作的组件的使用,因为从头开始构建 OMX 代码需要大量工作。

    编辑

    我对此进行了更多的谷歌搜索,因为它看起来很有趣,并找到了一个 NDK 媒体sample - 好吧,OMX 的 Broadcom 实现似乎有很大不同,所以大多数东西仍然需要从头开始构建。你能解释一下为什么你需要这样做吗?如果目标只是显示解码后的流,您可以在 Java 级别设置预览界面,所以我认为解码的目的是其他的。

    【讨论】:

    • 谢谢,Rudolfs。我之前考虑过使用Stagefright,但我只是不知道如何开始我的工作。首先它需要在android平台下构建Stagefright代码。其次它需要研究API .而我们要做的是Android开发团队的工作。你同意吗?所以我放弃了这个想法。
    • 你能解释一下为什么需要重新缩放吗?您打算如何处理解码后的视频?
    • 因为我想转码小码率和大小的视频文件上传。所以我使用MediaCodec,但它不能直接改变大小。
    • 感谢您的解释。我见过一些基于 Java 的转码示例(stackoverflow.com/questions/15950610/…stackoverflow.com/questions/15215636/…),但这仅对比特率有帮助。另一种选择是提供预编译的 FFmpeg 二进制文件(但又一次,x264 的许可证问题)并调用它在文件级别进行转码。您的目标是 H.264 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    • 2014-09-03
    • 2015-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多