Browse Source

examples/qsvdec: do not free the surfaces in the frame_free() callback

Even though libmfx might not need them anymore, avcodec might still
access the surfaces. So free them separately at the end.
tags/n3.0
Anton Khirnov 9 years ago
parent
commit
3ee462dca1
1 changed files with 12 additions and 9 deletions
  1. +12
    -9
      doc/examples/qsvdec.c

+ 12
- 9
doc/examples/qsvdec.c View File

@@ -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)


Loading…
Cancel
Save