android - 如何使用任何颜色格式从 MediaCodec 输出缩放 YUV 图像?

标签 android ffmpeg yuv android-mediacodec

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

最佳答案

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

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

关于android - 如何使用任何颜色格式从 MediaCodec 输出缩放 YUV 图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26419307/

相关文章:

Android可用性测试——色盲

android - FFMPEG:多个图像帧+1个音频=1个视频

rgb - 需要从 RGB 帧创建 webm 视频

ffmpeg - 如何使用 ffmpeg 将带有子文件夹的整个目录转换为相同的格式?

FFmpeg 从 TS 文件中检索特定程序

c++ - 如何从 YUV 图像流生成 VBR 视频?

ubuntu - 初学者使用 ffmpeg 将 YUV 文件转换为 .mp4

android - 我如何在android中的用户定义方法中使用选定的菜单项值

android - TextView 轻微移动

android - 将 EditText 中的 int 类型变量插入到 Android 中的 SQL 数据库中