From 3ed436b5298ea98e7c2ef4b309d7de0b11eda5ab Mon Sep 17 00:00:00 2001 From: Sangchul Lee Date: Mon, 19 Jul 2021 12:15:35 +0900 Subject: [PATCH] Fix memory leak in _get_video_size() It is revised not to miss to call media_format_unref() in normal case. Codes to check null parameters are added. Some codes are refactored. [Version] 0.0.27 [Issue type] Bug fix Change-Id: I8a8e4000550ceac4f134121bb2a19579111c5dfe Signed-off-by: Sangchul Lee --- packaging/libmm-evas-renderer.spec | 2 +- src/mm_evas_renderer.c | 48 +++++++++++++++++++++----------------- 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/packaging/libmm-evas-renderer.spec b/packaging/libmm-evas-renderer.spec index 97eba37..0b7f349 100644 --- a/packaging/libmm-evas-renderer.spec +++ b/packaging/libmm-evas-renderer.spec @@ -1,6 +1,6 @@ Name: libmm-evas-renderer Summary: Multimedia Framework Evas Renderer Library -Version: 0.0.26 +Version: 0.0.27 Release: 0 Group: Multimedia/Libraries License: Apache-2.0 diff --git a/src/mm_evas_renderer.c b/src/mm_evas_renderer.c index 8f3bd0c..eb95d2a 100644 --- a/src/mm_evas_renderer.c +++ b/src/mm_evas_renderer.c @@ -487,34 +487,40 @@ static void _free_previous_packets(mm_evas_info *evas_info) return; } -static int _get_video_size(media_packet_h packet, mm_evas_info *evas_info) +static bool _get_video_size(media_packet_h packet, mm_evas_info *evas_info) { media_format_h fmt; + int w, h; + bool ret = true; - MMER_FENTER(); + MMEVAS_RETURN_VAL_IF_FAIL(packet, false); + MMEVAS_RETURN_VAL_IF_FAIL(evas_info, false); - if (media_packet_get_format(packet, &fmt) == MEDIA_PACKET_ERROR_NONE) { - int w, h; - if (media_format_get_video_info(fmt, NULL, &w, &h, NULL, NULL) == MEDIA_PACKET_ERROR_NONE) { - LOGD("video width = %d, height =%d", w, h); - if (w != evas_info->w || h != evas_info->h) { - evas_info->w = w; - evas_info->h = h; - evas_info->rendering_info_changed = TRUE; - evas_info->video_size_changed = TRUE; - } - return true; - } else - LOGW("media_format_get_video_info is failed"); - if (media_format_unref(fmt) != MEDIA_PACKET_ERROR_NONE) /* because of media_packet_get_format */ - LOGW("media_format_unref is failed"); - } else { - LOGW("media_packet_get_format is failed"); + if (media_packet_get_format(packet, &fmt) != MEDIA_PACKET_ERROR_NONE) { + LOGE("media_packet_get_format is failed"); + return false; } - MMER_FLEAVE(); + if (media_format_get_video_info(fmt, NULL, &w, &h, NULL, NULL) != MEDIA_FORMAT_ERROR_NONE) { + LOGE("media_format_get_video_info is failed"); + ret = false; + goto end; + } - return false; + if (w != evas_info->w || h != evas_info->h) { + LOGD("previous: (%dx%d)", evas_info->w, evas_info->w); + evas_info->w = w; + evas_info->h = h; + evas_info->rendering_info_changed = TRUE; + evas_info->video_size_changed = TRUE; + } + LOGD("(%dx%d)", evas_info->w, evas_info->w); + +end: + if (media_format_unref(fmt) != MEDIA_FORMAT_ERROR_NONE) + LOGW("media_format_unref is failed"); + + return ret; } static int _find_empty_index(mm_evas_info *evas_info) -- 2.7.4