static gboolean ensure_context (GstBaseTransform * trans) { GstMsdkVPP *thiz = GST_MSDKVPP (trans); if (gst_msdk_context_prepare (GST_ELEMENT_CAST (thiz), &thiz->context)) { GST_INFO_OBJECT (thiz, "Found context from neighbour %" GST_PTR_FORMAT, thiz->context); if (gst_msdk_context_get_job_type (thiz->context) & GST_MSDK_JOB_VPP) { GstMsdkContext *parent_context; parent_context = thiz->context; thiz->context = gst_msdk_context_new_with_parent (parent_context); gst_object_unref (parent_context); GST_INFO_OBJECT (thiz, "Creating new context %" GST_PTR_FORMAT " with joined session", thiz->context); } else { gst_msdk_context_add_job_type (thiz->context, GST_MSDK_JOB_VPP); } } else { if (!gst_msdk_context_ensure_context (GST_ELEMENT_CAST (thiz), thiz->hardware, GST_MSDK_JOB_VPP)) return FALSE; GST_INFO_OBJECT (thiz, "Creating new context %" GST_PTR_FORMAT, thiz->context); } gst_msdk_context_add_shared_async_depth (thiz->context, thiz->async_depth); return TRUE; }
static gboolean gst_msdkdec_start (GstVideoDecoder * decoder) { GstMsdkDec *thiz = GST_MSDKDEC (decoder); if (gst_msdk_context_prepare (GST_ELEMENT_CAST (thiz), &thiz->context)) { GST_INFO_OBJECT (thiz, "Found context %" GST_PTR_FORMAT " from neighbour", thiz->context); thiz->use_video_memory = TRUE; if (gst_msdk_context_get_job_type (thiz->context) & GST_MSDK_JOB_DECODER) { GstMsdkContext *parent_context, *msdk_context; parent_context = thiz->context; msdk_context = gst_msdk_context_new_with_parent (parent_context); if (!msdk_context) { GST_ERROR_OBJECT (thiz, "Context creation failed"); return FALSE; } thiz->context = msdk_context; gst_msdk_context_add_shared_async_depth (thiz->context, gst_msdk_context_get_shared_async_depth (parent_context)); gst_object_unref (parent_context); GST_INFO_OBJECT (thiz, "Creating new context %" GST_PTR_FORMAT " with joined session", thiz->context); } else { gst_msdk_context_add_job_type (thiz->context, GST_MSDK_JOB_DECODER); } } else { gst_msdk_context_ensure_context (GST_ELEMENT_CAST (thiz), thiz->hardware, GST_MSDK_JOB_DECODER); GST_INFO_OBJECT (thiz, "Creating new context %" GST_PTR_FORMAT, thiz->context); } gst_msdk_context_add_shared_async_depth (thiz->context, thiz->async_depth); return TRUE; }