summaryrefslogtreecommitdiff
path: root/src/mp-video-progressbar.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mp-video-progressbar.c')
-rw-r--r--src/mp-video-progressbar.c752
1 files changed, 752 insertions, 0 deletions
diff --git a/src/mp-video-progressbar.c b/src/mp-video-progressbar.c
new file mode 100644
index 0000000..6ad16d7
--- /dev/null
+++ b/src/mp-video-progressbar.c
@@ -0,0 +1,752 @@
+/*
+ * Copyright (c) [2012] Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Flora License, Version 1.1 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "mp-util.h"
+#include "mp-video-log.h"
+#include "video-player.h"
+#include "mp-video-value-define.h"
+#include "mp-video-service-ctrl.h"
+#include "mp-video-progressbar.h"
+
+#define PROGRESS_BAR_START_TERM 130
+#define PROGRESS_BAR_WIDTH_TERM 200
+
+#define PROGRESS_ADJUSTMENT_TIME_INTERVAL 2.0
+#define PROGRESS_ADJUSTMENT_RUN_INTERVAL 0.3
+
+#define PROGRESS_ADJUSTMENT_MOVE_LIMIT 20
+#define PROGRESS_ADJUSTMENT_MODE_LIMIT 20
+
+
+static Evas_Object *pProgressbarEdj = NULL;
+static Ecore_Timer *pProgressbarTimer = NULL;
+
+static Ecore_Timer *pProgressAdjustCheckTimer = NULL;
+static Ecore_Timer *pProgressAdjustRunTimer = NULL;
+
+static bool bIsEventSkip = FALSE;
+static bool bIsDrag = FALSE;
+static int nDragPosition = 0;
+
+static bool bIsAdjustmentMode = FALSE;
+static int nDownPosX = 0;
+static int nOldPosX = 0;
+static bool bPrevAdjustment = FALSE;
+
+
+static void MpVideoProgressbarSetAdjustmentMode(bool bShow)
+{
+ VideoLogInfo("");
+
+ if(bShow) {
+ edje_object_signal_emit(pProgressbarEdj, SIGNAL_PROGRESS_ADJUSTMENT_SHOW, "*");
+ }
+ else {
+ edje_object_signal_emit(pProgressbarEdj, SIGNAL_PROGRESS_ADJUSTMENT_HIDE, "*");
+ }
+}
+
+
+static void MpVideoProgressbarSetPointerVisible(bool bVisible)
+{
+ VideoLogInfo("");
+
+ if(bVisible) {
+ edje_object_signal_emit(pProgressbarEdj, SIGNAL_PROGRESS_POINTER_SHOW, "*");
+ }
+ else {
+ edje_object_signal_emit(pProgressbarEdj, SIGNAL_PROGRESS_POINTER_HIDE, "*");
+ }
+}
+
+/*
+ * Internal function
+ */
+static Eina_Bool MpVideoProgressbarUpdateValue(void *pUserData)
+{
+ //VideoLogInfo("");
+
+ if (!pUserData) {
+ VideoLogInfo("[ERR] No exist userdata.");
+ return EINA_TRUE;
+ }
+
+ VideoAppData *pAppData = (VideoAppData *)pUserData;
+
+ double nPlayedRatio = 0.0;
+ char szPlayingTime[PLAY_TIME_LENGTH] = { 0, };
+
+ nPlayedRatio = ((double)nDragPosition / (double)pAppData->nDuration);
+
+ snprintf(szPlayingTime, PLAY_TIME_LENGTH, "%" PLAY_TIME_FORMAT,
+ PLAY_TIME_ARGS(nDragPosition / 1000));
+
+ edje_object_part_drag_value_set(pProgressbarEdj, "progress.playing",
+ nPlayedRatio, 0.0);
+
+ edje_object_part_text_set(pProgressbarEdj, "progress.txt.played",
+ szPlayingTime);
+
+ if(bIsAdjustmentMode) {
+ edje_object_part_text_set(pProgressbarEdj, "progress.adjustment.txt",
+ szPlayingTime);
+ }
+
+ return EINA_TRUE;
+}
+
+static void MpVideoProgressbarUpdateBufferingValue(void *pUserData)
+{
+ //VideoLogInfo("");
+
+ if (!pUserData) {
+ VideoLogInfo("[ERR] No exist userdata.");
+ return;
+ }
+
+ VideoAppData *pAppData = (VideoAppData *)pUserData;
+
+ double buffering_ratio = 0.0;
+ pAppData->
+ VideoAppCtrlCallbackFunc.VideoAppCtrlGetBufferingPosition(pAppData);
+
+ buffering_ratio = ((double)pAppData->nBufferingPosition / (double)100);
+
+ //VideoLogInfo("%d:%lf", pAppData->nBufferingPosition, buffering_ratio);
+
+ edje_object_part_drag_value_set(pProgressbarEdj, "progress.buffering",
+ buffering_ratio, 0.0);
+}
+
+/*
+ * Callback function.
+ */
+static Eina_Bool MpVideoProgressbarTimerCb(void *pUserData)
+{
+ /* VideoLogInfo(""); */
+
+ if (!pUserData) {
+ VideoLogInfo("[ERR] No exist userdata.");
+ return EINA_TRUE;
+ }
+
+ VideoAppData *pAppData = (VideoAppData *)pUserData;
+
+ if (pAppData->nDuration < 1) {
+ VideoLogInfo("Try to update duration time.");
+ pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlReqDurationTime(pAppData);
+ return EINA_TRUE;
+ }
+
+ if (bIsEventSkip || bIsDrag)
+ return EINA_TRUE;
+
+ double nPlayedRatio = 0.0;
+ char szPlayingTime[PLAY_TIME_LENGTH] = { 0, };
+
+ pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlGetPosition(pAppData);
+
+ nPlayedRatio = ((double)pAppData->nCurPosition / (double)pAppData->nDuration);
+ snprintf(szPlayingTime, PLAY_TIME_LENGTH, "%" PLAY_TIME_FORMAT, PLAY_TIME_ARGS(pAppData->nCurPosition / 1000));
+
+ edje_object_part_drag_value_set(pProgressbarEdj, "progress.playing", nPlayedRatio, 0.0);
+ edje_object_part_text_set(pProgressbarEdj, "progress.txt.played", szPlayingTime);
+
+ int nTmpPlayerType = MpVideoServiceCtrlGetPlayerTypeWithoutLog();
+ if(nTmpPlayerType == MP_STREAMING_PLAYER)
+ {
+ MpVideoProgressbarUpdateBufferingValue(pUserData);
+ }
+
+ return EINA_TRUE;
+}
+
+static Eina_Bool MpVideoProgressbarAdjustmentTimerCb(void *pUserData)
+{
+ VideoLogInfo("");
+
+ if (!pUserData) {
+ VideoLogError("[ERR] No exist userdata.");
+ return EINA_FALSE;
+ }
+ VideoAppData *pAppData = (VideoAppData *)pUserData;
+
+ bIsAdjustmentMode = TRUE;
+
+ VideoLogInfo("%d, %d",pAppData->nCurPosition , nDragPosition);
+
+ pAppData->nSetPosition = nDragPosition;
+ pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlSetPosition(pAppData);
+
+ MpVideoProgressbarSetAdjustmentMode(bIsAdjustmentMode);
+ MpVideoProgressbarUpdateValue(pUserData);
+ return EINA_FALSE;
+}
+
+static Eina_Bool MpVideoProgressbarAdjustmentRunTimerCb(void *pUserData)
+{
+// VideoLogInfo("");
+
+ if (!pUserData) {
+ VideoLogInfo("[ERR] No exist userdata.");
+ return EINA_TRUE;
+ }
+
+ VideoAppData *pAppData = (VideoAppData *)pUserData;
+
+
+ if(bPrevAdjustment) {
+ pAppData->nSetPosition = nDragPosition - 1000;
+ }
+ else {
+ pAppData->nSetPosition = nDragPosition + 1000;
+ }
+
+ if (pAppData->nSetPosition < 0) {
+ pAppData->nSetPosition = 0;
+ }
+
+ if (pAppData->nSetPosition > pAppData->nDuration) {
+ pAppData->nSetPosition = pAppData->nDuration;
+ }
+
+ pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlSetPosition(pAppData);
+
+ nDragPosition = pAppData->nSetPosition;
+
+ MpVideoProgressbarUpdateValue((void *)pAppData);
+
+
+
+ return EINA_TRUE;
+}
+
+
+
+static void MpVideoProgressbarDownCb(void *pUserData, Evas * e,
+ Evas_Object *obj, void *event_info)
+{
+ VideoLogInfo("");
+
+ if (!pUserData) {
+ VideoLogInfo("[ERR]");
+ return;
+ }
+
+ if (!event_info) {
+ VideoLogInfo("[ERR]");
+ return;
+ }
+
+ if (bIsEventSkip)
+ return;
+
+ MpVideoProgressbarDeleteTimer();
+ MpVideoProgressbarSetPointerVisible(TRUE);
+
+ int nTmpPlayerType = MpVideoServiceCtrlGetPlayerTypeWithoutLog();
+ if(nTmpPlayerType != MP_STREAMING_PLAYER)
+ {
+ if(pProgressAdjustCheckTimer) {
+ ecore_timer_del(pProgressAdjustCheckTimer);
+ pProgressAdjustCheckTimer = NULL;
+ }
+
+ if(pProgressAdjustRunTimer) {
+ ecore_timer_del(pProgressAdjustRunTimer);
+ pProgressAdjustRunTimer = NULL;
+ }
+
+ pProgressAdjustCheckTimer = ecore_timer_add(PROGRESS_ADJUSTMENT_TIME_INTERVAL,
+ MpVideoProgressbarAdjustmentTimerCb, (void *)pUserData);
+
+ }
+ bIsDrag = TRUE;
+
+ VideoAppData *pAppData = (VideoAppData *)pUserData;
+ Evas_Event_Mouse_Up *ev = event_info;
+ Evas_Object *progressbar = obj;
+ int w = 0, current = 0;
+ double ratio = 0.0;
+
+ int term = 0;
+ int w_term = 0;
+ int width = 0;
+ int height = 0;
+
+ ecore_x_window_size_get(ecore_x_window_root_first_get(),&width, &height);
+ term = PROGRESS_BAR_START_TERM * width/DEFAULT_SCALE_WIDTH;
+ w_term = PROGRESS_BAR_WIDTH_TERM * width/DEFAULT_SCALE_WIDTH;
+ evas_object_geometry_get(progressbar, NULL, NULL, &w, NULL);
+ nDownPosX = ev->canvas.x;
+ nOldPosX = ev->canvas.x;;
+ current = ev->canvas.x - term;
+ w = w - w_term;
+ if (current < 0)
+ current = 0;
+ else if (current > w)
+ current = w;
+
+ ratio = (double)current / w;
+
+ nDragPosition = ratio * pAppData->nDuration;
+ pAppData->nSetPosition = nDragPosition;
+
+ if(nTmpPlayerType != MP_STREAMING_PLAYER)
+ {
+ if (pAppData->nCurPlayerState == MP_PLAYER_STATE_PLAY ||
+ pAppData->nCurPlayerState == MP_PLAYER_STATE_RESUME) {
+ //pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlPause(pAppData);
+ pAppData->nPrePlayerState = MP_PLAYER_STATE_RESUME;
+ pAppData->nSeekPlayerState = MP_PLAYER_STATE_PAUSE;
+ }
+ pAppData->bSeekComplete = FALSE;
+ pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlSetPosition(pAppData);
+ }
+ else {
+ if (pAppData->nCurPlayerState == MP_PLAYER_STATE_PLAY ||
+ pAppData->nCurPlayerState == MP_PLAYER_STATE_RESUME) {
+ pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlPause(pAppData);
+ pAppData->nPrePlayerState = MP_PLAYER_STATE_RESUME;
+ }
+ }
+
+ MpVideoProgressbarUpdateValue(pUserData);
+
+}
+
+static void MpVideoProgressbarUpCb(void *pUserData, Evas * e, Evas_Object *obj,
+ void *event_info)
+{
+ VideoLogInfo("");
+
+ if (!pUserData) {
+ VideoLogInfo("[ERR]");
+ return;
+ }
+
+ if (!event_info) {
+ VideoLogInfo("[ERR]");
+ return;
+ }
+
+ if (bIsEventSkip)
+ return;
+
+ bIsDrag = FALSE;
+
+ VideoAppData *pAppData = (VideoAppData *)pUserData;
+ MpVideoProgressbarSetPointerVisible(FALSE);
+
+ if(pProgressAdjustRunTimer) {
+ ecore_timer_del(pProgressAdjustRunTimer);
+ pProgressAdjustRunTimer = NULL;
+ }
+
+ if(pProgressAdjustCheckTimer) {
+ ecore_timer_del(pProgressAdjustCheckTimer);
+ pProgressAdjustCheckTimer = NULL;
+ }
+ int nTmpPlayerType = MpVideoServiceCtrlGetPlayerTypeWithoutLog();
+ if(nTmpPlayerType != MP_STREAMING_PLAYER)
+ {
+ if(bIsAdjustmentMode) {
+ bIsAdjustmentMode = FALSE;
+ MpVideoProgressbarSetAdjustmentMode(bIsAdjustmentMode);
+
+ pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlSetPosition(pAppData);
+
+ if (pAppData->nPrePlayerState == MP_PLAYER_STATE_PLAY ||
+ pAppData->nPrePlayerState == MP_PLAYER_STATE_RESUME) {
+ //pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlResume(pAppData);
+ pAppData->nPrePlayerState = MP_PLAYER_STATE_PAUSE;
+ pAppData->nSeekPlayerState = MP_PLAYER_STATE_RESUME;
+ }
+ nOldPosX = 0;
+ return;
+ }
+ }
+
+ Evas_Event_Mouse_Up *ev = event_info;
+ Evas_Object *progressbar = obj;
+ int w = 0, current = 0;
+ double ratio = 0.0;
+
+ int term = 0;
+ int w_term = 0;
+ int width = 0;
+ int height = 0;
+
+ ecore_x_window_size_get(ecore_x_window_root_first_get(),&width, &height);
+ term = PROGRESS_BAR_START_TERM * width/DEFAULT_SCALE_WIDTH;
+ w_term = PROGRESS_BAR_WIDTH_TERM * width/DEFAULT_SCALE_WIDTH;
+
+ evas_object_geometry_get(progressbar, NULL, NULL, &w, NULL);
+ current = ev->canvas.x - term;
+ w = w - w_term;
+
+ if (current < 0)
+ current = 0;
+ else if (current > w)
+ current = w;
+
+ ratio = (double)current / w;
+
+ pAppData->nSetPosition = (int)pAppData->nDuration * ratio;
+
+ if (pAppData->nSetPosition > pAppData->nDuration)
+ pAppData->nSetPosition = pAppData->nDuration;
+
+ if (pAppData->nSetPosition < 0)
+ pAppData->nSetPosition = 0;
+
+ pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlGetPosition(pAppData);
+
+ MpVideoProgressbarCreateTimer((void *)pAppData);
+
+ if(nTmpPlayerType != MP_STREAMING_PLAYER)
+ {
+
+ if (pAppData->nPrePlayerState == MP_PLAYER_STATE_PLAY ||
+ pAppData->nPrePlayerState == MP_PLAYER_STATE_RESUME) {
+ //pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlResume(pAppData);
+ pAppData->nPrePlayerState = MP_PLAYER_STATE_PAUSE;
+ pAppData->nSeekPlayerState = MP_PLAYER_STATE_RESUME;
+ }
+
+ if(!pAppData->bSeekComplete)
+ {
+ pAppData->nSeekPosition = pAppData->nSetPosition;
+ if((pAppData->nCurPosition < pAppData->nSeekPosition + 5000) &&
+ (pAppData->nCurPosition > pAppData->nSeekPosition - 5000))
+ {
+ VideoLogError("Skip for same position");
+ pAppData->nSeekPosition = 0;
+ }
+ }
+ else
+ {
+ if((pAppData->nCurPosition < pAppData->nSetPosition + 5000) &&
+ (pAppData->nCurPosition > pAppData->nSetPosition - 5000))
+ {
+ VideoLogError("Skip for same position");
+ }
+ else
+ {
+ pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlSetPosition(pAppData);
+ }
+ }
+ }
+ else
+ {
+ pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlSetPosition(pAppData);
+ MpVideoProgressbarCreateTimer((void *)pAppData);
+
+ if (pAppData->nPrePlayerState == MP_PLAYER_STATE_PLAY ||
+ pAppData->nPrePlayerState == MP_PLAYER_STATE_RESUME) {
+ pAppData->nSeekPlayerState = MP_PLAYER_STATE_RESUME;
+ pAppData->nPrePlayerState = MP_PLAYER_STATE_PAUSE;
+ }
+
+ }
+}
+static void MpVideoProgressbarMoveCb(void *pUserData, Evas * e,
+ Evas_Object *obj, void *event_info)
+{
+// VideoLogInfo("");
+
+ if (!pUserData) {
+ VideoLogInfo("[ERR]");
+ return;
+ }
+
+ if (!event_info) {
+ VideoLogInfo("[ERR]");
+ return;
+ }
+
+ if (bIsEventSkip || bIsDrag == FALSE)
+ return;
+
+ VideoAppData *pAppData = (VideoAppData *)pUserData;
+ Evas_Event_Mouse_Up *ev = event_info;
+ Evas_Object *progressbar = obj;
+ int w = 0, current = 0;
+ double ratio = 0.0;
+
+ int term = 0;
+ int w_term = 0;
+ int width = 0;
+ int height = 0;
+
+ ecore_x_window_size_get(ecore_x_window_root_first_get(),&width, &height);
+ term = PROGRESS_BAR_START_TERM * width/DEFAULT_SCALE_WIDTH;
+ w_term = PROGRESS_BAR_WIDTH_TERM * width/DEFAULT_SCALE_WIDTH;
+
+ evas_object_geometry_get(progressbar, NULL, NULL, &w, NULL);
+ if(bIsAdjustmentMode) {
+ if((nOldPosX + PROGRESS_ADJUSTMENT_MODE_LIMIT) < ev->canvas.x) {
+ if(bPrevAdjustment == TRUE) {
+ if(pProgressAdjustRunTimer) {
+ ecore_timer_del(pProgressAdjustRunTimer);
+ pProgressAdjustRunTimer = NULL;
+ }
+ }
+ bPrevAdjustment = FALSE;
+ nOldPosX = ev->canvas.x;
+ }
+ else if((nOldPosX - PROGRESS_ADJUSTMENT_MODE_LIMIT) > ev->canvas.x) {
+ if(bPrevAdjustment == FALSE) {
+ if(pProgressAdjustRunTimer) {
+ ecore_timer_del(pProgressAdjustRunTimer);
+ pProgressAdjustRunTimer = NULL;
+ }
+ }
+ bPrevAdjustment = TRUE;
+ nOldPosX = ev->canvas.x;
+ }
+
+ if(pProgressAdjustRunTimer == NULL) {
+ pProgressAdjustRunTimer = ecore_timer_add(PROGRESS_ADJUSTMENT_RUN_INTERVAL,
+ MpVideoProgressbarAdjustmentRunTimerCb, (void *)pAppData);
+
+ }
+
+ }
+ else {
+ if(((nDownPosX + PROGRESS_ADJUSTMENT_MOVE_LIMIT) < ev->canvas.x ) ||
+ ((nDownPosX - PROGRESS_ADJUSTMENT_MOVE_LIMIT) > ev->canvas.x)) {
+ VideoLogInfo("Adjustment Off");
+
+ if(pProgressAdjustCheckTimer) {
+ ecore_timer_del(pProgressAdjustCheckTimer);
+ pProgressAdjustCheckTimer = NULL;
+ }
+
+ if(pProgressAdjustRunTimer) {
+ ecore_timer_del(pProgressAdjustRunTimer);
+ pProgressAdjustRunTimer = NULL;
+ }
+ }
+ current = ev->canvas.x - term;
+ w = w - w_term;
+
+ if (current < 0)
+ current = 0;
+ else if (current > w)
+ current = w;
+
+ ratio = (double)current / w;
+ nDragPosition = ratio * pAppData->nDuration;
+ pAppData->nSetPosition = nDragPosition;
+ int nTmpPlayerType = MpVideoServiceCtrlGetPlayerTypeWithoutLog();
+ if(nTmpPlayerType != MP_STREAMING_PLAYER)
+ {
+ if(pAppData->bSeekComplete) {
+ pAppData->bSeekComplete = FALSE;
+ pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlSetPosition(pAppData);
+ }
+ }
+ MpVideoProgressbarUpdateValue(pUserData);
+ }
+}
+
+/*
+ * External function
+ */
+void MpVideoProgressbarSetSkipEvent(bool bSkip)
+{
+// VideoLogInfo("");
+
+ bIsEventSkip = bSkip;
+}
+
+void *MpVideoProgressbarGetEdjHandle(void)
+{
+ VideoLogInfo("");
+
+ if (pProgressbarEdj) {
+ return (void *)pProgressbarEdj;
+ } else {
+ VideoLogInfo("Progressbar edj handle is null.");
+ return NULL;
+ }
+}
+
+void *MpVideoProgressbarInit(void *pUserData)
+{
+ VideoLogInfo("");
+
+ if (!pUserData) {
+ VideoLogInfo("[ERR]");
+ return NULL;
+ }
+
+ VideoAppData *pAppData = (VideoAppData *)pUserData;
+
+ Evas *pMainWindowEvas = evas_object_evas_get(pAppData->pMainWindow);
+
+ pProgressbarEdj = (Evas_Object *)MpUtilLoadEdjFile(pMainWindowEvas,
+ VIDEO_PLAYER_PROGRESS_EDJ,
+ PROGRESS_EDJ_GROUP);
+
+ evas_object_event_callback_add(pProgressbarEdj,
+ EVAS_CALLBACK_MOUSE_DOWN,
+ MpVideoProgressbarDownCb, pAppData);
+
+ evas_object_event_callback_add(pProgressbarEdj,
+ EVAS_CALLBACK_MOUSE_UP,
+ MpVideoProgressbarUpCb, pAppData);
+
+ evas_object_event_callback_add(pProgressbarEdj,
+ EVAS_CALLBACK_MOUSE_MOVE,
+ MpVideoProgressbarMoveCb, pAppData);
+
+ MpVideoProgressbarUpdateDurationTime("--:--:--");
+
+ return (void *)pProgressbarEdj;
+}
+
+void MpVideoProgressbarDestroy(void)
+{
+ VideoLogInfo("");
+
+ if (pProgressbarEdj) {
+ evas_object_del(pProgressbarEdj);
+ pProgressbarEdj = NULL;
+ }
+
+ if (pProgressbarTimer) {
+ ecore_timer_del(pProgressbarTimer);
+ pProgressbarTimer = NULL;
+ }
+
+ if(pProgressAdjustCheckTimer) {
+ ecore_timer_del(pProgressAdjustCheckTimer);
+ pProgressAdjustCheckTimer = NULL;
+ }
+
+ if(pProgressAdjustRunTimer) {
+ ecore_timer_del(pProgressAdjustRunTimer);
+ pProgressAdjustRunTimer = NULL;
+ }
+
+ bIsEventSkip = FALSE;
+ nDragPosition = 0;
+}
+
+void MpVideoProgressbarCreateTimer(void *pUserData)
+{
+ VideoLogInfo("");
+
+ if (!pUserData) {
+ VideoLogInfo("[ERR]");
+ return;
+ }
+
+ VideoAppData *pAppData = (VideoAppData *)pUserData;
+
+ if (pProgressbarTimer) {
+ ecore_timer_del(pProgressbarTimer);
+ pProgressbarTimer = NULL;
+ }
+
+ if (bIsEventSkip)
+ return;
+
+ double nPlayedRatio = 0.0;
+ char szPlayingTime[PLAY_TIME_LENGTH] = { 0, };
+
+ pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlGetPosition(pAppData);
+
+ nPlayedRatio = ((double)pAppData->nCurPosition / (double)pAppData->nDuration);
+ snprintf(szPlayingTime, PLAY_TIME_LENGTH, "%" PLAY_TIME_FORMAT, PLAY_TIME_ARGS(pAppData->nCurPosition / 1000));
+
+ edje_object_part_drag_value_set(pProgressbarEdj, "progress.playing", nPlayedRatio, 0.0);
+ edje_object_part_text_set(pProgressbarEdj, "progress.txt.played", szPlayingTime);
+
+ pProgressbarTimer = ecore_timer_add(0.3, MpVideoProgressbarTimerCb, (void *)pAppData);
+}
+
+void MpVideoProgressbarDeleteTimer(void)
+{
+ VideoLogInfo("");
+
+ if (pProgressbarTimer) {
+ ecore_timer_del(pProgressbarTimer);
+ pProgressbarTimer = NULL;
+ }
+
+ if(pProgressAdjustCheckTimer) {
+ ecore_timer_del(pProgressAdjustCheckTimer);
+ pProgressAdjustCheckTimer = NULL;
+ }
+
+ if(pProgressAdjustRunTimer) {
+ ecore_timer_del(pProgressAdjustRunTimer);
+ pProgressAdjustRunTimer = NULL;
+ }
+}
+
+void MpVideoProgressbarUpdateDurationTime(char *szDurationTime)
+{
+ VideoLogInfo("");
+
+ if (!szDurationTime) {
+ VideoLogInfo("Fail to ser duration time");
+ return;
+ }
+
+ edje_object_part_text_set(pProgressbarEdj, "progress.txt.total",
+ szDurationTime);
+}
+
+void MpVideoProgressbarBeginOfStream(void *pUserData)
+{
+ VideoLogInfo("");
+
+ if (!pUserData) {
+ VideoLogInfo("[ERR]");
+ return;
+ }
+
+ VideoAppData *pAppData = (VideoAppData *)pUserData;
+
+ MpVideoProgressbarDeleteTimer();
+
+ pAppData->nCurPosition = 0;
+ edje_object_part_drag_value_set(pProgressbarEdj, "progress.playing", 0.0, 0.0);
+ edje_object_part_text_set(pProgressbarEdj, "progress.txt.played", "00:00:00");
+
+ MpVideoProgressbarCreateTimer(pUserData);
+}
+
+void MpVideoProgressbarReset(void *pUserData)
+{
+ VideoLogInfo("");
+
+ if (!pUserData) {
+ VideoLogInfo("[ERR]");
+ return;
+ }
+
+ MpVideoProgressbarDeleteTimer();
+
+ edje_object_part_drag_value_set(pProgressbarEdj, "progress.playing", 0.0, 0.0);
+ edje_object_part_text_set(pProgressbarEdj, "progress.txt.played", "00:00:00");
+}
+