我正在使用 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/