Enlightenment CVS committal

Author  : tsauerbeck
Project : misc
Module  : eplayer

Dir     : misc/eplayer/src


Modified Files:
        callbacks.c callbacks.h eplayer.c eplayer.h interface.c 
        interface.h mixer.c mixer.h playlist.c vorbis.c vorbis.h 


Log Message:
Cleaned up mixer code, the mixer is periodically read now to reflect changes made by 
other apps, the time part is updated in a sane period now, libao calls have been 
tidied up. theme changes: buttons emit their signals on mouse_up now (used to be 
mouse_down)
===================================================================
RCS file: /cvsroot/enlightenment/misc/eplayer/src/callbacks.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- callbacks.c 16 Oct 2003 14:54:33 -0000      1.3
+++ callbacks.c 17 Oct 2003 17:00:27 -0000      1.4
@@ -1,52 +1,47 @@
+#include <config.h>
 #include <Edje.h>
 #include "eplayer.h"
 #include "mixer.h"
 #include "vorbis.h"
+#include "interface.h"
 
-static int paused = 1;
-
-void unpause_playback(ePlayer *data, Evas *e, Evas_Object *obj, void *event_info) {
-       /* This ensures we don't call this callback multiple times */
-       if (!paused)
-               return;
+static int paused = 0;
 
+void cb_play(ePlayer *player, Evas *e, Evas_Object *obj,
+             void *event_info) {
 #ifdef DEBUG
-       printf("Unpause callback entered\n");
+       printf("Play callback entered\n");
 #endif
-       
-       paused = 0;
 
-       data->play_idler = ecore_idler_add(play_loop, data); /* Start the play idler */
+       if (!paused) /* restart from beginning */
+               eplayer_playback_start(player, 1);
+       else { /* continue playback */
+               eplayer_playback_start(player, 0);
+               paused = 0;
+       }
 }
 
-void pause_playback(ePlayer *player, Evas *e, Evas_Object *obj,
-                    void *event_info) {
-       if (paused)
-               return;
-       
+void cb_pause(ePlayer *player, Evas *e, Evas_Object *obj,
+              void *event_info) {
 #ifdef DEBUG
        printf("Pause callback entered\n");
 #endif
        
-       paused = 1;
+       if (paused)
+               eplayer_playback_start(player, 0);
+       else
+               eplayer_playback_stop(player, 0);
 
-       /* Stop the current playing stream */
-       if (player->play_idler) {
-               ecore_idler_del(player->play_idler);
-               player->play_idler = NULL;
-       }
+       paused = !paused;
 }
 
-void next_file(ePlayer *player, Evas *e, Evas_Object *obj, void *event_info) {
+void cb_track_next(ePlayer *player, Evas *e, Evas_Object *obj,
+                   void *event_info) {
 #ifdef DEBUG
        printf("DEBUG: Next File Called\n");
 #endif
-       
-       /* Stop the current playing stream */
-       if (player->play_idler) {
-               ecore_idler_del(player->play_idler);
-               player->play_idler = NULL;
-       }
+
+       eplayer_playback_stop(player, 0);
 
        /* Get the next list item */
        player->playlist->cur_item = player->playlist->cur_item->next;
@@ -68,21 +63,16 @@
        } 
        
        /* Start the play loop */
-       open_track(player);
-    player->play_idler = ecore_idler_add(play_loop, player);
+       eplayer_playback_start(player, 1);
 }
 
-void prev_file(ePlayer *player, Evas *e, Evas_Object *obj,
-               void *event_info) {
+void cb_track_prev(ePlayer *player, Evas *e, Evas_Object *obj,
+                   void *event_info) {
 #ifdef DEBUG
        printf("DEBUG: Previous File Called\n");
 #endif
 
-       if (player->play_idler) {
-               /* Stop the current playing stream */
-               ecore_idler_del(player->play_idler);
-               player->play_idler = NULL;
-       }
+       eplayer_playback_stop(player, 0);
 
        /* Get the previous list item */
        if (!player->playlist->cur_item->prev)
@@ -91,38 +81,31 @@
        player->playlist->cur_item = player->playlist->cur_item->prev;
 
        /* Start the play loop */
-       open_track (player);
-       player->play_idler = ecore_idler_add(play_loop, player);
+       eplayer_playback_start(player, 1);
 }
 
-void raise_vol(ePlayer *player, Evas_Object *obj, const char *emission,
-               const char *src) {
-       int vol;
-
+void cb_volume_raise(ePlayer *player, Evas_Object *obj,
+                     const char *emission, const char *src) {
 #ifdef DEBUG
        printf("DEBUG: Raising volume\n");
 #endif
 
-       vol = read_mixer(player);
-       set_mixer(vol + 1);
-       read_mixer(player);
+       mixer_change(player->mixer, 5);
+       refresh_volume(player, 0);
 }
 
-void lower_vol(ePlayer *player, Evas_Object *obj, const char *emission,
-               const char *src) {
-       int vol;
-
+void cb_volume_lower(ePlayer *player, Evas_Object *obj,
+                     const char *emission, const char *src) {
 #ifdef DEBUG
        printf("DEBUG: Lowering volume\n");
 #endif
        
-       vol = read_mixer(player);
-       set_mixer(vol - 1);
-       read_mixer(player);
+       mixer_change(player->mixer, -5);
+       refresh_volume(player, 0);
 }
 
-void switch_time_display(ePlayer *player, Evas_Object *obj,
-                         const char *emission, const char *src) {
+void cb_time_display_toggle(ePlayer *player, Evas_Object *obj,
+                            const char *emission, const char *src) {
        player->time_display = !player->time_display;
        update_time(player);
 }
===================================================================
RCS file: /cvsroot/enlightenment/misc/eplayer/src/callbacks.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- callbacks.h 16 Oct 2003 14:54:33 -0000      1.1
+++ callbacks.h 17 Oct 2003 17:00:28 -0000      1.2
@@ -3,23 +3,23 @@
 
 #include <Evas.h>
 
-void unpause_playback(void *udata, Evas_Object *obj,
-                      const char *emission, const char *src);
-void pause_playback(void *udata, Evas_Object *obj,
-                    const char *emission, const char *src);
+void cb_play(void *udata, Evas_Object *obj,
+             const char *emission, const char *src);
+void cb_pause(void *udata, Evas_Object *obj,
+              const char *emission, const char *src);
 
-void next_file(void *udata, Evas_Object *obj,
-               const char *emission, const char *src);
-void prev_file(void *udata, Evas_Object *obj,
-               const char *emission, const char *src);
+void cb_track_next(void *udata, Evas_Object *obj,
+                   const char *emission, const char *src);
+void cb_track_prev(void *udata, Evas_Object *obj,
+                   const char *emission, const char *src);
 
-void switch_time_display(void *udata, Evas_Object *obj,
-                         const char *emission, const char *src);
+void cb_time_display_toggle(void *udata, Evas_Object *obj,
+                            const char *emission, const char *src);
 
-void raise_vol(void *udata, Evas_Object *obj, const char *emission,
-               const char *src);
-void lower_vol(void *udata, Evas_Object *obj, const char *emission,
-               const char *src);
+void cb_volume_raise(void *udata, Evas_Object *obj,
+                     const char *emission, const char *src);
+void cb_volume_lower(void *udata, Evas_Object *obj,
+                     const char *emission, const char *src);
 
 #endif
 
===================================================================
RCS file: /cvsroot/enlightenment/misc/eplayer/src/eplayer.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- eplayer.c   16 Oct 2003 14:54:33 -0000      1.5
+++ eplayer.c   17 Oct 2003 17:00:28 -0000      1.6
@@ -1,25 +1,114 @@
 /* Eplayer OggVorbis Player - Phase 3 - Started 5/6/03 */
 /* Edje Overhaul startnig phase 4 - Started 7/30/03 */
 
+#include <config.h>
 #include <Ecore_Evas.h>
 #include "eplayer.h"
 #include "interface.h"
 #include "vorbis.h"
 
+static ePlayer *eplayer_new() {
+       ePlayer *player;
+       ao_info *driver_info;
+
+       if (!(player = malloc(sizeof(ePlayer))))
+               return NULL;
+
+       memset(player, 0, sizeof(ePlayer));
+
+       player->playlist = playlist_new();
+
+       /* FIXME: the user should be able to choose which control
+        * will be used
+        */
+       player->mixer = mixer_new(MIXER_CONTROL_VOL);
+
+       ao_initialize();
+       driver_info = ao_driver_info(ao_default_driver_id());
+
+#ifdef DEBUG
+       printf("AO DEBUG: Audio Device: %s\n", driver_info->name);
+#endif
+
+       return player;
+}
+
+static void eplayer_free(ePlayer *player) {
+       if (!player)
+               return;
+
+       playlist_free(player->playlist);
+       mixer_free(player->mixer);
+       ao_shutdown();
+       
+       free(player);
+}
+
+/**
+ * Stops playback.
+ *
+ * @param player
+ * @param rewind_track
+ */
+void eplayer_playback_stop(ePlayer *player, int rewind_track) {
+       if (!player)
+               return;
+
+       /* stop the playloop */
+       if (player->play_idler) {
+               ecore_idler_del(player->play_idler);
+               player->play_idler = NULL;
+       }
+
+       /* stop the timer that updates the time part */
+       if (player->time_timer) {
+               ecore_timer_del(player->time_timer);
+               player->time_timer = NULL;
+       }
+
+       if (rewind_track) {
+               track_close(player);
+               track_open(player);
+       }
+}
+
+/**
+ * Starts playback.
+ *
+ * @param player
+ * @param rewind_track
+ */
+void eplayer_playback_start(ePlayer *player, int rewind_track) {
+       if (rewind_track) {
+               track_close(player);
+               track_open(player);
+       }
+
+       /* start the playloop */
+       player->play_idler = ecore_idler_add(track_play_chunk, player);
+       player->time_timer = ecore_timer_add(0.5, update_time, player);
+}
+
+static int read_mixer(void *udata) {
+       refresh_volume(udata, 1);
+
+       return 1;
+}
+
 int main(int argc, const char **argv) {
        ePlayer *player;
        int args;
 
-       player = malloc(sizeof(ePlayer)); 
-       memset(player, 0, sizeof(ePlayer)); 
+       if (!(player = eplayer_new())) {
+               fprintf(stderr, "Out of memory!\n");
+               return 1;
+       }
 
        if (argc == 1) {
                printf("eVorbisPlayer v0.7  - Usage: %s playlist.m3u [file.ogg] 
[some/dir] ...\n\n", argv[0]);
                return 1;
        }
        
-       player->playlist = playlist_new();
-
        /* Parse Args */
        for (args = 1; args < argc; args++) {
 #ifdef DEBUG
@@ -32,9 +121,11 @@
        setup_ecore(player);
        show_playlist(player);
 
-       /*ecore_timer_add (1.5, mixer_refresh, st_session);*/
+       read_mixer(player);
+       ecore_timer_add(1.5, read_mixer, player);
 
-       open_track (player);
+       track_open(player);
+       refresh_time(player, 0);
 
 #ifdef DEBUG
        printf("DEBUG: Starting main loop\n");
@@ -42,8 +133,7 @@
 
        ecore_main_loop_begin();
 
-       playlist_free(player->playlist);
-       free(player);
+       eplayer_free(player);
 
        ecore_evas_shutdown();
        ecore_shutdown();
===================================================================
RCS file: /cvsroot/enlightenment/misc/eplayer/src/eplayer.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- eplayer.h   16 Oct 2003 14:54:33 -0000      1.3
+++ eplayer.h   17 Oct 2003 17:00:29 -0000      1.4
@@ -2,20 +2,21 @@
 #define __EPLAYER_H
 
 #include <Ecore.h>
-#include <config.h>
+#include <vorbis/vorbisfile.h>
+#include <ao/ao.h>
 #include "playlist.h"
-
-#define        WIDTH   500
-#define        HEIGHT  500
+#include "mixer.h"
 
 typedef enum {
-       TIME_DISPLAY_LEFT,
-       TIME_DISPLAY_ELAPSED
+       TIME_DISPLAY_ELAPSED,
+       TIME_DISPLAY_LEFT
 } TimeDisplay;
 
 typedef struct {
        PlayList *playlist;
+       Mixer *mixer;
        Ecore_Idler *play_idler;
+       Ecore_Timer *time_timer;
        
        struct {
                Evas *evas;
@@ -24,7 +25,13 @@
        } gui;
 
        TimeDisplay time_display;
+
+       OggVorbis_File current_track;
+       ao_device *ao_dev;
 } ePlayer;
+
+void eplayer_playback_stop(ePlayer *player, int rewind_track);
+void eplayer_playback_start(ePlayer *player, int rewind_track);
 
 #endif
 
===================================================================
RCS file: /cvsroot/enlightenment/misc/eplayer/src/interface.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- interface.c 16 Oct 2003 17:25:40 -0000      1.4
+++ interface.c 17 Oct 2003 17:00:29 -0000      1.5
@@ -1,3 +1,4 @@
+#include <config.h>
 #include "eplayer.h"
 #include <Ecore_Evas.h>
 #include <Esmart/container.h>
@@ -6,7 +7,9 @@
 #include "mixer.h"
 #include "vorbis.h"
 
-/* ECORE/EVAS */
+#define        WIDTH 500
+#define        HEIGHT 500
+
 static Ecore_Evas *ee = NULL;
 
 static int app_signal_exit(void *data, int type, void *event) {
@@ -76,34 +79,31 @@
        /*** Edje Callbacks ***************************/
        edje_object_signal_callback_add(player->gui.edje,
                                        "PLAY_PREVIOUS", "previous_button",
-                                       prev_file, player);
+                                       cb_track_prev, player);
        edje_object_signal_callback_add(player->gui.edje,
                                        "PLAY_NEXT", "next_button",
-                                       next_file, player);
+                                       cb_track_next, player);
        edje_object_signal_callback_add(player->gui.edje,
                                        "SEEK_BACK", "seekback_button",
-                                       seek_backward, player);
+                                       cb_seek_backward, player);
        edje_object_signal_callback_add(player->gui.edje,
                                        "SEEK_FORWARD", "seekforward_button",
-                                       seek_forward, player);
+                                       cb_seek_forward, player);
        edje_object_signal_callback_add(player->gui.edje,
                                        "PLAY", "play_button",
-                                       unpause_playback, player);
+                                       cb_play, player);
        edje_object_signal_callback_add(player->gui.edje,
                                        "PAUSE", "pause_button",
-                                       pause_playback, player);
+                                       cb_pause, player);
        edje_object_signal_callback_add(player->gui.edje,
                                        "VOL_INCR", "vol_incr_button",
-                                       raise_vol, player);
+                                       cb_volume_raise, player);
        edje_object_signal_callback_add(player->gui.edje,
                                        "VOL_DECR", "vol_decr_button",
-                                       lower_vol, player);
+                                       cb_volume_lower, player);
        edje_object_signal_callback_add(player->gui.edje,
                                        "SWITCH_TIME_DISPLAY", "time_text",
-                                       switch_time_display, player);
-
-       /* Update interface with current PCM Volume Setting */
-       read_mixer(player);     
+                                       cb_time_display_toggle, player);
 }
 
 static Evas_Object *playlist_column_add(ePlayer *player,
@@ -163,3 +163,27 @@
        }
 }
 
+void refresh_volume(ePlayer *player, int read) {
+       char buf[8];
+
+       if (read)
+               mixer_read(player->mixer);
+       
+       snprintf(buf, sizeof(buf), "%i", player->mixer->volume);
+       edje_object_part_text_set(player->gui.edje, "vol_display_text", buf);
+}
+
+int refresh_time(ePlayer *player, int time) {
+       char buf[9], *fmt[2];
+       
+       fmt[TIME_DISPLAY_ELAPSED] = "%i:%02i";
+       fmt[TIME_DISPLAY_LEFT] = "-%i:%02i";
+
+       snprintf(buf, sizeof(buf), fmt[player->time_display],
+                (time / 60), (time % 60));
+       
+       edje_object_part_text_set(player->gui.edje, "time_text", buf);
+       evas_render(player->gui.evas);
+
+       return 1;
+}
===================================================================
RCS file: /cvsroot/enlightenment/misc/eplayer/src/interface.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- interface.h 16 Oct 2003 14:54:33 -0000      1.1
+++ interface.h 17 Oct 2003 17:00:29 -0000      1.2
@@ -6,5 +6,8 @@
 void show_playlist(ePlayer *player);
 void setup_ecore(ePlayer *player);
 
+void refresh_volume(ePlayer *player, int read);
+int refresh_time(ePlayer *player, int time);
+
 #endif
 
===================================================================
RCS file: /cvsroot/enlightenment/misc/eplayer/src/mixer.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- mixer.c     16 Oct 2003 14:54:33 -0000      1.1
+++ mixer.c     17 Oct 2003 17:00:30 -0000      1.2
@@ -1,110 +1,101 @@
-#include <Edje.h>
+#include <config.h>
 #include <sys/ioctl.h>
 #include <fcntl.h>
-#include <linux/soundcard.h>
-#include "eplayer.h"
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include "mixer.h"
 
-/************ STOLEN FROM MOC (Music on CLI) *********************/
-/* Get PCM volume, return -1 on error */
-int read_mixer (ePlayer *player) {
-       int vol;
-       int mixer_fd;
-
-#ifdef DEBUG
-       printf("DEBUG: Reading mixer\n");
-#endif
-
-       mixer_fd = open ("/dev/mixer", O_RDWR);
-
-        if (mixer_fd == -1) {
-                open ("/dev/mixer0", O_RDWR);
-        }
-        if (mixer_fd == -1) {
-                printf("MIXER: Can't open mixer device\n");
-               return 0;
-        }
+Mixer *mixer_new(MixerControl ctrl) {
+       Mixer *mixer;
 
-        if (mixer_fd != -1) {
-                if (ioctl(mixer_fd, MIXER_READ(SOUND_MIXER_PCM), &vol) == -1) {
-#ifdef DEBUG
-                        printf("MIXER: Can't read from mixer\n");
-#endif
-                               } else {
-                       int return_val;
-                        /* Average between left and right */
-                        return_val =  ((vol & 0xFF) + ((vol >> 8) & 0xFF)) / 2;
-#ifdef DEBUG
-                       printf("MIXER: Returning value: %d\n", return_val);
-#endif
-                       close(mixer_fd);
-       
+       if (!(mixer = malloc(sizeof(Mixer))))
+               return NULL;
 
-       /* Update the display with the volume level */
-       {
+       mixer->control = ctrl;
+       mixer->volume = 0;
 
-                char vol_str[3];
+       return mixer;
+}
 
-                sprintf(vol_str, "%d", (int)return_val);
+void mixer_free(Mixer *mixer) {
+       if (!mixer)
+               return;
+
+       free(mixer);
+}
+
+static int open_mixer(Mixer *mixer, int rw) {
+       int fd, flags = rw ? O_RDWR : O_RDONLY;
+       
+       if (!mixer)
+               return -1;
+       
+       if ((fd = open("/dev/mixer", flags)) != -1)
+               return fd;
+       else
+               return open("/dev/mixer0", flags);
+}
 
-#ifdef DEBUG
-                printf("DEBUG: Setting the mixer vol: %s\n", vol_str);
-#endif
+/**
+ * Reads a Mixer.
+ *
+ * @param mixer The Mixer to read
+ * @return The volume the mixer is set to.
+ */
+int mixer_read(Mixer *mixer) {
+       int vol = 0, fd;
+
+       if ((fd = open_mixer(mixer, 0)) == -1) {
+               fprintf(stderr, "MIXER: Can't open mixer device\n");
+               return -1;
+       }
 
-                edje_object_part_text_set(player->gui.edje, "vol_display_text", 
vol_str);
+       if (ioctl(fd, MIXER_READ(mixer->control), &vol) == -1) {
+               fprintf(stderr, "MIXER: Can't read from mixer\n");
+               close(fd);
+               return -1;
        }
-/*
 
-               if(player->edje) {
-                       if(return_val > 99) 
-                               return_val == 99;
-                       if(return_val < 1) 
-                               edje_object_part_text_set(player->edje, 
"vol_display_text", "--");
-                       if(return_val < 10) 
-                               sprintf(return_val, "0%s", (int)return_val);
-
-                       edje_object_part_text_set(player->edje, "vol_display_text", 
return_val);
-               }
-*/
-                       return return_val;
-                }
-        }
+       close(fd);
 
-        return -1;
+       /* Average between left and right */
+       return (mixer->volume = ((vol & 0xFF) + ((vol >> 8) & 0xFF)) / 2);
 }
 
-/* Set PCM volume */
-void set_mixer(int vol) {
+/**
+ * Changes the volume of a Mixer.
+ *
+ * @param mixer The Mixer to set
+ * @param vol The value to add to the current volume.
+ * @return Boolean success or failure.
+ */
+int mixer_change(Mixer *mixer, int diff) {
+       int fd, ret;
+
+       if ((fd = open_mixer(mixer, 1)) == -1) {
+               fprintf(stderr, "MIXER: Can't open mixer device\n");
+               return 0;
+       }
+
+       diff += mixer->volume;
 
-        int mixer_fd;
+       /* vol is > 0 and < 100 */
+       if (diff > 100)
+               diff = 100;
+       else if (diff < 0)
+               diff = 0;
+
+       /* save the new value */
+       mixer->volume = diff;
+
+       diff = diff | (diff << 8);
+       
+       if ((ret = ioctl(fd, MIXER_WRITE(mixer->control), &diff)) == 1)
+               fprintf(stderr, "MIXER: Can't set mixer\n");
+       
+       close(fd);
 
-#ifdef DEBUG
-        printf("DEBUG: Setting mixer\n");
-#endif
-
-        mixer_fd = open ("/dev/mixer", O_RDWR);
-
-        if (mixer_fd == -1) 
-                mixer_fd = open ("/dev/mixer0", O_RDWR);
-
-        if (mixer_fd == -1) {
-                printf("MIXER: Can't open mixer device\n");
-                return;
-        }
-
-
-        if (mixer_fd != -1) {
-                if (vol > 100)
-                        vol = 100;
-                else if (vol < 0)
-                        vol = 0;
-
-                vol = vol | (vol << 8);
-                if (ioctl(mixer_fd, MIXER_WRITE(SOUND_MIXER_PCM), &vol) == -1) {
-#ifdef DEBUG
-                        printf("DEBUG: Can't set mixer\n");
-#endif
-                               }
-        }
-       close(mixer_fd);
+       return (ret != -1);
 }
 
===================================================================
RCS file: /cvsroot/enlightenment/misc/eplayer/src/mixer.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- mixer.h     16 Oct 2003 14:54:33 -0000      1.1
+++ mixer.h     17 Oct 2003 17:00:30 -0000      1.2
@@ -1,10 +1,23 @@
 #ifndef __MIXER_H
 #define __MIXER_H
 
-#include "eplayer.h"
+#include <linux/soundcard.h>
 
-void set_mixer(int vol);
-int read_mixer(ePlayer *player);
+typedef enum {
+       MIXER_CONTROL_VOL = SOUND_MIXER_VOLUME,
+       MIXER_CONTROL_PCM = SOUND_MIXER_PCM 
+} MixerControl;
+
+typedef struct {
+       MixerControl control;
+       int volume;
+} Mixer;
+
+Mixer *mixer_new(MixerControl ctrl);
+void mixer_free(Mixer *mixer);
+
+int mixer_read(Mixer *mixer);
+int mixer_change(Mixer *mixer, int diff);
 
 #endif
 
===================================================================
RCS file: /cvsroot/enlightenment/misc/eplayer/src/playlist.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- playlist.c  16 Oct 2003 18:06:28 -0000      1.3
+++ playlist.c  17 Oct 2003 17:00:30 -0000      1.4
@@ -1,3 +1,4 @@
+#include <config.h>
 #include <vorbis/vorbisfile.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -8,7 +9,6 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <unistd.h>
-#include <config.h>
 #include "playlist.h"
 
 static int is_dir (const char *dir) {
===================================================================
RCS file: /cvsroot/enlightenment/misc/eplayer/src/vorbis.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -3 -r1.6 -r1.7
--- vorbis.c    16 Oct 2003 20:16:56 -0000      1.6
+++ vorbis.c    17 Oct 2003 17:00:30 -0000      1.7
@@ -1,18 +1,18 @@
+#include <config.h>
 #include <Edje.h>
 #include <vorbis/codec.h>
-#include <vorbis/vorbisfile.h>
-#include <ao/ao.h>
 #include <sys/ioctl.h>
 #include <assert.h>
 #include "eplayer.h"
 #include "vorbis.h"
+#include "interface.h"
 
-ao_device *device = NULL;
-ao_sample_format format = {0};
-OggVorbis_File current_track = {0};
-
-/* Main Play Loop */
-int play_loop(void *udata) {
+/**
+ * Plays a chunk of the current track.
+ *
+ * @param udata Pointer to an ePlayer struct.
+ */
+int track_play_chunk(void *udata) {
        ePlayer *player = udata;
        long bytes_read;
        int big_endian = 0;
@@ -21,19 +21,14 @@
 #ifdef WORDS_BIGENDIAN
        big_endian = 1;
 #endif
-       
+
        /* read the data ... */
-       bytes_read = ov_read(&current_track, pcmout, sizeof(pcmout), big_endian,
-                          2, 1, NULL);
+       bytes_read = ov_read(&player->current_track, pcmout, sizeof(pcmout),
+                            big_endian, 2, 1, NULL);
 
-    if (bytes_read) { /* ... and play it */
-               ao_play(device, pcmout, bytes_read);
-               
-               /* FIXME move this to its own timer callback
-                * it doesn't make sense to call this function *that* often
-                */
-               update_time(player);
-       } else /* EOF -> move to the next track */
+    if (bytes_read) /* ... and play it */
+               ao_play(player->ao_dev, pcmout, bytes_read);
+       else /* EOF -> move to the next track */
                edje_object_signal_emit(player->gui.edje,
                                    "PLAY_NEXT", "next_button");
 
@@ -43,48 +38,29 @@
        return !!bytes_read;
 }
 
-int update_time(ePlayer *player) {
+int update_time(void *udata) {
+       ePlayer *player = udata;
        static int old_time = -1;
        int cur_time;
-       char time[9];
 
+       cur_time = ov_time_tell(&player->current_track);
+       
        if (player->time_display == TIME_DISPLAY_LEFT)
-               cur_time = ov_time_tell(&current_track);
-       else
-               cur_time = ov_time_total(&current_track, -1) -
-                          ov_time_tell(&current_track);
+               cur_time = ov_time_total(&player->current_track, -1) - cur_time;
 
-       if (cur_time == old_time) /* value didn't change, so update */
+       if (cur_time == old_time) /* value didn't change, so don't update */
                return 1;
 
        old_time = cur_time;
-
-       if (player->time_display == TIME_DISPLAY_LEFT)
-               snprintf(time, sizeof(time), "%d:%02d",
-                        (cur_time / 60), (cur_time % 60));
-       else
-               snprintf(time, sizeof(time), "-%d:%02d",
-                        (cur_time / 60), (cur_time % 60));
-
-       edje_object_part_text_set(player->gui.edje, "time_text", time);
-       evas_render(player->gui.evas);
+       refresh_time(player, cur_time);
 
        return 1;
 }
 
-static int setup_ao(PlayListItem *current) {
-       ao_info *driver_info;
-       int default_driver;
+static int setup_ao(ePlayer *player) {
+       PlayListItem *current = player->playlist->cur_item->data;
+       ao_sample_format format = {0};
        
-       ao_initialize();
-       default_driver = ao_default_driver_id();
-
-#ifdef DEBUG
-       printf("AO DEBUG: Driver is %d\n", default_driver);
-#endif
-
-       driver_info = ao_driver_info(default_driver);   
-
        format.bits = 16;
        format.channels = current->channels;
        format.rate = current->rate;
@@ -93,15 +69,23 @@
 #ifdef DEBUG
        printf("AO DEBUG: %d Channels at %d Hz, in %d bit words\n",
               format.channels, format.rate, format.bits);
-       printf("AO DEBUG: Audio Device: %s\n", driver_info->name);
 #endif
        
-       if (!(device = ao_open_live(default_driver, &format, NULL))) {
+       player->ao_dev = ao_open_live(ao_default_driver_id(), &format, NULL);
+
+       if (!player->ao_dev)
                fprintf(stderr, "Error opening device.\n");
-               return 0;
-       }
 
-       return 1;
+       return !!player->ao_dev;
+}
+
+/**
+ * Closes the current track.
+ *
+ * @param player
+ */
+void track_close(ePlayer *player) {
+       ov_clear(&player->current_track);
 }
 
 /**
@@ -109,17 +93,15 @@
  *
  * @param player
  */
-void open_track(ePlayer *player) {
+void track_open(ePlayer *player) {
        PlayListItem *pli;
        FILE *fp;
 
        assert(player->playlist->cur_item);
        pli = player->playlist->cur_item->data;
 
-       ov_clear(&current_track);
-
        if (!(fp = fopen (pli->file, "rb"))
-           || ov_open(fp, &current_track, NULL, 0)) {
+           || ov_open(fp, &player->current_track, NULL, 0)) {
                fprintf (stderr, "ERROR: Can't open file '%s'\n", pli->file);
                return;
        }
@@ -128,22 +110,28 @@
        edje_object_part_text_set(player->gui.edje, "artist_name", pli->artist);
        edje_object_part_text_set(player->gui.edje, "album_name", pli->album);
 
-       setup_ao (pli);
+       setup_ao(player);
 }
 
-void seek_forward(void *udata, Evas_Object *obj,
-                  const char *emission, const char *src) {
-       /* We don't care if you seek past the file, the play look will catch EOF and 
play next file */
+void cb_seek_forward(void *udata, Evas_Object *obj,
+                     const char *emission, const char *src) {
+       ePlayer *player = udata;
+
 #ifdef DEBUG
        printf("DEBUG: Seeking forward\n");
 #endif
 
-       ov_time_seek(&current_track, ov_time_tell(&current_track) + 5);
+       /* We don't care if you seek past the file, the play loop
+        * will catch EOF and play next file
+        */
+       ov_time_seek(&player->current_track,
+                    ov_time_tell(&player->current_track) + 5);
 }
 
-void seek_backward(void *udata, Evas_Object *obj,
-                   const char *emission, const char *src) {
-       double cur_time = ov_time_tell(&current_track);
+void cb_seek_backward(void *udata, Evas_Object *obj,
+                      const char *emission, const char *src) {
+       ePlayer *player = udata;
+       double cur_time = ov_time_tell(&player->current_track);
        
        /* Lets not seek backward if there isn't a point */
        if (cur_time < 6) {
@@ -155,6 +143,6 @@
        printf("DEBUG: Seeking backward - Current Pos: %lf\n", cur_time);
 #endif
        
-       ov_time_seek(&current_track, cur_time - 5);
+       ov_time_seek(&player->current_track, cur_time - 5);
 }
 
===================================================================
RCS file: /cvsroot/enlightenment/misc/eplayer/src/vorbis.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- vorbis.h    16 Oct 2003 14:54:33 -0000      1.1
+++ vorbis.h    17 Oct 2003 17:00:31 -0000      1.2
@@ -3,13 +3,15 @@
 
 #include "eplayer.h"
 
-int play_loop(void *udata);
-int update_time(ePlayer *eplayer);
-void open_track(ePlayer *player);
+int track_play_chunk(void *udata);
+int update_time(void *udata);
 
-void seek_forward(void *udata, Evas_Object *obj,
-                  const char *emission, const char *src);
-void seek_backward(void *udata, Evas_Object *obj,
-                   const char *emission, const char *src);
+void track_open(ePlayer *player);
+void track_close(ePlayer *player);
+
+void cb_seek_forward(void *udata, Evas_Object *obj,
+                     const char *emission, const char *src);
+void cb_seek_backward(void *udata, Evas_Object *obj,
+                      const char *emission, const char *src);
 #endif
 




-------------------------------------------------------
This SF.net email sponsored by: Enterprise Linux Forum Conference & Expo
The Event For Linux Datacenter Solutions & Strategies in The Enterprise 
Linux in the Boardroom; in the Front Office; & in the Server Room 
http://www.enterpriselinuxforum.com
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to