diff options
author | Christian König <[email protected]> | 2014-03-01 13:25:58 +0100 |
---|---|---|
committer | Christian König <[email protected]> | 2014-03-07 08:55:57 +0100 |
commit | 53d1d879d533db55eed806343f4de28e5d0ae49b (patch) | |
tree | 0c7c6159a1b0c4f4103b443c5aec951c371fcc39 /src | |
parent | 378c6f2246d66254ce0f88cac6daf25b1c012a41 (diff) |
st/omx/enc: fix crash on destruction
Signed-off-by: Christian König <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/state_trackers/omx/vid_enc.c | 23 |
1 files changed, 15 insertions, 8 deletions
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); |