|
|
@@ -116,15 +116,6 @@ fail: |
|
|
|
|
|
|
|
static mfxStatus frame_free(mfxHDL pthis, mfxFrameAllocResponse *resp) |
|
|
|
{ |
|
|
|
DecodeContext *decode = pthis; |
|
|
|
|
|
|
|
if (decode->surfaces) |
|
|
|
vaDestroySurfaces(decode->va_dpy, decode->surfaces, decode->nb_surfaces); |
|
|
|
av_freep(&decode->surfaces); |
|
|
|
av_freep(&decode->surface_ids); |
|
|
|
av_freep(&decode->surface_used); |
|
|
|
decode->nb_surfaces = 0; |
|
|
|
|
|
|
|
return MFX_ERR_NONE; |
|
|
|
} |
|
|
|
|
|
|
@@ -144,6 +135,16 @@ static mfxStatus frame_get_hdl(mfxHDL pthis, mfxMemId mid, mfxHDL *hdl) |
|
|
|
return MFX_ERR_NONE; |
|
|
|
} |
|
|
|
|
|
|
|
static void free_surfaces(DecodeContext *decode) |
|
|
|
{ |
|
|
|
if (decode->surfaces) |
|
|
|
vaDestroySurfaces(decode->va_dpy, decode->surfaces, decode->nb_surfaces); |
|
|
|
av_freep(&decode->surfaces); |
|
|
|
av_freep(&decode->surface_ids); |
|
|
|
av_freep(&decode->surface_used); |
|
|
|
decode->nb_surfaces = 0; |
|
|
|
} |
|
|
|
|
|
|
|
static void free_buffer(void *opaque, uint8_t *data) |
|
|
|
{ |
|
|
|
int *used = opaque; |
|
|
@@ -467,6 +468,8 @@ finish: |
|
|
|
|
|
|
|
av_frame_free(&frame); |
|
|
|
|
|
|
|
free_surfaces(&decode); |
|
|
|
|
|
|
|
if (decode.mfx_session) |
|
|
|
MFXClose(decode.mfx_session); |
|
|
|
if (decode.va_dpy) |
|
|
|