From 53d1d879d533db55eed806343f4de28e5d0ae49b Mon Sep 17 00:00:00 2001 From: Christian König Date: Sat, 1 Mar 2014 13:25:58 +0100 Subject: st/omx/enc: fix crash on destruction MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christian König --- src/gallium/state_trackers/omx/vid_enc.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) (limited to 'src/gallium') diff --git a/src/gallium/state_trackers/omx/vid_enc.c b/src/gallium/state_trackers/omx/vid_enc.c index 993ff5739b7..cd4a25b753b 100644 --- a/src/gallium/state_trackers/omx/vid_enc.c +++ b/src/gallium/state_trackers/omx/vid_enc.c @@ -182,14 +182,21 @@ static OMX_ERRORTYPE vid_enc_Constructor(OMX_COMPONENTTYPE *comp, OMX_STRING nam if (!priv->s_pipe) return OMX_ErrorInsufficientResources; - priv->t_pipe = screen->context_create(screen, priv->screen); - if (!priv->t_pipe) + if (!vl_compositor_init(&priv->compositor, priv->s_pipe)) { + priv->s_pipe->destroy(priv->s_pipe); + priv->s_pipe = NULL; return OMX_ErrorInsufficientResources; + } - if (!vl_compositor_init(&priv->compositor, priv->s_pipe)) + if (!vl_compositor_init_state(&priv->cstate, priv->s_pipe)) { + vl_compositor_cleanup(&priv->compositor); + priv->s_pipe->destroy(priv->s_pipe); + priv->s_pipe = NULL; return OMX_ErrorInsufficientResources; + } - if (!vl_compositor_init_state(&priv->cstate, priv->s_pipe)) + priv->t_pipe = screen->context_create(screen, priv->screen); + if (!priv->t_pipe) return OMX_ErrorInsufficientResources; priv->sPortTypesParam[OMX_PortDomainVideo].nStartPortNumber = 0; @@ -259,15 +266,15 @@ static OMX_ERRORTYPE vid_enc_Destructor(OMX_COMPONENTTYPE *comp) priv->ports=NULL; } - vl_compositor_cleanup_state(&priv->cstate); - vl_compositor_cleanup(&priv->compositor); - for (i = 0; i < OMX_VID_ENC_NUM_SCALING_BUFFERS; ++i) if (priv->scale_buffer[i]) priv->scale_buffer[i]->destroy(priv->scale_buffer[i]); - if (priv->s_pipe) + if (priv->s_pipe) { + vl_compositor_cleanup_state(&priv->cstate); + vl_compositor_cleanup(&priv->compositor); priv->s_pipe->destroy(priv->s_pipe); + } if (priv->t_pipe) priv->t_pipe->destroy(priv->t_pipe); -- cgit v1.2.3