Esempio n. 1
0
av_cold int ff_nvenc_encode_close(AVCodecContext *avctx)
{
    NVENCContext *ctx               = avctx->priv_data;
    NV_ENCODE_API_FUNCTION_LIST *nv = &ctx->nvel.nvenc_funcs;
    int i;

    if (ctx->in) {
        for (i = 0; i < ctx->nb_surfaces; ++i) {
            nv->nvEncDestroyInputBuffer(ctx->nvenc_ctx, ctx->in[i].in);
            nv->nvEncDestroyBitstreamBuffer(ctx->nvenc_ctx, ctx->out[i].out);
        }
    }

    av_freep(&ctx->in);
    av_freep(&ctx->out);

    if (ctx->nvenc_ctx)
        nv->nvEncDestroyEncoder(ctx->nvenc_ctx);

    if (ctx->cu_context)
        ctx->nvel.cu_ctx_destroy(ctx->cu_context);

    if (ctx->nvel.nvenc)
        dlclose(ctx->nvel.nvenc);

    if (ctx->nvel.cuda)
        dlclose(ctx->nvel.cuda);

    return 0;
}
fcH264EncoderNVIDIA::~fcH264EncoderNVIDIA()
{
    if (m_encoder) {
        if (m_input.inputBuffer) {
            nvenc.nvEncDestroyInputBuffer(m_encoder, m_input.inputBuffer);
        }
        if (m_output.bitstreamBuffer) {
            nvenc.nvEncDestroyBitstreamBuffer(m_encoder, m_output.bitstreamBuffer);
        }
        nvenc.nvEncDestroyEncoder(m_encoder);
    }
}