/*
- * Copyright 2012 Samsung Electronics Co., Ltd
+ * Copyright (c) [2012] Samsung Electronics Co., Ltd.
*
- * Licensed under the Flora License, Version 1.0 (the "License");
+ * 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://www.tizenopensource.org/license
- *
+ *
+ * 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,
+ * 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;
-Ecore_Timer *pProgressbarTimer = 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;
-#define PROGRESS_BAR_TERM 40
+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)
{
- if (!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 };
+ char szPlayingTime[PLAY_TIME_LENGTH] = { 0, };
nPlayedRatio = ((double)nDragPosition / (double)pAppData->nDuration);
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)
{
- if (!pUserData) {
+ //VideoLogInfo("");
+
+ if (!pUserData) {
VideoLogInfo("[ERR] No exist userdata.");
return;
}
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);
}
*/
static Eina_Bool MpVideoProgressbarTimerCb(void *pUserData)
{
+ /* VideoLogInfo(""); */
if (!pUserData) {
VideoLogInfo("[ERR] No exist userdata.");
return EINA_TRUE;
}
- if (bIsDrag || bIsEventSkip)
+ if (bIsEventSkip || bIsDrag)
return EINA_TRUE;
double nPlayedRatio = 0.0;
- char szPlayingTime[PLAY_TIME_LENGTH] = { 0 };
+ char szPlayingTime[PLAY_TIME_LENGTH] = { 0, };
pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlGetPosition(pAppData);
edje_object_part_drag_value_set(pProgressbarEdj, "progress.playing", nPlayedRatio, 0.0);
edje_object_part_text_set(pProgressbarEdj, "progress.txt.played", szPlayingTime);
- if (pAppData->nCurPlayerType == MP_STREAMING_PLAYER )
+ 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)
{
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;
- bIsDrag = TRUE;
+ 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 - PROGRESS_BAR_TERM;
+ 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)
ratio = (double)current / w;
- if (pAppData->nCurPlayerState == MP_PLAYER_STATE_PLAY ||
- pAppData->nCurPlayerState == MP_PLAYER_STATE_RESUME) {
- pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlPause(pAppData);
- pAppData->nPrePlayerState = MP_PLAYER_STATE_RESUME;
- }
-
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);
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 - PROGRESS_BAR_TERM;
+ current = ev->canvas.x - term;
+ w = w - w_term;
+
if (current < 0)
current = 0;
else if (current > w)
if (pAppData->nSetPosition < 0)
pAppData->nSetPosition = 0;
- pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlSetPosition(pAppData);
+ pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlGetPosition(pAppData);
- if (pAppData->nPrePlayerState == MP_PLAYER_STATE_PLAY ||
- pAppData->nPrePlayerState == MP_PLAYER_STATE_RESUME) {
- pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlResume(pAppData);
- pAppData->nPrePlayerState = MP_PLAYER_STATE_PAUSE;
+ 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);
- bIsDrag = FALSE;
-}
+ 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("");
+// VideoLogInfo("");
if (!pUserData) {
VideoLogInfo("[ERR]");
return;
}
- if (bIsEventSkip)
+ if (bIsEventSkip || bIsDrag == FALSE)
return;
VideoAppData *pAppData = (VideoAppData *)pUserData;
int w = 0, current = 0;
double ratio = 0.0;
- evas_object_geometry_get(progressbar, NULL, NULL, &w, NULL);
- current = ev->canvas.x - PROGRESS_BAR_TERM;
- if (current < 0)
- current = 0;
- else if (current > w)
- current = w;
+ int term = 0;
+ int w_term = 0;
+ int width = 0;
+ int height = 0;
- ratio = (double)current / w;
- nDragPosition = ratio * pAppData->nDuration;
+ 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;
- MpVideoProgressbarUpdateValue(pUserData);
+ 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);
+ }
}
/*
*/
void MpVideoProgressbarSetSkipEvent(bool bSkip)
{
- VideoLogInfo("");
+// VideoLogInfo("");
bIsEventSkip = bSkip;
}
pProgressbarTimer = NULL;
}
+ if(pProgressAdjustCheckTimer) {
+ ecore_timer_del(pProgressAdjustCheckTimer);
+ pProgressAdjustCheckTimer = NULL;
+ }
+
+ if(pProgressAdjustRunTimer) {
+ ecore_timer_del(pProgressAdjustRunTimer);
+ pProgressAdjustRunTimer = NULL;
+ }
+
bIsEventSkip = FALSE;
- bIsDrag = FALSE;
nDragPosition = 0;
}
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);
}
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)