Evas_Object *base;
Evas_Object *slider;
Ecore_Timer *timer;
+ Ecore_Timer *seek;
CPlayer *player;
+ int pos;
+ bool seeking;
};
static void _get_timestr(char *str, int size, unsigned int ms)
sec / 3600, (sec % 3600) / 60, sec % 60);
}
-void CVideoSlider::sm_SeekCb(void *dt)
+Eina_Bool CVideoSlider::sm_CbSeekSet(void *dt)
+{
+ SSliderData *data;
+
+ if (!dt)
+ return ECORE_CALLBACK_CANCEL;
+
+ data = (SSliderData *)dt;
+
+ data->player->SetPosition(data->pos, sm_CbSeekComplete, data);
+ data->pos = -1;
+ data->seek = NULL;
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+void CVideoSlider::sm_CbSeekComplete(void *dt)
{
SSliderData *data;
char str[32];
data = (SSliderData *)dt;
+ if (data->pos != -1) {
+ if (!data->seek) {
+ data->seek = ecore_timer_add(TIME_INTERVAL,
+ sm_CbSeekSet, data);
+ }
+ return;
+ }
+
r = data->player->GetPosition(&pos);
if (!r) {
_ERR("Get Position Failed");
action = ACTION_RESUME;
CViewMgr::GetInstance()->UpdateView(VIEW_ID_PLAYER, (void *)&action);
+
+ data->pos = -1;
+ data->seeking = false;
}
Eina_Bool CVideoSlider::sm_CbTimer(void *dt)
char str[32];
+ ecore_timer_del(m->seek);
ecore_timer_del(m->timer);
m->timer = ecore_timer_add(TIME_INTERVAL, sm_CbTimer, m);
m->base = base;
m->slider = slider;
m->player = player;
+ m->timer = NULL;
+ m->pos = -1;
+ m->seeking = false;
+ m->seek = NULL;
return true;
}
ASSERT(m);
ecore_timer_del(m->timer);
+ ecore_timer_del(m->seek);
delete m;
m = NULL;
int v;
v = elm_slider_value_get(obj);
- m->player->SetPosition(v, sm_SeekCb, m);
+
+ if (m->seeking) {
+ m->pos = v;
+ } else {
+ m->player->SetPosition(v, sm_CbSeekComplete, m);
+ m->seeking = true;
+ }
}
void CVideoSlider::OnKeyDown(int id, Evas *e, Evas_Object *obj,