From: <enl...@li...> - 2003-10-16 14:56:39
|
Enlightenment CVS committal Author : tsauerbeck Project : misc Module : eplayer Dir : misc/eplayer Modified Files: AUTHORS ChangeLog configure.ac Added Files: .cvsignore INSTALL Log Message: ePlayer now loads oggs and directories containing oggs directly again, cleaned up the code, added .cvsignore files, filled AUTHORS, tweaked configure.ac =================================================================== RCS file: /cvsroot/enlightenment/misc/eplayer/AUTHORS,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- AUTHORS 14 Oct 2003 09:19:29 -0000 1.1 +++ AUTHORS 16 Oct 2003 14:54:33 -0000 1.2 @@ -1 +1,3 @@ -Empty +Ben Rockwood <be...@cu...> +Tilman Sauerbeck <ti...@co...> + =================================================================== RCS file: /cvsroot/enlightenment/misc/eplayer/ChangeLog,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- ChangeLog 15 Oct 2003 16:54:01 -0000 1.3 +++ ChangeLog 16 Oct 2003 14:54:33 -0000 1.4 @@ -1,4 +1,11 @@ -$Id: ChangeLog,v 1.3 2003/10/15 16:54:01 tsauerbeck Exp $ +$Id: ChangeLog,v 1.4 2003/10/16 14:54:33 tsauerbeck Exp $ + +2003-10-16 Tilman Sauerbeck <ti...@co...> + * configure.ac: Added endianess-check, added --enable-debug + switch + * src/eplayer.c, src/playlist.c: added playlist_load_any(), + eplayer will now load files and directories as well + * code cleanup 2003-10-15 Tilman Sauerbeck <ti...@co...> * data/eplayer.edc: Added basic playlist support, =================================================================== RCS file: /cvsroot/enlightenment/misc/eplayer/configure.ac,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- configure.ac 15 Oct 2003 16:54:01 -0000 1.2 +++ configure.ac 16 Oct 2003 14:54:33 -0000 1.3 @@ -6,17 +6,20 @@ AC_PROG_CC AC_ISC_POSIX +AC_PROG_INSTALL AC_HEADER_STDC +AC_C_BIGENDIAN -AC_SUBST(CFLAGS) -AC_SUBST(LDFLAGS) +AC_ARG_ENABLE(debug, + [ --enable-debug debug build (default: no)], [ + AC_DEFINE([DEBUG], [], [Define to 1 if you want debugging output]) + CFLAGS=`echo "$CFLAGS -g -Wall" | sed s/" -s"//` + ]) ## The Simplistic Way AC_CHECK_LIB(ao,ao_driver_id) AC_CHECK_LIB(vorbis,vorbis_info_init) AC_CHECK_LIB(vorbisfile,ov_open) -#AC_CHECK_LIB(ecore,ecore_init) -AC_CHECK_LIB(ecore_evas,ecore_evas_init) ## The more complete way AC_PATH_GENERIC(ecore, , , |
From: <enl...@li...> - 2003-10-16 14:57:18
|
Enlightenment CVS committal Author : tsauerbeck Project : misc Module : eplayer Dir : misc/eplayer/src Modified Files: Makefile.am callbacks.c eplayer.c eplayer.h interface.c playlist.c playlist.h vorbis.c Added Files: .cvsignore callbacks.h interface.h mixer.c mixer.h vorbis.h Log Message: ePlayer now loads oggs and directories containing oggs directly again, cleaned up the code, added .cvsignore files, filled AUTHORS, tweaked configure.ac =================================================================== RCS file: /cvsroot/enlightenment/misc/eplayer/src/Makefile.am,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- Makefile.am 15 Oct 2003 16:54:01 -0000 1.3 +++ Makefile.am 16 Oct 2003 14:54:33 -0000 1.4 @@ -8,10 +8,11 @@ ### I think e_player_HEADER is more correct but not doc'ed. eplayer_SOURCES = eplayer.c eplayer.h \ - interface.c \ - callbacks.c \ - vorbis.c \ - playlist.c playlist.h + interface.c interface.h \ + callbacks.c callbacks.h \ + vorbis.c vorbis.h \ + playlist.c playlist.h \ + mixer.c mixer.h eplayer_LDADD = -lao -lvorbis -lvorbisfile \ @ECORE_LIBS@ @EVAS_LIBS@ @EDJE_LIBS@ @ESMART_LIBS@ =================================================================== RCS file: /cvsroot/enlightenment/misc/eplayer/src/callbacks.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- callbacks.c 15 Oct 2003 16:19:00 -0000 1.2 +++ callbacks.c 16 Oct 2003 14:54:33 -0000 1.3 @@ -1,107 +1,129 @@ +#include <Edje.h> #include "eplayer.h" +#include "mixer.h" +#include "vorbis.h" - int paused = 0; +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; +#ifdef DEBUG + printf("Unpause callback entered\n"); +#endif + + paused = 0; - - -void unpause_playback(player_session *data, Evas *e, Evas_Object *obj, void *event_info){ - - /* This ensures we don't call this callback multiple times */ - if (paused == 0) - return; - - printf("Unpause callback entered\n"); - paused = 0; - - data->play_idler = ecore_idler_add(play_loop, data); /* Start the play idler */ - + data->play_idler = ecore_idler_add(play_loop, data); /* Start the play idler */ } +void pause_playback(ePlayer *player, Evas *e, Evas_Object *obj, + void *event_info) { + if (paused) + return; + +#ifdef DEBUG + printf("Pause callback entered\n"); +#endif + + paused = 1; - -void pause_playback(player_session *data, Evas *e, Evas_Object *obj, void *event_info){ - - if (paused == 1) - return; - - printf("Pause callback entered\n"); - paused = 1; - - ecore_idler_del(data->play_idler); /* Stop the play idler */ - + /* Stop the current playing stream */ + if (player->play_idler) { + ecore_idler_del(player->play_idler); + player->play_idler = NULL; + } } - -void next_file(player_session *data, Evas *e, Evas_Object *obj, void *event_info){ - printf("DEBUG: Next File Called\n"); /* Report what we're doing for debugging purposes */ +void next_file(ePlayer *player, Evas *e, Evas_Object *obj, void *event_info) { +#ifdef DEBUG + printf("DEBUG: Next File Called\n"); +#endif - ecore_idler_del(data->play_idler); /* Stop the current playing stream */ + /* Stop the current playing stream */ + if (player->play_idler) { + ecore_idler_del(player->play_idler); + player->play_idler = NULL; + } - data->play_list = data->play_list->next; /* Get the next list item */ - printf("DEBUG: Pointer addr is: %d\n", (int)data->play_list); - - if(data->play_list == NULL){ + /* Get the next list item */ + player->playlist->cur_item = player->playlist->cur_item->next; + + if (!player->playlist->cur_item) { +#ifdef DEBUG printf("\n\nDEBUG: Youve hit the end of the list!!! \n\n"); +#endif - edje_object_part_text_set(data->edje, "artist_name", "*****************************"); - edje_object_part_text_set(data->edje, "album_name", " END OF THE ROAD "); - edje_object_part_text_set(data->edje, "song_name", "*****************************"); - edje_object_part_text_set(data->edje, "time_text", "DAS:EN:DE"); + edje_object_part_text_set(player->gui.edje, "artist_name", "*****************************"); + edje_object_part_text_set(player->gui.edje, "album_name", " END OF THE ROAD "); + edje_object_part_text_set(player->gui.edje, "song_name", "*****************************"); + edje_object_part_text_set(player->gui.edje, "time_text", "DAS:EN:DE"); /* Since we hit the end, start from the beginning. */ - printf("DEBUG: Reseting playlist. Currently NULL playlist pointer %d, reset pointer %d\n", - (int)data->play_list, (int)data->full_list); - data->play_list = data->full_list; + player->playlist->cur_item = player->playlist->items; return; } + + /* Start the play loop */ + open_track(player); + player->play_idler = ecore_idler_add(play_loop, player); +} + +void prev_file(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; + } - printf("DEBUG: Next file to play is: %s\n", (char *) data->play_list->data); - printf("DEBUG: In next-file, proccessing new file\n"); - setup_ao(); /* If so, seutp the audio out path */ - get_vorbis (data, (PlayListItem *) data->play_list->data); /* Setup the intrface with comments, etc */ - ao_open(); /* Open the outbound audio path */ - data->play_idler = ecore_idler_add(play_loop, data); /* Start the play loop */ -} - - -void prev_file(void *udata, Evas *e, Evas_Object *obj, void *event_info) { - player_session *data = udata; - printf("DEBUG: Previous File Called\n"); /* Report what we're doing for debugging purposes */ - - ecore_idler_del(data->play_idler); /* Stop the current playing stream */ + /* Get the previous list item */ + if (!player->playlist->cur_item->prev) + return; - data->play_list = evas_list_prev(data->play_list); /* Get the previous list item */ + player->playlist->cur_item = player->playlist->cur_item->prev; - setup_ao(); /* If so, seutp the audio out path */ - get_vorbis (data, (PlayListItem *) data->play_list->data); /* Setup the intrface with comments, etc */ - ao_open(); /* Open the outbound audio path */ - data->play_idler = ecore_idler_add(play_loop, data); /* Start the play loop */ + /* Start the play loop */ + open_track (player); + player->play_idler = ecore_idler_add(play_loop, player); } -void raise_vol(void *udata, Evas_Object *obj, const char *emission, const char *src) { - player_session *data = udata; +void raise_vol(ePlayer *player, Evas_Object *obj, const char *emission, + const char *src) { int vol; - vol = read_mixer(data); +#ifdef DEBUG + printf("DEBUG: Raising volume\n"); +#endif + + vol = read_mixer(player); set_mixer(vol + 1); - read_mixer(data); + read_mixer(player); } -void lower_vol(void *udata, Evas_Object *obj, const char *emission, const char *src) { - player_session *data = udata; +void lower_vol(ePlayer *player, Evas_Object *obj, const char *emission, + const char *src) { int vol; - vol = read_mixer(data); +#ifdef DEBUG + printf("DEBUG: Lowering volume\n"); +#endif + + vol = read_mixer(player); set_mixer(vol - 1); - read_mixer(data); + read_mixer(player); } -void switch_time_display (void *udata, Evas_Object *obj, const char *emission, const char *src) { - player_session *session = udata; - - session->time_display = !session->time_display; - update_time (session); +void switch_time_display(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/eplayer.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- eplayer.c 15 Oct 2003 21:02:38 -0000 1.4 +++ eplayer.c 16 Oct 2003 14:54:33 -0000 1.5 @@ -1,67 +1,49 @@ /* Eplayer OggVorbis Player - Phase 3 - Started 5/6/03 */ /* Edje Overhaul startnig phase 4 - Started 7/30/03 */ +#include <Ecore_Evas.h> #include "eplayer.h" +#include "interface.h" +#include "vorbis.h" int main(int argc, const char **argv) { - player_session *st_session; - PlayList *pl = NULL; - int arg_count; - - st_session = malloc(sizeof(player_session)); - memset(st_session, 0, sizeof(player_session)); - - if( argc == 1){ - printf("eVorbisPlayer v0.7 - Usage: %s playlist.m3u ...\n\n", argv[0]); - exit(0); - } + ePlayer *player; + int args; - /* FIXME: Parse Args, free playlist when shutting ecore down etc */ - /*for (args = 1; args < argc; args++) { - printf("Adding file to playlist: %s\n", argv[args]); - - st_session->play_list = evas_list_append(st_session->play_list, argv[args]); - }*/ - - pl = playlist_new(); + player = malloc(sizeof(ePlayer)); + memset(player, 0, sizeof(ePlayer)); - if (!playlist_load_m3u(pl, argv[1], 0)) { - printf ("no files loaded!\n"); - exit (0); + if (argc == 1) { + printf("eVorbisPlayer v0.7 - Usage: %s playlist.m3u [file.ogg] [some/dir] ...\n\n", argv[0]); + return 1; } - st_session->play_list = pl->items; - - arg_count = pl->num; - st_session->full_list = st_session->play_list; - printf("DEBUG: Int val of playlist pointers is: %d, and fulllist pointer is: %d\n\n", - (int)st_session->play_list, (int)st_session->full_list); - printf("DEBUG: The list is ready with %d elements in it\n", arg_count); - - { /* HACKISH HACKISH!!! */ - Evas_List * temp_list; - temp_list = evas_list_last(st_session->play_list); - sprintf(st_session->last_file, "%s", ((PlayListItem *) temp_list->data)->file); - printf("DEBUG: Last file in playlist is: %s\n", st_session->last_file); - } + player->playlist = playlist_new(); - printf("Going to play %s\n", ((PlayListItem *) st_session->play_list->data)->file); - //printf("PCM Volume Level is: %d\n", read_mixer(NULL)); - - /* Done with args */ + /* Parse Args */ + for (args = 1; args < argc; args++) { +#ifdef DEBUG + printf("Adding file to playlist: %s\n", argv[args]); +#endif + + playlist_load_any(player->playlist, argv[args], args > 1); + } - setup_ecore(st_session); - show_playlist (st_session); + setup_ecore(player); + show_playlist(player); /*ecore_timer_add (1.5, mixer_refresh, st_session);*/ - setup_ao(); - get_vorbis (st_session, (PlayListItem *) st_session->play_list->data); - ao_open(); - st_session->play_idler = ecore_idler_add(play_loop, st_session); + open_track (player); +#ifdef DEBUG printf("DEBUG: Starting main loop\n"); +#endif + ecore_main_loop_begin(); + + playlist_free(player->playlist); + free(player); ecore_evas_shutdown(); ecore_shutdown(); =================================================================== RCS file: /cvsroot/enlightenment/misc/eplayer/src/eplayer.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- eplayer.h 15 Oct 2003 16:19:00 -0000 1.2 +++ eplayer.h 16 Oct 2003 14:54:33 -0000 1.3 @@ -1,16 +1,8 @@ -#include <Ecore_Evas.h> -#include <Ecore.h> -#include <Edje.h> -#include <vorbis/codec.h> -#include <vorbis/vorbisfile.h> -#include <ao/ao.h> -#include <stdio.h> -#include <string.h> -#include <unistd.h> - -#include <fcntl.h> -#include <linux/soundcard.h> +#ifndef __EPLAYER_H +#define __EPLAYER_H +#include <Ecore.h> +#include <config.h> #include "playlist.h" #define WIDTH 500 @@ -19,42 +11,20 @@ typedef enum { TIME_DISPLAY_LEFT, TIME_DISPLAY_ELAPSED -} Time_Display; +} TimeDisplay; typedef struct { - Evas *evas; - Evas_List *play_list; - Evas_List *full_list; + PlayList *playlist; Ecore_Idler *play_idler; - Evas_Object *edje; - Evas_Object *playlist_obj; /* container */ - - char last_file[1000]; - Time_Display time_display; -} player_session; - -/* Protos */ -int play_loop(void *udata); -void unpause_playback(); -void pause_playback(); - -int update_time(player_session *st_session); - -int setup_ao(); -int ao_open(); -int get_vorbis(player_session *st_session, PlayListItem *pli); -void handle_comments(player_session *st_session); -void seek_forward(); -void seek_backward(); -void setup_ecore(player_session *st_session); -void next_file(); -void prev_file(); -int read_mixer (player_session *st_session); - -void switch_time_display (void *udata, Evas_Object *obj, const char *emission, const char *src); + + struct { + Evas *evas; + Evas_Object *edje; + Evas_Object *playlist; /* playlist container */ + } gui; -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); + TimeDisplay time_display; +} ePlayer; -void show_playlist(player_session *session); +#endif =================================================================== RCS file: /cvsroot/enlightenment/misc/eplayer/src/interface.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- interface.c 15 Oct 2003 16:19:00 -0000 1.2 +++ interface.c 16 Oct 2003 14:54:33 -0000 1.3 @@ -1,23 +1,35 @@ #include "eplayer.h" +#include <Ecore_Evas.h> #include <Esmart/container.h> +#include <Edje.h> +#include "callbacks.h" +#include "mixer.h" +#include "vorbis.h" /* ECORE/EVAS */ -Ecore_Evas *ee; +static Ecore_Evas *ee = NULL; static int app_signal_exit(void *data, int type, void *event) { +#ifdef DEBUG printf("DEBUG: Exit called, shutting down\n"); +#endif + ecore_main_loop_quit(); return 1; } static void window_move(Ecore_Evas *ee) { +#ifdef DEBUG printf("DEBUG: Window Move callback entered.\n"); +#endif } -void setup_ecore(player_session *st_session) { +void setup_ecore(ePlayer *player) { double edje_w = 0, edje_h = 0; +#ifdef DEBUG printf("DEBUG: Starting setup\n"); +#endif ecore_init(); ecore_evas_init(); @@ -26,65 +38,79 @@ ee = ecore_evas_software_x11_new(NULL, 0, 0, 0, WIDTH, HEIGHT); ecore_evas_title_set(ee, "eVorbisPlayer"); ecore_evas_name_class_set(ee, "ecore_test", "test_evas"); - ecore_evas_borderless_set(ee, 0); + ecore_evas_borderless_set(ee, 1); ecore_evas_shaped_set(ee, 1); ecore_evas_show(ee); ecore_evas_callback_move_set(ee, window_move); - st_session->evas = ecore_evas_get(ee); - evas_font_path_append(st_session->evas, "../data/"); - evas_font_path_append(st_session->evas, "../data/fonts/"); + player->gui.evas = ecore_evas_get(ee); + evas_font_path_append(player->gui.evas, "../data/"); + evas_font_path_append(player->gui.evas, "../data/fonts/"); /* EDJE */ +#ifdef DEBUG printf("DEBUG - EDJE: Defining Edje \n"); +#endif - st_session->edje = edje_object_add(st_session->evas); - edje_object_file_set(st_session->edje, "../data/eplayer.eet", "eplayer"); - evas_object_move(st_session->edje, 0, 0); - edje_object_size_min_get(st_session->edje, &edje_w, &edje_h); - evas_object_resize(st_session->edje, edje_w, edje_h); - evas_object_show(st_session->edje); + player->gui.edje = edje_object_add(player->gui.evas); + edje_object_file_set(player->gui.edje, "../data/eplayer.eet", + "eplayer"); + evas_object_move(player->gui.edje, 0, 0); + edje_object_size_min_get(player->gui.edje, &edje_w, &edje_h); + evas_object_resize(player->gui.edje, edje_w, edje_h); + evas_object_show(player->gui.edje); ecore_evas_resize(ee, (int)edje_w, (int)edje_h); ecore_evas_show(ee); /* add the playlist container */ - st_session->playlist_obj = e_container_new(st_session->evas); - e_container_direction_set(st_session->playlist_obj, 0); - e_container_spacing_set(st_session->playlist_obj, 0); - e_container_fill_policy_set(st_session->playlist_obj, + player->gui.playlist = e_container_new(player->gui.evas); + e_container_direction_set(player->gui.playlist, 0); + e_container_spacing_set(player->gui.playlist, 0); + e_container_fill_policy_set(player->gui.playlist, CONTAINER_FILL_POLICY_FILL_Y); - edje_object_part_swallow(st_session->edje, "playlist", st_session->playlist_obj); + edje_object_part_swallow(player->gui.edje, "playlist", + player->gui.playlist); /*** Edje Callbacks ***************************/ - edje_object_signal_callback_add(st_session->edje, "PLAY_PREVIOUS", - "previous_button", prev_file, - st_session); - edje_object_signal_callback_add(st_session->edje, "PLAY_NEXT", "next_button", next_file, st_session); - - edje_object_signal_callback_add(st_session->edje, "SEEK_BACK", "seekback_button", seek_backward, st_session); - edje_object_signal_callback_add(st_session->edje, "SEEK_FORWARD", "seekforward_button", seek_forward, st_session); - - edje_object_signal_callback_add(st_session->edje, "PLAY", "play_button", unpause_playback, st_session); - edje_object_signal_callback_add(st_session->edje, "PAUSE", "pause_button", pause_playback, st_session); - - edje_object_signal_callback_add(st_session->edje, "VOL_INCR", "vol_incr_button", raise_vol, st_session); - edje_object_signal_callback_add(st_session->edje, "VOL_DECR", "vol_decr_button", lower_vol, st_session); - - edje_object_signal_callback_add (st_session->edje, "SWITCH_TIME_DISPLAY", "time_text", switch_time_display, st_session); - - printf("DEBUG: Done with Ecore Setup\n"); + edje_object_signal_callback_add(player->gui.edje, + "PLAY_PREVIOUS", "previous_button", + prev_file, player); + edje_object_signal_callback_add(player->gui.edje, + "PLAY_NEXT", "next_button", + next_file, player); + edje_object_signal_callback_add(player->gui.edje, + "SEEK_BACK", "seekback_button", + seek_backward, player); + edje_object_signal_callback_add(player->gui.edje, + "SEEK_FORWARD", "seekforward_button", + seek_forward, player); + edje_object_signal_callback_add(player->gui.edje, + "PLAY", "play_button", + unpause_playback, player); + edje_object_signal_callback_add(player->gui.edje, + "PAUSE", "pause_button", + pause_playback, player); + edje_object_signal_callback_add(player->gui.edje, + "VOL_INCR", "vol_incr_button", + raise_vol, player); + edje_object_signal_callback_add(player->gui.edje, + "VOL_DECR", "vol_decr_button", + lower_vol, 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(st_session); + read_mixer(player); } -Evas_Object *playlist_column_add(player_session *session, - double width, double height, - Container_Alignment align) { - Evas_Object *o = e_container_new(session->evas); +static Evas_Object *playlist_column_add(ePlayer *player, + double width, double height, + Container_Alignment align) { + Evas_Object *o = e_container_new(player->gui.evas); e_container_direction_set(o, 1); e_container_spacing_set(o, 0); e_container_alignment_set(o, align); @@ -95,7 +121,7 @@ return o; } -void show_playlist(player_session *session) { +void show_playlist(ePlayer *player) { Evas_Object *o, *col[2]; Evas_List *l; char *title, len[32]; @@ -103,7 +129,7 @@ double w = 0, h = 0; int i, added_cols = 0, duration; - for (l = session->full_list; l; l = l->next) { + for (l = player->playlist->items; l; l = l->next) { /* get the information we want to display */ title = ((PlayListItem *) l->data)->title; duration = ((PlayListItem *) l->data)->duration; @@ -113,7 +139,7 @@ /* add the title/length items to the container */ for (i = 0; i < 2; i++) { - o = edje_object_add(session->evas); + o = edje_object_add(player->gui.evas); edje_object_file_set(o, "../data/eplayer.eet", name[i]); edje_object_part_text_set(o, "text", i ? len : title); edje_object_size_min_get(o, &w, &h); @@ -124,11 +150,11 @@ * the edje object first, to get the width/height */ if (!added_cols) { - evas_object_geometry_get(session->playlist_obj, NULL, NULL, NULL, &h); - col[i] = playlist_column_add(session, w, h, + evas_object_geometry_get(player->gui.playlist, NULL, NULL, NULL, &h); + col[i] = playlist_column_add(player, w, h, i ? CONTAINER_ALIGN_RIGHT : CONTAINER_ALIGN_LEFT); - e_container_element_append(session->playlist_obj, col[i]); + e_container_element_append(player->gui.playlist, col[i]); } e_container_element_append(col[i], o); =================================================================== RCS file: /cvsroot/enlightenment/misc/eplayer/src/playlist.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- playlist.c 15 Oct 2003 16:37:29 -0000 1.1 +++ playlist.c 16 Oct 2003 14:54:33 -0000 1.2 @@ -8,9 +8,10 @@ #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> +#include <config.h> #include "playlist.h" -static int dir_exists (const char *dir) { +static int is_dir (const char *dir) { struct stat st; if (stat(dir, &st) != 0) @@ -93,6 +94,7 @@ PlayListItem *pli; FILE *fp; OggVorbis_File vf = {0}; + vorbis_info *info; if (!(fp = fopen(file, "rb")) || ov_open(fp, &vf, NULL, 0)) return NULL; @@ -101,12 +103,18 @@ return NULL; memset(pli, 0, sizeof(PlayListItem)); + snprintf(pli->file, sizeof(pli->file), "%s", file); /* read the vorbis comments etc */ - snprintf(pli->file, sizeof(pli->file), "%s", file); - pli->duration = ov_time_total(&vf, -1); playlist_item_read_comments(pli, ov_comment(&vf, -1)); + /* get bitrate and number of channels */ + info = ov_info(&vf, -1); + pli->channels = info->channels; + pli->rate = info->rate; + + pli->duration = ov_time_total(&vf, -1); + ov_clear(&vf); /* ov_clear closes the file, too */ return pli; @@ -148,8 +156,8 @@ return; while (pl->items) { - pl->items = evas_list_remove(pl->items, pl->items->data); playlist_item_free((PlayListItem *) pl->items->data); + pl->items = evas_list_remove(pl->items, pl->items->data); } } @@ -184,6 +192,9 @@ pl->items = evas_list_append(pl->items, pli); + if (!append) + pl->cur_item = pl->items; + return 1; } @@ -213,7 +224,7 @@ /* real entries: load directories recursively */ while ((entry = readdir(dir))) { - if (dir_exists(entry->d_name)) + if (is_dir(entry->d_name)) playlist_load_dir(pl, entry->d_name, 1); else if ((pli = playlist_item_new(entry->d_name))) tmp = evas_list_prepend(tmp, pli); @@ -223,6 +234,7 @@ if (!append) { pl->items = evas_list_reverse(tmp); + pl->cur_item = pl->items; return 1; } @@ -231,7 +243,7 @@ pl->items->last->next = tmp; tmp->prev = pl->items->last; pl->items->last = tmp->last; - + return 1; } @@ -244,6 +256,7 @@ */ int playlist_load_m3u(PlayList *pl, const char *file, int append) { PlayListItem *pli = NULL; + Evas_List *tmp = NULL; FILE *fp; char buf[1024], path[PATH_MAX + 1], *dir, *ptr; @@ -267,7 +280,7 @@ } if ((pli = playlist_item_new(ptr))) { - pl->items = evas_list_prepend(pl->items, pli); + tmp = evas_list_prepend(tmp, pli); pl->num++; } } @@ -275,8 +288,44 @@ fclose(fp); free(dir); - if (pl->items) - pl->items = evas_list_reverse(pl->items); + if (!append) { + pl->items = evas_list_reverse(tmp); + pl->cur_item = pl->items; + return 1; + } + if (!pl->items) + pl->items = evas_list_reverse(tmp); + else { /* append the temporary list */ + tmp = evas_list_reverse(tmp); + pl->items->last->next = tmp; + tmp->prev = pl->items->last; + pl->items->last = tmp->last; + } + return 1; +} + +/** + * Add a M3U file, an Ogg file or a directory to a PlayList. + * + * @param pl + * @param path + * @param append If 0, the old entries will be overwritten. + */ +int playlist_load_any(PlayList *pl, const char *path, int append) { + char *ptr = NULL; + + if (is_dir(path)) + return playlist_load_dir(pl, path, append); + + /* FIXME we check for m3u or ogg using the suffix :/ */ + ptr = (char *) &path[strlen(path) - 3]; + + if (!strcasecmp(ptr, "ogg")) + return playlist_load_file(pl, path, append); + else if (!strcasecmp(ptr, "m3u")) + return playlist_load_m3u(pl, path, append); + else + return 0; } =================================================================== RCS file: /cvsroot/enlightenment/misc/eplayer/src/playlist.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- playlist.h 15 Oct 2003 16:37:29 -0000 1.1 +++ playlist.h 16 Oct 2003 14:54:33 -0000 1.2 @@ -18,11 +18,15 @@ char title[PLAYLIST_ITEM_COMMENT_LEN]; char album[PLAYLIST_ITEM_COMMENT_LEN]; double duration; + + int channels; /* number of channels */ + long rate; /* bitrate */ } PlayListItem; typedef struct { int num; /* number of entries */ Evas_List *items; + Evas_List *cur_item; } PlayList; PlayList *playlist_new(); @@ -31,6 +35,7 @@ int playlist_load_file(PlayList *pl, const char *file, int append); int playlist_load_dir(PlayList *pl, const char *dir, int append); int playlist_load_m3u(PlayList *pl, const char *file, int append); +int playlist_load_any(PlayList *pl, const char *path, int append); void playlist_remove_all(PlayList *pl); =================================================================== RCS file: /cvsroot/enlightenment/misc/eplayer/src/vorbis.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- vorbis.c 15 Oct 2003 16:19:00 -0000 1.2 +++ vorbis.c 16 Oct 2003 14:54:33 -0000 1.3 @@ -1,318 +1,146 @@ +#include <Edje.h> +#include <vorbis/codec.h> +#include <vorbis/vorbisfile.h> +#include <ao/ao.h> #include <sys/ioctl.h> #include "eplayer.h" +#include "vorbis.h" - int eof = 0; - int endian; - int time_left; - - /* AUDIO BUFFER */ - char pcmout[16384]; - - /* XIPH AO */ - ao_device * device; - ao_sample_format format; - int default_driver; - int dev_type; - - /* OggVorbis */ - OggVorbis_File vf; - int current_section; - vorbis_info * info; - vorbis_comment * comment; - +ao_device *device = NULL; +ao_sample_format format = {0}; +OggVorbis_File current_track = {0}; /* Main Play Loop */ int play_loop(void *udata) { - player_session *st_session = udata; - - - /* printf("DEBUG: In play loop function \n"); */ - - long buff_len = ov_read(&vf, pcmout, sizeof(pcmout), endian, 2, 1, ¤t_section); + ePlayer *player = udata; + long buff_len; + unsigned char pcmout[16384]; + int big_endian = 0; + +#ifdef WORDS_BIGENDIAN + big_endian = 1; +#endif + + buff_len = ov_read(¤t_track, pcmout, sizeof(pcmout), big_endian, + 2, 1, NULL); - if (buff_len) + if (buff_len) { ao_play (device, pcmout, buff_len); - else { - printf("DEBUG: Hit EOF. Idle timer should be removed now\n"); - /* This sucks ass, but look for another file here....... THIS IS A BAD THING! */ - st_session->play_list = evas_list_next(st_session->play_list); - setup_ao(); - get_vorbis (st_session, (PlayListItem *) st_session->play_list->data); - ao_open(); - st_session->play_idler = ecore_idler_add(play_loop, st_session); - - return 0; /* Stream is empty, EOF reached, leave func and remove timer */ + update_time(player); + return 1; } - - update_time(st_session); + + /* This sucks ass, but look for another file here....... THIS IS A BAD THING! */ + player->playlist->cur_item = player->playlist->cur_item->next; + open_track(player); return 1; } -int update_time(player_session *st_session) { - int cur_time; +int update_time(ePlayer *player) { + static int old_time = -1; + int cur_time; char time[9]; - if (st_session->time_display == TIME_DISPLAY_LEFT) - cur_time = ov_time_tell (&vf); + if (player->time_display == TIME_DISPLAY_LEFT) + cur_time = ov_time_tell(¤t_track); else - cur_time = ov_time_total (&vf, -1) - ov_time_tell (&vf); + cur_time = ov_time_total(¤t_track, -1) - + ov_time_tell(¤t_track); - if (cur_time == time_left) + if (cur_time == old_time) /* value didn't change, so update */ return 1; - time_left = cur_time; + old_time = cur_time; - /* printf("DEBUG: Updating time\n"); */ - - if (st_session->time_display == TIME_DISPLAY_LEFT) - snprintf (time, sizeof(time), "%d:%02d", (time_left/60), (time_left%60)); + 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", (time_left/60), (time_left%60)); + snprintf(time, sizeof(time), "-%d:%02d", + (cur_time / 60), (cur_time % 60)); - edje_object_part_text_set(st_session->edje, "time_text", time); - evas_render(st_session->evas); + edje_object_part_text_set(player->gui.edje, "time_text", time); + evas_render(player->gui.evas); return 1; } -int setup_ao(){ - +static int setup_ao(PlayListItem *current) { + ao_info *driver_info; + int default_driver; + ao_initialize(); default_driver = ao_default_driver_id(); - printf("AO DEBUG: Driver is %d\n", default_driver); - - return 1; -} - -int ao_open(){ - - ao_info * driver_info; +#ifdef DEBUG + printf("AO DEBUG: Driver is %d\n", default_driver); +#endif driver_info = ao_driver_info(default_driver); format.bits = 16; - format.channels = info->channels; - format.rate = info->rate; - format.byte_format = AO_FMT_NATIVE; - - printf("AO DEBUG: %d Channels at %d Hz, in %d bit words\n", format.channels, format.rate, format.bits); + format.channels = current->channels; + format.rate = current->rate; + format.byte_format = AO_FMT_NATIVE; + +#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 - endian = ao_is_big_endian(); - - printf("AO DEBUG: Endianness is %d\n", endian); - - device = ao_open_live(default_driver, &format, NULL); - if (device == NULL) { - fprintf(stderr, "Error opening device.\n"); - return 0; - } - - return 1; -} - -int get_vorbis(player_session *st_session, PlayListItem *pli) { - FILE *fp; - - if (!(fp = fopen (pli->file, "rb")) || ov_open(fp, &vf, NULL, 0)) { - fprintf (stderr, "ERROR: Can't open file '%s'\n", pli->file); + if (!(device = ao_open_live(default_driver, &format, NULL))) { + fprintf(stderr, "Error opening device.\n"); return 0; } - printf("DEBUG: Opened file %s\n", pli->file); - - info = ov_info(&vf, -1); - comment = ov_comment(&vf, -1); - - printf("Going to parse comments\n"); - handle_comments(st_session); - return 1; } -/* Use VorbisFile for comment handling */ -void handle_comments(player_session *st_session){ - - int i; - int track_len; - char time[9]; - - track_len = (int) ov_time_total(&vf, -1); - time_left = track_len; - sprintf(time, "-%d:%02d", (track_len/60), (track_len%60)); - - //evas_object_text_text_set(st_session->time_text, time); - edje_object_part_text_set(st_session->edje, "time_text", time); - - - - printf("DEBUG: There are %d comments\n", comment->comments); - - for(i = 0; i < comment->comments; i++){ - - /* Use strncasecmp instead - or strcasecmp */ - if(strstr(comment->user_comments[i],"title=")){ - char * title; - - title = strchr(comment->user_comments[i], '='); - if (title) - title = strdup(title + 1); - - - //evas_object_text_text_set(st_session->title_text, title); - edje_object_part_text_set(st_session->edje, "song_name", title); - - } else if (strstr(comment->user_comments[i],"artist=")){ - char * artist; - - artist = strchr(comment->user_comments[i], '='); - if (artist) - artist = strdup(artist + 1); - - //evas_object_text_text_set(st_session->artist_text, artist ); - edje_object_part_text_set(st_session->edje, "artist_name", artist); - - - } else if (strstr(comment->user_comments[i],"album=")){ - char * album; - - album = strchr(comment->user_comments[i], '='); - if (album) - album = strdup(album + 1); - - //evas_object_text_text_set(st_session->album_text, album); - edje_object_part_text_set(st_session->edje, "album_name", album); - } - } +void open_track(ePlayer *player) { + PlayListItem *pli = player->playlist->cur_item->data; + FILE *fp; + ov_clear(¤t_track); -} + if (!(fp = fopen (pli->file, "rb")) + || ov_open(fp, ¤t_track, NULL, 0)) { + fprintf (stderr, "ERROR: Can't open file '%s'\n", pli->file); + return; + } -/* More Bite Size Functions for comments */ + edje_object_part_text_set(player->gui.edje, "song_name", pli->title); + edje_object_part_text_set(player->gui.edje, "artist_name", pli->artist); + edje_object_part_text_set(player->gui.edje, "album_name", pli->album); -char *get_track_name (char *file) { - /* Shit.......... I've gotta think about this...... */ - return NULL; + setup_ao (pli); } - -void seek_forward(){ - double cur_time; - +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 */ - +#ifdef DEBUG printf("DEBUG: Seeking forward\n"); +#endif - cur_time = ov_time_tell(&vf); - ov_time_seek(&vf, cur_time + 5); + ov_time_seek(¤t_track, ov_time_tell(¤t_track) + 5); } -void seek_backward(){ - double cur_time;//, total_time; - - cur_time = ov_time_tell(&vf); +void seek_backward(void *udata, Evas_Object *obj, + const char *emission, const char *src) { + double cur_time = ov_time_tell(¤t_track); /* Lets not seek backward if there isn't a point */ - if(cur_time < 6) { + if (cur_time < 6) { printf("You arent even 5 secs into the stream!\n"); return; } - //printf("DEBUG: Seeking backward - Current Pos: %d\n", (int)cur_time); - ov_time_seek(&vf, cur_time - 5); -} - - -/************ STOLEN FROM MOC (Music on CLI) *********************/ -/* Get PCM volume, return -1 on error */ -int read_mixer (player_session *st_session) { - int vol; - int mixer_fd; - - printf("DEBUG: Reading mixer\n"); - - 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; - } - - if (mixer_fd != -1) { - if (ioctl(mixer_fd, MIXER_READ(SOUND_MIXER_PCM), &vol) == -1) - printf("MIXER: Can't read from mixer\n"); - else { - int return_val; - /* Average between left and right */ - return_val = ((vol & 0xFF) + ((vol >> 8) & 0xFF)) / 2; - printf("MIXER: Returning value: %d\n", return_val); - close(mixer_fd); +#ifdef DEBUG + printf("DEBUG: Seeking backward - Current Pos: %lf\n", cur_time); +#endif - - /* Update the display with the volume level */ - { - - char vol_str[3]; - - sprintf(vol_str, "%d", (int)return_val); - printf("DEBUG: Setting the mixer vol: %s\n", vol_str); - - edje_object_part_text_set(st_session->edje, "vol_display_text", vol_str); - } -/* - - if(st_session->edje) { - if(return_val > 99) - return_val == 99; - if(return_val < 1) - edje_object_part_text_set(st_session->edje, "vol_display_text", "--"); - if(return_val < 10) - sprintf(return_val, "0%s", (int)return_val); - - edje_object_part_text_set(st_session->edje, "vol_display_text", return_val); - } -*/ - return return_val; - } - } - - return -1; -} - -/* Set PCM volume */ -void set_mixer(int vol){ - - int mixer_fd; - - printf("DEBUG: Setting mixer\n"); - - 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) - printf("DEBUG: Can't set mixer\n"); - } - close(mixer_fd); + ov_time_seek(¤t_track, cur_time - 5); } -/********** END THEFT *********************************************/ |
From: <enl...@li...> - 2003-10-16 17:29:54
|
Enlightenment CVS committal Author : tsauerbeck Project : misc Module : eplayer Dir : misc/eplayer/data/images Added Files: Makefile.am Log Message: Implemented install and dist targets for make, improved libao check in configure.ac |
From: <enl...@li...> - 2003-10-16 17:29:54
|
Enlightenment CVS committal Author : tsauerbeck Project : misc Module : eplayer Dir : misc/eplayer/m4 Added Files: ac_expand_dir.m4 Log Message: Implemented install and dist targets for make, improved libao check in configure.ac |
From: <enl...@li...> - 2003-10-16 17:29:59
|
Enlightenment CVS committal Author : tsauerbeck Project : misc Module : eplayer Dir : misc/eplayer/data/fonts Added Files: Makefile.am Log Message: Implemented install and dist targets for make, improved libao check in configure.ac |
From: <enl...@li...> - 2003-10-16 17:30:04
|
Enlightenment CVS committal Author : tsauerbeck Project : misc Module : eplayer Dir : misc/eplayer/data Added Files: Makefile.am Removed Files: Makefile Log Message: Implemented install and dist targets for make, improved libao check in configure.ac |
From: <enl...@li...> - 2003-10-16 17:30:18
|
Enlightenment CVS committal Author : tsauerbeck Project : misc Module : eplayer Dir : misc/eplayer/src Modified Files: Makefile.am interface.c Log Message: Implemented install and dist targets for make, improved libao check in configure.ac =================================================================== RCS file: /cvsroot/enlightenment/misc/eplayer/src/Makefile.am,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- Makefile.am 16 Oct 2003 14:54:33 -0000 1.4 +++ Makefile.am 16 Oct 2003 17:25:40 -0000 1.5 @@ -1,12 +1,8 @@ -## ePlayer Makefile.am -## gcc -g -lao -lvorbis -lvorbisfile -lecore -lecore_evas e_player.c -o e_player - -INCLUDES = -I$(top_srcdir) -I$(includedir) \ +AM_CFLAGS = @AO_CFLAGS@ \ @ECORE_CFLAGS@ @EVAS_CFLAGS@ @EDJE_CFLAGS@ @ESMART_CFLAGS@ bin_PROGRAMS = eplayer -### I think e_player_HEADER is more correct but not doc'ed. eplayer_SOURCES = eplayer.c eplayer.h \ interface.c interface.h \ callbacks.c callbacks.h \ @@ -14,5 +10,5 @@ playlist.c playlist.h \ mixer.c mixer.h -eplayer_LDADD = -lao -lvorbis -lvorbisfile \ +eplayer_LDADD = -lvorbis -lvorbisfile @AO_LIBS@ \ @ECORE_LIBS@ @EVAS_LIBS@ @EDJE_LIBS@ @ESMART_LIBS@ =================================================================== RCS file: /cvsroot/enlightenment/misc/eplayer/src/interface.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- interface.c 16 Oct 2003 14:54:33 -0000 1.3 +++ interface.c 16 Oct 2003 17:25:40 -0000 1.4 @@ -45,8 +45,7 @@ ecore_evas_callback_move_set(ee, window_move); player->gui.evas = ecore_evas_get(ee); - evas_font_path_append(player->gui.evas, "../data/"); - evas_font_path_append(player->gui.evas, "../data/fonts/"); + evas_font_path_append(player->gui.evas, DATA_DIR"/themes/fonts"); /* EDJE */ #ifdef DEBUG @@ -54,8 +53,8 @@ #endif player->gui.edje = edje_object_add(player->gui.evas); - edje_object_file_set(player->gui.edje, "../data/eplayer.eet", - "eplayer"); + edje_object_file_set(player->gui.edje, + DATA_DIR"/themes/eplayer.eet", "eplayer"); evas_object_move(player->gui.edje, 0, 0); edje_object_size_min_get(player->gui.edje, &edje_w, &edje_h); evas_object_resize(player->gui.edje, edje_w, edje_h); @@ -140,7 +139,7 @@ /* add the title/length items to the container */ for (i = 0; i < 2; i++) { o = edje_object_add(player->gui.evas); - edje_object_file_set(o, "../data/eplayer.eet", name[i]); + edje_object_file_set(o, DATA_DIR"/themes/eplayer.eet", name[i]); edje_object_part_text_set(o, "text", i ? len : title); edje_object_size_min_get(o, &w, &h); evas_object_resize(o, w, h); |
From: <enl...@li...> - 2003-10-16 17:30:22
|
Enlightenment CVS committal Author : tsauerbeck Project : misc Module : eplayer Dir : misc/eplayer Modified Files: ChangeLog Makefile.am configure.ac Log Message: Implemented install and dist targets for make, improved libao check in configure.ac =================================================================== RCS file: /cvsroot/enlightenment/misc/eplayer/ChangeLog,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- ChangeLog 16 Oct 2003 14:54:33 -0000 1.4 +++ ChangeLog 16 Oct 2003 17:25:40 -0000 1.5 @@ -1,4 +1,4 @@ -$Id: ChangeLog,v 1.4 2003/10/16 14:54:33 tsauerbeck Exp $ +$Id: ChangeLog,v 1.5 2003/10/16 17:25:40 tsauerbeck Exp $ 2003-10-16 Tilman Sauerbeck <ti...@co...> * configure.ac: Added endianess-check, added --enable-debug @@ -6,6 +6,8 @@ * src/eplayer.c, src/playlist.c: added playlist_load_any(), eplayer will now load files and directories as well * code cleanup + * configure.ac, Makefile.am etc: implemented install and + dist targets 2003-10-15 Tilman Sauerbeck <ti...@co...> * data/eplayer.edc: Added basic playlist support, =================================================================== RCS file: /cvsroot/enlightenment/misc/eplayer/Makefile.am,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- Makefile.am 15 Oct 2003 16:54:01 -0000 1.2 +++ Makefile.am 16 Oct 2003 17:25:40 -0000 1.3 @@ -1,7 +1,4 @@ -SUBDIRS = m4 src +SUBDIRS = data m4 src -EXTRA_DIST = TODO data - -dist-hook: - rm -rf `find $(distdir)/data -name CVS` +EXTRA_DIST = TODO =================================================================== RCS file: /cvsroot/enlightenment/misc/eplayer/configure.ac,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- configure.ac 16 Oct 2003 14:54:33 -0000 1.3 +++ configure.ac 16 Oct 2003 17:25:40 -0000 1.4 @@ -10,18 +10,25 @@ AC_HEADER_STDC AC_C_BIGENDIAN +AC_EXPAND_DIR(DATA_DIR, "$datadir/eplayer") +AC_DEFINE_UNQUOTED(DATA_DIR, "$DATA_DIR", [Directory to install data files in]) + AC_ARG_ENABLE(debug, [ --enable-debug debug build (default: no)], [ AC_DEFINE([DEBUG], [], [Define to 1 if you want debugging output]) CFLAGS=`echo "$CFLAGS -g -Wall" | sed s/" -s"//` ]) -## The Simplistic Way -AC_CHECK_LIB(ao,ao_driver_id) -AC_CHECK_LIB(vorbis,vorbis_info_init) -AC_CHECK_LIB(vorbisfile,ov_open) +dnl I'd like to use XIPH_PATH_VORBIS here, but it seems to be quite +dnl unstable and there's no pkgconfig file either :/ +AC_CHECK_LIB(vorbis, vorbis_info_init, , + AC_MSG_ERROR(Cannot find libvorbis)) + +AC_CHECK_LIB(vorbisfile, ov_open, , + AC_MSG_ERROR(Cannot find libvorbisfile)) + +XIPH_PATH_AO(, AC_MSG_ERROR(Cannot find libao)) -## The more complete way AC_PATH_GENERIC(ecore, , , AC_MSG_ERROR(Cannot find ecore: Is ecore-config in path?)) @@ -36,6 +43,9 @@ AC_OUTPUT([ Makefile +data/Makefile +data/fonts/Makefile +data/images/Makefile m4/Makefile src/Makefile ]) |
From: <enl...@li...> - 2003-10-16 18:07:04
|
Enlightenment CVS committal Author : tsauerbeck Project : misc Module : eplayer Dir : misc/eplayer Modified Files: ChangeLog Log Message: Fixed a potential segfault in the playlist code, fixed another one when play_loop() wanted to automatically move over the end of the playlist =================================================================== RCS file: /cvsroot/enlightenment/misc/eplayer/ChangeLog,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- ChangeLog 16 Oct 2003 17:25:40 -0000 1.5 +++ ChangeLog 16 Oct 2003 18:06:28 -0000 1.6 @@ -1,4 +1,4 @@ -$Id: ChangeLog,v 1.5 2003/10/16 17:25:40 tsauerbeck Exp $ +$Id: ChangeLog,v 1.6 2003/10/16 18:06:28 tsauerbeck Exp $ 2003-10-16 Tilman Sauerbeck <ti...@co...> * configure.ac: Added endianess-check, added --enable-debug @@ -8,6 +8,10 @@ * code cleanup * configure.ac, Makefile.am etc: implemented install and dist targets + * src/playlist.c: Fixed a potential segfault + * src/vorbis.c: Fixed a segfault that occurred when + play_loop() called open_track() with player->cur_item + being NULL 2003-10-15 Tilman Sauerbeck <ti...@co...> * data/eplayer.edc: Added basic playlist support, |
From: <enl...@li...> - 2003-10-16 18:07:08
|
Enlightenment CVS committal Author : tsauerbeck Project : misc Module : eplayer Dir : misc/eplayer/src Modified Files: playlist.c vorbis.c Log Message: Fixed a potential segfault in the playlist code, fixed another one when play_loop() wanted to automatically move over the end of the playlist =================================================================== RCS file: /cvsroot/enlightenment/misc/eplayer/src/playlist.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- playlist.c 16 Oct 2003 14:54:33 -0000 1.2 +++ playlist.c 16 Oct 2003 18:06:28 -0000 1.3 @@ -14,7 +14,7 @@ static int is_dir (const char *dir) { struct stat st; - if (stat(dir, &st) != 0) + if (stat(dir, &st)) return 0; return (S_ISDIR(st.st_mode)); @@ -162,6 +162,25 @@ } /** + * Appends a list with PlayListItems to a PlayList. + * + * @param pl + * @param list + */ +static void playlist_append_list(PlayList *pl, Evas_List *list) { + if (!pl || !list) + return; + + if (!pl->items) + pl->items = list; + else { + pl->items->last->next = list; + list->prev = pl->items->last; + pl->items->last = list->last; + } +} + +/** * Frees a PlayList object. * * @param pl The PlayList to free. @@ -214,9 +233,6 @@ if (!pl || !(dir = opendir(path))) return 0; - if (!append) - playlist_remove_all(pl); - /* ignore "." and ".." */ while ((entry = readdir(dir)) && (!strcmp(entry->d_name, ".") @@ -232,18 +248,16 @@ closedir(dir); - if (!append) { - pl->items = evas_list_reverse(tmp); + tmp = evas_list_reverse(tmp); + + if (append) + playlist_append_list(pl, tmp); + else { + playlist_remove_all(pl); + pl->items = tmp; pl->cur_item = pl->items; - return 1; } - /* append the temporary list */ - tmp = evas_list_reverse(tmp); - pl->items->last->next = tmp; - tmp->prev = pl->items->last; - pl->items->last = tmp->last; - return 1; } @@ -268,9 +282,6 @@ ptr = strrchr(dir, '/'); *ptr = 0; - if (!append) - playlist_remove_all(pl); - while (fgets (buf, sizeof (buf), fp)) { if (!(ptr = strstrip(buf)) || !*ptr || *ptr == '#') continue; @@ -288,19 +299,14 @@ fclose(fp); free(dir); - if (!append) { - pl->items = evas_list_reverse(tmp); + tmp = evas_list_reverse(tmp); + + if (append) + playlist_append_list(pl, tmp); + else { + playlist_remove_all(pl); + pl->items = tmp; pl->cur_item = pl->items; - return 1; - } - - if (!pl->items) - pl->items = evas_list_reverse(tmp); - else { /* append the temporary list */ - tmp = evas_list_reverse(tmp); - pl->items->last->next = tmp; - tmp->prev = pl->items->last; - pl->items->last = tmp->last; } return 1; =================================================================== RCS file: /cvsroot/enlightenment/misc/eplayer/src/vorbis.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- vorbis.c 16 Oct 2003 14:54:33 -0000 1.3 +++ vorbis.c 16 Oct 2003 18:06:28 -0000 1.4 @@ -3,6 +3,7 @@ #include <vorbis/vorbisfile.h> #include <ao/ao.h> #include <sys/ioctl.h> +#include <assert.h> #include "eplayer.h" #include "vorbis.h" @@ -28,13 +29,12 @@ ao_play (device, pcmout, buff_len); update_time(player); return 1; + } else { /* move to the next track */ + edje_object_signal_emit(player->gui.edje, + "PLAY_NEXT", "next_button"); } - /* This sucks ass, but look for another file here....... THIS IS A BAD THING! */ - player->playlist->cur_item = player->playlist->cur_item->next; - open_track(player); - - return 1; + return 0; } int update_time(ePlayer *player) { @@ -98,9 +98,17 @@ return 1; } +/** + * Opens the current track and prepares libao for playing. + * + * @param player + */ void open_track(ePlayer *player) { - PlayListItem *pli = player->playlist->cur_item->data; + PlayListItem *pli;; FILE *fp; + + assert(player->playlist->cur_item); + pli = player->playlist->cur_item->data; ov_clear(¤t_track); |
From: <enl...@li...> - 2003-10-16 18:10:31
|
Enlightenment CVS committal Author : tsauerbeck Project : misc Module : eplayer Dir : misc/eplayer/data/images Added Files: .cvsignore Log Message: Added missing cvsignore files |
From: <enl...@li...> - 2003-10-16 18:10:32
|
Enlightenment CVS committal Author : tsauerbeck Project : misc Module : eplayer Dir : misc/eplayer/data/fonts Added Files: .cvsignore Log Message: Added missing cvsignore files |
From: <enl...@li...> - 2003-10-16 18:10:37
|
Enlightenment CVS committal Author : tsauerbeck Project : misc Module : eplayer Dir : misc/eplayer/data Added Files: .cvsignore Log Message: Added missing cvsignore files |
From: <enl...@li...> - 2003-10-16 18:10:37
|
Enlightenment CVS committal Author : tsauerbeck Project : misc Module : eplayer Dir : misc/eplayer/m4 Added Files: .cvsignore Log Message: Added missing cvsignore files |
From: <enl...@li...> - 2003-10-16 20:17:57
|
Enlightenment CVS committal Author : tsauerbeck Project : misc Module : eplayer Dir : misc/eplayer/data Modified Files: Makefile.am Log Message: The image files aren't installed any more, fixed data/Makefile.am, tweaked play_loop() a bit (more to come) =================================================================== RCS file: /cvsroot/enlightenment/misc/eplayer/data/Makefile.am,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- Makefile.am 16 Oct 2003 17:25:40 -0000 1.1 +++ Makefile.am 16 Oct 2003 20:16:56 -0000 1.2 @@ -2,6 +2,7 @@ EDCS = eplayer.edc EETS = $(EDCS:%.edc=%.eet) +SUFFIXES = .edc .eet CLEANFILES = $(EETS) EXTRA_DIST = $(EDCS) README |
From: <enl...@li...> - 2003-10-16 20:17:57
|
Enlightenment CVS committal Author : tsauerbeck Project : misc Module : eplayer Dir : misc/eplayer/src Modified Files: vorbis.c Log Message: The image files aren't installed any more, fixed data/Makefile.am, tweaked play_loop() a bit (more to come) =================================================================== RCS file: /cvsroot/enlightenment/misc/eplayer/src/vorbis.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- vorbis.c 16 Oct 2003 18:52:58 -0000 1.5 +++ vorbis.c 16 Oct 2003 20:16:56 -0000 1.6 @@ -14,27 +14,33 @@ /* Main Play Loop */ int play_loop(void *udata) { ePlayer *player = udata; - long buff_len; - unsigned char pcmout[16384]; + long bytes_read; int big_endian = 0; - + static char pcmout[4096]; + #ifdef WORDS_BIGENDIAN big_endian = 1; #endif - buff_len = ov_read(¤t_track, pcmout, sizeof(pcmout), big_endian, + /* read the data ... */ + bytes_read = ov_read(¤t_track, pcmout, sizeof(pcmout), big_endian, 2, 1, NULL); - if (buff_len) { - ao_play (device, pcmout, buff_len); + 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); - return 1; - } else { /* move to the next track */ + } else /* EOF -> move to the next track */ edje_object_signal_emit(player->gui.edje, "PLAY_NEXT", "next_button"); - } - - return 0; + + /* the edje callback will re-add the idler, so we can remove it here, + * in case ov_read() failed + */ + return !!bytes_read; } int update_time(ePlayer *player) { |
From: <enl...@li...> - 2003-10-16 20:17:57
|
Enlightenment CVS committal Author : tsauerbeck Project : misc Module : eplayer Dir : misc/eplayer/data/images Modified Files: Makefile.am Log Message: The image files aren't installed any more, fixed data/Makefile.am, tweaked play_loop() a bit (more to come) =================================================================== RCS file: /cvsroot/enlightenment/misc/eplayer/data/images/Makefile.am,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- Makefile.am 16 Oct 2003 17:25:40 -0000 1.1 +++ Makefile.am 16 Oct 2003 20:16:56 -0000 1.2 @@ -1,4 +1,4 @@ -IMAGES = background-dark-green.png background-green.png \ +EXTRA_DIST = background-dark-green.png background-green.png \ border-scale.png button-3stage-fulldown.png \ button-3stage-selected.png button-3stage-unselected.png \ button-full-blinking.png button-full-clicked.png \ @@ -9,7 +9,3 @@ vol-display.png vol-label.png vol-minus-clicked.png \ vol-minus.png vol-plus-clicked.png vol-plus.png -imagedir = $(pkgdatadir)/themes/images -image_DATA = $(IMAGES) - -EXTRA_DIST = $(IMAGES) |
From: <enl...@li...> - 2003-10-17 17:01:04
|
Enlightenment CVS committal Author : tsauerbeck Project : misc Module : eplayer Dir : misc/eplayer Modified Files: ChangeLog 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/ChangeLog,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- ChangeLog 16 Oct 2003 18:06:28 -0000 1.6 +++ ChangeLog 17 Oct 2003 17:00:25 -0000 1.7 @@ -1,4 +1,15 @@ -$Id: ChangeLog,v 1.6 2003/10/16 18:06:28 tsauerbeck Exp $ +$Id: ChangeLog,v 1.7 2003/10/17 17:00:25 tsauerbeck Exp $ + +2003-10-17 Tilman Sauerbeck <ti...@co...> + * src/mixer.c, src/mixer.h, src/eplayer.c, src/callbacks.c, + interface.c: + Rewrote mixer code, the mixer is periodically read now to + reflect changes made by other applications + * src/eplayer.c: Added _playback_start(), _playback_stop() + * src/vorbis.c: The "time" part is updated in a sane + period now + * src/vorbis.c, src/eplayer.c: Tidied up libao calls + * data/eplayer.edc: buttons emit their signals on mouse_up now 2003-10-16 Tilman Sauerbeck <ti...@co...> * configure.ac: Added endianess-check, added --enable-debug |
From: <enl...@li...> - 2003-10-17 17:01:05
|
Enlightenment CVS committal Author : tsauerbeck Project : misc Module : eplayer Dir : misc/eplayer/data Modified Files: eplayer.edc eplayer.eet 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/data/eplayer.edc,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- eplayer.edc 15 Oct 2003 16:19:00 -0000 1.2 +++ eplayer.edc 17 Oct 2003 17:00:27 -0000 1.3 @@ -1149,7 +1149,7 @@ program { name, "previous_click"; - signal, "mouse,down,1"; + signal, "mouse,up,1"; source, "previous_button"; /* Emit signal to handler "previous file", from part/sender "previous_button" */ /* Catch with the following Edje code in your app */ @@ -1185,7 +1185,7 @@ program { name, "seekback_click"; - signal, "mouse,down,1"; + signal, "mouse,up,1"; source, "seekback_button"; action, SIGNAL_EMIT "SEEK_BACK" "seekback_button"; } @@ -1235,7 +1235,7 @@ program { name, "play_click"; - signal, "mouse,down,1"; + signal, "mouse,up,1"; source, "play_button"; action, SIGNAL_EMIT "PLAY" "play_button"; } @@ -1280,7 +1280,7 @@ program { name, "pause_click"; - signal, "mouse,down,1"; + signal, "mouse,up,1"; source, "pause_button"; action, SIGNAL_EMIT "PAUSE" "pause_button"; } @@ -1307,7 +1307,7 @@ program { name, "seekforward_signal"; - signal, "mouse,down,1"; + signal, "mouse,up,1"; source, "seekforward_button"; action, SIGNAL_EMIT "SEEK_FORWARD" "seekforward_button"; } @@ -1347,7 +1347,7 @@ } program { name, "next_click"; - signal, "mouse,down,1"; + signal, "mouse,up,1"; source, "next_button"; action, SIGNAL_EMIT "PLAY_NEXT" "next_button"; } @@ -1380,7 +1380,7 @@ name, "vol_incr_sig"; //signal, "*"; //source, "volplus_click"; - signal, "mouse,down,1"; + signal, "mouse,up,1"; source, "vol_incr_button"; action, SIGNAL_EMIT "VOL_INCR" "vol_incr_button"; //in, 0.5 0.0; // DELAY, Run proggy IN x.x seconds. Add some random time (arg2). @@ -1437,7 +1437,7 @@ } program { name, "vol_decr_sig"; - signal, "mouse,down,1"; + signal, "mouse,up,1"; source, "vol_decr_button"; action, SIGNAL_EMIT "VOL_DECR" "vol_decr_button"; } =================================================================== RCS file: /cvsroot/enlightenment/misc/eplayer/data/eplayer.eet,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 Binary files /tmp/cvskEl07m and /tmp/cvsALxxSB differ |
From: <enl...@li...> - 2003-10-17 17:01:07
|
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(¤t_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(¤t_track); - else - cur_time = ov_time_total(¤t_track, -1) - - ov_time_tell(¤t_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(¤t_track); - if (!(fp = fopen (pli->file, "rb")) - || ov_open(fp, ¤t_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(¤t_track, ov_time_tell(¤t_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(¤t_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(¤t_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 |
From: <enl...@li...> - 2003-10-18 00:34:19
|
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 vorbis.c Log Message: Fixed a memory leak which was caused by not calling ao_close() in track_close(), check ao_default_driver_id() on startup, playlist can be scrolled using the mousewheel now =================================================================== RCS file: /cvsroot/enlightenment/misc/eplayer/src/callbacks.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- callbacks.c 17 Oct 2003 17:00:27 -0000 1.4 +++ callbacks.c 17 Oct 2003 23:46:20 -0000 1.5 @@ -1,5 +1,6 @@ #include <config.h> #include <Edje.h> +#include <Esmart/container.h> #include "eplayer.h" #include "mixer.h" #include "vorbis.h" @@ -110,3 +111,28 @@ update_time(player); } +/** + * Scrolls the playlist containers. + * + * @param player + * @param direction 1 (up) or -1 (down). + */ +static void playlist_scroll(ePlayer *player, int direction) { + int i, val; + + for (i = 0; i < 2; i++) { + /* it's * 3 because we're scrolling 3 elements at once */ + val = player->gui.playlist_font_size[i] * 3 * direction; + e_container_scroll(player->gui.playlist_col[i], val); + } +} + +void cb_playlist_scroll_up(void *udata, Evas_Object *obj, + const char *emission, const char *src) { + playlist_scroll(udata, 1); +} + +void cb_playlist_scroll_down(void *udata, Evas_Object *obj, + const char *emission, const char *src) { + playlist_scroll(udata, -1); +} =================================================================== RCS file: /cvsroot/enlightenment/misc/eplayer/src/callbacks.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- callbacks.h 17 Oct 2003 17:00:28 -0000 1.2 +++ callbacks.h 17 Oct 2003 23:46:20 -0000 1.3 @@ -21,5 +21,10 @@ void cb_volume_lower(void *udata, Evas_Object *obj, const char *emission, const char *src); +void cb_playlist_scroll_up(void *udata, Evas_Object *obj, + const char *emission, const char *src); +void cb_playlist_scroll_down(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.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- eplayer.c 17 Oct 2003 17:00:28 -0000 1.6 +++ eplayer.c 17 Oct 2003 23:46:20 -0000 1.7 @@ -7,8 +7,20 @@ #include "interface.h" #include "vorbis.h" +static void eplayer_free(ePlayer *player) { + if (!player) + return; + + playlist_free(player->playlist); + mixer_free(player->mixer); + ao_shutdown(); + + free(player); +} + static ePlayer *eplayer_new() { ePlayer *player; + int driver; ao_info *driver_info; if (!(player = malloc(sizeof(ePlayer)))) @@ -24,7 +36,14 @@ player->mixer = mixer_new(MIXER_CONTROL_VOL); ao_initialize(); - driver_info = ao_driver_info(ao_default_driver_id()); + + if ((driver = ao_default_driver_id()) == -1) { + fprintf(stderr, "AO: Can't get default driver!\n"); + eplayer_free(player); + return NULL; + } + + driver_info = ao_driver_info(driver); #ifdef DEBUG printf("AO DEBUG: Audio Device: %s\n", driver_info->name); @@ -33,17 +52,6 @@ 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. * @@ -105,7 +113,8 @@ } if (argc == 1) { - printf("eVorbisPlayer v0.7 - Usage: %s playlist.m3u [file.ogg] [some/dir] ...\n\n", argv[0]); + printf("%s v%s - Usage: %s playlist.m3u [file.ogg] [some/dir] ...\n\n", + PACKAGE, VERSION, argv[0]); return 1; } =================================================================== RCS file: /cvsroot/enlightenment/misc/eplayer/src/eplayer.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- eplayer.h 17 Oct 2003 17:00:29 -0000 1.4 +++ eplayer.h 17 Oct 2003 23:46:20 -0000 1.5 @@ -22,6 +22,8 @@ Evas *evas; Evas_Object *edje; Evas_Object *playlist; /* playlist container */ + Evas_Object *playlist_col[2]; + int playlist_font_size[2]; /* 0 -> title, 1 -> length */ } gui; TimeDisplay time_display; =================================================================== RCS file: /cvsroot/enlightenment/misc/eplayer/src/interface.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- interface.c 17 Oct 2003 17:00:29 -0000 1.5 +++ interface.c 17 Oct 2003 23:46:20 -0000 1.6 @@ -21,12 +21,6 @@ return 1; } -static void window_move(Ecore_Evas *ee) { -#ifdef DEBUG - printf("DEBUG: Window Move callback entered.\n"); -#endif -} - void setup_ecore(ePlayer *player) { double edje_w = 0, edje_h = 0; @@ -45,8 +39,6 @@ ecore_evas_shaped_set(ee, 1); ecore_evas_show(ee); - ecore_evas_callback_move_set(ee, window_move); - player->gui.evas = ecore_evas_get(ee); evas_font_path_append(player->gui.evas, DATA_DIR"/themes/fonts"); @@ -121,7 +113,7 @@ } void show_playlist(ePlayer *player) { - Evas_Object *o, *col[2]; + Evas_Object *o; Evas_List *l; char *title, len[32]; char *name[] = {"playlist_item_title", "playlist_item_length"}; @@ -133,7 +125,7 @@ title = ((PlayListItem *) l->data)->title; duration = ((PlayListItem *) l->data)->duration; - snprintf(len, sizeof (len), "%i:%02i", (duration / 60), + snprintf(len, sizeof(len), "%i:%02i", (duration / 60), duration % 60); /* add the title/length items to the container */ @@ -150,17 +142,42 @@ */ if (!added_cols) { evas_object_geometry_get(player->gui.playlist, NULL, NULL, NULL, &h); - col[i] = playlist_column_add(player, w, h, - i ? CONTAINER_ALIGN_RIGHT - : CONTAINER_ALIGN_LEFT); - e_container_element_append(player->gui.playlist, col[i]); + + player->gui.playlist_col[i] = + playlist_column_add(player, w, h, + i ? CONTAINER_ALIGN_RIGHT + : CONTAINER_ALIGN_LEFT); + e_container_element_append(player->gui.playlist, + player->gui.playlist_col[i]); } - e_container_element_append(col[i], o); + e_container_element_append(player->gui.playlist_col[i], o); + + /* add playlist callbacks */ + edje_object_signal_callback_add(o, + "PLAYLIST_SCROLL_UP", "text", + cb_playlist_scroll_up, + player); + edje_object_signal_callback_add(o, + "PLAYLIST_SCROLL_DOWN", "text", + cb_playlist_scroll_down, + player); + + /* FIXME: we're assuming that the objects minimal height + * equals the text size + */ + player->gui.playlist_font_size[i] = h; } added_cols = 1; } + + edje_object_signal_callback_add(player->gui.edje, + "PLAYLIST_SCROLL_DOWN", "playlist", + cb_playlist_scroll_down, player); + edje_object_signal_callback_add(player->gui.edje, + "PLAYLIST_SCROLL_UP", "playlist", + cb_playlist_scroll_up, player); } void refresh_volume(ePlayer *player, int read) { =================================================================== RCS file: /cvsroot/enlightenment/misc/eplayer/src/vorbis.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- vorbis.c 17 Oct 2003 17:00:30 -0000 1.7 +++ vorbis.c 17 Oct 2003 23:46:20 -0000 1.8 @@ -85,6 +85,7 @@ * @param player */ void track_close(ePlayer *player) { + ao_close(player->ao_dev); ov_clear(&player->current_track); } |
From: <enl...@li...> - 2003-10-18 00:34:24
|
Enlightenment CVS committal Author : tsauerbeck Project : misc Module : eplayer Dir : misc/eplayer Modified Files: ChangeLog Log Message: Fixed a memory leak which was caused by not calling ao_close() in track_close(), check ao_default_driver_id() on startup, playlist can be scrolled using the mousewheel now =================================================================== RCS file: /cvsroot/enlightenment/misc/eplayer/ChangeLog,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- ChangeLog 17 Oct 2003 17:00:25 -0000 1.7 +++ ChangeLog 17 Oct 2003 23:46:20 -0000 1.8 @@ -1,4 +1,4 @@ -$Id: ChangeLog,v 1.7 2003/10/17 17:00:25 tsauerbeck Exp $ +$Id: ChangeLog,v 1.8 2003/10/17 23:46:20 tsauerbeck Exp $ 2003-10-17 Tilman Sauerbeck <ti...@co...> * src/mixer.c, src/mixer.h, src/eplayer.c, src/callbacks.c, @@ -10,6 +10,11 @@ period now * src/vorbis.c, src/eplayer.c: Tidied up libao calls * data/eplayer.edc: buttons emit their signals on mouse_up now + * src/vorbis.c: Fixed a memory leak which was caused by not + calling ao_close() in track_close() + * data/eplayer.edc, src/callbacks.c, src/interface.c: + The playlist can be scrolled using the mousewheel now + * src/eplayer.c: check ao_default_driver_id() on startup 2003-10-16 Tilman Sauerbeck <ti...@co...> * configure.ac: Added endianess-check, added --enable-debug |
From: <enl...@li...> - 2003-10-18 00:49:41
|
Enlightenment CVS committal Author : tsauerbeck Project : misc Module : eplayer Dir : misc/eplayer/data Modified Files: eplayer.edc eplayer.eet Log Message: Fixed a memory leak which was caused by not calling ao_close() in track_close(), check ao_default_driver_id() on startup, playlist can be scrolled using the mousewheel now =================================================================== RCS file: /cvsroot/enlightenment/misc/eplayer/data/eplayer.edc,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- eplayer.edc 17 Oct 2003 21:54:44 -0000 1.4 +++ eplayer.edc 17 Oct 2003 23:46:20 -0000 1.5 @@ -1103,7 +1103,7 @@ part { name, "playlist"; type, RECT; - mouse_events, 0; + mouse_events, 1; description { state, "default" 0.0; @@ -1435,6 +1435,20 @@ action, SIGNAL_EMIT "VOL_DECR" "vol_decr_button"; } + program { + name, "playlist_scroll_up"; + signal, "mouse,wheel,0,-1"; + source, "playlist"; + action, SIGNAL_EMIT "PLAYLIST_SCROLL_UP" "playlist"; + } + + program { + name, "playlist_scroll_down"; + signal, "mouse,wheel,0,1"; + source, "playlist"; + action, SIGNAL_EMIT "PLAYLIST_SCROLL_DOWN" "playlist"; + } + program { name, "vol_decr_sig_wheel1"; signal, "mouse,wheel,0,-1"; @@ -1448,7 +1462,6 @@ source, "vol_decr_button"; action, SIGNAL_EMIT "VOL_DECR" "vol_decr_button"; } - } /* Close Programs */ } /* Close Group */ @@ -1461,7 +1474,7 @@ part { name, "text"; type, TEXT; - mouse_events, 0; + mouse_events, 1; description { color, 181 247 255 255; @@ -1475,6 +1488,22 @@ } } } + + programs { + program { + name, "text_scroll_up"; + signal, "mouse,wheel,0,-1"; + source, "text"; + action, SIGNAL_EMIT "PLAYLIST_SCROLL_UP" "text"; + } + + program { + name, "text_scroll_down"; + signal, "mouse,wheel,0,1"; + source, "text"; + action, SIGNAL_EMIT "PLAYLIST_SCROLL_DOWN" "text"; + } + } } group { @@ -1486,7 +1515,7 @@ part { name, "text"; type, TEXT; - mouse_events, 0; + mouse_events, 1; description { color, 181 247 255 255; @@ -1498,6 +1527,22 @@ align, 0.0 0.0; } } + } + } + + programs { + program { + name, "length_scroll_up"; + signal, "mouse,wheel,0,-1"; + source, "text"; + action, SIGNAL_EMIT "PLAYLIST_SCROLL_UP" "text"; + } + + program { + name, "length_scroll_down"; + signal, "mouse,wheel,0,1"; + source, "text"; + action, SIGNAL_EMIT "PLAYLIST_SCROLL_DOWN" "text"; } } } =================================================================== RCS file: /cvsroot/enlightenment/misc/eplayer/data/eplayer.eet,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 Binary files /tmp/cvsGQHRgD and /tmp/cvsySURN5 differ |
From: <enl...@li...> - 2003-10-19 07:15:50
|
Enlightenment CVS committal Author : tsauerbeck Project : misc Module : eplayer Dir : misc/eplayer/src Modified Files: callbacks.c vorbis.c Log Message: cb_track_next() silently moves to the beginning of the playlist now, without starting playback. cb_track_prev() does nothing when it's called on the beginning of the playlist. track_open() now initializes the time_text part. =================================================================== RCS file: /cvsroot/enlightenment/misc/eplayer/src/callbacks.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- callbacks.c 17 Oct 2003 23:46:20 -0000 1.5 +++ callbacks.c 18 Oct 2003 15:24:30 -0000 1.6 @@ -36,6 +36,15 @@ paused = !paused; } +/** + * Moves to the next track and plays it, except when we're going + * back to the beginning of the playlist. + * + * @param player + * @param e + * @param obj + * @param event_info + */ void cb_track_next(ePlayer *player, Evas *e, Evas_Object *obj, void *event_info) { #ifdef DEBUG @@ -44,27 +53,16 @@ eplayer_playback_stop(player, 0); - /* Get the next list item */ - player->playlist->cur_item = player->playlist->cur_item->next; - - if (!player->playlist->cur_item) { -#ifdef DEBUG - printf("\n\nDEBUG: Youve hit the end of the list!!! \n\n"); -#endif - - edje_object_part_text_set(player->gui.edje, "artist_name", "*****************************"); - edje_object_part_text_set(player->gui.edje, "album_name", " END OF THE ROAD "); - edje_object_part_text_set(player->gui.edje, "song_name", "*****************************"); - edje_object_part_text_set(player->gui.edje, "time_text", "DAS:EN:DE"); - - /* Since we hit the end, start from the beginning. */ + if (player->playlist->cur_item->next) { + player->playlist->cur_item = player->playlist->cur_item->next; + eplayer_playback_start(player, 1); + } else { + /* there's no next item, so move to the beginning again + * but don't start playing yet. + */ player->playlist->cur_item = player->playlist->items; - - return; - } - - /* Start the play loop */ - eplayer_playback_start(player, 1); + track_open(player); /* refresh track info parts */ + } } void cb_track_prev(ePlayer *player, Evas *e, Evas_Object *obj, @@ -73,15 +71,15 @@ printf("DEBUG: Previous File Called\n"); #endif - eplayer_playback_stop(player, 0); - - /* Get the previous list item */ + /* first item on the list: do nothing */ if (!player->playlist->cur_item->prev) return; + eplayer_playback_stop(player, 0); + + /* Get the previous list item */ player->playlist->cur_item = player->playlist->cur_item->prev; - /* Start the play loop */ eplayer_playback_start(player, 1); } =================================================================== RCS file: /cvsroot/enlightenment/misc/eplayer/src/vorbis.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -3 -r1.8 -r1.9 --- vorbis.c 17 Oct 2003 23:46:20 -0000 1.8 +++ vorbis.c 18 Oct 2003 15:24:30 -0000 1.9 @@ -110,6 +110,7 @@ edje_object_part_text_set(player->gui.edje, "song_name", pli->title); edje_object_part_text_set(player->gui.edje, "artist_name", pli->artist); edje_object_part_text_set(player->gui.edje, "album_name", pli->album); + edje_object_part_text_set(player->gui.edje, "time_text", "0:00"); setup_ao(player); } |
From: <enl...@li...> - 2003-10-19 09:45:56
|
Enlightenment CVS committal Author : tsauerbeck Project : misc Module : eplayer Dir : misc/eplayer Modified Files: ChangeLog Log Message: cb_track_next() silently moves to the beginning of the playlist now, without starting playback. cb_track_prev() does nothing when it's called on the beginning of the playlist. track_open() now initializes the time_text part. =================================================================== RCS file: /cvsroot/enlightenment/misc/eplayer/ChangeLog,v retrieving revision 1.8 retrieving revision 1.9 diff -u -3 -r1.8 -r1.9 --- ChangeLog 17 Oct 2003 23:46:20 -0000 1.8 +++ ChangeLog 18 Oct 2003 15:25:35 -0000 1.9 @@ -1,4 +1,13 @@ -$Id: ChangeLog,v 1.8 2003/10/17 23:46:20 tsauerbeck Exp $ +$Id: ChangeLog,v 1.9 2003/10/18 15:25:35 tsauerbeck Exp $ + +2003-10-18 Tilman Sauerbeck <ti...@co...> + * src/vorbis.c: track_open() initializes the "time_text" + part, too + * src/callbacks.c: when cb_track_next() is called after the + last playlist item, it moves to the beginning again, without + starting playback. + * src/callbacks.c: cb_track_prev() does nothing when it's + called on the beginning of the playlist 2003-10-17 Tilman Sauerbeck <ti...@co...> * src/mixer.c, src/mixer.h, src/eplayer.c, src/callbacks.c, |