diff options
author | Ashray Kulkarni <ashrayk@codeaurora.org> | 2015-06-25 11:57:20 -0700 |
---|---|---|
committer | Lajos Molnar <lajos@google.com> | 2015-06-25 20:40:22 -0700 |
commit | c63a274a815a5d76f8815f48b3be767d3eb8a414 (patch) | |
tree | 9c21798da83b915ebef7a9911eb084a2a3dc42eb | |
parent | 587e0d2efca6d748d02d40bbe727bde04476300f (diff) | |
download | android_hardware_qcom_media-c63a274a815a5d76f8815f48b3be767d3eb8a414.tar.gz android_hardware_qcom_media-c63a274a815a5d76f8815f48b3be767d3eb8a414.tar.bz2 android_hardware_qcom_media-c63a274a815a5d76f8815f48b3be767d3eb8a414.zip |
mm-video-v4l2: venc: encoder cleanup during error handling
when max instance count is reached, driver returns error, as part of
error handling (in some cases) close was not called, resulting in
increase of active instance count and memory leak. This change fixes
both instance cleanup and memory leak.
Bug: 20566750
Change-Id: I701fcf0aede048b2a36549cc4e971f976299d1aa
-rw-r--r-- | mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp b/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp index b3c0fa6a..cbe7a385 100644 --- a/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp +++ b/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp @@ -88,6 +88,7 @@ omx_venc::omx_venc() property_get("vidc.debug.hybrid.hierp", property_value, "0"); hybrid_hp = atoi(property_value); property_value[0] = '\0'; + handle = NULL; } omx_venc::~omx_venc() @@ -187,9 +188,8 @@ OMX_ERRORTYPE omx_venc::component_init(OMX_STRING role) if (handle->venc_open(codec_type) != true) { DEBUG_PRINT_ERROR("ERROR: venc_open failed"); - delete handle; - handle = NULL; - return OMX_ErrorInsufficientResources; + eRet = OMX_ErrorInsufficientResources; + goto init_error; } //Intialise the OMX layer variables @@ -306,7 +306,7 @@ OMX_ERRORTYPE omx_venc::component_init(OMX_STRING role) &m_sInPortDef.nBufferSize, m_sInPortDef.nPortIndex) != true) { eRet = OMX_ErrorUndefined; - + goto init_error; } // Initialize the video parameters for output port @@ -524,6 +524,11 @@ OMX_ERRORTYPE omx_venc::component_init(OMX_STRING role) } DEBUG_PRINT_INFO("Component_init : %s : return = 0x%x", m_nkind, eRet); return eRet; +init_error: + handle->venc_close(); + delete handle; + handle = NULL; + return eRet; } |