webrtc_display: Fix errors when setting EVAS display mode/visible 72/301572/1 accepted/tizen/8.0/unified/20231121.180434
authorSangchul Lee <sc11.lee@samsung.com>
Mon, 20 Nov 2023 03:45:30 +0000 (12:45 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Mon, 20 Nov 2023 06:30:19 +0000 (15:30 +0900)
These are fixed by using checking display type that shows
whether if the mm_display_interface_set_display_mainloop_sync()
is performed or not.

[Version] 0.4.22
[Issue Type] Bug fix

Change-Id: I070318bb73be96abd07da3d0ec419c0703c83109
Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
packaging/capi-media-webrtc.spec
src/webrtc_display.c
test/webrtc_test.c

index 728dfe6ba2754e0df5805be88698df97a12d4b38..3823d5b194fad6c331000658293b82d8bd1cc369 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-webrtc
 Summary:    A WebRTC library in Tizen Native API
-Version:    0.4.21
+Version:    0.4.22
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index cc1e0951f1440d31d97763efd5c0850371024a01..936ee93acdb67bea231e2518a2fe817d8740dca9 100644 (file)
@@ -869,13 +869,18 @@ int _set_display_mode(webrtc_display_s *display, webrtc_display_mode_e mode)
                display->mode = mode;
                break;
 //LCOV_EXCL_START
-       case WEBRTC_DISPLAY_TYPE_EVAS:
-               LOG_INFO("it's EVAS type, mode[%d]", mode);
-               RET_VAL_IF(mm_display_interface_evas_set_mode(display->mm_display, (int)mode) != 0,
-                       WEBRTC_ERROR_INVALID_OPERATION, "failed to mm_display_interface_evas_set_mode()");
+       case WEBRTC_DISPLAY_TYPE_EVAS: {
+               mm_display_type_e display_type;
 
+               LOG_INFO("it's EVAS type, mode[%d]", mode);
+               RET_VAL_IF(mm_display_interface_get_type(display->mm_display, &display_type) != MM_ERROR_NONE,
+                       WEBRTC_ERROR_INVALID_OPERATION, "failed to mm_display_interface_get_type()");
+               if (display_type != MM_DISPLAY_TYPE_NONE)
+                       RET_VAL_IF(mm_display_interface_evas_set_mode(display->mm_display, (int)mode) != 0,
+                               WEBRTC_ERROR_INVALID_OPERATION, "failed to mm_display_interface_evas_set_mode()");
                display->mode = mode;
                break;
+       }
 //LCOV_EXCL_STOP
        default:
                LOG_ERROR_IF_REACHED("type(%d)", display->type);
@@ -927,13 +932,18 @@ int _set_display_visible(webrtc_display_s *display, bool visible)
                display->visible = visible;
                break;
 //LCOV_EXCL_START
-       case WEBRTC_DISPLAY_TYPE_EVAS:
-               LOG_INFO("it's EVAS type, visible[%u]", visible);
-               RET_VAL_IF(mm_display_interface_evas_set_visible(display->mm_display, visible) != 0,
-                       WEBRTC_ERROR_INVALID_OPERATION, "failed to mm_display_interface_evas_set_visible()");
+       case WEBRTC_DISPLAY_TYPE_EVAS: {
+               mm_display_type_e display_type;
 
+               LOG_INFO("it's EVAS type, visible[%u]", visible);
+               RET_VAL_IF(mm_display_interface_get_type(display->mm_display, &display_type) != MM_ERROR_NONE,
+                       WEBRTC_ERROR_INVALID_OPERATION, "failed to mm_display_interface_get_type()");
+               if (display_type != MM_DISPLAY_TYPE_NONE)
+                       RET_VAL_IF(mm_display_interface_evas_set_visible(display->mm_display, visible) != 0,
+                               WEBRTC_ERROR_INVALID_OPERATION, "failed to mm_display_interface_evas_set_visible()");
                display->visible = visible;
                break;
+       }
 //LCOV_EXCL_STOP
        default:
                LOG_ERROR_IF_REACHED("type(%d)", display->type);
index d1707750f37670075527df78b9bce8addc371495..8a6c0fe62bf1d628cfc0a52c1b600eb6bfd63ed5 100644 (file)
@@ -1950,12 +1950,17 @@ static void __track_added_cb(webrtc_h webrtc, webrtc_media_type_e type, unsigned
                        } else
 #endif
                        {
-                               if (conn->render.display_type == WEBRTC_DISPLAY_TYPE_OVERLAY)
+                               if (conn->render.display_type == WEBRTC_DISPLAY_TYPE_OVERLAY) {
                                        webrtc_set_display(webrtc, id, WEBRTC_DISPLAY_TYPE_OVERLAY, g_ad.win);
-                               else if (conn->render.display_type == WEBRTC_DISPLAY_TYPE_EVAS)
+                                       webrtc_set_display_mode(webrtc, id, WEBRTC_DISPLAY_MODE_LETTER_BOX);
+                                       webrtc_set_display_visible(webrtc, id, true);
+                               } else if (conn->render.display_type == WEBRTC_DISPLAY_TYPE_EVAS) {
                                        webrtc_set_display(webrtc, id, WEBRTC_DISPLAY_TYPE_EVAS, conn->render.eo);
-                               else
+                                       webrtc_set_display_mode(webrtc, id, WEBRTC_DISPLAY_MODE_LETTER_BOX);
+                                       webrtc_set_display_visible(webrtc, id, true);
+                               } else {
                                        g_print("invalid display type[%d]\n", conn->render.display_type);
+                               }
                        }
                } else {
                        g_print("Video track is added, render it on gst pipeline for validation\n");