使用FFmpeg的sws_scale進(jìn)行YUV等轉(zhuǎn)換時潜必,從執(zhí)行日志上看,在Android設(shè)備上運(yùn)行性能較低莺褒,如下所示讯壶,單位為毫秒。
對于實(shí)時性要求較高的場合状婶,可考慮使用libyuv等NEON指令實(shí)現(xiàn)的庫意敛。
對比可發(fā)現(xiàn)libyuv相對sws_scale有數(shù)十倍性能改善。
使用libyuv接口時得注意它參數(shù)定義膛虫,以NV21ToI420為例草姻,其定義如下。參數(shù)src_stride_y和src_stride_vu都應(yīng)該傳遞源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);