From 47b9db2b37d76b83bf566fac86e31db0d8da4ed6 Mon Sep 17 00:00:00 2001 From: Vyacheslav Valkovoy Date: Tue, 29 Dec 2015 23:14:27 +0200 Subject: [PATCH] Enabling to set/get_position()/get_duration() only in PAUSED/PLAYING states. Fixed linking Src Nodes. Change-Id: I2159833c7ba80a41ecd03ebd59b427b85ee9a69a Signed-off-by: Vyacheslav Valkovoy --- include/media_streamer.h | 6 +++--- src/media_streamer.c | 6 +++--- src/media_streamer_node.c | 7 ++++--- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/include/media_streamer.h b/include/media_streamer.h index 8aa841d..264f8b1 100644 --- a/include/media_streamer.h +++ b/include/media_streamer.h @@ -780,7 +780,7 @@ int media_streamer_destroy(media_streamer_h streamer); * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation * @retval #MEDIA_STREAMER_ERROR_SEEK_FAILED Seek operation failure - * @pre The media streamer state must be one of these: #MEDIA_STREAMER_STATE_READY, #MEDIA_STREAMER_STATE_PAUSED, or #MEDIA_STREAMER_STATE_PLAYING. + * @pre The media streamer state must be one of these: #MEDIA_STREAMER_STATE_PAUSED, or #MEDIA_STREAMER_STATE_PLAYING. * @post It invokes media_streamer_set_play_position() when seek operation completes, if you set a callback. * @see media_streamer_get_play_position() */ @@ -798,7 +798,7 @@ int media_streamer_set_play_position(media_streamer_h streamer, int time, * @retval #MEDIA_STREAMER_ERROR_INVALID_STATE Invalid state * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation - * @pre The media streamer state must be one of these: #MEDIA_STREAMER_STATE_READY, #MEDIA_STREAMER_STATE_PAUSED, or #MEDIA_STREAMER_STATE_PLAYING. + * @pre The media streamer state must be one of these: #MEDIA_STREAMER_STATE_PAUSED, or #MEDIA_STREAMER_STATE_PLAYING. * @see media_streamer_set_play_position() */ int media_streamer_get_play_position(media_streamer_h streamer, int *time); @@ -816,7 +816,7 @@ int media_streamer_get_play_position(media_streamer_h streamer, int *time); * @retval #MEDIA_STREAMER_ERROR_INVALID_STATE Invalid state * @retval #MEDIA_STREAMER_ERROR_INVALID_PARAMETER Invalid parameter * @retval #MEDIA_STREAMER_ERROR_INVALID_OPERATION Invalid operation - * @pre The media streamer state must be one of these: #MEDIA_STREAMER_STATE_READY, #MEDIA_STREAMER_STATE_PAUSED, or #MEDIA_STREAMER_STATE_PLAYING. + * @pre The media streamer state must be one of these: #MEDIA_STREAMER_STATE_PAUSED, or #MEDIA_STREAMER_STATE_PLAYING. */ int media_streamer_get_duration(media_streamer_h streamer, int *duration); diff --git a/src/media_streamer.c b/src/media_streamer.c index 60dd209..e10ad7e 100644 --- a/src/media_streamer.c +++ b/src/media_streamer.c @@ -490,7 +490,7 @@ int media_streamer_set_play_position(media_streamer_h streamer, int time, bool a 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"); + ms_retvm_if(ms_streamer->state < MEDIA_STREAMER_STATE_PLAYING || ms_streamer->state > MEDIA_STREAMER_STATE_PAUSED, MEDIA_STREAMER_ERROR_INVALID_STATE, "The media streamer state is not in the appropriate state"); /* Notify: the seeking must be reseted while streamer got ASYNC_DONE message */ ms_retvm_if(ms_streamer->is_seeking, MEDIA_STREAMER_ERROR_INVALID_STATE, "Media streamer is seeking"); @@ -521,7 +521,7 @@ int media_streamer_get_play_position(media_streamer_h streamer, int *time) 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"); + ms_retvm_if(ms_streamer->state < MEDIA_STREAMER_STATE_PLAYING || 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); @@ -538,7 +538,7 @@ 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"); + ms_retvm_if(ms_streamer->state < MEDIA_STREAMER_STATE_PLAYING || 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); diff --git a/src/media_streamer_node.c b/src/media_streamer_node.c index c20a9d2..abc48ad 100755 --- a/src/media_streamer_node.c +++ b/src/media_streamer_node.c @@ -449,7 +449,7 @@ void __ms_node_remove_from_table(void *data) } } -static gboolean __ms_src_need_typefind(GstPad * src_pad) +static gboolean __ms_src_need_typefind(media_streamer_s *ms_streamer, GstPad * src_pad) { gboolean ret = FALSE; @@ -457,7 +457,8 @@ static gboolean __ms_src_need_typefind(GstPad * src_pad) return FALSE; GstCaps *src_caps = gst_pad_query_caps(src_pad, NULL); - if (gst_caps_is_any(src_caps)) + if (gst_caps_is_any(src_caps) || + !__ms_bin_find_element_by_klass(ms_streamer->topology_bin, NULL, NULL, MEDIA_STREAMER_BIN_KLASS, "rtp_container")) ret = TRUE; gst_caps_unref(src_caps); @@ -493,7 +494,7 @@ static void _src_node_prepare(const GValue * item, gpointer user_data) GstPad *src_pad = gst_element_get_static_pad(src_element, "src"); GstElement *found_element = NULL; - if (__ms_src_need_typefind(src_pad)) { + if (__ms_src_need_typefind(ms_streamer, src_pad)) { found_element = __ms_decodebin_create(ms_streamer); found_element = __ms_link_with_new_element(src_element, src_pad, found_element); } else { -- 2.7.4