使用libyuv替换sws_scale提高性能

使用FFmpeg的sws_scale进行YUV等转换时,从执行日志上看,在Android设备上运行性能较低,如下所示,单位为毫秒。

使用libyuv替换sws_scale提高性能_第1张图片
sws_scale耗时图示

对于实时性要求较高的场合,可考虑使用libyuv等NEON指令实现的库。

使用libyuv替换sws_scale提高性能_第2张图片
libyuv耗时图示

对比可发现libyuv相对sws_scale有数十倍性能改善。

使用libyuv接口时得注意它参数定义,以NV21ToI420为例,其定义如下。参数src_stride_y和src_stride_vu都应该传递源Y平面的宽。

// Convert NV21 to I420.
LIBYUV_API
int NV21ToI420(const uint8 *src_y, int src_stride_y,
               const uint8 *src_vu, int src_stride_vu,
               uint8 *dst_y, int dst_stride_y,
               uint8 *dst_u, int dst_stride_u,
               uint8 *dst_v, int dst_stride_v,
               int width, int height);

你可能感兴趣的:(使用libyuv替换sws_scale提高性能)