#define INI_ITEM_RTP_JITTERBUFFER_LATENCY "rtp jitterbuffer latency"
/* items for media source */
+#define INI_ITEM_SOURCE_ELEMENT "source element"
#define INI_ITEM_VIDEO_RAW_FORMAT "video raw format"
#define INI_ITEM_VIDEO_WIDTH "video width"
#define INI_ITEM_VIDEO_HEIGHT "video height"
{
RET_IF(source == NULL, "source is NULL");
+ __dump_item(INI_ITEM_SOURCE_ELEMENT, INI_ITEM_TYPE_STRING, (void *)source->source_element);
__dump_item(INI_ITEM_VIDEO_RAW_FORMAT, INI_ITEM_TYPE_STRING, (void *)source->v_raw_format);
__dump_item(INI_ITEM_VIDEO_WIDTH, INI_ITEM_TYPE_INT, &source->v_width);
__dump_item(INI_ITEM_VIDEO_HEIGHT, INI_ITEM_TYPE_INT, &source->v_height);
if (g_strcmp0(category, INI_CATEGORY_MEDIA_SOURCE) == 0)
is_default = true;
+ if (!is_default)
+ source->source_element = __ini_get_string(ini->dict, category, INI_ITEM_SOURCE_ELEMENT, NULL);
+
source->v_raw_format = __ini_get_string(ini->dict, category, INI_ITEM_VIDEO_RAW_FORMAT,
is_default ? DEFAULT_VIDEO_RAW_FORMAT : ini->media_source.v_raw_format);
source->v_width = __ini_get_int(ini->dict, category, INI_ITEM_VIDEO_WIDTH,
#define GST_KLASS_NAME_CONVERTER_AUDIO "Filter/Converter/Audio"
#define GST_KLASS_NAME_CONVERTER_VIDEO "Filter/Converter/Video"
-#define DEFAULT_ELEMENT_CAMERASRC "camerasrc"
+#define DEFAULT_ELEMENT_CAMERASRC "v4l2src"
#define DEFAULT_ELEMENT_AUDIOSRC "pulsesrc"
#define DEFAULT_ELEMENT_VIDEOTESTSRC "videotestsrc"
#define DEFAULT_ELEMENT_AUDIOTESTSRC "audiotestsrc"
return WEBRTC_ERROR_NONE;
}
+static const char *__get_default_element(webrtc_media_source_type_e type)
+{
+ const char *element = NULL;
+
+ if (type == WEBRTC_MEDIA_SOURCE_TYPE_CAMERA)
+ element = DEFAULT_ELEMENT_CAMERASRC;
+ else if (type == WEBRTC_MEDIA_SOURCE_TYPE_MIC)
+ element = DEFAULT_ELEMENT_AUDIOSRC;
+ else if (type == WEBRTC_MEDIA_SOURCE_TYPE_AUDIOTEST)
+ element = DEFAULT_ELEMENT_AUDIOTESTSRC;
+ else if (type == WEBRTC_MEDIA_SOURCE_TYPE_VIDEOTEST)
+ element = DEFAULT_ELEMENT_VIDEOTESTSRC;
+ else
+ LOG_ERROR_IF_REACHED("type(%d)", type);
+
+ LOG_DEBUG("type(%d) -> element[%s]", type, element);
+
+ return element;
+}
+
+static const char *__get_source_element(webrtc_s *webrtc, webrtc_media_source_type_e type)
+{
+ ini_item_media_source_s *source;
+
+ RET_VAL_IF(webrtc == NULL, NULL, "webrtc is NULL");
+
+ source = _ini_get_source_by_type(&webrtc->ini, type);
+ if (source == NULL || source->source_element == NULL)
+ return __get_default_element(type);
+
+ return source->source_element;
+}
+
static int __build_camerasrc(webrtc_s *webrtc, webrtc_gst_slot_s *source, GstPad *ghost_src_pad)
{
int ret = WEBRTC_ERROR_NONE;
source->media_types |= MEDIA_TYPE_VIDEO;
- /* FIXME: get factory name from ini */
- if (!(camerasrc = _create_element(DEFAULT_ELEMENT_CAMERASRC, NULL))) {
+ if (!(camerasrc = _create_element(__get_source_element(webrtc, WEBRTC_MEDIA_SOURCE_TYPE_CAMERA), NULL))) {
LOG_ERROR("failed to create camerasrc");
return WEBRTC_ERROR_INVALID_OPERATION;
}
source->media_types |= MEDIA_TYPE_AUDIO;
- if (!(audiosrc = _create_element(DEFAULT_ELEMENT_AUDIOSRC, NULL))) {
+ if (!(audiosrc = _create_element(__get_source_element(webrtc, WEBRTC_MEDIA_SOURCE_TYPE_MIC), NULL))) {
LOG_ERROR("failed to create audiosrc");
return WEBRTC_ERROR_INVALID_OPERATION;
}
source->media_types |= MEDIA_TYPE_VIDEO;
- if (!(videotestsrc = _create_element(DEFAULT_ELEMENT_VIDEOTESTSRC, NULL))) {
+ if (!(videotestsrc = _create_element(__get_source_element(webrtc, WEBRTC_MEDIA_SOURCE_TYPE_VIDEOTEST), NULL))) {
LOG_ERROR("failed to create videotestsrc");
return WEBRTC_ERROR_INVALID_OPERATION;
}
source->media_types |= MEDIA_TYPE_AUDIO;
- if (!(audiotestsrc = _create_element(DEFAULT_ELEMENT_AUDIOTESTSRC, NULL))) {
+ if (!(audiotestsrc = _create_element(__get_source_element(webrtc, WEBRTC_MEDIA_SOURCE_TYPE_AUDIOTEST), NULL))) {
LOG_ERROR("failed to create audiotestsrc");
return WEBRTC_ERROR_INVALID_OPERATION;
}