mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 01:00:37 +00:00
msdk: check GstMsdkContext instead of mfxSession instance
When creating a GstMsdkContext instance, it also creates a mfxSession instance, so we may check GstMsdkContext instead of mfxSession instance to make sure MSDK is available. In addition, according to MSDK doc [1], MFXVideoCORE_SetHandle function should be executed before any actual usage of library including queries, otherwise the behavior is unexpected, so we should call MFXVideoCORE_QueryPlatform after MFXVideoCORE_SetHandle on Linux [1] https://github.com/Intel-Media-SDK/MediaSDK/blob/master/doc/mediasdk-man.md#working-with-va-api-applications Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1867>
This commit is contained in:
parent
1138c798ff
commit
86fdd39147
2 changed files with 13 additions and 12 deletions
|
@ -178,6 +178,7 @@ static gboolean
|
|||
gst_msdk_context_open (GstMsdkContext * context, gboolean hardware,
|
||||
GstMsdkContextJobType job_type)
|
||||
{
|
||||
mfxU16 codename;
|
||||
GstMsdkContextPrivate *priv = context->priv;
|
||||
|
||||
priv->job_type = job_type;
|
||||
|
@ -196,6 +197,13 @@ gst_msdk_context_open (GstMsdkContext * context, gboolean hardware,
|
|||
}
|
||||
#endif
|
||||
|
||||
codename = msdk_get_platform_codename (priv->session);
|
||||
|
||||
if (codename != MFX_PLATFORM_UNKNOWN)
|
||||
GST_INFO ("Detected MFX platform with device code %d", codename);
|
||||
else
|
||||
GST_WARNING ("Unknown MFX platform");
|
||||
|
||||
return TRUE;
|
||||
|
||||
failed:
|
||||
|
@ -359,7 +367,6 @@ _requested_frame_size_is_equal_or_lower (mfxFrameAllocRequest * _req,
|
|||
(!(_req->Type & MFX_MEMTYPE_EXPORT_FRAME) &&
|
||||
_req->Info.Width <= cached_resp->request.Info.Width &&
|
||||
_req->Info.Height <= cached_resp->request.Info.Height))
|
||||
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
|
|
|
@ -192,7 +192,6 @@ msdk_open_session (mfxIMPL impl)
|
|||
mfxInitParam init_par = { impl, version };
|
||||
mfxIMPL implementation;
|
||||
mfxStatus status;
|
||||
mfxU16 codename;
|
||||
|
||||
static const gchar *implementation_names[] = {
|
||||
"AUTO", "SOFTWARE", "HARDWARE", "AUTO_ANY", "HARDWARE_ANY", "HARDWARE2",
|
||||
|
@ -223,13 +222,6 @@ msdk_open_session (mfxIMPL impl)
|
|||
goto failed;
|
||||
}
|
||||
|
||||
codename = msdk_get_platform_codename (session);
|
||||
|
||||
if (codename != MFX_PLATFORM_UNKNOWN)
|
||||
GST_INFO ("Detected MFX platform with device code %d", codename);
|
||||
else
|
||||
GST_WARNING ("Unknown MFX platform");
|
||||
|
||||
GST_INFO ("MFX implementation: 0x%04x (%s)", implementation,
|
||||
implementation_names[MFX_IMPL_BASETYPE (implementation)]);
|
||||
GST_INFO ("MFX version: %d.%d", version.Major, version.Minor);
|
||||
|
@ -244,12 +236,14 @@ failed:
|
|||
gboolean
|
||||
msdk_is_available (void)
|
||||
{
|
||||
mfxSession session = msdk_open_session (MFX_IMPL_HARDWARE_ANY);
|
||||
if (!session) {
|
||||
/* Make sure we can create GstMsdkContext instance (the job type is not used actually) */
|
||||
GstMsdkContext *msdk_context = gst_msdk_context_new (1, GST_MSDK_JOB_DECODER);
|
||||
|
||||
if (!msdk_context) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
msdk_close_session (session);
|
||||
gst_object_unref (msdk_context);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue