Enabling to set/get_position()/get_duration() only in PAUSED/PLAYING states. Fixed... 33/55833/1
authorVyacheslav Valkovoy <v.valkovoy@samsung.com>
Tue, 29 Dec 2015 21:14:27 +0000 (23:14 +0200)
committerVyacheslav Valkovoy <v.valkovoy@samsung.com>
Tue, 29 Dec 2015 21:14:54 +0000 (23:14 +0200)
Change-Id: I2159833c7ba80a41ecd03ebd59b427b85ee9a69a
Signed-off-by: Vyacheslav Valkovoy <v.valkovoy@samsung.com>
include/media_streamer.h
src/media_streamer.c
src/media_streamer_node.c

index 8aa841d..264f8b1 100644 (file)
@@ -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);
 
index 60dd209..e10ad7e 100644 (file)
@@ -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);
index c20a9d2..abc48ad 100755 (executable)
@@ -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 {