void *user_data;
} media_streamer_callback_s;
-#define PROPERTY_COUNT 24
+#define PROPERTY_COUNT 25
extern char *param_table[PROPERTY_COUNT][2];
/**
int __ms_get_position(media_streamer_s *ms_streamer, int *time);
/**
+ * @brief Gets the duration of Media streamer element.
+ *
+ * @since_tizen 3.0
+ */
+int __ms_get_duration(media_streamer_s *ms_streamer, int *time);
+
+/**
* @brief Seeks Media streamer element to the pointed position.
*
* @since_tizen 3.0
#define DEFAULT_APP_SOURCE "appsrc"
#define DEFAULT_AUDIO_SINK "pulsesink"
#define DEFAULT_VIDEO_SINK "waylandsink"
+#define DEFAULT_EVAS_SINK "evaspixmapsink"
#define DEFAULT_VIDEO_CONVERT "videoconvert"
#define DEFAULT_TEXT_OVERLAY "textoverlay"
#define DEFAULT_AUDIO_CONVERT "audioconvert"
\n\
[sources] \n\
\n\
-audio_source = pulsesrc \n\
-camera_source = v4l2src \n\
-video_source = ximagesrc \n\
-udp_source = udpsrc \n\
+audio_source = "DEFAULT_AUDIO_SOURCE" \n\
+camera_source = "DEFAULT_CAMERA_SOURCE" \n\
+video_source = "DEFAULT_VIDEO_SOURCE" \n\
+udp_source = "DEFAULT_UDP_SOURCE" \n\
\n\
\n\
[sinks] \n\
\n\
-audio_sink = pulsesink \n\
-video_sink = waylandsink \n\
-udp_sink = udpsink \n\
+audio_sink = "DEFAULT_AUDIO_SINK" \n\
+video_sink = "DEFAULT_VIDEO_SINK" \n\
+evas_sink = "DEFAULT_EVAS_SINK" \n\
+udp_sink = "DEFAULT_UDP_SINK" \n\
\n\
\n\
[h263] \n\
return ret;
}
+int media_streamer_get_duration(media_streamer_h streamer, int *duration)
+{
+ media_streamer_s *ms_streamer = (media_streamer_s *)streamer;
+ ms_retvm_if(ms_streamer == NULL, MEDIA_STREAMER_ERROR_INVALID_PARAMETER, "Handle is NULL");
+
+ ms_retvm_if(ms_streamer->state < MEDIA_STREAMER_STATE_READY ||
+ ms_streamer->state > MEDIA_STREAMER_STATE_PAUSED,
+ MEDIA_STREAMER_ERROR_INVALID_STATE,
+ "The media streamer state is not in the appropriate state");
+
+ int ret = MEDIA_STREAMER_ERROR_NONE;
+ g_mutex_lock(&ms_streamer->mutex_lock);
+
+ ret = __ms_get_duration(streamer, duration);
+
+ g_mutex_unlock(&ms_streamer->mutex_lock);
+
+ return ret;
+}
+
int media_streamer_node_push_packet(media_streamer_node_h src, media_packet_h packet)
{
media_streamer_node_s *ms_node = (media_streamer_node_s *) src;
pint = atoi(param_value);
g_object_set(obj, init_name, pint, NULL);
ms_info("Set int value: [%d] ", pint);
+ } else if (!g_strcmp0(key, MEDIA_STREAMER_PARAM_EVAS_OBJECT)) {
+ g_value_set_pointer(&value, (gpointer)param_value);
+ g_object_set(obj, init_name, (gpointer)param_value, NULL);
+ ms_info("Set pointer: [%p]", g_value_get_pointer(&value));
} else if (!g_strcmp0(key, MEDIA_STREAMER_PARAM_VISIBLE)) {
bool_val = !g_strcmp0(param_value, "true") ? TRUE : FALSE;
g_value_set_boolean(&value, bool_val);
break;
case MEDIA_STREAMER_NODE_TYPE_SINK:
switch (ms_node->subtype) {
- case MEDIA_STREAMER_NODE_SINK_TYPE_SCREEN:
+ case MEDIA_STREAMER_NODE_SINK_TYPE_OVERLAY:
bin = ms_streamer->sink_video_bin;
break;
case MEDIA_STREAMER_NODE_SINK_TYPE_AUDIO:
{MEDIA_STREAMER_PARAM_ROTATE, "rotate"},
{MEDIA_STREAMER_PARAM_FLIP, "flip"},
{MEDIA_STREAMER_PARAM_DISPLAY_GEOMETRY_METHOD, "display-geometry-method"},
+ {MEDIA_STREAMER_PARAM_EVAS_OBJECT, "evas-object"},
{MEDIA_STREAMER_PARAM_VISIBLE, "visible"},
{MEDIA_STREAMER_PARAM_HOST, "host"}
};
plugin_name = __ms_ini_get_string(dict, "sinks:audio_sink", DEFAULT_AUDIO_SINK);
node->gst_element = __ms_element_create(plugin_name, NULL);
break;
- case MEDIA_STREAMER_NODE_SINK_TYPE_SCREEN:
+ case MEDIA_STREAMER_NODE_SINK_TYPE_OVERLAY:
plugin_name = __ms_ini_get_string(dict, "sinks:video_sink", DEFAULT_VIDEO_SINK);
node->gst_element = __ms_element_create(plugin_name, NULL);
break;
int __ms_get_position(media_streamer_s *ms_streamer, int *time)
{
ms_retvm_if(ms_streamer == NULL, MEDIA_STREAMER_ERROR_INVALID_PARAMETER, "Handle is NULL");
+ ms_retvm_if(time == NULL, MEDIA_STREAMER_ERROR_INVALID_PARAMETER, "Return value is NULL");
gint64 current = -1;
return MEDIA_STREAMER_ERROR_NONE;
}
+int __ms_get_duration(media_streamer_s *ms_streamer, int *time)
+{
+ ms_retvm_if(ms_streamer == NULL, MEDIA_STREAMER_ERROR_INVALID_PARAMETER, "Handle is NULL");
+ ms_retvm_if(time == NULL, MEDIA_STREAMER_ERROR_INVALID_PARAMETER, "Return value is NULL");
+
+ gint64 duration = -1;
+
+ if (!gst_element_query_duration(ms_streamer->pipeline, GST_FORMAT_TIME, &duration)) {
+ ms_error("Could not query current duration.");
+ return MEDIA_STREAMER_ERROR_INVALID_OPERATION;
+ } else {
+ *time = (int)(((GstClockTime)(duration)) / GST_MSECOND);
+ ms_info("Media streamer queried duration [%d] msec successfully.", *time);
+ }
+
+ return MEDIA_STREAMER_ERROR_NONE;
+}
+
int __ms_streamer_seek(media_streamer_s *ms_streamer, int g_time, bool flag)
{
ms_retvm_if(ms_streamer == NULL, MEDIA_STREAMER_ERROR_INVALID_PARAMETER, "Handle is NULL");
/*********************** videosink *********************************** */
media_streamer_node_h video_sink = NULL;
- media_streamer_node_create_sink(MEDIA_STREAMER_NODE_SINK_TYPE_SCREEN, &video_sink);
+ media_streamer_node_create_sink(MEDIA_STREAMER_NODE_SINK_TYPE_OVERLAY, &video_sink);
media_streamer_node_add(current_media_streamer, video_sink);
APPEND_NODE(video_sink);
/*********************** videosink *********************************** */
media_streamer_node_h video_sink = NULL;
- media_streamer_node_create_sink(MEDIA_STREAMER_NODE_SINK_TYPE_SCREEN, &video_sink);
+ media_streamer_node_create_sink(MEDIA_STREAMER_NODE_SINK_TYPE_OVERLAY, &video_sink);
media_streamer_node_add(current_media_streamer, video_sink);
APPEND_NODE(video_sink);
/*********************** videosink *********************************** */
media_streamer_node_h video_sink = NULL;
- media_streamer_node_create_sink(MEDIA_STREAMER_NODE_SINK_TYPE_SCREEN, &video_sink);
+ media_streamer_node_create_sink(MEDIA_STREAMER_NODE_SINK_TYPE_OVERLAY, &video_sink);
media_streamer_node_add(current_media_streamer, video_sink);
APPEND_NODE(video_sink);
/*********************** videosink *********************************** */
media_streamer_node_h video_sink = NULL;
- media_streamer_node_create_sink(MEDIA_STREAMER_NODE_SINK_TYPE_SCREEN, &video_sink);
+ media_streamer_node_create_sink(MEDIA_STREAMER_NODE_SINK_TYPE_OVERLAY, &video_sink);
media_streamer_node_add(current_media_streamer, video_sink);
APPEND_NODE(video_sink);
/*********************** videosink *********************************** */
media_streamer_node_h video_sink = NULL;
- media_streamer_node_create_sink(MEDIA_STREAMER_NODE_SINK_TYPE_SCREEN, &video_sink);
+ media_streamer_node_create_sink(MEDIA_STREAMER_NODE_SINK_TYPE_OVERLAY, &video_sink);
media_streamer_node_add(current_media_streamer, video_sink);
APPEND_NODE(video_sink);