在ffmpeg硬件编解码中经常使用到h264_qsv。ffplay播放的命令:ffplay -vcodec h264_qsv 文件/URL。
在ffmpeg的demo有这样一段关键代码:
ret = avcodec_send_packet(decoder_ctx, pkt);
if (ret < 0) {
fprintf(stderr, “Error during decoding\n”);
return ret;
}
ret = avcodec_receive_frame(decoder_ctx, frame);
ret = av_hwframe_transfer_data(sw_frame, frame, 0);
这段代码的意思把接收到的h264数据发送给解码器,即Intel的解码器GPU,待解码之后,在从GPU上把数据拷贝回来。
这里面有一个问题,这么做可以降低CPU的利用率,而内存利用率则会增大,真正解决这一问题需要做到零拷贝。