webrtc_ini: Add new item to get audio/video sink element 43/259843/2
authorSangchul Lee <sc11.lee@samsung.com>
Wed, 16 Jun 2021 01:10:16 +0000 (10:10 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Wed, 16 Jun 2021 01:47:07 +0000 (10:47 +0900)
Sink pipeline applies this change.

e.g.)
[rendering sink]
audio sink element = pulsesrc
video sink element = tizenwlsink

[Version] 0.2.11
[Issue Type] Improvement

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

index 878abcbab5b4f6112d15d634160f8dd665669883..2f9a72ca51cccc4338b163f2b3ccc0997e5ce73f 100644 (file)
@@ -282,7 +282,9 @@ typedef struct _ini_item_media_source_s {
        const char *a_hw_encoder_element;
 } ini_item_media_source_s;
 
-typedef        struct _ini_item_rendering_sink_s {
+typedef struct _ini_item_rendering_sink_s {
+       const char *a_sink_element;
+       const char *v_sink_element;
        gchar **a_hw_decoder_elements;
        gchar **v_hw_decoder_elements;
        bool v_overlay_resource_required;
index 32f7c85be8db9670d582aa3456b88c9a93da7f50..cec6135e6b118d2034af07edb96a2e0fd1d28e25 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-webrtc
 Summary:    A WebRTC library in Tizen Native API
-Version:    0.2.10
+Version:    0.2.11
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index ebc7ec8bfcba1304a74159da2fd41cf082ad5fc9..a070db42305f61d265f1d6b3283cb9f622f236ac 100644 (file)
 #define DEFAULT_AUDIO_CODEC               "opus"
 
 /* items for rendering sink */
+#define INI_ITEM_AUDIO_SINK_ELEMENT               "audio sink element"
+#define INI_ITEM_VIDEO_SINK_ELEMENT               "video sink element"
 #define INI_ITEM_AUDIO_HW_DECODER_ELEMENTS        "audio hw decoder elements"
 #define INI_ITEM_VIDEO_HW_DECODER_ELEMENTS        "video hw decoder elements"
 #define INI_ITEM_VIDEO_OVERLAY_RESOURCE_REQUIRED  "video overlay resource required"
 
+#define DEFAULT_VIDEO_SINK_ELEMENT                "tizenwlsink"
+#define DEFAULT_AUDIO_SINK_ELEMENT                "pulsesink"
 #define DEFAULT_VIDEO_OVERLAY_RESOURCE_REQUIRED   false
 
 /* items for vpxenc parameters */
@@ -215,6 +219,8 @@ static void __dump_ini(webrtc_ini_s *ini)
        }
 
        LOG_INFO("[%s]", INI_CATEGORY_RENDERING_SINK);
+       __dump_item(INI_ITEM_AUDIO_SINK_ELEMENT, INI_ITEM_TYPE_STRING, (void *)ini->rendering_sink.a_sink_element);
+       __dump_item(INI_ITEM_VIDEO_SINK_ELEMENT, INI_ITEM_TYPE_STRING, (void *)ini->rendering_sink.v_sink_element);
        __dump_item(INI_ITEM_AUDIO_HW_DECODER_ELEMENTS, INI_ITEM_TYPE_STRINGS, ini->rendering_sink.a_hw_decoder_elements);
        __dump_item(INI_ITEM_VIDEO_HW_DECODER_ELEMENTS, INI_ITEM_TYPE_STRINGS, ini->rendering_sink.v_hw_decoder_elements);
        __dump_item(INI_ITEM_VIDEO_OVERLAY_RESOURCE_REQUIRED, INI_ITEM_TYPE_BOOL, &ini->rendering_sink.v_overlay_resource_required);
@@ -438,6 +444,8 @@ int _load_ini(webrtc_s *webrtc)
                }
        }
 
+       ini->rendering_sink.a_sink_element = __ini_get_string(ini->dict, INI_CATEGORY_RENDERING_SINK, INI_ITEM_AUDIO_SINK_ELEMENT, DEFAULT_AUDIO_SINK_ELEMENT);
+       ini->rendering_sink.v_sink_element = __ini_get_string(ini->dict, INI_CATEGORY_RENDERING_SINK, INI_ITEM_VIDEO_SINK_ELEMENT, DEFAULT_VIDEO_SINK_ELEMENT);
        __ini_read_list(ini->dict, INI_CATEGORY_RENDERING_SINK, INI_ITEM_AUDIO_HW_DECODER_ELEMENTS, &ini->rendering_sink.a_hw_decoder_elements);
        __ini_read_list(ini->dict, INI_CATEGORY_RENDERING_SINK, INI_ITEM_VIDEO_HW_DECODER_ELEMENTS, &ini->rendering_sink.v_hw_decoder_elements);
        ini->rendering_sink.v_overlay_resource_required = __ini_get_boolean(ini->dict, INI_CATEGORY_RENDERING_SINK,
index c2e10ebbe92d3c5723616ca9d6fe96d5aa6d96f5..07295dee43d1d074f48108886b6f2ea44f661c4c 100644 (file)
@@ -25,8 +25,6 @@
 #define DEFAULT_ELEMENT_VIDEOCONVERT  "videoconvert"
 #define DEFAULT_ELEMENT_AUDIOCONVERT  "audioconvert"
 #define DEFAULT_ELEMENT_AUDIORESAMPLE "audioresample"
-#define DEFAULT_ELEMENT_VIDEOSINK     "tizenwlsink"
-#define DEFAULT_ELEMENT_AUDIOSINK     "pulsesink"
 #define DEFAULT_ELEMENT_FAKESINK      "fakesink"
 
 bool _is_owner_of_track_build_context(webrtc_s *webrtc, unsigned int track_id)
@@ -83,24 +81,24 @@ static webrtc_gst_slot_s* __find_sink_slot(webrtc_s *webrtc, const gchar *key)
        return g_hash_table_lookup(webrtc->gst.sink_slots, key);
 }
 
-static const char *__get_videosink_factory_name(webrtc_display_s *display, const char *default_name, bool *display_is_set)
+static const char *__get_videosink_factory_name(webrtc_display_s *display, webrtc_ini_s *ini, bool *display_is_set)
 {
-       const char *factory_name = DEFAULT_ELEMENT_VIDEOSINK;
+       const char *factory_name = NULL;
 
-       RET_VAL_IF(display == NULL, default_name, "display is NULL");
-       RET_VAL_IF(default_name == NULL, DEFAULT_ELEMENT_VIDEOSINK, "default_name is NULL");
-       RET_VAL_IF(display_is_set == NULL, default_name, "display_is_set is NULL");
+       RET_VAL_IF(display == NULL, NULL, "display is NULL");
+       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) {
                *display_is_set = false;
-               LOG_INFO("display object is not set, use [%s]", default_name);
-               return default_name;
+               LOG_INFO("display object is not set, use [%s]", ini->rendering_sink.v_sink_element);
+               return ini->rendering_sink.v_sink_element;
        }
 
        *display_is_set = true;
 
        if (display->type == WEBRTC_DISPLAY_TYPE_OVERLAY)
-               factory_name = DEFAULT_ELEMENT_VIDEOSINK;
+               factory_name = ini->rendering_sink.v_sink_element;
        else if (display->type == WEBRTC_DISPLAY_TYPE_EVAS)
                factory_name = DEFAULT_ELEMENT_FAKESINK;
        else
@@ -130,7 +128,9 @@ static int __build_videosink(webrtc_s *webrtc, GstElement *decodebin, GstPad *sr
 
        sink->media_types |= MEDIA_TYPE_VIDEO;
 
-       videosink_factory_name = __get_videosink_factory_name(sink->display, DEFAULT_ELEMENT_VIDEOSINK, &display_is_set);
+       if (!(videosink_factory_name = __get_videosink_factory_name(sink->display, &webrtc->ini, &display_is_set)))
+               return WEBRTC_ERROR_INVALID_OPERATION;
+
        if (!(videosink = _create_element(videosink_factory_name, NULL))) {
                LOG_ERROR("failed to create videosink[%s]", videosink_factory_name);
                return WEBRTC_ERROR_INVALID_OPERATION;
@@ -205,8 +205,7 @@ static int __build_audiosink(webrtc_s *webrtc, GstElement *decodebin, GstPad *sr
                return WEBRTC_ERROR_INVALID_OPERATION;
        }
 
-       /* FIXME: get factory name from ini */
-       if (!(audiosink = _create_element(DEFAULT_ELEMENT_AUDIOSINK, NULL))) {
+       if (!(audiosink = _create_element(webrtc->ini.rendering_sink.a_sink_element, NULL))) {
                LOG_ERROR("failed to create audiosink");
                return WEBRTC_ERROR_INVALID_OPERATION;
        }