nvenc.c是一个用nvidia来执行的代码,下面简单分析nvenc编码的基本流程,
主要关注与nvenc底层相关的接口调用,nvenc底层代码的关键调用如下图所示的8个步骤
AVCodec ff_nvenc_h264_encoder = {
.name = "nvenc_h264",
.long_name = NULL_IF_CONFIG_SMALL("NVIDIA NVENC H.264 encoder"),
.type = AVMEDIA_TYPE_VIDEO,
.id = AV_CODEC_ID_H264,
/*关键的三个接口函数*/
.init = nvenc_old_init,
.encode2 = ff_nvenc_encode_frame,
.close = ff_nvenc_encode_close,
.priv_data_size = sizeof(NvencContext),
.priv_class = &nvenc_h264_class,
.defaults = defaults,
.capabilities = AV_CODEC_CAP_DELAY,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
.pix_fmts = ff_nvenc_pix_fmts,
};
#endif
主要是分析 ff_nvenc_encode_frame和ff_nvenc_encode_init
ff_nvenc_encode_init关键部分
/*加载函数库
*关键err = nvenc_create_instance(&dl_fn->nvenc_funcs);
*/
if ((ret = nvenc_load_libraries(avctx)) < 0)
r