//libmfx BRC parameters are 16 bits thus maybe overflow, then BRCParamMultiplier is needed
buffer_size_in_kilobytes = avctx->rc_buffer_size / 8000;
- initial_delay_in_kilobytes = avctx->rc_initial_buffer_occupancy / 1000;
+ initial_delay_in_kilobytes = avctx->rc_initial_buffer_occupancy / 8000;
target_bitrate_kbps = avctx->bit_rate / 1000;
max_bitrate_kbps = avctx->rc_max_rate / 1000;
brc_param_multiplier = (FFMAX(FFMAX3(target_bitrate_kbps, max_bitrate_kbps, buffer_size_in_kilobytes),
if (!q->frames_ctx.hw_frames_ctx)
return AVERROR(ENOMEM);
- ret = ff_qsv_init_session_frames(avctx, &q->internal_session,
+ ret = ff_qsv_init_session_frames(avctx, &q->internal_qs.session,
&q->frames_ctx, q->load_plugins,
- q->param.IOPattern == MFX_IOPATTERN_IN_OPAQUE_MEMORY);
+ q->param.IOPattern == MFX_IOPATTERN_IN_OPAQUE_MEMORY,
+ MFX_GPUCOPY_OFF);
if (ret < 0) {
av_buffer_unref(&q->frames_ctx.hw_frames_ctx);
return ret;
}
- q->session = q->internal_session;
+ q->session = q->internal_qs.session;
} else if (avctx->hw_device_ctx) {
- ret = ff_qsv_init_session_device(avctx, &q->internal_session,
- avctx->hw_device_ctx, q->load_plugins);
+ ret = ff_qsv_init_session_device(avctx, &q->internal_qs.session,
+ avctx->hw_device_ctx, q->load_plugins,
+ MFX_GPUCOPY_OFF);
if (ret < 0)
return ret;
- q->session = q->internal_session;
+ q->session = q->internal_qs.session;
} else {
- ret = ff_qsv_init_internal_session(avctx, &q->internal_session,
- q->load_plugins);
+ ret = ff_qsv_init_internal_session(avctx, &q->internal_qs,
+ q->load_plugins, MFX_GPUCOPY_OFF);
if (ret < 0)
return ret;
- q->session = q->internal_session;
+ q->session = q->internal_qs.session;
}
return 0;
if (qsv_frame) {
surf = &qsv_frame->surface;
enc_ctrl = &qsv_frame->enc_ctrl;
- memset(enc_ctrl, 0, sizeof(mfxEncodeCtrl));
if (frame->pict_type == AV_PICTURE_TYPE_I) {
enc_ctrl->FrameType = MFX_FRAMETYPE_I | MFX_FRAMETYPE_REF;
if (q->session)
MFXVideoENCODE_Close(q->session);
- if (q->internal_session)
- MFXClose(q->internal_session);
+
q->session = NULL;
- q->internal_session = NULL;
+ ff_qsv_close_internal_session(&q->internal_qs);
av_buffer_unref(&q->frames_ctx.hw_frames_ctx);
av_buffer_unref(&q->frames_ctx.mids_buf);