From 818ccfe8a29aca2c26dd35780e33d5488e145c8f Mon Sep 17 00:00:00 2001 From: Sangchul Lee Date: Thu, 13 Jun 2024 14:33:48 +0900 Subject: [PATCH] webrtc_display: Destroy tbm bo list when bo size has been changed It is related to dynamic resolution change in case of EVAS rendering. It has fixed the crash due to the invalid bo size when facing this case. [Version] 0.3.302 [Issue Type] Bug fix Change-Id: Idd0ef5467acf39ca667c5a6b41505858e12f06d2 Signed-off-by: Sangchul Lee --- include/webrtc_private.h | 1 + packaging/capi-media-webrtc.spec | 2 +- src/webrtc_display.c | 4 ++++ src/webrtc_tbm.c | 7 +++++-- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/include/webrtc_private.h b/include/webrtc_private.h index 3061d6a2..06989328 100644 --- a/include/webrtc_private.h +++ b/include/webrtc_private.h @@ -418,6 +418,7 @@ typedef struct _webrtc_tbm_s { GCond cond; GMutex mutex; GList *bo_list; /* for decoded video data by sw codec */ + int bo_size; } webrtc_tbm_s; typedef struct _webrtc_display { diff --git a/packaging/capi-media-webrtc.spec b/packaging/capi-media-webrtc.spec index bd32714d..68b033b3 100644 --- a/packaging/capi-media-webrtc.spec +++ b/packaging/capi-media-webrtc.spec @@ -1,6 +1,6 @@ Name: capi-media-webrtc Summary: A WebRTC library in Tizen Native API -Version: 0.3.301 +Version: 0.3.302 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/webrtc_display.c b/src/webrtc_display.c index 9a522edf..57c48482 100644 --- a/src/webrtc_display.c +++ b/src/webrtc_display.c @@ -369,6 +369,10 @@ static bool __swcodec_set_bo(webrtc_display_s *display, video_decoded_data_info_ goto ERROR; } + if (display->tbm->bo_list && + display->tbm->bo_size != info->bo_size) + _destroy_tbm_bo_list(display->tbm); + if (display->tbm->bo_list == NULL) { LOG_DEBUG("MMPixelFormatType[%d]", info->format); _create_tbm_bo_list(display->tbm, info->bo_size, 10); /* FIXME: use ini file to get list length */ diff --git a/src/webrtc_tbm.c b/src/webrtc_tbm.c index 2d80bb77..1bff98c5 100644 --- a/src/webrtc_tbm.c +++ b/src/webrtc_tbm.c @@ -77,7 +77,10 @@ void _create_tbm_bo_list(webrtc_tbm_s *tbm, int bo_size, int list_length) LOG_DEBUG("bo[%p] is created", tbm_bo->bo); tbm->bo_list = g_list_append(tbm->bo_list, tbm_bo); } - LOG_DEBUG("tbm->bo_list[%p, length:%d] is created", tbm->bo_list, g_list_length(tbm->bo_list)); + tbm->bo_size = bo_size; + + LOG_INFO("tbm[bo_list[%p, length:%d], bo_size:%d] is created", + tbm->bo_list, g_list_length(tbm->bo_list), tbm->bo_size); } void *_get_unused_tbm_bo(webrtc_tbm_s *tbm, unsigned int timeout_sec) @@ -178,4 +181,4 @@ void _release_tbm(webrtc_tbm_s *tbm) g_free(tbm); } -//LCOV_EXCL_STOP \ No newline at end of file +//LCOV_EXCL_STOP -- 2.34.1