From: hj kim Date: Wed, 20 Jul 2022 08:43:02 +0000 (+0900) Subject: webrtc_source_private: Add new function to get gstreamer element name X-Git-Tag: submit/tizen/20220726.122258~10 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f339529c2b6f246b51352f5d3faf5a8e0b7af6c9;p=platform%2Fcore%2Fapi%2Fwebrtc.git webrtc_source_private: Add new function to get gstreamer element name [Version] 0.3.164 [Issue Type] Refactoring Change-Id: If44c51fc4c160236514e6604417d12043aaf2706 --- diff --git a/include/webrtc_source_private.h b/include/webrtc_source_private.h index 7bacbaa2..5c2401db 100644 --- a/include/webrtc_source_private.h +++ b/include/webrtc_source_private.h @@ -64,6 +64,14 @@ #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__ */ diff --git a/packaging/capi-media-webrtc.spec b/packaging/capi-media-webrtc.spec index 1d23059c..b2e3a2e7 100644 --- a/packaging/capi-media-webrtc.spec +++ b/packaging/capi-media-webrtc.spec @@ -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 diff --git a/src/webrtc_source.c b/src/webrtc_source.c index 1f6093fb..464b19ad 100644 --- a/src/webrtc_source.c +++ b/src/webrtc_source.c @@ -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"); diff --git a/src/webrtc_source_private.c b/src/webrtc_source_private.c index b600347b..dc8fab31 100644 --- a/src/webrtc_source_private.c +++ b/src/webrtc_source_private.c @@ -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