msdk: check whether mfx function call fails
authorHaihao Xiang <haihao.xiang@intel.com>
Wed, 9 Jan 2019 04:19:50 +0000 (12:19 +0800)
committerHaihao Xiang <haihao.xiang@intel.com>
Wed, 9 Jan 2019 04:43:56 +0000 (12:43 +0800)
And log the failures for debugging

sys/msdk/gstmsdkcontext.c
sys/msdk/gstmsdkenc.c
sys/msdk/gstmsdkvpp.c

index f1615ad..6ff36ef 100644 (file)
@@ -307,6 +307,14 @@ gst_msdk_context_new_with_parent (GstMsdkContext * parent)
   if (priv->hardware) {
     status = MFXVideoCORE_SetHandle (priv->session, MFX_HANDLE_VA_DISPLAY,
         (mfxHDL) parent_priv->dpy);
+
+    if (status != MFX_ERR_NONE) {
+      GST_ERROR ("Setting VA handle failed (%s)",
+          msdk_status_to_string (status));
+      g_object_unref (obj);
+      return NULL;
+    }
+
   }
 #endif
 
index 5189904..33f2384 100644 (file)
@@ -351,9 +351,14 @@ gst_msdkenc_init_encoder (GstMsdkEnc * thiz)
 
     status = MFXVideoVPP_GetVideoParam (session, &thiz->vpp_param);
     if (status < MFX_ERR_NONE) {
+      mfxStatus status1;
       GST_ERROR_OBJECT (thiz, "Get VPP Parameters failed (%s)",
           msdk_status_to_string (status));
-      MFXVideoVPP_Close (session);
+      status1 = MFXVideoVPP_Close (session);
+      if (status1 != MFX_ERR_NONE && status1 != MFX_ERR_NOT_INITIALIZED)
+        GST_WARNING_OBJECT (thiz, "VPP close failed (%s)",
+            msdk_status_to_string (status1));
+
       goto no_vpp;
     } else if (status > MFX_ERR_NONE) {
       GST_WARNING_OBJECT (thiz, "Get VPP Parameters returned: %s",
@@ -689,8 +694,10 @@ gst_msdkenc_finish_frame (GstMsdkEnc * thiz, MsdkEncTask * task,
    * is used in MSDK samples
    * #define MSDK_ENC_WAIT_INTERVAL 300000
    */
-  MFXVideoCORE_SyncOperation (gst_msdk_context_get_session (thiz->context),
-      task->sync_point, 300000);
+  if (MFXVideoCORE_SyncOperation (gst_msdk_context_get_session (thiz->context),
+          task->sync_point, 300000) != MFX_ERR_NONE)
+    GST_WARNING_OBJECT (thiz, "failed to do sync operation");
+
   if (!discard && task->output_bitstream.DataLength) {
     GstBuffer *out_buf = NULL;
     guint8 *data =
index 027037b..a6a9f04 100644 (file)
@@ -701,8 +701,10 @@ gst_msdkvpp_transform (GstBaseTransform * trans, GstBuffer * inbuf,
      * is used in MSDK samples
      * #define MSDK_VPP_WAIT_INTERVAL 300000
      */
-    if (sync_point)
-      MFXVideoCORE_SyncOperation (session, sync_point, 300000);
+    if (sync_point &&
+        MFXVideoCORE_SyncOperation (session, sync_point,
+            300000) != MFX_ERR_NONE)
+      GST_WARNING_OBJECT (thiz, "failed to do sync operation");
 
     /* More than one output buffers are generated */
     if (status == MFX_ERR_MORE_SURFACE) {