return element;
}
-void __mmplayer_http_src_setup(GstElement *element, GstElement *source, gpointer data)
+void __mmplayer_http_src_setup(GstElement *source, gpointer data)
{
#define HTTP_SOURCE_BLOCK_SIZE (64 * 1024)
}
static void
-__mmplayer_source_setup_cb(GstElement *element, GstElement *source, gpointer data)
+__mmplayer_gst_found_source(GObject *object, GObject *orig, GParamSpec *pspec, gpointer data)
{
mmplayer_t *player = (mmplayer_t *)data;
- LOGD("%s >> %s", GST_ELEMENT_NAME(element), GST_ELEMENT_NAME(source));
+ GstElement *source = NULL;
+
+ MMPLAYER_FENTER();
+ LOGD("%s >> %s", GST_ELEMENT_NAME(object), pspec->name);
+
+ g_object_get(orig, pspec->name, &source, NULL);
player->pipeline->mainbin[MMPLAYER_M_SRC].id = MMPLAYER_M_SRC;
player->pipeline->mainbin[MMPLAYER_M_SRC].gst = source;
if (MMPLAYER_IS_HTTP_STREAMING(player)) {
- __mmplayer_http_src_setup(element, source, data);
+ __mmplayer_http_src_setup(source, data);
} else if (MMPLAYER_IS_SMOOTH_STREAMING(player)) {
g_object_set(G_OBJECT(source), "timeout", DEFAULT_HTTP_TIMEOUT, NULL);
+ } else if (player->profile.uri_type == MM_PLAYER_URI_TYPE_MEM) {
+ g_object_set(source, "stream-type", GST_APP_STREAM_TYPE_RANDOM_ACCESS,
+ "size", (gint64)player->profile.input_mem.len, "blocksize", 20480, NULL);
+
+ _mmplayer_add_signal_connection(player, G_OBJECT(source), MM_PLAYER_SIGNAL_TYPE_OTHERS, "seek-data",
+ G_CALLBACK(__mmplayer_gst_appsrc_seek_data_mem), (gpointer)&player->profile.input_mem);
+ _mmplayer_add_signal_connection(player, G_OBJECT(source), MM_PLAYER_SIGNAL_TYPE_OTHERS, "need-data",
+ G_CALLBACK(__mmplayer_gst_appsrc_feed_data_mem), (gpointer)&player->profile.input_mem);
}
+ MMPLAYER_FLEAVE();
}
gint __mmplayer_gst_select_stream (GstElement * uridecodebin, GstStreamCollection * collection,
"buffer-size", DEFAULT_BUFFER_SIZE_BYTES, NULL);
_mmplayer_add_signal_connection(player, G_OBJECT(uridecodebin3),
- MM_PLAYER_SIGNAL_TYPE_AUTOPLUG, "source-setup", G_CALLBACK(__mmplayer_source_setup_cb), (gpointer)player);
+ MM_PLAYER_SIGNAL_TYPE_AUTOPLUG, "deep-notify::source", G_CALLBACK(__mmplayer_gst_found_source), (gpointer)player);
_mmplayer_add_signal_connection(player, G_OBJECT(uridecodebin3),
MM_PLAYER_SIGNAL_TYPE_AUTOPLUG, "pad-added", G_CALLBACK(_mmplayer_gst_decode_pad_added), (gpointer)player);
{
GstAppStreamType stream_type = GST_APP_STREAM_TYPE_RANDOM_ACCESS;
+ if (player->ini.use_uridecodebin3) {
+ LOGD("uridecodebin include src element.");
+
+ g_strlcpy(player->profile.uri, "appsrc://", MM_MAX_URL_LEN);
+ return __mmplayer_gst_build_pipeline_with_src(player);
+ }
+
src_elem = gst_element_factory_make("appsrc", "mem-source");
if (!src_elem) {
LOGE("failed to create appsrc element");