webrtc_display: Add _set_display_type_and_surface() and use it 79/261579/4
authorSangchul Lee <sc11.lee@samsung.com>
Wed, 21 Jul 2021 11:53:59 +0000 (20:53 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Fri, 23 Jul 2021 02:41:10 +0000 (11:41 +0900)
display 'object' is renamed to 'surface'.
Some codes regarding locking/unlocking display mutex are revised.
Level of some logs are changed.

[Version] 0.2.52
[Issue Type] Improvement

Change-Id: Ib2e70ea2ac6506cb91edf4a3f036a22e6b3cf17f
Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
include/webrtc_private.h
packaging/capi-media-webrtc.spec
src/webrtc_display.c
src/webrtc_sink.c
src/webrtc_source.c

index 9de7b9dcf81c70d4cd17d45954858bea7045148d..405c0e8a2f924defdd71e36f622c4dc0d5ed616f 100644 (file)
@@ -352,7 +352,7 @@ typedef struct _webrtc_tbm_s {
 } webrtc_tbm_s;
 
 typedef struct _webrtc_display {
-       void *object;
+       void *surface;
        int type;
        int overlay_surface_id;
 
@@ -585,6 +585,7 @@ GstStructure* _get_structure_from_data_channel_options(bundle *options);
 webrtc_display_s *_alloc_display(void);
 void _release_display(webrtc_display_s *display);
 int _apply_display(webrtc_display_s *display);
+void _set_display_type_and_surface(webrtc_display_s *display, webrtc_display_type_e type, void *surface);
 void _video_stream_decoded_cb(GstElement *object, GstBuffer *buffer, GstPad *pad, gpointer data);
 
 #ifndef TIZEN_TV
index eb8969d7011222219a2c7def886bb59c8b98f3a2..1298c672b211dbe71c987701d954e2e889abc34f 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-webrtc
 Summary:    A WebRTC library in Tizen Native API
-Version:    0.2.51
+Version:    0.2.52
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index 803eb73dde1c3ba681e27cb2e132e777d7cc4bea..44248a30173910260c69463555642f84093c74db 100644 (file)
@@ -643,19 +643,14 @@ static int __set_overlay_display(webrtc_display_s *display)
        RET_VAL_IF(display->type != WEBRTC_DISPLAY_TYPE_OVERLAY && display->type != WEBRTC_DISPLAY_TYPE_ECORE_WL,
                WEBRTC_ERROR_INVALID_OPERATION, "invalid display type(%d)", display->type);
 
-       g_mutex_lock(&display->mutex);
-
        if (display->type == WEBRTC_DISPLAY_TYPE_ECORE_WL)
                type = MM_DISPLAY_TYPE_OVERLAY_EXT;
 
-       ret = mm_display_interface_set_display_mainloop_sync(display->mm_display, type, display->object, &display->overlay_surface_id);
-       RET_VAL_WITH_UNLOCK_IF(ret != MM_ERROR_NONE, WEBRTC_ERROR_INVALID_OPERATION, &display->mutex,
-               "failed to mm_display_interface_set_display_mainloop_sync()");
+       ret = mm_display_interface_set_display_mainloop_sync(display->mm_display, type, display->surface, &display->overlay_surface_id);
+       RET_VAL_IF(ret != MM_ERROR_NONE, WEBRTC_ERROR_INVALID_OPERATION, "failed to mm_display_interface_set_display_mainloop_sync()");
 
        LOG_INFO("overlay_surface_id[%d]", display->overlay_surface_id);
 
-       g_mutex_unlock(&display->mutex);
-
        return WEBRTC_ERROR_NONE;
 }
 
@@ -666,26 +661,18 @@ static int __set_evas_display(webrtc_display_s *display)
        RET_VAL_IF(display == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "display is NULL");
        RET_VAL_IF(display->type != WEBRTC_DISPLAY_TYPE_EVAS, WEBRTC_ERROR_INVALID_OPERATION, "invalid display type(%d)", display->type);
 
-       g_mutex_lock(&display->mutex);
-
-       ret = mm_display_interface_set_display_mainloop_sync(display->mm_display, MM_DISPLAY_TYPE_EVAS, display->object, NULL);
-       RET_VAL_WITH_UNLOCK_IF(ret != MM_ERROR_NONE, WEBRTC_ERROR_INVALID_OPERATION, &display->mutex,
-               "failed to mm_display_interface_set_display_mainloop_sync()");
+       ret = mm_display_interface_set_display_mainloop_sync(display->mm_display, MM_DISPLAY_TYPE_EVAS, display->surface, NULL);
+       RET_VAL_IF(ret != MM_ERROR_NONE, WEBRTC_ERROR_INVALID_OPERATION, "failed to mm_display_interface_set_display_mainloop_sync()");
 
        /* FIXE: get mode and rotation value from handle */
        ret = mm_display_interface_evas_set_mode(display->mm_display, 0); /* 0: letter box, 1: origin size, 2: full screen */
-       RET_VAL_WITH_UNLOCK_IF(ret != MM_ERROR_NONE, WEBRTC_ERROR_INVALID_OPERATION, &display->mutex,
-               "failed to mm_display_interface_evas_set_mode()");
+       RET_VAL_IF(ret != MM_ERROR_NONE, WEBRTC_ERROR_INVALID_OPERATION, "failed to mm_display_interface_evas_set_mode()");
 
        ret = mm_display_interface_evas_set_rotation(display->mm_display, 0); /* 0: not rotate, 1: 90 degree, 2, 180 degree, 3, 270 degree */
-       RET_VAL_WITH_UNLOCK_IF(ret != MM_ERROR_NONE, WEBRTC_ERROR_INVALID_OPERATION, &display->mutex,
-               "failed to mm_display_interface_evas_set_rotation()");
+       RET_VAL_IF(ret != MM_ERROR_NONE, WEBRTC_ERROR_INVALID_OPERATION, "failed to mm_display_interface_evas_set_rotation()");
 
        ret = mm_display_interface_evas_set_visible(display->mm_display, true);
-       RET_VAL_WITH_UNLOCK_IF(ret != MM_ERROR_NONE, WEBRTC_ERROR_INVALID_OPERATION, &display->mutex,
-               "failed to mm_display_interface_evas_set_visible()");
-
-       g_mutex_unlock(&display->mutex);
+       RET_VAL_IF(ret != MM_ERROR_NONE, WEBRTC_ERROR_INVALID_OPERATION, "failed to mm_display_interface_evas_set_visible()");
 
        return WEBRTC_ERROR_NONE;
 }
@@ -696,15 +683,17 @@ int _apply_display(webrtc_display_s *display)
 
        RET_VAL_IF(display == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "display is NULL");
 
+       g_mutex_lock(&display->mutex);
+
        switch (display->type) {
        case WEBRTC_DISPLAY_TYPE_OVERLAY:
-               LOG_DEBUG("it's OVERLAY type");
+               LOG_INFO("it's OVERLAY type");
 
                ret = __set_overlay_display(display);
                break;
 
        case WEBRTC_DISPLAY_TYPE_EVAS:
-               LOG_DEBUG("it's EVAS type");
+               LOG_INFO("it's EVAS type");
 
                if (display->tbm == NULL)
                        display->tbm = _alloc_tbm();
@@ -713,16 +702,19 @@ int _apply_display(webrtc_display_s *display)
                break;
 
        case WEBRTC_DISPLAY_TYPE_ECORE_WL:
-               LOG_DEBUG("it's ECORE_WL type");
+               LOG_INFO("it's ECORE_WL type");
 
                ret = __set_overlay_display(display);
                break;
 
        default:
                LOG_ERROR_IF_REACHED("type(%d)", display->type);
-               return WEBRTC_ERROR_INVALID_PARAMETER;
+               ret = WEBRTC_ERROR_INVALID_PARAMETER;
+               break;
        }
 
+       g_mutex_unlock(&display->mutex);
+
        return ret;
 }
 
@@ -742,6 +734,21 @@ webrtc_display_s *_alloc_display(void)
        return display;
 }
 
+void _set_display_type_and_surface(webrtc_display_s *display, webrtc_display_type_e type, void *surface)
+{
+       RET_IF(display == NULL, "display is NULL");
+       RET_IF(surface == NULL, "surface is NULL");
+
+       g_mutex_lock(&display->mutex);
+
+       display->type = type;
+       display->surface = surface;
+
+       LOG_INFO("display[%p, type:%d, surface:%p]", display, type, surface);
+
+       g_mutex_unlock(&display->mutex);
+}
+
 void _release_display(webrtc_display_s *display)
 {
        RET_IF(display == NULL, "display is NULL");
index bba5879fce2fe2fcc2723714eef894b46cf8f7a7..1b6a35c3f27b89ef20146ce9cf0eb5b542ab667b 100644 (file)
@@ -100,9 +100,9 @@ static const char *__get_videosink_factory_name(webrtc_display_s *display, webrt
        RET_VAL_IF(ini == NULL, NULL, "ini is NULL");
        RET_VAL_IF(display_is_set == NULL, NULL, "display_is_set is NULL");
 
-       if (display->object == NULL) {
+       if (display->surface == NULL) {
                *display_is_set = false;
-               LOG_INFO("display object is not set, use [%s]", ini->rendering_sink.v_sink_element);
+               LOG_INFO("display surface is not set, use [%s]", ini->rendering_sink.v_sink_element);
                return ini->rendering_sink.v_sink_element;
        }
 
@@ -121,7 +121,7 @@ static const char *__get_videosink_factory_name(webrtc_display_s *display, webrt
                break;
        }
 
-       LOG_INFO("use [%s] for object[%p], type[%d]", factory_name, display->object, display->type);
+       LOG_INFO("use [%s] for surface[%p], type[%d]", factory_name, display->surface, display->type);
 
        return factory_name;
 }
@@ -955,10 +955,9 @@ int _set_display_to_sink(webrtc_s *webrtc, unsigned int track_id, unsigned int t
                RET_VAL_IF(sink->display == NULL, WEBRTC_ERROR_INVALID_OPERATION, "sink->display is NULL");
        }
 
-       LOG_INFO("track_id[%u] type[%d] object[%p]", track_id, type, display);
+       LOG_INFO("track_id[%u]", track_id);
 
-       sink->display->type = type;
-       sink->display->object = display;
+       _set_display_type_and_surface(sink->display, type, display);
 
        return _apply_display(sink->display);
 }
index 973822e5906df6d4a05673947e0ec966497a4a7d..90e81fb43f7be7f104dc64d49e37e8aff7f93eea 100644 (file)
@@ -3383,7 +3383,7 @@ static int __build_loopback_videosink(webrtc_gst_slot_s *source, GstElement *lin
        RET_VAL_IF(link_with == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "link_with is NULL");
        RET_VAL_IF(source->webrtc == NULL, WEBRTC_ERROR_INVALID_OPERATION, "webrtc is NULL");
        RET_VAL_IF(source->display == NULL, WEBRTC_ERROR_INVALID_OPERATION, "display is NULL");
-       RET_VAL_IF(source->display->object == NULL, WEBRTC_ERROR_INVALID_OPERATION, "display->object is NULL");
+       RET_VAL_IF(source->display->surface == NULL, WEBRTC_ERROR_INVALID_OPERATION, "display->surface is NULL");
 
        webrtc = source->webrtc;
 
@@ -3491,7 +3491,7 @@ static int __build_loopback_render_pipeline(webrtc_s *webrtc, webrtc_gst_slot_s
        RET_VAL_IF(source == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "source is NULL");
        if (type == MEDIA_TYPE_VIDEO) {
                RET_VAL_IF(source->display == NULL, WEBRTC_ERROR_INVALID_OPERATION, "display is NULL");
-               RET_VAL_IF(source->display->object == NULL, WEBRTC_ERROR_INVALID_OPERATION, "display->object is NULL");
+               RET_VAL_IF(source->display->surface == NULL, WEBRTC_ERROR_INVALID_OPERATION, "display->surface is NULL");
        }
 
        pipeline_name = g_strdup_printf("webrtc-source_%u-%s-render-pipeline", source->id, type == MEDIA_TYPE_AUDIO ? "audio" : "video");
@@ -3617,10 +3617,9 @@ int _set_video_loopback(webrtc_s *webrtc, unsigned int source_id, unsigned int t
                RET_VAL_IF(source->display == NULL, WEBRTC_ERROR_INVALID_OPERATION, "source->display is NULL");
        }
 
-       LOG_INFO("source_id[%u] type[%d] display[%p]", source_id, type, display);
+       LOG_INFO("source_id[%u]", source_id);
 
-       source->display->type = type;
-       source->display->object = display;
+       _set_display_type_and_surface(source->display, type, display);
 
        ret = _apply_display(source->display);
        if (ret != WEBRTC_ERROR_NONE)