[0.6.164] Apply tizen coding rule
[platform/core/multimedia/libmm-player.git] / src / mm_player_streaming.c
index c343ce6..c0aa81d 100644 (file)
@@ -45,32 +45,31 @@ typedef struct {
        gdouble percent_time;
 } streaming_buffer_info_t;
 
-static void streaming_check_buffer_percent(gdouble in_low, gdouble in_high, gdouble *out_low, gdouble *out_high);
-static void streaming_set_buffer_percent(mm_player_streaming_t* streamer, BufferType type, gdouble low_percent, gdouble high_percent_byte, gdouble high_percent_time);
-static void streaming_set_queue2_queue_type(mm_player_streaming_t* streamer, muxed_buffer_type_e type, gchar * file_path, guint64 content_size);
-static void streaming_set_buffer_size(mm_player_streaming_t* streamer, BufferType type, guint buffering_bytes, gint buffering_time);
-static void streaming_update_buffering_status(mm_player_streaming_t* streamer, GstMessage *buffering_msg, gint64 position);
-static void streaming_get_current_bitrate_info(mm_player_streaming_t* streamer,
+static void streaming_set_buffer_percent(mm_player_streaming_t *streamer, BufferType type, gdouble high_percent_byte, gdouble high_percent_time);
+static void streaming_set_queue2_queue_type(mm_player_streaming_t *streamer, MuxedBufferType type, gchar *file_path, guint64 content_size);
+static void streaming_set_buffer_size(mm_player_streaming_t *streamer, BufferType type, guint buffering_bytes, gint buffering_time);
+static void streaming_update_buffering_status(mm_player_streaming_t *streamer, GstMessage *buffering_msg, gint64 position);
+static void streaming_get_current_bitrate_info(mm_player_streaming_t *streamer,
                                                                                                GstMessage *buffering_msg,
                                                                                                streaming_content_info_t content_info,
-                                                                                               streaming_bitrate_info_tbitrate_info);
+                                                                                               streaming_bitrate_info_t *bitrate_info);
 static void
-streaming_handle_fixed_buffering_mode(mm_player_streaming_tstreamer,
+streaming_handle_fixed_buffering_mode(mm_player_streaming_t *streamer,
                                                                                gint byte_out_rate,
                                                                                gint fixed_buffering_time,
-                                                                               streaming_buffer_info_tbuffer_info);
+                                                                               streaming_buffer_info_t *buffer_info);
 static void
-streaming_handle_adaptive_buffering_mode(mm_player_streaming_tstreamer,
-                                                                                       streaming_content_info_t content_info,
-                                                                                       streaming_bitrate_info_t bitrate_info,
-                                                                                       streaming_buffer_info_t* buffer_info,
-                                                                                       gint expected_play_time);
+streaming_handle_adaptive_buffering_mode(mm_player_streaming_t *streamer,
+                                                                               streaming_content_info_t content_info,
+                                                                               streaming_bitrate_info_t bitrate_info,
+                                                                               streaming_buffer_info_t *buffer_info,
+                                                                               gint expected_play_time);
 static void
-streaming_update_buffer_setting(mm_player_streaming_tstreamer,
-                                                                       GstMessage *buffering_msg,
-                                                                       guint64 content_size,
-                                                                       gint64 position,
-                                                                       gint64 duration);
+streaming_update_buffer_setting(mm_player_streaming_t *streamer,
+                                                               GstMessage *buffering_msg,
+                                                               guint64 content_size,
+                                                               gint64 position,
+                                                               gint64 duration);
 
 mm_player_streaming_t *
 __mm_player_streaming_create(void)
@@ -79,34 +78,32 @@ __mm_player_streaming_create(void)
 
        MMPLAYER_FENTER();
 
-       streamer = (mm_player_streaming_t *) malloc(sizeof(mm_player_streaming_t));
+       streamer = (mm_player_streaming_t *)g_try_malloc0(sizeof(mm_player_streaming_t));
        if (!streamer) {
-               LOGE("fail to create streaming player handle..\n");
+               LOGE("fail to create streaming player handle..");
                return NULL;
        }
 
-       memset(streamer, 0, sizeof(mm_player_streaming_t));
-
        MMPLAYER_FLEAVE();
 
        return streamer;
 }
 
 static void
-streaming_buffer_initialize(streaming_buffer_tbuffer_handle, gboolean buffer_init)
+streaming_buffer_initialize(streaming_buffer_t *buffer_handle, gboolean buffer_init)
 {
        if (buffer_init)
                buffer_handle->buffer = NULL;
 
        buffer_handle->buffering_bytes = DEFAULT_BUFFER_SIZE_BYTES;
        buffer_handle->buffering_time = DEFAULT_BUFFERING_TIME;
-       buffer_handle->buffer_low_percent = DEFAULT_BUFFER_LOW_PERCENT;
        buffer_handle->buffer_high_percent = DEFAULT_BUFFER_HIGH_PERCENT;
        buffer_handle->is_live = FALSE;
 
 }
 
-void __mm_player_streaming_initialize(mm_player_streaming_t* streamer)
+void
+__mm_player_streaming_initialize(mm_player_streaming_t *streamer)
 {
        MMPLAYER_FENTER();
 
@@ -128,17 +125,18 @@ void __mm_player_streaming_initialize(mm_player_streaming_t* streamer)
        streamer->need_update = FALSE;
        streamer->need_sync = FALSE;
 
-       streamer->is_buffering = FALSE;
-       streamer->is_buffering_done = FALSE;
+       streamer->buffering_state = MM_PLAYER_BUFFERING_DEFAULT;
        streamer->is_adaptive_streaming = FALSE;
-       streamer->buffering_percent = -1;
 
+       streamer->buffering_percent = -1;
        streamer->ring_buffer_size = DEFAULT_RING_BUFFER_SIZE;
+
        MMPLAYER_FLEAVE();
        return;
 }
 
-void __mm_player_streaming_deinitialize(mm_player_streaming_t* streamer)
+void
+__mm_player_streaming_deinitialize(mm_player_streaming_t *streamer)
 {
        MMPLAYER_FENTER();
        MMPLAYER_RETURN_IF_FAIL(streamer);
@@ -161,8 +159,7 @@ void __mm_player_streaming_deinitialize(mm_player_streaming_t* streamer)
        streamer->need_update = FALSE;
        streamer->need_sync = FALSE;
 
-       streamer->is_buffering = FALSE;
-       streamer->is_buffering_done = FALSE;
+       streamer->buffering_state = MM_PLAYER_BUFFERING_DEFAULT;
        streamer->is_adaptive_streaming = FALSE;
 
        streamer->buffering_percent = -1;
@@ -172,38 +169,37 @@ void __mm_player_streaming_deinitialize(mm_player_streaming_t* streamer)
        return;
 }
 
-void __mm_player_streaming_destroy(mm_player_streaming_t* streamer)
+void
+__mm_player_streaming_destroy(mm_player_streaming_t *streamer)
 {
        MMPLAYER_FENTER();
 
-       if (streamer) {
-               g_free(streamer);
-               streamer = NULL;
-       }
+       MMPLAYER_FREEIF(streamer);
 
        MMPLAYER_FLEAVE();
 
        return;
 }
 
-void __mm_player_streaming_set_content_bitrate(mm_player_streaming_t* streamer, guint max_bitrate, guint avg_bitrate)
+void
+__mm_player_streaming_set_content_bitrate(mm_player_streaming_t *streamer, guint max_bitrate, guint avg_bitrate)
 {
        MMPLAYER_FENTER();
 
        MMPLAYER_RETURN_IF_FAIL(streamer);
 
        /* Note : Update buffering criterion bytes
-       *      1. maximum bitrate is considered first.
-       *      2. average bitrage * 3 is next.
-       *      3. if there are no updated bitrate, use default buffering limit.
-       */
+        *      1. maximum bitrate is considered first.
+        *      2. average bitrage * 3 is next.
+        *      3. if there are no updated bitrate, use default buffering limit.
+        */
        if (max_bitrate > 0 && streamer->buffer_max_bitrate != max_bitrate) {
-               LOGD("set maximum bitrate(%dbps).\n", max_bitrate);
+               LOGD("set maximum bitrate(%dbps).", max_bitrate);
                streamer->buffer_max_bitrate = max_bitrate;
                if (streamer->buffering_req.is_pre_buffering == FALSE) {
                        streamer->need_update = TRUE;
                } else {
-                       LOGD("pre-buffering...\n");
+                       LOGD("pre-buffering...");
 
                        if (IS_MUXED_BUFFERING_MODE(streamer))
                                streaming_update_buffer_setting(streamer, NULL, 0, 0, 0);
@@ -211,13 +207,13 @@ void __mm_player_streaming_set_content_bitrate(mm_player_streaming_t* streamer,
        }
 
        if (avg_bitrate > 0 && streamer->buffer_avg_bitrate != avg_bitrate) {
-               LOGD("set averate bitrate(%dbps).\n", avg_bitrate);
+               LOGD("set averate bitrate(%dbps).", avg_bitrate);
                streamer->buffer_avg_bitrate = avg_bitrate;
 
                if (streamer->buffering_req.is_pre_buffering == FALSE) {
                        streamer->need_update = TRUE;
                } else {
-                       LOGD("pre-buffering...\n");
+                       LOGD("pre-buffering...");
 
                        if (IS_MUXED_BUFFERING_MODE(streamer))
                                streaming_update_buffer_setting(streamer, NULL, 0, 0, 0);
@@ -229,47 +225,15 @@ void __mm_player_streaming_set_content_bitrate(mm_player_streaming_t* streamer,
 }
 
 static void
-streaming_check_buffer_percent(gdouble in_low, gdouble in_high, gdouble *out_low, gdouble *out_high)
-{
-       gdouble buffer_low_percent = DEFAULT_BUFFER_LOW_PERCENT;
-       gdouble buffer_high_percent = DEFAULT_BUFFER_HIGH_PERCENT;
-
-       MMPLAYER_FENTER();
-
-       MMPLAYER_RETURN_IF_FAIL(out_low && out_high);
-
-       if (in_low <= MIN_BUFFER_PERCENT || in_low >= MAX_BUFFER_PERCENT)
-               LOGW("buffer low percent is out of range. use defaut value.");
-       else
-               buffer_low_percent = in_low;
-
-       if (in_high  <=  MIN_BUFFER_PERCENT || in_high  >=  MAX_BUFFER_PERCENT)
-               LOGW("buffer high percent is out of range. use defaut value.");
-       else
-               buffer_high_percent = in_high;
-
-       if (buffer_high_percent <= buffer_low_percent)
-               buffer_high_percent =  buffer_low_percent + 1.0;
-
-       LOGD("set buffer percent to %2.3f ~ %2.3f.", buffer_low_percent, buffer_high_percent);
-
-       *out_low = buffer_low_percent;
-       *out_high = buffer_high_percent;
-}
-
-static void
-streaming_set_buffer_percent(mm_player_streaming_t* streamer,
-                                                               BufferType type,
-                                                               gdouble low_percent,
-                                                               gdouble high_percent_byte,
-                                                               gdouble high_percent_time)
+streaming_set_buffer_percent(mm_player_streaming_t *streamer,
+                                                       BufferType type,
+                                                       gdouble high_percent_byte,
+                                                       gdouble high_percent_time)
 {
-       gdouble confirmed_low = DEFAULT_BUFFER_LOW_PERCENT;
-       gdouble confirmed_high = DEFAULT_BUFFER_HIGH_PERCENT;
        gdouble high_percent = 0.0;
 
-       streaming_buffer_tbuffer_handle = NULL;
-       gcharfactory_name = NULL;
+       streaming_buffer_t *buffer_handle = NULL;
+       gchar *factory_name = NULL;
 
        MMPLAYER_FENTER();
        MMPLAYER_RETURN_IF_FAIL(streamer);
@@ -293,36 +257,32 @@ streaming_set_buffer_percent(mm_player_streaming_t* streamer,
        else
                high_percent = MAX(high_percent_time, high_percent_byte);
 
-       streaming_check_buffer_percent(low_percent, high_percent, &confirmed_low, &confirmed_high);
+       if (high_percent <= MIN_BUFFER_PERCENT || high_percent  >=  MAX_BUFFER_PERCENT)
+               high_percent = DEFAULT_BUFFER_HIGH_PERCENT;
 
        /* if use-buffering is disabled, this settings do not have any meaning. */
-       LOGD("target buffer elem : %s (%2.3f ~ %2.3f)",
-               GST_ELEMENT_NAME(buffer_handle->buffer), confirmed_low, confirmed_high);
-
-       if ((confirmed_low == DEFAULT_BUFFER_LOW_PERCENT) ||
-               (buffer_handle->buffer_low_percent != confirmed_low))
-               g_object_set(G_OBJECT(buffer_handle->buffer), "low-percent", (gint)confirmed_low, NULL);
+       LOGD("target buffer elem : %s (~ %2.3f)",
+               GST_ELEMENT_NAME(buffer_handle->buffer), high_percent);
 
-       if ((confirmed_high == DEFAULT_BUFFER_HIGH_PERCENT) ||
-               (buffer_handle->buffer_high_percent != confirmed_high))
-               g_object_set(G_OBJECT(buffer_handle->buffer), "high-percent", (gint)confirmed_high, NULL);
+       if ((high_percent == DEFAULT_BUFFER_HIGH_PERCENT) ||
+               (buffer_handle->buffer_high_percent != high_percent))
+               g_object_set(G_OBJECT(buffer_handle->buffer), "high-percent", (gint)high_percent, NULL);
 
-       buffer_handle->buffer_low_percent = confirmed_low;
-       buffer_handle->buffer_high_percent = confirmed_high;
+       buffer_handle->buffer_high_percent = high_percent;
 
        MMPLAYER_FLEAVE();
        return;
 }
 
 static void
-streaming_set_queue2_queue_type(mm_player_streaming_t* streamer, muxed_buffer_type_e type, gchar * file_path, guint64 content_size)
+streaming_set_queue2_queue_type(mm_player_streaming_t *streamer, MuxedBufferType type, gchar *file_path, guint64 content_size)
 {
-       streaming_buffer_tbuffer_handle = NULL;
-       guint64 storage_available_size = 0L; //bytes
-       guint64 buffer_size = 0L;  //bytes
+       streaming_buffer_t *buffer_handle = NULL;
+       guint64 storage_available_size = 0; /* bytes */
+       guint64 buffer_size = 0;  /* bytes */
        gchar file_buffer_name[MM_MAX_URL_LEN] = {0};
        struct statfs buf = {0};
-       gcharfactory_name = NULL;
+       gchar *factory_name = NULL;
 
        MMPLAYER_FENTER();
        MMPLAYER_RETURN_IF_FAIL(streamer);
@@ -336,7 +296,6 @@ streaming_set_queue2_queue_type(mm_player_streaming_t* streamer, muxed_buffer_ty
        }
 
        factory_name = GST_OBJECT_NAME(gst_element_get_factory(buffer_handle->buffer));
-
        if (!factory_name) {
                LOGE("Fail to get factory name!");
                return;
@@ -345,11 +304,11 @@ streaming_set_queue2_queue_type(mm_player_streaming_t* streamer, muxed_buffer_ty
        LOGD("target buffer elem : %s", GST_ELEMENT_NAME(buffer_handle->buffer));
 
        if (!g_strrstr(factory_name, "queue2")) {
-               LOGD("only queue2 can use file buffer. not decodebin2 or multiQ\n");
+               LOGD("only queue2 can use file buffer. not decodebin2 or multiQ");
                return;
        }
 
-       if ((type == MUXED_BUFFER_TYPE_MEM_QUEUE) || (!g_strrstr(factory_name, "queue2"))) {
+       if (type == MUXED_BUFFER_TYPE_MEM_QUEUE) {
                LOGD("use memory queue for buffering. streaming is played on push-based. \n"
                                        "buffering position would not be updated.\n"
                                        "buffered data would be flushed after played.\n"
@@ -357,20 +316,20 @@ streaming_set_queue2_queue_type(mm_player_streaming_t* streamer, muxed_buffer_ty
                return;
        }
 
-       LOGD("[Queue2] buffering type : %d. streaming is played on pull-based. \n", type);
+       LOGD("[Queue2] buffering type : %d. streaming is played on pull-based.", type);
        if (type == MUXED_BUFFER_TYPE_FILE && file_path && strlen(file_path) > 0) {
                if (statfs((const char *)file_path, &buf) < 0) {
-                       LOGW("[Queue2] fail to get available storage capacity. set mem ring buffer instead of file buffer.\n");
+                       LOGW("[Queue2] fail to get available storage capacity. set mem ring buffer instead of file buffer.");
                        buffer_size = (guint64)((streamer->ring_buffer_size > 0) ? (streamer->ring_buffer_size) : DEFAULT_RING_BUFFER_SIZE);
                } else {
                        storage_available_size = (guint64)buf.f_bavail * (guint64)buf.f_bsize; //bytes
 
                        LOGD("[Queue2] the number of available blocks : %"G_GUINT64_FORMAT
-                                               ", the block size is %"G_GUINT64_FORMAT".\n",
+                                               ", the block size is %"G_GUINT64_FORMAT".",
                                                (guint64)buf.f_bavail, (guint64)buf.f_bsize);
 
                        LOGD("[Queue2] calculated available storage size is %"
-                                                               G_GUINT64_FORMAT" Bytes.\n", storage_available_size);
+                                                               G_GUINT64_FORMAT" Bytes.", storage_available_size);
 
                        if (content_size <= 0 || content_size >= storage_available_size)
                                buffer_size = storage_available_size;
@@ -378,14 +337,15 @@ streaming_set_queue2_queue_type(mm_player_streaming_t* streamer, muxed_buffer_ty
                                buffer_size = 0L;
 
                        g_snprintf(file_buffer_name, MM_MAX_URL_LEN, "%sXXXXXX", file_path);
-                       SECURE_LOGD("[Queue2] the buffering file name is %s.\n", file_buffer_name);
+                       SECURE_LOGD("[Queue2] the buffering file name is %s.", file_buffer_name);
 
                        g_object_set(G_OBJECT(buffer_handle->buffer), "temp-template", file_buffer_name, NULL);
                }
-       } else
+       } else {
                buffer_size = (guint64)((streamer->ring_buffer_size > 0) ? (streamer->ring_buffer_size) : DEFAULT_RING_BUFFER_SIZE);
+       }
 
-       LOGW("[Queue2] set ring buffer size: %lld\n", buffer_size);
+       LOGW("[Queue2] set ring buffer size: %"G_GUINT64_FORMAT, buffer_size);
        g_object_set(G_OBJECT(buffer_handle->buffer), "ring-buffer-max-size", buffer_size, NULL);
 
        MMPLAYER_FLEAVE();
@@ -393,9 +353,9 @@ streaming_set_queue2_queue_type(mm_player_streaming_t* streamer, muxed_buffer_ty
 }
 
 static void
-streaming_set_buffer_size(mm_player_streaming_tstreamer, BufferType type, guint buffering_bytes, gint buffering_time)
+streaming_set_buffer_size(mm_player_streaming_t *streamer, BufferType type, guint buffering_bytes, gint buffering_time)
 {
-       streaming_buffer_tbuffer_handle = NULL;
+       streaming_buffer_t *buffer_handle = NULL;
 
        MMPLAYER_FENTER();
 
@@ -424,7 +384,7 @@ streaming_set_buffer_size(mm_player_streaming_t* streamer, BufferType type, guin
                        if (buffer_handle->is_live)
                                g_object_set(G_OBJECT(buffer_handle->buffer),
                                                                "max-size-bytes", buffering_bytes,
-                                                               "max-size-time", (guint64)(buffering_time*GST_MSECOND),
+                                                               "max-size-time", (guint64)(buffering_time * GST_MSECOND),
                                                                "max-size-buffers", 0,
                                                                "use-rate-estimate", TRUE, NULL);
                        else
@@ -445,16 +405,15 @@ streaming_set_buffer_size(mm_player_streaming_t* streamer, BufferType type, guin
        return;
 }
 
-void __mm_player_streaming_set_queue2(mm_player_streaming_t* streamer,
-                                                                               GstElement* buffer,
-                                                                               gboolean use_buffering,
-                                                                               guint buffering_bytes,
-                                                                               gint buffering_time,
-                                                                               gdouble low_percent,
-                                                                               gdouble high_percent,
-                                                                               muxed_buffer_type_e type,
-                                                                               gchar* file_path,
-                                                                               guint64 content_size)
+void
+__mm_player_streaming_set_queue2(mm_player_streaming_t *streamer,
+                                                                       GstElement *buffer,
+                                                                       gboolean use_buffering,
+                                                                       guint buffering_bytes,
+                                                                       gint buffering_time,
+                                                                       MuxedBufferType type,
+                                                                       gchar *file_path,
+                                                                       guint64 content_size)
 {
        MMPLAYER_FENTER();
        MMPLAYER_RETURN_IF_FAIL(streamer);
@@ -483,17 +442,20 @@ void __mm_player_streaming_set_queue2(mm_player_streaming_t* streamer,
                g_object_set(G_OBJECT(streamer->buffer_handle[BUFFER_TYPE_MUXED].buffer), "use-buffering", use_buffering, NULL);
        }
 
+       /* initial setting */
        streaming_set_buffer_size(streamer, BUFFER_TYPE_MUXED, buffering_bytes, buffering_time);
-       streaming_set_buffer_percent(streamer, BUFFER_TYPE_MUXED, low_percent, high_percent, 0);
-       streaming_set_queue2_queue_type(streamer, type, file_path, content_size);
+       streaming_set_buffer_percent(streamer, BUFFER_TYPE_MUXED, DEFAULT_BUFFER_HIGH_PERCENT, 0);
+       if (type < MUXED_BUFFER_TYPE_MAX)
+               streaming_set_queue2_queue_type(streamer, type, file_path, content_size);
 
        MMPLAYER_FLEAVE();
        return;
 }
 
-void __mm_player_streaming_sync_property(mm_player_streaming_t* streamer, GstElement* decodebin)
+void
+__mm_player_streaming_sync_property(mm_player_streaming_t *streamer, GstElement *decodebin)
 {
-       streaming_buffer_tbuffer_handle = NULL;
+       streaming_buffer_t *buffer_handle = NULL;
 
        MMPLAYER_FENTER();
 
@@ -505,56 +467,44 @@ void __mm_player_streaming_sync_property(mm_player_streaming_t* streamer, GstEle
                g_object_set(G_OBJECT(decodebin),
                                        "max-size-bytes", buffer_handle->buffering_bytes,
                                        "max-size-time", (guint64)(buffer_handle->buffering_time * GST_MSECOND),
-                                       "low-percent", (gint)buffer_handle->buffer_low_percent,
                                        "high-percent", (gint)buffer_handle->buffer_high_percent, NULL);
-
        }
 
        streamer->need_sync = FALSE;
 }
 
-void __mm_player_streaming_set_multiqueue(mm_player_streaming_t* streamer,
-                                                                               GstElement* buffer,
-                                                                               gboolean use_buffering,
-                                                                               gint buffering_time,
-                                                                               gdouble low_percent,
-                                                                               gdouble high_percent)
+void
+__mm_player_streaming_set_multiqueue(mm_player_streaming_t *streamer,
+                                                                               GstElement *buffer,
+                                                                               gint buffering_time)
 {
-       streaming_buffer_tbuffer_handle = NULL;
-       gint pre_buffering_time = 0;
+       streaming_buffer_t *buffer_handle = NULL;
+       gdouble high_percent = 0.0;
 
        MMPLAYER_FENTER();
-       MMPLAYER_RETURN_IF_FAIL(streamer);
+       MMPLAYER_RETURN_IF_FAIL(streamer && buffer);
 
        buffer_handle = &(streamer->buffer_handle[BUFFER_TYPE_DEMUXED]);
-       pre_buffering_time = streamer->buffering_req.prebuffer_time;
 
-       if (buffer) {
-               buffer_handle->buffer = buffer;
+       buffer_handle->buffer = buffer;
 
-               if (use_buffering) {
-                       streamer->streaming_buffer_type = BUFFER_TYPE_DEMUXED;
+       streamer->streaming_buffer_type = BUFFER_TYPE_DEMUXED;
+       g_object_set(G_OBJECT(buffer_handle->buffer), "use-buffering", TRUE, NULL);
 
-                       // during prebuffering by requirement, buffer setting should not be changed.
-                       if (pre_buffering_time > 0)
-                               streamer->buffering_req.is_pre_buffering = TRUE;
-               }
 
-               g_object_set(G_OBJECT(buffer_handle->buffer), "use-buffering", use_buffering, NULL);
-       }
+       LOGD("pre_buffering: %d ms, during playing: %d ms", streamer->buffering_req.prebuffer_time, buffering_time);
 
-       LOGD("pre_buffering: %d ms, during playing: %d ms\n", pre_buffering_time, buffering_time);
-
-       if (pre_buffering_time <= 0) {
-               pre_buffering_time = GET_DEFAULT_PLAYING_TIME(streamer);
-               streamer->buffering_req.prebuffer_time = buffering_time;
-       }
+       if (streamer->buffering_req.prebuffer_time > 0)
+               streamer->buffering_req.is_pre_buffering = TRUE;
+       else
+               streamer->buffering_req.prebuffer_time = GET_DEFAULT_PLAYING_TIME(streamer);
 
-       high_percent = (gdouble)(pre_buffering_time * 100) / GET_MAX_BUFFER_TIME(streamer);
-       LOGD("high_percent %2.3f %%\n", high_percent);
+       high_percent = (gdouble)(streamer->buffering_req.prebuffer_time * 100) / GET_MAX_BUFFER_TIME(streamer);
+       LOGD("high_percent %2.3f %%", high_percent);
 
+       /* initial setting */
        streaming_set_buffer_size(streamer, BUFFER_TYPE_DEMUXED, GET_MAX_BUFFER_BYTES(streamer), GET_MAX_BUFFER_TIME(streamer));
-       streaming_set_buffer_percent(streamer, BUFFER_TYPE_DEMUXED, low_percent, 0, high_percent);
+       streaming_set_buffer_percent(streamer, BUFFER_TYPE_DEMUXED, 0, high_percent);
 
        streamer->need_sync = TRUE;
 
@@ -563,10 +513,10 @@ void __mm_player_streaming_set_multiqueue(mm_player_streaming_t* streamer,
 }
 
 static void
-streaming_get_current_bitrate_info(mm_player_streaming_tstreamer,
+streaming_get_current_bitrate_info(mm_player_streaming_t *streamer,
                                                                        GstMessage *buffering_msg,
                                                                        streaming_content_info_t content_info,
-                                                                       streaming_bitrate_info_tbitrate_info)
+                                                                       streaming_bitrate_info_t *bitrate_info)
 {
 
        GstQuery *query = NULL;
@@ -594,13 +544,14 @@ streaming_get_current_bitrate_info(mm_player_streaming_t* streamer,
                if (gst_element_query((streamer->buffer_handle[BUFFER_TYPE_MUXED].buffer), query))
                        gst_query_parse_buffering_stats(query, &mode, &in_rate, &out_rate, &buffering_left);
                gst_query_unref(query);
-       } else
+       } else {
                gst_message_parse_buffering_stats(buffering_msg, &mode, &in_rate, &out_rate, &buffering_left);
+       }
 
-       LOGD("Streaming Info : in %d, out %d, left %lld\n", in_rate, out_rate, buffering_left);
+       LOGD("Streaming Info : in %d, out %d, left %"G_GINT64_FORMAT, in_rate, out_rate, buffering_left);
 
-       if ((content_info.content_size > 0) && (content_info.duration > 0) && ((content_info.duration/GST_SECOND) > 0))
-               estimated_content_bitrate = GET_BIT_FROM_BYTE((guint)(content_info.content_size / (content_info.duration/GST_SECOND)));
+       if ((content_info.content_size > 0) && (content_info.duration > 0) && ((content_info.duration / GST_SECOND) > 0))
+               estimated_content_bitrate = GET_BIT_FROM_BYTE((guint)(content_info.content_size / (content_info.duration / GST_SECOND)));
 
        if (streamer->buffer_max_bitrate > 0) {
                streamer->buffer_max_bitrate = MAX(streamer->buffer_max_bitrate, streamer->buffer_avg_bitrate);
@@ -615,17 +566,18 @@ streaming_get_current_bitrate_info(mm_player_streaming_t* streamer,
                else
                        out_rate = GET_BYTE_FROM_BIT(streamer->buffer_max_bitrate/3);
 
-               LOGD("(max)content_max_byte_rate %d, byte_out_rate %d\n", buffer_criteria, out_rate);
+               LOGD("(max)content_max_byte_rate %d, byte_out_rate %d", buffer_criteria, out_rate);
        } else if (streamer->buffer_avg_bitrate > 0) {
                buffer_criteria = GET_BYTE_FROM_BIT(streamer->buffer_avg_bitrate * 3);
                out_rate = GET_BYTE_FROM_BIT(MAX(streamer->buffer_avg_bitrate, estimated_content_bitrate));
 
-               LOGD("(avg)content_max_byte_rate %d, byte_out_rate %d\n", buffer_criteria, out_rate);
-       } else
-               LOGW("There is no content bitrate information\n");
+               LOGD("(avg)content_max_byte_rate %d, byte_out_rate %d", buffer_criteria, out_rate);
+       } else {
+               LOGW("There is no content bitrate information");
+       }
 
        if ((in_rate > 0) && (out_rate > 0))
-               buffer_buffering_time =  (gint)(out_rate / in_rate)*1000;
+               buffer_buffering_time =  (gint)(out_rate / in_rate) * 1000;
        else if ((in_rate <= 0) && (out_rate > 0))
                buffer_buffering_time = MAX_BUFFERING_TIME;
        else
@@ -638,12 +590,12 @@ streaming_get_current_bitrate_info(mm_player_streaming_t* streamer,
 }
 
 static void
-streaming_handle_fixed_buffering_mode(mm_player_streaming_tstreamer,
+streaming_handle_fixed_buffering_mode(mm_player_streaming_t *streamer,
                                                                                gint byte_out_rate,
                                                                                gint fixed_buffering_time,
-                                                                               streaming_buffer_info_tbuffer_info)
+                                                                               streaming_buffer_info_t *buffer_info)
 {
-       streaming_buffer_tbuffer_handle = NULL;
+       streaming_buffer_t *buffer_handle = NULL;
 
        guint buffering_bytes = 0;
        gint buffering_time = 0;
@@ -656,23 +608,22 @@ streaming_handle_fixed_buffering_mode(mm_player_streaming_t* streamer,
        buffer_handle = &(streamer->buffer_handle[streamer->streaming_buffer_type]);
        buffering_time = fixed_buffering_time;
 
-       LOGD("buffering time: %d ms, out rate: %d\n", buffering_time, byte_out_rate);
+       LOGD("buffering time: %d ms, out rate: %d", buffering_time, byte_out_rate);
 
        if ((buffering_time > 0) && (byte_out_rate > 0)) {
-               buffering_bytes = GET_NEW_BUFFERING_BYTE(byte_out_rate * buffering_time);
+               buffering_bytes = (guint)GET_NEW_BUFFERING_BYTE((gdouble)(byte_out_rate * buffering_time) / 1000);
        } else {
                if (buffering_time <= 0)
                        buffering_time = GET_CURRENT_BUFFERING_TIME(buffer_handle);
 
-               LOGW("content bitrate is not updated yet.\n");
+               LOGW("content bitrate is not updated yet.");
                buffering_bytes = GET_CURRENT_BUFFERING_BYTE(buffer_handle);
        }
 
        GET_PERCENT(buffering_time, GET_CURRENT_BUFFERING_TIME(buffer_handle), buffer_handle->buffer_high_percent, per_time);
        GET_PERCENT(buffering_bytes, GET_CURRENT_BUFFERING_BYTE(buffer_handle), buffer_handle->buffer_high_percent, per_byte);
 
-       LOGD("bytes %d, time %d, per_byte %f, per_time %f\n",
-                                                                               buffering_bytes, buffering_time, per_byte, per_time);
+       LOGD("bytes %d, time %d, per_byte %f, per_time %f", buffering_bytes, buffering_time, per_byte, per_time);
 
        (*buffer_info).buffering_bytes = buffering_bytes;
        (*buffer_info).buffering_time = buffering_time;
@@ -681,13 +632,13 @@ streaming_handle_fixed_buffering_mode(mm_player_streaming_t* streamer,
 }
 
 static void
-streaming_handle_adaptive_buffering_mode(mm_player_streaming_tstreamer,
+streaming_handle_adaptive_buffering_mode(mm_player_streaming_t *streamer,
                                                                                streaming_content_info_t content_info,
                                                                                streaming_bitrate_info_t bitrate_info,
-                                                                               streaming_buffer_info_tbuffer_info,
+                                                                               streaming_buffer_info_t *buffer_info,
                                                                                gint expected_play_time)
 {
-       streaming_buffer_tbuffer_handle = NULL;
+       streaming_buffer_t *buffer_handle = NULL;
 
        gint buffering_bytes = 0;
        gint adj_buffering_bytes = 0;
@@ -700,19 +651,19 @@ streaming_handle_adaptive_buffering_mode(mm_player_streaming_t* streamer,
        MMPLAYER_RETURN_IF_FAIL(streamer);
        MMPLAYER_RETURN_IF_FAIL(buffer_info);
 
-       LOGD("pos %lld, dur %lld, size %lld, in/out:%d/%d, buffer_criteria:%d, time_rate:%d, need:%d ms\n",
+       LOGD("pos %"G_GINT64_FORMAT", dur %"G_GINT64_FORMAT", size %"G_GUINT64_FORMAT", in/out:%d/%d, buffer_criteria:%d, time_rate:%d, need:%d ms",
                                                        content_info.position, content_info.duration, content_info.content_size,
                                                        bitrate_info.byte_in_rate, bitrate_info.byte_out_rate,
                                                        bitrate_info.buffer_criteria, bitrate_info.time_rate, expected_play_time);
 
        if ((content_info.duration <= 0) ||
                (content_info.content_size <= 0)) {
-               LOGW("keep previous setting.\n");
+               LOGW("keep previous setting.");
                return;
        }
 
        if ((bitrate_info.byte_out_rate <= 0) || (bitrate_info.buffer_criteria == 0)) {
-               LOGW("keep previous setting.\n");
+               LOGW("keep previous setting.");
                return;
        }
 
@@ -721,45 +672,46 @@ streaming_handle_adaptive_buffering_mode(mm_player_streaming_t* streamer,
        if (bitrate_info.byte_in_rate < bitrate_info.byte_out_rate) {
                portion = (double)(expected_play_time * GST_MSECOND) / (double)content_info.duration;
                buffering_bytes = GET_NEW_BUFFERING_BYTE(((double)content_info.content_size * portion)  \
-                                                                                                                       * (1 - (double)bitrate_info.byte_in_rate/(double)bitrate_info.byte_out_rate));
+                                                                                                                       * (1 - (double)bitrate_info.byte_in_rate / (double)bitrate_info.byte_out_rate));
        } else {
                /* buffering_bytes will be set as streamer->default_val.buffering_time *
                 * receiving rate is bigger than avg content bitrate
                 * so there is no reason to buffering. if the buffering msg is posted
                 * in-rate or contents bitrate has wrong value. */
-               LOGW("don't need to do buffering.\n");
+               LOGW("don't need to do buffering.");
        }
 
        if (buffering_bytes > 0)
-               buffer_buffering_time = (gint)(buffering_bytes / bitrate_info.byte_out_rate)*1000;
+               buffer_buffering_time = (gint)(buffering_bytes / bitrate_info.byte_out_rate) * 1000;
 
        if (content_info.position <= 0) {
                /* if the buffer is filled under 50%, MSL use the original default buffering time.
                   if not, MSL use just 2 sec as a default buffering time. (to reduce initial buffering time) */
-               default_buffering_time = streamer->default_val.buffering_time - ((gdouble)streamer->buffering_percent/50)*1000;
-       } else
+               default_buffering_time = streamer->default_val.buffering_time - ((gdouble)streamer->buffering_percent / 50) * 1000;
+       } else {
                default_buffering_time = streamer->default_val.buffering_time;
+       }
 
        if (buffer_buffering_time < default_buffering_time) {
-               LOGD("adjusted time: %d -> %d ms\n", buffer_buffering_time, default_buffering_time);
-               LOGD("adjusted bytes : %d or %d or %d\n",
+               LOGD("adjusted time: %d -> %d ms", buffer_buffering_time, default_buffering_time);
+               LOGD("adjusted bytes : %d or %d or %d",
                        buffering_bytes,
-                       (gint)(bitrate_info.byte_out_rate * buffer_buffering_time/1000),
-                       (gint)(bitrate_info.buffer_criteria * buffer_buffering_time/1000));
+                       (gint)(bitrate_info.byte_out_rate * buffer_buffering_time / 1000),
+                       (gint)(bitrate_info.buffer_criteria * buffer_buffering_time / 1000));
 
                /* start monitoring the abmormal state */
                if (content_info.position > 0)
                        streamer->default_val.buffering_monitor = TRUE;
 
                buffer_buffering_time = default_buffering_time;
-               adj_buffering_bytes = GET_NEW_BUFFERING_BYTE(bitrate_info.byte_out_rate * (gint)ceil((gdouble)buffer_buffering_time/1000));
+               adj_buffering_bytes = GET_NEW_BUFFERING_BYTE(bitrate_info.byte_out_rate * (gint)ceil((gdouble)buffer_buffering_time / 1000));
                buffering_bytes = MAX(buffering_bytes, adj_buffering_bytes);
        }
 
        GET_PERCENT(buffering_bytes, GET_CURRENT_BUFFERING_BYTE(buffer_handle), buffer_handle->buffer_high_percent, per_byte);
        GET_PERCENT(buffer_buffering_time, GET_CURRENT_BUFFERING_TIME(buffer_handle), buffer_handle->buffer_high_percent, per_time);
 
-       LOGD("monitor %d, bytes %d, time %f, per_byte %f, per_time %f\n",
+       LOGD("monitor %d, bytes %d, time %d, per_byte %f, per_time %f",
                                                                                streamer->default_val.buffering_monitor,
                                                                                buffering_bytes, buffer_buffering_time, per_byte, per_time);
 
@@ -771,21 +723,19 @@ streaming_handle_adaptive_buffering_mode(mm_player_streaming_t* streamer,
 }
 
 static void
-streaming_update_buffer_setting(mm_player_streaming_tstreamer,
-                                                                       GstMessage *buffering_msg,      // can be null
-                                                                       guint64 content_size,
-                                                                       gint64 position,
-                                                                       gint64 duration)
+streaming_update_buffer_setting(mm_player_streaming_t *streamer,
+                                                               GstMessage *buffering_msg,      /* can be null */
+                                                               guint64 content_size,
+                                                               gint64 position,
+                                                               gint64 duration)
 {
-       streaming_buffer_tbuffer_handle = NULL;
+       streaming_buffer_t *buffer_handle = NULL;
        MMPlayerBufferingMode buffering_mode = MM_PLAYER_BUFFERING_MODE_ADAPTIVE;
 
        streaming_buffer_info_t buffer_info;
        streaming_content_info_t content_info;
        streaming_bitrate_info_t bitrate_info;
 
-       gdouble low_percent = 0.0;
-
        MMPLAYER_FENTER();
 
        MMPLAYER_RETURN_IF_FAIL(streamer);
@@ -812,13 +762,10 @@ streaming_update_buffer_setting(mm_player_streaming_t* streamer,
 
        streaming_get_current_bitrate_info(streamer, buffering_msg, content_info, &bitrate_info);
 
-       LOGD("buffering mode %d, new info in_r:%d, out_r:%d, cb:%d, bt:%d\n",
+       LOGD("buffering mode %d, new info in_r:%d, out_r:%d, cb:%d, bt:%d",
                                        buffering_mode, bitrate_info.byte_in_rate, bitrate_info.byte_out_rate,
                                        bitrate_info.buffer_criteria, bitrate_info.time_rate);
 
-       /* calculate buffer low/high percent */
-       low_percent = DEFAULT_BUFFER_LOW_PERCENT;
-
        if (buffering_mode == MM_PLAYER_BUFFERING_MODE_FIXED) {
                /********************
                 * (1) fixed mode   *
@@ -839,7 +786,7 @@ streaming_update_buffer_setting(mm_player_streaming_t* streamer,
 
                if (streamer->buffering_req.rebuffer_time > 0)
                        expected_play_time = streamer->buffering_req.rebuffer_time;
-               else if ((position == 0) && (streamer->is_buffering))
+               else if ((position == 0) && (streamer->buffering_state & MM_PLAYER_BUFFERING_IN_PROGRESS))
                        expected_play_time = streamer->buffering_req.prebuffer_time;
 
                if (expected_play_time <= 0)
@@ -851,16 +798,16 @@ streaming_update_buffer_setting(mm_player_streaming_t* streamer,
                        buffer_handle->buffering_time = buffer_info.buffering_time;
        }
 
-       LOGD("adj buffer(%d) %d->%d bytes/%d->%d ms\n",
-                                       streamer->streaming_buffer_type,
-                                       GET_CURRENT_BUFFERING_BYTE(buffer_handle), buffer_info.buffering_bytes,
-                                       GET_CURRENT_BUFFERING_TIME(buffer_handle), buffer_info.buffering_time);
+       LOGD("adj buffer(%d) %d->%d bytes/%d->%d ms",
+               streamer->streaming_buffer_type,
+               GET_CURRENT_BUFFERING_BYTE(buffer_handle), buffer_info.buffering_bytes,
+               GET_CURRENT_BUFFERING_TIME(buffer_handle), buffer_info.buffering_time);
 
        /* queue2 : bytes, multiqueue : time */
        if (((GET_CURRENT_BUFFERING_BYTE(buffer_handle) < buffer_info.buffering_bytes) && IS_MUXED_BUFFERING_MODE(streamer)) ||
                ((GET_CURRENT_BUFFERING_TIME(buffer_handle) < buffer_info.buffering_time) && IS_DEMUXED_BUFFERING_MODE(streamer))) {
                if (duration > 0 && position > 0) {
-                       gint buffering_time_limit = (gint)(duration - position)/GST_MSECOND;
+                       gint buffering_time_limit = (gint)(duration - position) / GST_MSECOND;
 
                        if (buffer_info.buffering_time > buffering_time_limit)
                                buffer_info.buffering_time = buffering_time_limit;
@@ -869,18 +816,18 @@ streaming_update_buffer_setting(mm_player_streaming_t* streamer,
                streaming_set_buffer_size(streamer, streamer->streaming_buffer_type, buffer_info.buffering_bytes, buffer_info.buffering_time);
        }
 
-       streaming_set_buffer_percent(streamer, streamer->streaming_buffer_type, low_percent, buffer_info.percent_byte, buffer_info.percent_time);
+       streaming_set_buffer_percent(streamer, streamer->streaming_buffer_type, buffer_info.percent_byte, buffer_info.percent_time);
 
-       LOGD("buffer setting: size %d, time %d, per %f\n",
-                                                       GET_CURRENT_BUFFERING_BYTE(buffer_handle),
-                                                       GET_CURRENT_BUFFERING_TIME(buffer_handle),
-                                                       buffer_handle->buffer_high_percent);
+       LOGD("buffer setting: size %d, time %d, per %f",
+               GET_CURRENT_BUFFERING_BYTE(buffer_handle),
+               GET_CURRENT_BUFFERING_TIME(buffer_handle),
+               buffer_handle->buffer_high_percent);
 
        streamer->need_sync = TRUE;
 }
 
 static void
-streaming_adjust_min_threshold(mm_player_streaming_tstreamer, gint64 position)
+streaming_adjust_min_threshold(mm_player_streaming_t *streamer, gint64 position)
 {
 #define DEFAULT_TIME_PAD 1000  /* ms */
        gint playing_time = 0;
@@ -891,10 +838,10 @@ streaming_adjust_min_threshold(mm_player_streaming_t* streamer, gint64 position)
 
        playing_time = (gint)((position - streamer->default_val.prev_pos) / GST_MSECOND);
 
-       LOGD("buffering monitor = %s\n", (streamer->default_val.buffering_monitor) ? "ON" : "OFF");
-       LOGD("playing_time (%d ms) = %lld - %lld \n", playing_time, position, streamer->default_val.prev_pos);
-       LOGD("default time : %d, prev buffering t : %d\n",
-                                       streamer->default_val.buffering_time, streamer->buffer_handle[streamer->streaming_buffer_type].buffering_time);
+       LOGD("buffering monitor = %s", (streamer->default_val.buffering_monitor) ? "ON" : "OFF");
+       LOGD("playing_time (%d ms) = %"G_GINT64_FORMAT" - %"G_GINT64_FORMAT, playing_time, position, streamer->default_val.prev_pos);
+       LOGD("default time : %d, prev buffering t : %d",
+               streamer->default_val.buffering_time, streamer->buffer_handle[streamer->streaming_buffer_type].buffering_time);
 
        if ((streamer->default_val.buffering_monitor) && (playing_time <= streamer->default_val.buffering_time)) {
                gint time_gap = 0;
@@ -902,20 +849,20 @@ streaming_adjust_min_threshold(mm_player_streaming_t* streamer, gint64 position)
                if (time_gap <= 0)
                        time_gap = DEFAULT_TIME_PAD;
 
-               streamer->default_val.buffering_time += time_gap*2;
+               streamer->default_val.buffering_time += time_gap * 2;
                streamer->default_val.buffering_time = MIN(streamer->default_val.buffering_time, MAX_BUFFERING_TIME);
        } else {
                streamer->default_val.buffering_time = DEFAULT_BUFFERING_TIME;
        }
 
-       LOGD("new default min value %d \n", streamer->default_val.buffering_time);
+       LOGD("new default min value %d", streamer->default_val.buffering_time);
 
        streamer->default_val.buffering_monitor = FALSE;
        streamer->default_val.prev_pos = position;
 }
 
 static void
-streaming_update_buffering_status(mm_player_streaming_tstreamer, GstMessage *buffering_msg, gint64 position)
+streaming_update_buffering_status(mm_player_streaming_t *streamer, GstMessage *buffering_msg, gint64 position)
 {
        gint buffer_percent = 0;
 
@@ -925,9 +872,8 @@ streaming_update_buffering_status(mm_player_streaming_t* streamer, GstMessage *b
        MMPLAYER_RETURN_IF_FAIL(buffering_msg);
 
        /* update when buffering has started. */
-       if (!streamer->is_buffering) {
-               streamer->is_buffering = TRUE;
-               streamer->is_buffering_done = FALSE;
+       if (!(streamer->buffering_state & MM_PLAYER_BUFFERING_IN_PROGRESS)) {
+               streamer->buffering_state = MM_PLAYER_BUFFERING_IN_PROGRESS;
                streamer->buffering_percent = -1;
 
                if (!streamer->buffering_req.is_pre_buffering) {
@@ -939,27 +885,31 @@ streaming_update_buffering_status(mm_player_streaming_t* streamer, GstMessage *b
        /* update buffer percent */
        gst_message_parse_buffering(buffering_msg, &buffer_percent);
 
+       /* LOGD("[%s] buffering per %d%% -> %d%%, state 0x%X", streamer->buffering_percent, buffer_percent, streamer->buffering_state); */
+
        if (streamer->buffering_percent < buffer_percent) {
-               LOGD("[%s] buffering %d%%....\n",
+               LOGD("[%s] buffering %d%%....",
                        GST_OBJECT_NAME(GST_MESSAGE_SRC(buffering_msg)), buffer_percent);
                streamer->buffering_percent = buffer_percent;
        }
 
-       if ((streamer->buffering_percent == MAX_BUFFER_PERCENT) || (streamer->is_buffering_done == TRUE)) {
-               streamer->is_buffering = FALSE;
+       if (streamer->buffering_percent == MAX_BUFFER_PERCENT) {
+               streamer->buffering_state = MM_PLAYER_BUFFERING_DEFAULT;
                streamer->buffering_req.is_pre_buffering = FALSE;
-               if (streamer->buffering_percent == MAX_BUFFER_PERCENT)
-                       streamer->is_buffering_done = FALSE;
-               else
-                       streamer->buffering_percent = MAX_BUFFER_PERCENT;
+       } else if (streamer->buffering_state & MM_PLAYER_BUFFERING_COMPLETE) {
+               streamer->buffering_state = MM_PLAYER_BUFFERING_COMPLETE; /* have to keep state to ignore remained msg till get 100% msg */
+               streamer->buffering_req.is_pre_buffering = FALSE;
+               streamer->buffering_percent = MAX_BUFFER_PERCENT;
+               LOGD("updated to the buffering 100%%.... (by force)");
        }
 }
 
-void __mm_player_streaming_buffering(mm_player_streaming_t* streamer,
-                                                                               GstMessage *buffering_msg,
-                                                                               guint64 content_size,
-                                                                               gint64 position,
-                                                                               gint64 duration)
+void
+__mm_player_streaming_buffering(mm_player_streaming_t *streamer,
+                                                               GstMessage *buffering_msg,
+                                                               guint64 content_size,
+                                                               gint64 position,
+                                                               gint64 duration)
 {
        MMPLAYER_FENTER();
 
@@ -968,18 +918,15 @@ void __mm_player_streaming_buffering(mm_player_streaming_t* streamer,
        MMPLAYER_RETURN_IF_FAIL(GST_IS_MESSAGE(buffering_msg));
        MMPLAYER_RETURN_IF_FAIL((GST_MESSAGE_TYPE(buffering_msg) == GST_MESSAGE_BUFFERING));
 
-       if (buffering_msg) {
-               if (position > (gint64)(streamer->buffering_req.prebuffer_time * GST_MSECOND))
-                       streamer->buffering_req.is_pre_buffering = FALSE;
-
-               streaming_update_buffering_status(streamer, buffering_msg, position);
+       if (position > (gint64)(streamer->buffering_req.prebuffer_time * GST_MSECOND))
+               streamer->buffering_req.is_pre_buffering = FALSE;
 
-               if (!streamer->need_update)
-                       return;
+       streaming_update_buffering_status(streamer, buffering_msg, position);
 
-               streamer->need_update = FALSE;
-       }
+       if (!streamer->need_update)
+               return;
 
+       streamer->need_update = FALSE;
        streaming_update_buffer_setting(streamer, buffering_msg, content_size, position, duration);
 
        return;