summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAshray Kulkarni <ashrayk@codeaurora.org>2015-06-25 11:57:20 -0700
committerLajos Molnar <lajos@google.com>2015-06-25 20:40:22 -0700
commitc63a274a815a5d76f8815f48b3be767d3eb8a414 (patch)
tree9c21798da83b915ebef7a9911eb084a2a3dc42eb
parent587e0d2efca6d748d02d40bbe727bde04476300f (diff)
downloadandroid_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.cpp13
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;
}