Add webrtc_set_display() API 59/248659/10
authorSangchul Lee <sc11.lee@samsung.com>
Tue, 1 Dec 2020 08:05:46 +0000 (17:05 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Wed, 9 Dec 2020 04:04:03 +0000 (13:04 +0900)
[Version] 0.1.66
[Issue Type] API

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

index c290beb855041002e3984046e9cc7c3438d62ebc..e46d0dc11ef3167225dde534148129b9af26a813 100644 (file)
@@ -491,6 +491,25 @@ int webrtc_get_transceiver_direction(webrtc_h webrtc, unsigned int source_id, we
  */
 int webrtc_set_transceiver_direction(webrtc_h webrtc, unsigned int source_id, webrtc_media_type_e media_type, webrtc_transceiver_direction_e direction);
 
+/**
+ * @brief Set a display to the media track.
+ * @since_tizen 6.5
+ * @remarks Call this function within webrtc_track_added_cb(), otherwise #WEBRTC_ERROR_INVALID_OPERATION will be returned.
+ * @param[in] webrtc      WebRTC handle
+ * @param[in] track_id    The track id
+ * @param[in] type        The display type
+ * @param[in] display     The display handle
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ * @retval #WEBRTC_ERROR_NONE    Successful
+ * @retval #WEBRTC_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #WEBRTC_ERROR_INVALID_OPERATION Invalid operation
+ * @pre webrtc_track_added_cb() must be set by calling webrtc_set_track_added_cb().
+ * @see webrtc_set_track_added_cb()
+ * @see webrtc_unset_track_added_cb()
+ */
+int webrtc_set_display(webrtc_h webrtc, unsigned int track_id, webrtc_display_type_e type, webrtc_display_h display);
+
 /**
  * @brief Sets a STUN server URL.
  * @since_tizen 6.5
index c854ef40b7fcccb637ddc3855e733c1494eccd6e..4e37e6eb3a3145a4901d24926f8e4118919e9af8 100644 (file)
@@ -274,6 +274,8 @@ typedef struct _webrtc_s {
 
        GHashTable *data_channels;
 
+       bool inside_track_added_cb;
+
        webrtc_callbacks_s error_cb;
        webrtc_callbacks_s state_changed_cb;
        webrtc_callbacks_s negotiation_needed_cb;
index d7e246aac1184f115bcbf4cf56340eb0f27fe352..699a64764a01c58b01bbfd5fb6161d8618ef8f19 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-webrtc
 Summary:    A WebRTC library in Tizen Native API
-Version:    0.1.64
+Version:    0.1.66
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index ad0908548eb055e95e82ae47a5f4a7e40c7e607a..083fea61f2d158efa66b23521100fe868abfe3bc 100644 (file)
@@ -306,6 +306,29 @@ int webrtc_set_transceiver_direction(webrtc_h webrtc, unsigned int source_id, we
        return ret;
 }
 
+int webrtc_set_display(webrtc_h webrtc, unsigned int track_id, webrtc_display_type_e type, webrtc_display_h display)
+{
+       int ret = WEBRTC_ERROR_NONE;
+       webrtc_s *_webrtc = (webrtc_s*)webrtc;
+
+       RET_VAL_IF(_webrtc == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "webrtc is NULL");
+       RET_VAL_IF(track_id == 0, WEBRTC_ERROR_INVALID_PARAMETER, "track id is 0");
+       RET_VAL_IF(display == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "display is NULL");
+
+       g_mutex_lock(&_webrtc->mutex);
+
+       RET_VAL_WITH_UNLOCK_IF(_webrtc->track_added_cb.callback == NULL, WEBRTC_ERROR_INVALID_OPERATION, &_webrtc->mutex, "callback was not set");
+       RET_VAL_WITH_UNLOCK_IF(!_webrtc->inside_track_added_cb, WEBRTC_ERROR_INVALID_OPERATION, &_webrtc->mutex, "this function should be called within the track added callback");
+
+       ret = _set_display_to_sink(webrtc, track_id, (unsigned int)type, (void *)display);
+       if (ret == WEBRTC_ERROR_NONE)
+               LOG_INFO("track_id[%u] type[%d] display[%p]", track_id, type, display);
+
+       g_mutex_unlock(&_webrtc->mutex);
+
+       return ret;
+}
+
 int webrtc_set_stun_server(webrtc_h webrtc, const char *stun_server)
 {
        webrtc_s *_webrtc = (webrtc_s*)webrtc;
index 7a3f1cb73ef3110c6942656805fc9249e3097fbd..7a5e3e2b62380ceeac265fb719aa7eae084ba423 100644 (file)
@@ -168,8 +168,10 @@ static void __invoke_track_added_cb(webrtc_s *webrtc, const gchar *name, bool is
 
        if (webrtc->track_added_cb.callback) {
                LOG_DEBUG(">>> callback[%p], user_data[%p]", webrtc->track_added_cb.callback, webrtc->track_added_cb.user_data);
+               webrtc->inside_track_added_cb = true;
                ((webrtc_track_added_cb)(webrtc->track_added_cb.callback))((webrtc_h)webrtc,
                        is_video ? WEBRTC_MEDIA_TYPE_VIDEO : WEBRTC_MEDIA_TYPE_AUDIO, __get_id_from_name(name), webrtc->track_added_cb.user_data);
+               webrtc->inside_track_added_cb = false;
                LOG_DEBUG("<<< end of the callback");
        }
 }