webrtc_source_private: Add new function to get gstreamer element name 19/278419/10
authorhj kim <backto.kim@samsung.com>
Wed, 20 Jul 2022 08:43:02 +0000 (17:43 +0900)
committerhj kim <backto.kim@samsung.com>
Mon, 25 Jul 2022 02:19:48 +0000 (11:19 +0900)
[Version] 0.3.164
[Issue Type] Refactoring

Change-Id: If44c51fc4c160236514e6604417d12043aaf2706

include/webrtc_source_private.h
packaging/capi-media-webrtc.spec
src/webrtc_source.c
src/webrtc_source_private.c

index 7bacbaa2245fc7ce19c63ea3f8826d45adce929e..5c2401dbf319e751b4d1d6ab6fda4bf7b715e819 100644 (file)
 #define ELEMENT_NAME_AUDIO_APPSRC            "audioAppsrc"
 #define ELEMENT_NAME_VIDEO_APPSRC            "videoAppsrc"
 
+typedef enum {
+       ELEMENT_APPSRC,
+       ELEMENT_QUEUE,
+       ELEMENT_PAYLOADER,
+       ELEMENT_CAPSFILTER,
+       ELEMENT_FAKESINK
+} gst_element_e;
+
 const char *_get_audio_format_name(media_format_mimetype_e mime_type);
 const char *_get_video_format_name(media_format_mimetype_e mime_type, bool zerocopy_enabled);
 const char *_get_source_element(webrtc_s *webrtc, int type);
@@ -80,5 +88,6 @@ unsigned int _get_available_payload_type(webrtc_s *webrtc);
 GstCaps *_make_rtp_caps(const gchar *media_type, unsigned int payload_type, webrtc_gst_slot_s *source);
 int _set_mediapacketsrc_codec_info(webrtc_s *webrtc, webrtc_gst_slot_s *source, media_format_mimetype_e mime_type);
 int _get_screen_resolution(int *width, int *height);
+const char *_get_element_name(int av_idx, gst_element_e element);
 
 #endif /* __TIZEN_MEDIA_WEBRTC_SOURCE_COMMON_H__ */
index 1d23059c6a6e20195e0e8db226f27740e66dd2f0..b2e3a2e774611e607bcc6dcd781dcfdbb156b9d2 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-webrtc
 Summary:    A WebRTC library in Tizen Native API
-Version:    0.3.163
+Version:    0.3.164
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index 1f6093fb2d755fe3afda357c26c234b81084ce5e..464b19ad3b9ce6a47b755cacb88a2d9e02da2dc1 100644 (file)
@@ -58,31 +58,6 @@ static rtp_payload_info_s __payload_info[] = {
        { 0, NULL, NULL, NULL, 0 }
 };
 
-typedef struct {
-       const char *appsrc_name;
-       const char *queue_name;
-       const char *payloader_name;
-       const char *capsfilter_name;
-       const char *fakesink_name;
-} av_mapping_table_s;
-
-static av_mapping_table_s _av_tbl[AV_IDX_MAX] = {
-       {
-               ELEMENT_NAME_AUDIO_APPSRC,
-               ELEMENT_NAME_AUDIO_QUEUE,
-               ELEMENT_NAME_AUDIO_PAYLOADER,
-               ELEMENT_NAME_AUDIO_CAPSFILTER,
-               ELEMENT_NAME_AUDIO_FAKESINK,
-       },
-       {
-               ELEMENT_NAME_VIDEO_APPSRC,
-               ELEMENT_NAME_VIDEO_QUEUE,
-               ELEMENT_NAME_VIDEO_PAYLOADER,
-               ELEMENT_NAME_VIDEO_CAPSFILTER,
-               ELEMENT_NAME_VIDEO_FAKESINK,
-       }
-};
-
 static int __link_source_with_webrtcbin(webrtc_gst_slot_s *source, GstElement *webrtcbin);
 static GstPadProbeReturn __camerasrc_probe_cb(GstPad *pad,  GstPadProbeInfo *info, gpointer u_data);
 
@@ -1333,7 +1308,7 @@ static int __build_filesrc_bin(webrtc_gst_slot_s *source, media_type_e media_typ
        ret = _add_no_target_ghostpad_to_slot(source, true, &src_pad);
        RET_VAL_IF(ret != WEBRTC_ERROR_NONE, ret, "failed to _add_no_target_ghostpad_to_slot()");
 
-       if (!(appsrc = _create_element(DEFAULT_ELEMENT_APPSRC, _av_tbl[av_idx].appsrc_name)))
+       if (!(appsrc = _create_element(DEFAULT_ELEMENT_APPSRC, _get_element_name(av_idx, ELEMENT_APPSRC))))
                return WEBRTC_ERROR_INVALID_OPERATION;
        APPEND_ELEMENT(element_list, appsrc);
 
@@ -1342,11 +1317,11 @@ static int __build_filesrc_bin(webrtc_gst_slot_s *source, media_type_e media_typ
                "format", GST_FORMAT_TIME,
                NULL);
 
-       if (!(queue = _create_element(DEFAULT_ELEMENT_QUEUE, _av_tbl[av_idx].queue_name)))
+       if (!(queue = _create_element(DEFAULT_ELEMENT_QUEUE, _get_element_name(av_idx, ELEMENT_QUEUE))))
                goto exit;
        APPEND_ELEMENT(element_list, queue);
 
-       if (!(capsfilter = _create_element(DEFAULT_ELEMENT_CAPSFILTER, _av_tbl[av_idx].capsfilter_name)))
+       if (!(capsfilter = _create_element(DEFAULT_ELEMENT_CAPSFILTER, _get_element_name(av_idx, ELEMENT_CAPSFILTER))))
                goto exit;
        APPEND_ELEMENT(element_list, capsfilter);
 
@@ -1395,22 +1370,22 @@ static void __remove_rest_of_elements_for_filesrc_pipeline(webrtc_gst_slot_s *so
 
        bin = GST_BIN(source->filesrc_pipeline);
 
-       if ((queue = gst_bin_get_by_name(bin, _av_tbl[av_idx].queue_name)))
+       if ((queue = gst_bin_get_by_name(bin, _get_element_name(av_idx, ELEMENT_QUEUE))))
                APPEND_ELEMENT(element_list, queue);
        else
                LOG_ERROR("queue is NULL");
 
-       if ((payloader = gst_bin_get_by_name(bin, _av_tbl[av_idx].payloader_name)))
+       if ((payloader = gst_bin_get_by_name(bin, _get_element_name(av_idx, ELEMENT_PAYLOADER))))
                APPEND_ELEMENT(element_list, payloader);
        else
                LOG_ERROR("payloader is NULL");
 
-       if ((capsfilter = gst_bin_get_by_name(bin, _av_tbl[av_idx].capsfilter_name)))
+       if ((capsfilter = gst_bin_get_by_name(bin, _get_element_name(av_idx, ELEMENT_CAPSFILTER))))
                APPEND_ELEMENT(element_list, capsfilter);
        else
                LOG_ERROR("capsfilter is NULL");
 
-       if ((fakesink = gst_bin_get_by_name(bin, _av_tbl[av_idx].fakesink_name)))
+       if ((fakesink = gst_bin_get_by_name(bin, _get_element_name(av_idx, ELEMENT_FAKESINK))))
                APPEND_ELEMENT(element_list, fakesink);
        else
                LOG_ERROR("fakesink is NULL");
@@ -1425,7 +1400,7 @@ static void __filesrc_pipeline_audio_stream_handoff_cb(GstElement *object, GstBu
        webrtc_gst_slot_s *source = data;
        GstFlowReturn gst_ret = GST_FLOW_OK;
 
-       g_signal_emit_by_name(gst_bin_get_by_name(source->bin, _av_tbl[AV_IDX_AUDIO].appsrc_name), "push-buffer", buffer, &gst_ret, NULL);
+       g_signal_emit_by_name(gst_bin_get_by_name(source->bin, _get_element_name(AV_IDX_AUDIO, ELEMENT_APPSRC)), "push-buffer", buffer, &gst_ret, NULL);
        if (gst_ret != GST_FLOW_OK)
                LOG_ERROR("failed to 'push-buffer', gst_ret[0x%x]", gst_ret);
 }
@@ -1435,7 +1410,7 @@ static void __filesrc_pipeline_video_stream_handoff_cb(GstElement *object, GstBu
        webrtc_gst_slot_s *source = data;
        GstFlowReturn gst_ret = GST_FLOW_OK;
 
-       g_signal_emit_by_name(gst_bin_get_by_name(source->bin, _av_tbl[AV_IDX_VIDEO].appsrc_name), "push-buffer", buffer, &gst_ret, NULL);
+       g_signal_emit_by_name(gst_bin_get_by_name(source->bin, _get_element_name(AV_IDX_VIDEO, ELEMENT_APPSRC)), "push-buffer", buffer, &gst_ret, NULL);
        if (gst_ret != GST_FLOW_OK)
                LOG_ERROR("failed to 'push-buffer', gst_ret[0x%x]", gst_ret);
 }
@@ -1473,7 +1448,7 @@ static GstPadProbeReturn __fakesink_probe_cb(GstPad *pad, GstPadProbeInfo *info,
        av_idx = GET_AV_IDX(_is_audio_media_type(media_type));
        g_free(media_type);
 
-       appsrc = gst_bin_get_by_name(source->bin, _av_tbl[av_idx].appsrc_name);
+       appsrc = gst_bin_get_by_name(source->bin, _get_element_name(av_idx, ELEMENT_APPSRC));
        RET_VAL_IF(appsrc == NULL, GST_PAD_PROBE_OK, "There is no appsrc for [%s]", (av_idx == AV_IDX_AUDIO) ? "audio" : "video");
 
        caps = gst_pad_get_current_caps(pad);
@@ -1515,7 +1490,7 @@ static GstElement * __create_payloader_for_filesrc_pipeline(GstPad *pad, bool is
                                                                payloader);
        RET_VAL_IF(payloader == NULL, NULL, "payloader is NULL");
 
-       gst_element_set_name(payloader, _av_tbl[GET_AV_IDX(is_audio)].payloader_name);
+       gst_element_set_name(payloader, _get_element_name(GET_AV_IDX(is_audio), ELEMENT_PAYLOADER));
 
        return payloader;
 }
@@ -1527,7 +1502,7 @@ static GstElement * __prepare_capsfilter_for_filesrc_pipeline(webrtc_gst_slot_s
 
        RET_VAL_IF(source == NULL, NULL, "source is NULL");
 
-       if (!(capsfilter = _create_element(DEFAULT_ELEMENT_CAPSFILTER, _av_tbl[GET_AV_IDX(is_audio)].capsfilter_name)))
+       if (!(capsfilter = _create_element(DEFAULT_ELEMENT_CAPSFILTER, _get_element_name(GET_AV_IDX(is_audio), ELEMENT_CAPSFILTER))))
                return NULL;
 
        if(__set_payload_type(source->webrtc, source, GET_AV_IDX(is_audio), NULL) != WEBRTC_ERROR_NONE) {
@@ -1550,7 +1525,7 @@ static GstElement * __prepare_fakesink_for_filesrc_pipeline(webrtc_gst_slot_s *s
 
        RET_VAL_IF(source == NULL, NULL, "source is NULL");
 
-       if (!(fakesink = _create_element(DEFAULT_ELEMENT_FAKESINK, _av_tbl[GET_AV_IDX(is_audio)].fakesink_name)))
+       if (!(fakesink = _create_element(DEFAULT_ELEMENT_FAKESINK, _get_element_name(GET_AV_IDX(is_audio), ELEMENT_FAKESINK))))
                return NULL;
 
        sink_pad = gst_element_get_static_pad(fakesink, "sink");
@@ -1584,7 +1559,7 @@ static int __create_rest_of_elements_for_filesrc_pipeline(webrtc_gst_slot_s *sou
 
        bin = GST_BIN(source->filesrc_pipeline);
 
-       if (!(queue = _create_element(DEFAULT_ELEMENT_QUEUE, _av_tbl[GET_AV_IDX(is_audio)].queue_name)))
+       if (!(queue = _create_element(DEFAULT_ELEMENT_QUEUE, _get_element_name(GET_AV_IDX(is_audio), ELEMENT_QUEUE))))
                return WEBRTC_ERROR_INVALID_OPERATION;
        APPEND_ELEMENT(element_list, queue);
 
@@ -1632,9 +1607,9 @@ static int __link_decodebin_with_queue(GstPad *pad, webrtc_gst_slot_s *source, b
        RET_VAL_IF(pad == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "pad is NULL");
        RET_VAL_IF(source == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "source is NULL");
 
-       queue = gst_bin_get_by_name(GST_BIN(source->filesrc_pipeline), _av_tbl[GET_AV_IDX(is_audio)].queue_name);
+       queue = gst_bin_get_by_name(GST_BIN(source->filesrc_pipeline), _get_element_name(GET_AV_IDX(is_audio), ELEMENT_QUEUE));
        if (!queue) {
-               LOG_ERROR("failed to get element [%s]", _av_tbl[GET_AV_IDX(is_audio)].queue_name);
+               LOG_ERROR("failed to get element [%s]", _get_element_name(GET_AV_IDX(is_audio), ELEMENT_QUEUE));
                return WEBRTC_ERROR_INVALID_OPERATION;
        }
 
@@ -1698,7 +1673,7 @@ static void __filesrc_pipeline_decodebin_pad_added_cb(GstElement *element, GstPa
                return;
        }
 
-       queue = gst_bin_get_by_name(GST_BIN(source->filesrc_pipeline), _av_tbl[GET_AV_IDX(is_audio)].queue_name);
+       queue = gst_bin_get_by_name(GST_BIN(source->filesrc_pipeline), _get_element_name(GET_AV_IDX(is_audio), ELEMENT_QUEUE));
        RET_IF(queue == NULL, "queue is NULL");
 
        ret = __link_decodebin_with_queue(pad, source, is_audio);
@@ -2974,17 +2949,17 @@ static void __release_filesrc_resources(webrtc_gst_slot_s *source)
 
                __remove_rest_of_elements_for_filesrc_pipeline(source, (av_idx == AV_IDX_AUDIO));
 
-               if ((appsrc = gst_bin_get_by_name(source->bin, _av_tbl[av_idx].appsrc_name)))
+               if ((appsrc = gst_bin_get_by_name(source->bin, _get_element_name(av_idx, ELEMENT_APPSRC))))
                        APPEND_ELEMENT(element_list, appsrc);
                else
                        LOG_ERROR("appsrc is NULL");
 
-               if ((queue = gst_bin_get_by_name(source->bin, _av_tbl[av_idx].queue_name)))
+               if ((queue = gst_bin_get_by_name(source->bin, _get_element_name(av_idx, ELEMENT_QUEUE))))
                        APPEND_ELEMENT(element_list, queue);
                else
                        LOG_ERROR("queue is NULL");
 
-               if ((capsfilter = gst_bin_get_by_name(source->bin, _av_tbl[av_idx].capsfilter_name)))
+               if ((capsfilter = gst_bin_get_by_name(source->bin, _get_element_name(av_idx, ELEMENT_CAPSFILTER))))
                        APPEND_ELEMENT(element_list, capsfilter);
                else
                        LOG_ERROR("capsfilter is NULL");
index b600347bbc3121a58d5115e773ef58004ab03f91..dc8fab31692d5a3b709df9da00834bda6620ba68 100644 (file)
@@ -353,4 +353,28 @@ GstCaps *_make_rtp_caps(const gchar *media_type, unsigned int payload_type, webr
        PRINT_CAPS(caps, "RTP");
 
        return caps;
+}
+
+static const char *_av_element_tbl[AV_IDX_MAX][ELEMENT_FAKESINK + 1] = {
+       {
+               ELEMENT_NAME_AUDIO_APPSRC,
+               ELEMENT_NAME_AUDIO_QUEUE,
+               ELEMENT_NAME_AUDIO_PAYLOADER,
+               ELEMENT_NAME_AUDIO_CAPSFILTER,
+               ELEMENT_NAME_AUDIO_FAKESINK,
+       },
+       {
+               ELEMENT_NAME_VIDEO_APPSRC,
+               ELEMENT_NAME_VIDEO_QUEUE,
+               ELEMENT_NAME_VIDEO_PAYLOADER,
+               ELEMENT_NAME_VIDEO_CAPSFILTER,
+               ELEMENT_NAME_VIDEO_FAKESINK,
+       }
+};
+const char *_get_element_name(int av_idx, gst_element_e element)
+{
+       RET_VAL_IF((av_idx != AV_IDX_AUDIO) && (av_idx != AV_IDX_VIDEO), NULL, "invalid av_idx [%d]", av_idx);
+       RET_VAL_IF((element > ELEMENT_FAKESINK), NULL, "invalid element [%d]", element);
+
+       return _av_element_tbl[av_idx][element];
 }
\ No newline at end of file