X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fnvenc.c;h=3fe64bba8bd56e30038a37529c2719b739f43b99;hb=7c2c5c4940a61311d153ef4e4a61fa827c341615;hp=d3413b3fd7258cb307c7faba6645aab223288505;hpb=c6892f59eb0e9f2a9ec1f55b21a5841a60540e1f;p=ffmpeg diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c index d3413b3fd72..3fe64bba8bd 100644 --- a/libavcodec/nvenc.c +++ b/libavcodec/nvenc.c @@ -1560,19 +1560,23 @@ static int nvenc_find_free_reg_resource(AVCodecContext *avctx) NV_ENCODE_API_FUNCTION_LIST *p_nvenc = &dl_fn->nvenc_funcs; NVENCSTATUS nv_status; - int i; + int i, first_round; if (ctx->nb_registered_frames == FF_ARRAY_ELEMS(ctx->registered_frames)) { - for (i = 0; i < ctx->nb_registered_frames; i++) { - if (!ctx->registered_frames[i].mapped) { - if (ctx->registered_frames[i].regptr) { - nv_status = p_nvenc->nvEncUnregisterResource(ctx->nvencoder, ctx->registered_frames[i].regptr); - if (nv_status != NV_ENC_SUCCESS) - return nvenc_print_error(avctx, nv_status, "Failed unregistering unused input resource"); - ctx->registered_frames[i].ptr = NULL; - ctx->registered_frames[i].regptr = NULL; + for (first_round = 1; first_round >= 0; first_round--) { + for (i = 0; i < ctx->nb_registered_frames; i++) { + if (!ctx->registered_frames[i].mapped) { + if (ctx->registered_frames[i].regptr) { + if (first_round) + continue; + nv_status = p_nvenc->nvEncUnregisterResource(ctx->nvencoder, ctx->registered_frames[i].regptr); + if (nv_status != NV_ENC_SUCCESS) + return nvenc_print_error(avctx, nv_status, "Failed unregistering unused input resource"); + ctx->registered_frames[i].ptr = NULL; + ctx->registered_frames[i].regptr = NULL; + } + return i; } - return i; } } } else { @@ -1846,13 +1850,6 @@ static int process_output_surface(AVCodecContext *avctx, AVPacket *pkt, NvencSur res = nvenc_print_error(avctx, nv_status, "Failed unmapping input resource"); goto error; } - nv_status = p_nvenc->nvEncUnregisterResource(ctx->nvencoder, ctx->registered_frames[tmpoutsurf->reg_idx].regptr); - if (nv_status != NV_ENC_SUCCESS) { - res = nvenc_print_error(avctx, nv_status, "Failed unregistering input resource"); - goto error; - } - ctx->registered_frames[tmpoutsurf->reg_idx].ptr = NULL; - ctx->registered_frames[tmpoutsurf->reg_idx].regptr = NULL; } else if (ctx->registered_frames[tmpoutsurf->reg_idx].mapped < 0) { res = AVERROR_BUG; goto error;