#define GST_KLASS_NAME_CONVERTER_AUDIO "Filter/Converter/Audio"
#define GST_KLASS_NAME_CONVERTER_VIDEO "Filter/Converter/Video"
-#define DEFAULT_ELEMENT_CAMERASRC "v4l2src"
-#define DEFAULT_ELEMENT_AUDIOSRC "pulsesrc"
-#define DEFAULT_ELEMENT_VIDEOTESTSRC "videotestsrc"
-#define DEFAULT_ELEMENT_AUDIOTESTSRC "audiotestsrc"
-#define DEFAULT_ELEMENT_APPSRC "appsrc"
-#define DEFAULT_ELEMENT_SCREENSRC "waylandsrc"
-#define DEFAULT_ELEMENT_QUEUE "queue"
-#define DEFAULT_ELEMENT_VOLUME "volume"
-#define DEFAULT_ELEMENT_INPUT_SELECTOR "input-selector"
-#define DEFAULT_ELEMENT_VIDEOCROP "videocrop"
-#define DEFAULT_ELEMENT_FILESRC "filesrc"
-
-
-#define ELEMENT_NAME_FIRST_CAPSFILTER "firstCapsfilter"
-#define ELEMENT_NAME_RTP_CAPSFILTER "rtpCapsfilter"
-#define ELEMENT_NAME_VIDEO_SRC "videoSrc"
-#define ELEMENT_NAME_VIDEO_SWITCH "videoSwitch"
-#define ELEMENT_NAME_VIDEO_MUTE_SRC "videoMuteSrc"
-#define ELEMENT_NAME_VOLUME "volume"
-#define ELEMENT_NAME_MIC_SRC "micSrc"
-#define DEFAULT_NAME_FILE_SRC "fileSrc"
-#define DEFAULT_NAME_AUDIO_QUEUE "audioQueue"
-#define DEFAULT_NAME_VIDEO_QUEUE "videoQueue"
-#define DEFAULT_NAME_AUDIO_CAPSFILTER "audioCapsfilter"
-#define DEFAULT_NAME_VIDEO_CAPSFILTER "videoCapsfilter"
-#define DEFAULT_NAME_AUDIO_PAYLOAD "audioPayload"
-#define DEFAULT_NAME_VIDEO_PAYLOAD "videoPayload"
-#define DEFAULT_NAME_VIDEOCROP "videoCrop"
-#define DEFAULT_NAME_SCREENSRC "waylandSrc"
-#define DEFAULT_NAME_AUDIO_FAKESINK "audioFakeSink"
-#define DEFAULT_NAME_VIDEO_FAKESINK "videoFakeSink"
-#define DEFAULT_NAME_AUDIO_APPSRC "audioAppsrc"
-#define DEFAULT_NAME_VIDEO_APPSRC "videoAppsrc"
+#define DEFAULT_ELEMENT_CAMERASRC "v4l2src"
+#define DEFAULT_ELEMENT_AUDIOSRC "pulsesrc"
+#define DEFAULT_ELEMENT_VIDEOTESTSRC "videotestsrc"
+#define DEFAULT_ELEMENT_AUDIOTESTSRC "audiotestsrc"
+#define DEFAULT_ELEMENT_APPSRC "appsrc"
+#define DEFAULT_ELEMENT_SCREENSRC "waylandsrc"
+#define DEFAULT_ELEMENT_QUEUE "queue"
+#define DEFAULT_ELEMENT_VOLUME "volume"
+#define DEFAULT_ELEMENT_INPUT_SELECTOR "input-selector"
+#define DEFAULT_ELEMENT_VIDEOCROP "videocrop"
+#define DEFAULT_ELEMENT_FILESRC "filesrc"
+
+#define ELEMENT_NAME_FIRST_CAPSFILTER "firstCapsfilter"
+#define ELEMENT_NAME_RTP_CAPSFILTER "rtpCapsfilter"
+#define ELEMENT_NAME_VIDEO_SRC "videoSrc"
+#define ELEMENT_NAME_VIDEO_SWITCH "videoSwitch"
+#define ELEMENT_NAME_VIDEO_MUTE_SRC "videoMuteSrc"
+#define ELEMENT_NAME_VOLUME "volume"
+#define ELEMENT_NAME_MIC_SRC "micSrc"
+#define DEFAULT_NAME_FILE_SRC "fileSrc"
+#define DEFAULT_NAME_AUDIO_QUEUE "audioQueue"
+#define DEFAULT_NAME_VIDEO_QUEUE "videoQueue"
+#define DEFAULT_NAME_AUDIO_CAPSFILTER "audioCapsfilter"
+#define DEFAULT_NAME_VIDEO_CAPSFILTER "videoCapsfilter"
+#define DEFAULT_NAME_AUDIO_PAYLOADER "audioPayloader"
+#define DEFAULT_NAME_VIDEO_PAYLOADER "videoPayloader"
+#define DEFAULT_NAME_VIDEOCROP "videoCrop"
+#define DEFAULT_NAME_SCREENSRC "waylandSrc"
+#define DEFAULT_NAME_AUDIO_FAKESINK "audioFakeSink"
+#define DEFAULT_NAME_VIDEO_FAKESINK "videoFakeSink"
+#define DEFAULT_NAME_AUDIO_APPSRC "audioAppsrc"
+#define DEFAULT_NAME_VIDEO_APPSRC "videoAppsrc"
#define APPEND_ELEMENT(x_list, x_element) \
do { \
typedef struct {
const char *appsrc_name;
const char *queue_name;
- const char *payload_name;
+ const char *payloader_name;
const char *capsfilter_name;
const char *fakesink_name;
} av_mapping_table_s;
{
DEFAULT_NAME_AUDIO_APPSRC,
DEFAULT_NAME_AUDIO_QUEUE,
- DEFAULT_NAME_AUDIO_PAYLOAD,
+ DEFAULT_NAME_AUDIO_PAYLOADER,
DEFAULT_NAME_AUDIO_CAPSFILTER,
DEFAULT_NAME_AUDIO_FAKESINK,
},
{
DEFAULT_NAME_VIDEO_APPSRC,
DEFAULT_NAME_VIDEO_QUEUE,
- DEFAULT_NAME_VIDEO_PAYLOAD,
+ DEFAULT_NAME_VIDEO_PAYLOADER,
DEFAULT_NAME_VIDEO_CAPSFILTER,
DEFAULT_NAME_VIDEO_FAKESINK,
}
static void __remove_rest_of_elements_for_filesrc_pipeline(webrtc_gst_slot_s *source, bool is_audio)
{
- GstBin *bin = NULL;
- GstElement *queue = NULL;
- GstElement *payload = NULL;
- GstElement *capsfilter = NULL;
- GstElement *fakesink = NULL;
+ GstBin *bin;
+ GstElement *queue;
+ GstElement *payloader;
+ GstElement *capsfilter;
+ GstElement *fakesink;
+ GList *element_list = NULL;
int av_idx = GET_AV_IDX(is_audio);
RET_IF(source == NULL, "pad is NULL");
bin = GST_BIN(source->filesrc_pipeline);
- queue = gst_bin_get_by_name(bin, _av_tbl[av_idx].queue_name);
- RET_IF(queue == NULL, "queue is NULL");
+ if ((queue = gst_bin_get_by_name(bin, _av_tbl[av_idx].queue_name)))
+ APPEND_ELEMENT(element_list, queue);
+ else
+ LOG_ERROR("queue is NULL");
- payload = gst_bin_get_by_name(bin, _av_tbl[av_idx].payload_name);
- RET_IF(payload == NULL, "payload is NULL");
+ if ((payloader = gst_bin_get_by_name(bin, _av_tbl[av_idx].payloader_name)))
+ APPEND_ELEMENT(element_list, payloader);
+ else
+ LOG_ERROR("payloader is NULL");
- capsfilter = gst_bin_get_by_name(bin, _av_tbl[av_idx].capsfilter_name);
- RET_IF(capsfilter == NULL, "capsfilter is NULL");
+ if ((capsfilter = gst_bin_get_by_name(bin, _av_tbl[av_idx].capsfilter_name)))
+ APPEND_ELEMENT(element_list, capsfilter);
+ else
+ LOG_ERROR("capsfilter is NULL");
- fakesink = gst_bin_get_by_name(bin, _av_tbl[av_idx].fakesink_name);
- RET_IF(fakesink == NULL, "fakesink is NULL");
+ if ((fakesink = gst_bin_get_by_name(bin, _av_tbl[av_idx].fakesink_name)))
+ APPEND_ELEMENT(element_list, fakesink);
+ else
+ LOG_ERROR("fakesink is NULL");
+
+ __remove_elements_from_bin(bin, element_list);
- gst_bin_remove_many(bin, queue, payload, capsfilter, fakesink, NULL);
+ SAFE_G_LIST_FREE(element_list);
}
static void __filesrc_pipeline_audio_stream_handoff_cb(GstElement *object, GstBuffer *buffer, GstPad *pad, gpointer data)
return GST_PAD_PROBE_REMOVE;
}
-static GstElement * __create_payload_for_filesrc_pipeline(GstPad *pad, bool is_audio)
+static GstElement * __create_payloader_for_filesrc_pipeline(GstPad *pad, bool is_audio)
{
element_info_s elem_info;
- GstElement *payload = NULL;
+ GstElement *payloader = NULL;
RET_VAL_IF(pad == NULL, NULL, "pad is NULL");
CREATE_ELEMENT_FROM_REGISTRY(elem_info, GST_KLASS_NAME_PAYLOADER_RTP,
gst_pad_get_current_caps(pad),
NULL,
- payload);
+ payloader);
- RET_VAL_IF(payload == NULL, NULL, "payload is NULL");
+ RET_VAL_IF(payloader == NULL, NULL, "payloader is NULL");
- gst_element_set_name(payload, _av_tbl[GET_AV_IDX(is_audio)].payload_name);
+ gst_element_set_name(payloader, _av_tbl[GET_AV_IDX(is_audio)].payloader_name);
- return payload;
+ return payloader;
}
static GstElement * __prepare_capsfilter_for_filesrc_pipeline(webrtc_gst_slot_s *source, bool is_audio)
static int __create_rest_of_elements_for_filesrc_pipeline(webrtc_gst_slot_s *source, GstPad *pad, bool is_audio)
{
- GstBin *bin = NULL;
- GstElement *queue = NULL;
- GstElement *payload = NULL;
- GstElement *capsfilter = NULL;
- GstElement *fakesink = NULL;
+ GstBin *bin;
+ GstElement *queue;
+ GstElement *payloader;
+ GstElement *capsfilter;
+ GstElement *fakesink;
GList *element_list = NULL;
RET_VAL_IF(source == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "source is NULL");
return WEBRTC_ERROR_INVALID_OPERATION;
APPEND_ELEMENT(element_list, queue);
- if (!(payload = __create_payload_for_filesrc_pipeline(pad, is_audio)))
+ if (!(payloader = __create_payloader_for_filesrc_pipeline(pad, is_audio)))
goto exit;
- APPEND_ELEMENT(element_list, payload);
+ APPEND_ELEMENT(element_list, payloader);
if (!(capsfilter = __prepare_capsfilter_for_filesrc_pipeline(source, is_audio)))
goto exit;
gst_element_foreach_src_pad(GST_ELEMENT(source->bin), __foreach_src_pad_cb, source);
for (av_idx = 0; av_idx < AV_IDX_MAX; av_idx++) {
+ GList *element_list = NULL;
+
if (source->av[av_idx].src_pad_probe_id == 0)
continue;
__remove_rest_of_elements_for_filesrc_pipeline(source, (av_idx == AV_IDX_AUDIO));
- appsrc = gst_bin_get_by_name(source->bin, _av_tbl[av_idx].appsrc_name);
- if (!appsrc)
+ if ((appsrc = gst_bin_get_by_name(source->bin, _av_tbl[av_idx].appsrc_name)))
+ APPEND_ELEMENT(element_list, appsrc);
+ else
LOG_ERROR("appsrc is NULL");
- queue = gst_bin_get_by_name(source->bin, _av_tbl[av_idx].queue_name);
- if (!queue)
+ if ((queue = gst_bin_get_by_name(source->bin, _av_tbl[av_idx].queue_name)))
+ APPEND_ELEMENT(element_list, queue);
+ else
LOG_ERROR("queue is NULL");
- capsfilter = gst_bin_get_by_name(source->bin, _av_tbl[av_idx].capsfilter_name);
- if (!capsfilter)
+ if ((capsfilter = gst_bin_get_by_name(source->bin, _av_tbl[av_idx].capsfilter_name)))
+ APPEND_ELEMENT(element_list, capsfilter);
+ else
LOG_ERROR("capsfilter is NULL");
- gst_bin_remove_many(source->bin, appsrc, queue, capsfilter, NULL);
+ __remove_elements_from_bin(source->bin, element_list);
+
+ SAFE_G_LIST_FREE(element_list);
}
if (source->display)