static gboolean gst_msdkvp8enc_configure (GstMsdkEnc * encoder) { GstMsdkVP8Enc *thiz = GST_MSDKVP8ENC (encoder); mfxSession session; mfxStatus status; if (encoder->hardware) { session = gst_msdk_context_get_session (encoder->context); status = MFXVideoUSER_Load (session, &MFX_PLUGINID_VP8E_HW, 1); if (status < MFX_ERR_NONE) { GST_ERROR_OBJECT (thiz, "Media SDK Plugin load failed (%s)", msdk_status_to_string (status)); return FALSE; } else if (status > MFX_ERR_NONE) { GST_WARNING_OBJECT (thiz, "Media SDK Plugin load warning: %s", msdk_status_to_string (status)); } } encoder->param.mfx.CodecId = MFX_CODEC_VP8; encoder->param.mfx.CodecProfile = thiz->profile; encoder->param.mfx.CodecLevel = 0; /* Enable Extended Coding options */ gst_msdkenc_ensure_extended_coding_options (encoder); return TRUE; }
static gboolean gst_msdkh265dec_configure (GstMsdkDec * decoder) { GstMsdkH265Dec *h265dec = GST_MSDKH265DEC (decoder); mfxSession session; mfxStatus status; const mfxPluginUID *uid; session = msdk_context_get_session (decoder->context); if (decoder->hardware) uid = &MFX_PLUGINID_HEVCD_HW; else uid = &MFX_PLUGINID_HEVCD_SW; status = MFXVideoUSER_Load (session, uid, 1); if (status < MFX_ERR_NONE) { GST_ERROR_OBJECT (h265dec, "Media SDK Plugin load failed (%s)", msdk_status_to_string (status)); return FALSE; } else if (status > MFX_ERR_NONE) { GST_WARNING_OBJECT (h265dec, "Media SDK Plugin load warning: %s", msdk_status_to_string (status)); } decoder->param.mfx.CodecId = MFX_CODEC_HEVC; decoder->param.mfx.CodecProfile = MFX_PROFILE_HEVC_MAIN; return TRUE; }
static int qsv_load_plugins(mfxSession session, const char *load_plugins, void *logctx) { if (!load_plugins || !*load_plugins) return 0; while (*load_plugins) { mfxPluginUID uid; mfxStatus ret; int i, err = 0; char *plugin = av_get_token(&load_plugins, ":"); if (!plugin) return AVERROR(ENOMEM); if (strlen(plugin) != 2 * sizeof(uid.Data)) { av_log(logctx, AV_LOG_ERROR, "Invalid plugin UID length\n"); err = AVERROR(EINVAL); goto load_plugin_fail; } for (i = 0; i < sizeof(uid.Data); i++) { err = sscanf(plugin + 2 * i, "%2hhx", uid.Data + i); if (err != 1) { av_log(logctx, AV_LOG_ERROR, "Invalid plugin UID\n"); err = AVERROR(EINVAL); goto load_plugin_fail; } } ret = MFXVideoUSER_Load(session, &uid, 1); if (ret < 0) { char errorbuf[128]; snprintf(errorbuf, sizeof(errorbuf), "Could not load the requested plugin '%s'", plugin); err = ff_qsv_print_error(logctx, ret, errorbuf); goto load_plugin_fail; } if (*load_plugins) load_plugins++; load_plugin_fail: av_freep(&plugin); if (err < 0) return err; } return 0; }
static gboolean gst_msdkh265enc_configure (GstMsdkEnc * encoder) { GstMsdkH265Enc *h265enc = GST_MSDKH265ENC (encoder); mfxSession session; mfxStatus status; const mfxPluginUID *uid; session = gst_msdk_context_get_session (encoder->context); if (encoder->hardware) uid = &MFX_PLUGINID_HEVCE_HW; else uid = &MFX_PLUGINID_HEVCE_SW; status = MFXVideoUSER_Load (session, uid, 1); if (status < MFX_ERR_NONE) { GST_ERROR_OBJECT (h265enc, "Media SDK Plugin load failed (%s)", msdk_status_to_string (status)); return FALSE; } else if (status > MFX_ERR_NONE) { GST_WARNING_OBJECT (h265enc, "Media SDK Plugin load warning: %s", msdk_status_to_string (status)); } encoder->param.mfx.CodecId = MFX_CODEC_HEVC; encoder->param.mfx.CodecProfile = MFX_PROFILE_HEVC_MAIN; /* IdrInterval field of MediaSDK HEVC encoder behaves differently * than other encoders. IdrInteval == 1 indicate every * I-frame should be an IDR, IdrInteval == 2 means every other * I-frame is an IDR etc. So we generalize the behaviour of property * "i-frames" by incrementing the value by one in each case*/ encoder->param.mfx.IdrInterval += 1; /* Enable Extended coding options */ gst_msdkenc_ensure_extended_coding_options (encoder); return TRUE; }