const char *a_hw_encoder_element;
} ini_item_media_source_s;
+typedef struct _ini_item_rendering_sink_s {
+ gchar **a_hw_decoder_elements;
+ gchar **v_hw_decoder_elements;
+} ini_item_rendering_sink_s;
+
typedef struct _webrtc_ini_s {
dictionary *dict;
ini_item_general_s general;
ini_item_media_source_s media_source;
+ ini_item_rendering_sink_s rendering_sink;
GHashTable *sources;
} webrtc_ini_s;
Name: capi-media-webrtc
Summary: A WebRTC library in Tizen Native API
-Version: 0.1.55
+Version: 0.1.56
Release: 0
Group: Multimedia/API
License: Apache-2.0
#define INI_CATEGORY_SOURCE_MIC "source mic"
#define INI_CATEGORY_SOURCE_AUDIOTEST "source audiotest"
#define INI_CATEGORY_SOURCE_VIDEOTEST "source videotest"
+#define INI_CATEGORY_RENDERING_SINK "rendering sink"
/* items for general */
#define INI_ITEM_DOT_PATH "dot path"
#define DEFAULT_VIDEO_CODEC "vp8"
#define DEFAULT_AUDIO_CODEC "opus"
+/* items for rendering sink */
+#define INI_ITEM_AUDIO_HW_DECODER_ELEMENTS "audio hw decoder elements"
+#define INI_ITEM_VIDEO_HW_DECODER_ELEMENTS "video hw decoder elements"
+
typedef enum {
INI_ITEM_TYPE_BOOL,
INI_ITEM_TYPE_INT,
__dump_items_of_source(source);
}
}
+
+ __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);
}
static const char* __get_delimiter(const char *ini_path)
}
}
+ __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);
+
__dump_ini(ini);
return WEBRTC_ERROR_NONE;
RET_IF(webrtc == NULL, "webrtc is NULL");
RET_IF(webrtc->ini.dict == NULL, "ini.dict is NULL");
+ g_strfreev(webrtc->ini.rendering_sink.a_hw_decoder_elements);
+ webrtc->ini.rendering_sink.a_hw_decoder_elements = NULL;
+
+ g_strfreev(webrtc->ini.rendering_sink.v_hw_decoder_elements);
+ webrtc->ini.rendering_sink.v_hw_decoder_elements = NULL;
+
g_hash_table_destroy(webrtc->ini.sources);
webrtc->ini.sources = NULL;
static int __decodebin_autoplug_select_cb(GstElement *decodebin, GstPad *pad, GstCaps *caps, GstElementFactory *factory, gpointer user_data)
{
- /* NOTE : GstAutoplugSelectResult is defined in gstplay-enum.h but not exposed */
- typedef enum {
+ /* NOTE : Similar enum is defined with GstAutoplugSelectResult in gstplay-enum.h but not exposed */
+ enum {
GST_AUTOPLUG_SELECT_TRY,
GST_AUTOPLUG_SELECT_EXPOSE,
GST_AUTOPLUG_SELECT_SKIP
- } GstAutoplugSelectResult;
+ };
gchar *factory_name;
const gchar *klass;
- GstAutoplugSelectResult result = GST_AUTOPLUG_SELECT_TRY;
webrtc_s *webrtc = (webrtc_s *)user_data;
+ gchar **str_arr;
RET_VAL_IF(webrtc == NULL, GST_AUTOPLUG_SELECT_SKIP, "webrtc is NULL, skip it");
LOG_INFO("factory [name:%s, klass:%s]", factory_name, klass);
- return result;
+ if (g_strrstr(klass, "Decoder/Audio/Hardware")) {
+ str_arr = webrtc->ini.rendering_sink.a_hw_decoder_elements;
+ if (str_arr == NULL || !g_strv_contains((const gchar * const *)str_arr, factory_name)) {
+ LOG_DEBUG("this audio hw decoder element[%s] is not specified in ini file, skip it", factory_name);
+ return GST_AUTOPLUG_SELECT_SKIP;
+ }
+ } else if (g_strrstr(klass, "Decoder/Video/Hardware")) {
+ str_arr = webrtc->ini.rendering_sink.v_hw_decoder_elements;
+ if (str_arr == NULL || !g_strv_contains((const gchar * const *)str_arr, factory_name)) {
+ LOG_DEBUG("this video hw decoder element[%s] is not specified in ini file, skip it", factory_name);
+ return GST_AUTOPLUG_SELECT_SKIP;
+ }
+ }
+
+ return GST_AUTOPLUG_SELECT_TRY;
}
void _sink_slot_destroy_cb(gpointer data)