c_c wrote:
> 3. Seek. Dont know how to use the slider for seeking. Any Ideas?
The attached patch (intone-seek-fix.patch) does the work.
However I've done another one (intone-seek-fix.patch) that reads
continuously (every 0.5 sec) the real position from mplayer and also if
it uses more CPU (I figure, not tested in my FR) it could be better.
However I've not finished that and it requires a fix (since it actually
makes intone hang as soon as the song reaches its end) too.
By the way actually the slider shows the position in seconds; why not
using the percentage value?
--
Treviño's World - Life and Linux
http://www.3v1n0.net/
Index: src/gui.c
===================================================================
--- src/gui.c (revisione 2)
+++ src/gui.c (copia locale)
@@ -211,6 +211,12 @@
}
void
+pos_change_start(void *data, Evas_Object *obj, void *event_info)
+{
+ ecore_timer_freeze(timer1);
+}
+
+void
pos_changed(void *data, Evas_Object *obj, void *event_info)
{
double val;
@@ -218,8 +224,10 @@
char pos[15];
val = elm_slider_value_get(obj);
- sprintf(pos, "seek %d\n", (int)val);
+ pos_time = (int)val;
+ sprintf(pos, "seek %d 2\n", pos_time);
ret = write(fd, pos, strlen(pos));
+ ecore_timer_thaw(timer1);
}
static int
@@ -897,7 +905,8 @@
evas_object_size_hint_align_set(pos_slider, -1.0, 0.0);
elm_box_pack_end(vbox, pos_slider);
evas_object_show(pos_slider);
- //evas_object_smart_callback_add(pos_slider, "delay,changed", pos_changed, NULL);
+ evas_object_smart_callback_add(pos_slider, "changed", pos_change_start, NULL);
+ evas_object_smart_callback_add(pos_slider, "delay,changed", pos_changed, NULL);
//add hbox to vbox at pos 4
hbox = elm_box_add(win);
Index: src/gui.c
===================================================================
--- src/gui.c (revisione 2)
+++ src/gui.c (copia locale)
@@ -39,12 +39,33 @@
int timer_func(void *data)
{
- //set position data
- pos_time ++;
- if(pos_time > song_dur) {
+ char cmd[255], *tok;
+ int ret;
+ ssize_t read;
+ size_t len = 0;
+ char *dur = "";
+
+ if(pos_time >= song_dur) {
//song over - start next song
next_button_clicked (NULL, NULL, NULL);
+ return 1;
}
+
+ //get time position
+ sprintf(cmd, "get_time_pos\n");
+ ret = write(fd, cmd, strlen(cmd));
+ //read data from mplayer output
+ while(strncmp(dur, "ANS_TIME_POSITION", 17) != 0) {
+ read = getline(&dur, &len, mp_data);
+ }
+
+ strcat(dur, "=");
+ tok = strtok(dur, "=");
+ tok = strtok(NULL, "=");
+
+ //set position data
+ pos_time = atoi(tok);
+
elm_slider_value_set(pos_slider, (double)pos_time);
return 1;
}
@@ -69,7 +90,7 @@
ret = write(fd, cmd, strlen(cmd));
//set timer
pos_time = 0;
- timer1 = ecore_timer_add(1.0, timer_func, NULL);
+ timer1 = ecore_timer_add(0.5, timer_func, NULL);
//set play state
play_state = PLAYING;
set_duration ();
@@ -126,7 +147,7 @@
ret = write(fd, cmd, strlen(cmd));
//set timer
pos_time = 0;
- timer1 = ecore_timer_add(1.0, timer_func, NULL);
+ timer1 = ecore_timer_add(0.5, timer_func, NULL);
set_duration();
play_state = PLAYING;
}
@@ -156,7 +177,7 @@
ret = write(fd, cmd, strlen(cmd));
//set timer
pos_time = 0;
- timer1 = ecore_timer_add(1.0, timer_func, NULL);
+ timer1 = ecore_timer_add(0.5, timer_func, NULL);
set_duration ();
play_state = PLAYING;
}
@@ -188,7 +209,7 @@
ret = write(fd, cmd, strlen(cmd));
//set timer
pos_time = 0;
- timer1 = ecore_timer_add(1.0, timer_func, NULL);
+ timer1 = ecore_timer_add(0.5, timer_func, NULL);
//set play state
play_state = PLAYING;
set_duration ();
@@ -211,6 +232,12 @@
}
void
+pos_changed_start(void *data, Evas_Object *obj, void *event_info)
+{
+ ecore_timer_freeze(timer1);
+}
+
+void
pos_changed(void *data, Evas_Object *obj, void *event_info)
{
double val;
@@ -218,8 +245,10 @@
char pos[15];
val = elm_slider_value_get(obj);
- sprintf(pos, "seek %d\n", (int)val);
+ pos_time = (int)val;
+ sprintf(pos, "seek %d 2\n", pos_time);
ret = write(fd, pos, strlen(pos));
+ ecore_timer_thaw(timer1);
}
static int
@@ -897,7 +926,8 @@
evas_object_size_hint_align_set(pos_slider, -1.0, 0.0);
elm_box_pack_end(vbox, pos_slider);
evas_object_show(pos_slider);
- //evas_object_smart_callback_add(pos_slider, "delay,changed", pos_changed, NULL);
+ evas_object_smart_callback_add(pos_slider, "changed", pos_changed_start, NULL);
+ evas_object_smart_callback_add(pos_slider, "delay,changed", pos_changed, NULL);
//add hbox to vbox at pos 4
hbox = elm_box_add(win);
_______________________________________________
Openmoko community mailing list
[email protected]
http://lists.openmoko.org/mailman/listinfo/community