From: Sangchul Lee Date: Thu, 13 Jun 2024 05:33:48 +0000 (+0900) Subject: webrtc_display: Destroy tbm bo list when bo size has been changed X-Git-Tag: accepted/tizen/7.0/unified/20240613.133448^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=818ccfe8a29aca2c26dd35780e33d5488e145c8f;p=platform%2Fcore%2Fapi%2Fwebrtc.git 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 --- 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