diff --git a/sys/msdk/gstmsdkallocator_libva.c b/sys/msdk/gstmsdkallocator_libva.c index 364ee4945e..a7fc253899 100644 --- a/sys/msdk/gstmsdkallocator_libva.c +++ b/sys/msdk/gstmsdkallocator_libva.c @@ -56,6 +56,10 @@ gst_msdk_frame_alloc (mfxHDL pthis, mfxFrameAllocRequest * req, GstMsdkAllocResponse *cached = gst_msdk_context_get_cached_alloc_responses_by_request (context, req); if (cached) { + /* check if enough frames were allocated */ + if (req->NumFrameSuggested > cached->response->NumFrameActual) + return MFX_ERR_MEMORY_ALLOC; + *resp = *cached->response; return MFX_ERR_NONE; } diff --git a/sys/msdk/gstmsdkcontext.c b/sys/msdk/gstmsdkcontext.c index 44474743b6..883fdb5cf4 100644 --- a/sys/msdk/gstmsdkcontext.c +++ b/sys/msdk/gstmsdkcontext.c @@ -354,7 +354,14 @@ _find_request (gconstpointer resp, gconstpointer req) GstMsdkAllocResponse *cached_resp = (GstMsdkAllocResponse *) resp; mfxFrameAllocRequest *_req = (mfxFrameAllocRequest *) req; - return cached_resp ? cached_resp->request.Type != _req->Type : -1; + /* Confirm if it's under the size of the cached response */ + if (_req->Info.Width <= cached_resp->request.Info.Width && + _req->Info.Height <= cached_resp->request.Info.Height) { + return _req->Type & cached_resp-> + request.Type & MFX_MEMTYPE_FROM_DECODE ? 0 : -1; + } + + return -1; } GstMsdkAllocResponse *