2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.tizenopensource.org/license
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
21 #include "mp-video-log.h"
22 #include "video-player.h"
23 #include "mp-video-value-define.h"
24 #include "mp-video-progressbar.h"
26 static Evas_Object *pProgressbarEdj = NULL;
27 Ecore_Timer *pProgressbarTimer = NULL;
29 static bool bIsEventSkip = FALSE;
30 static bool bIsDrag = FALSE;
31 static int nDragPosition = 0;
33 #define PROGRESS_BAR_TERM 40
38 static Eina_Bool MpVideoProgressbarUpdateValue(void *pUserData)
41 VideoLogInfo("[ERR] No exist userdata.");
45 VideoAppData *pAppData = (VideoAppData *)pUserData;
47 double nPlayedRatio = 0.0;
48 char szPlayingTime[PLAY_TIME_LENGTH] = { 0 };
50 nPlayedRatio = ((double)nDragPosition / (double)pAppData->nDuration);
52 snprintf(szPlayingTime, PLAY_TIME_LENGTH, "%" PLAY_TIME_FORMAT,
53 PLAY_TIME_ARGS(nDragPosition / 1000));
55 edje_object_part_drag_value_set(pProgressbarEdj, "progress.playing",
58 edje_object_part_text_set(pProgressbarEdj, "progress.txt.played",
64 static void MpVideoProgressbarUpdateBufferingValue(void *pUserData)
67 VideoLogInfo("[ERR] No exist userdata.");
71 VideoAppData *pAppData = (VideoAppData *)pUserData;
73 double buffering_ratio = 0.0;
75 VideoAppCtrlCallbackFunc.VideoAppCtrlGetBufferingPosition(pAppData);
77 buffering_ratio = ((double)pAppData->nBufferingPosition / (double)100);
79 edje_object_part_drag_value_set(pProgressbarEdj, "progress.buffering",
80 buffering_ratio, 0.0);
86 static Eina_Bool MpVideoProgressbarTimerCb(void *pUserData)
90 VideoLogInfo("[ERR] No exist userdata.");
94 VideoAppData *pAppData = (VideoAppData *)pUserData;
96 if (pAppData->nDuration < 1) {
97 VideoLogInfo("Try to update duration time.");
98 pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlReqDurationTime(pAppData);
102 if (bIsDrag || bIsEventSkip)
105 double nPlayedRatio = 0.0;
106 char szPlayingTime[PLAY_TIME_LENGTH] = { 0 };
108 pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlGetPosition(pAppData);
110 nPlayedRatio = ((double)pAppData->nCurPosition / (double)pAppData->nDuration);
111 snprintf(szPlayingTime, PLAY_TIME_LENGTH, "%" PLAY_TIME_FORMAT, PLAY_TIME_ARGS(pAppData->nCurPosition / 1000));
113 edje_object_part_drag_value_set(pProgressbarEdj, "progress.playing", nPlayedRatio, 0.0);
114 edje_object_part_text_set(pProgressbarEdj, "progress.txt.played", szPlayingTime);
116 if (pAppData->nCurPlayerType == MP_STREAMING_PLAYER )
117 MpVideoProgressbarUpdateBufferingValue(pUserData);
122 static void MpVideoProgressbarDownCb(void *pUserData, Evas * e,
123 Evas_Object *obj, void *event_info)
128 VideoLogInfo("[ERR]");
133 VideoLogInfo("[ERR]");
140 VideoAppData *pAppData = (VideoAppData *)pUserData;
141 Evas_Event_Mouse_Up *ev = event_info;
142 Evas_Object *progressbar = obj;
143 int w = 0, current = 0;
148 evas_object_geometry_get(progressbar, NULL, NULL, &w, NULL);
149 current = ev->canvas.x - PROGRESS_BAR_TERM;
152 else if (current > w)
155 ratio = (double)current / w;
157 if (pAppData->nCurPlayerState == MP_PLAYER_STATE_PLAY ||
158 pAppData->nCurPlayerState == MP_PLAYER_STATE_RESUME) {
159 pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlPause(pAppData);
160 pAppData->nPrePlayerState = MP_PLAYER_STATE_RESUME;
163 nDragPosition = ratio * pAppData->nDuration;
165 MpVideoProgressbarUpdateValue(pUserData);
169 static void MpVideoProgressbarUpCb(void *pUserData, Evas * e, Evas_Object *obj,
175 VideoLogInfo("[ERR]");
180 VideoLogInfo("[ERR]");
187 VideoAppData *pAppData = (VideoAppData *)pUserData;
188 Evas_Event_Mouse_Up *ev = event_info;
189 Evas_Object *progressbar = obj;
190 int w = 0, current = 0;
193 evas_object_geometry_get(progressbar, NULL, NULL, &w, NULL);
194 current = ev->canvas.x - PROGRESS_BAR_TERM;
197 else if (current > w)
200 ratio = (double)current / w;
202 pAppData->nSetPosition = (int)pAppData->nDuration * ratio;
204 if (pAppData->nSetPosition > pAppData->nDuration)
205 pAppData->nSetPosition = pAppData->nDuration;
207 if (pAppData->nSetPosition < 0)
208 pAppData->nSetPosition = 0;
210 pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlSetPosition(pAppData);
212 if (pAppData->nPrePlayerState == MP_PLAYER_STATE_PLAY ||
213 pAppData->nPrePlayerState == MP_PLAYER_STATE_RESUME) {
214 pAppData->VideoAppCtrlCallbackFunc.VideoAppCtrlResume(pAppData);
215 pAppData->nPrePlayerState = MP_PLAYER_STATE_PAUSE;
221 static void MpVideoProgressbarMoveCb(void *pUserData, Evas * e,
222 Evas_Object *obj, void *event_info)
227 VideoLogInfo("[ERR]");
232 VideoLogInfo("[ERR]");
239 VideoAppData *pAppData = (VideoAppData *)pUserData;
240 Evas_Event_Mouse_Up *ev = event_info;
241 Evas_Object *progressbar = obj;
242 int w = 0, current = 0;
245 evas_object_geometry_get(progressbar, NULL, NULL, &w, NULL);
246 current = ev->canvas.x - PROGRESS_BAR_TERM;
249 else if (current > w)
252 ratio = (double)current / w;
253 nDragPosition = ratio * pAppData->nDuration;
255 MpVideoProgressbarUpdateValue(pUserData);
262 void MpVideoProgressbarSetSkipEvent(bool bSkip)
266 bIsEventSkip = bSkip;
269 void *MpVideoProgressbarGetEdjHandle(void)
273 if (pProgressbarEdj) {
274 return (void *)pProgressbarEdj;
276 VideoLogInfo("Progressbar edj handle is null.");
281 void *MpVideoProgressbarInit(void *pUserData)
286 VideoLogInfo("[ERR]");
290 VideoAppData *pAppData = (VideoAppData *)pUserData;
292 Evas *pMainWindowEvas = evas_object_evas_get(pAppData->pMainWindow);
294 pProgressbarEdj = (Evas_Object *)MpUtilLoadEdjFile(pMainWindowEvas,
295 VIDEO_PLAYER_PROGRESS_EDJ,
298 evas_object_event_callback_add(pProgressbarEdj,
299 EVAS_CALLBACK_MOUSE_DOWN,
300 MpVideoProgressbarDownCb, pAppData);
302 evas_object_event_callback_add(pProgressbarEdj,
303 EVAS_CALLBACK_MOUSE_UP,
304 MpVideoProgressbarUpCb, pAppData);
306 evas_object_event_callback_add(pProgressbarEdj,
307 EVAS_CALLBACK_MOUSE_MOVE,
308 MpVideoProgressbarMoveCb, pAppData);
310 MpVideoProgressbarUpdateDurationTime("--:--:--");
312 return (void *)pProgressbarEdj;
315 void MpVideoProgressbarDestroy(void)
319 if (pProgressbarEdj) {
320 evas_object_del(pProgressbarEdj);
321 pProgressbarEdj = NULL;
324 if (pProgressbarTimer) {
325 ecore_timer_del(pProgressbarTimer);
326 pProgressbarTimer = NULL;
329 bIsEventSkip = FALSE;
334 void MpVideoProgressbarCreateTimer(void *pUserData)
339 VideoLogInfo("[ERR]");
343 VideoAppData *pAppData = (VideoAppData *)pUserData;
345 if (pProgressbarTimer) {
346 ecore_timer_del(pProgressbarTimer);
347 pProgressbarTimer = NULL;
350 pProgressbarTimer = ecore_timer_add(0.3, MpVideoProgressbarTimerCb, (void *)pAppData);
353 void MpVideoProgressbarDeleteTimer(void)
357 if (pProgressbarTimer) {
358 ecore_timer_del(pProgressbarTimer);
359 pProgressbarTimer = NULL;
363 void MpVideoProgressbarUpdateDurationTime(char *szDurationTime)
367 if (!szDurationTime) {
368 VideoLogInfo("Fail to ser duration time");
372 edje_object_part_text_set(pProgressbarEdj, "progress.txt.total",
376 void MpVideoProgressbarBeginOfStream(void *pUserData)
381 VideoLogInfo("[ERR]");
385 VideoAppData *pAppData = (VideoAppData *)pUserData;
387 MpVideoProgressbarDeleteTimer();
389 pAppData->nCurPosition = 0;
390 edje_object_part_drag_value_set(pProgressbarEdj, "progress.playing", 0.0, 0.0);
391 edje_object_part_text_set(pProgressbarEdj, "progress.txt.played", "00:00:00");
393 MpVideoProgressbarCreateTimer(pUserData);
396 void MpVideoProgressbarReset(void *pUserData)
401 VideoLogInfo("[ERR]");
405 MpVideoProgressbarDeleteTimer();
407 edje_object_part_drag_value_set(pProgressbarEdj, "progress.playing", 0.0, 0.0);
408 edje_object_part_text_set(pProgressbarEdj, "progress.txt.played", "00:00:00");