我测试了使用ffmpeg(sws_scale)和libyuv(NV12ToRGB24)将NV12转换为RGB 我猜libyuv比快速sws_scale多得多,但事实并非如此。 结果正确吗?以及如何快速降低CPU使用率? 我写了测试结果。
I3 Windows10 64位桌面 vs2017 64位调试版本 VideoSize = 1280 x 692
libyuv(NV12ToRGB24)测试结果
0.04400 sec
0.04500 sec
0.04300 sec
0.04400 sec
0.04400 sec
0.04600 sec
0.04400 sec
0.04400 sec
0.04500 sec
0.05000 sec
libyuv(NV12ToRGB24)测试代码
clock_t begin, end;
begin = clock();
libyuv::NV12ToRGB24(avFrame->data[0], avFrame->linesize[0],
avFrame->data[1], avFrame->linesize[1],
matRGB.data, avFrame->width * 3,
avFrame->width,
avFrame->height
);
end = clock();
printf("%0.5f\n", (float) (end - begin) / CLOCKS_PER_SEC );
ffmpeg(sws_scale)测试结果
0.00300 sec
0.00300 sec
0.00300 sec
0.00300 sec
0.00300 sec
0.00300 sec
0.00300 sec
0.00300 sec
0.00300 sec
0.00300 sec
ffmpeg(sws_scale)测试代码
begin = clock();
sws_scale(sws_ctx, avFrame->data,
avFrame->linesize, 0, avFrame->height, frame_bgr->data,
frame_bgr->linesize);
//cv::Mat mat(dest_height, dest_width, cv_format, frame_bgr->data[0], frame_bgr->linesize[0]);
end = clock();
printf("%0.5f\n", (float)(end - begin) / CLOCKS_PER_SEC);