From f7ea41a4ff0fc39672e5ad60ed258aab7bf97e18 Mon Sep 17 00:00:00 2001 From: w1z7ard Date: Fri, 23 May 2008 03:58:40 +0000 Subject: [PATCH] added rudimentary cmake file for the new alsa input / libvis port git-svn-id: https://projectm.svn.sourceforge.net/svnroot/projectm/trunk@1021 6778bc44-b910-0410-a7a0-be141de4315d --- src/CMakeLists.txt | 5 + src/projectM-libvisual-alsa/CMakeLists.txt | 41 +++++ .../projectM-libvisual-alsa.c | 174 ++++++++++++++++++ .../projectM-libvisual-alsa.desktop | 8 + 4 files changed, 228 insertions(+) create mode 100644 src/projectM-libvisual-alsa/CMakeLists.txt create mode 100644 src/projectM-libvisual-alsa/projectM-libvisual-alsa.c create mode 100644 src/projectM-libvisual-alsa/projectM-libvisual-alsa.desktop diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5bf263227..cc4758707 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -3,6 +3,7 @@ project (PROJECTM_ROOT) OPTION(INCLUDE-PROJECTM-QT "Build the projectM Qt4 user interface extension library (recommended)" ON) OPTION(INCLUDE-PROJECTM-PULSEAUDIO "Build the projectM pulse audio client (recommended for fedora users)" ON) OPTION(INCLUDE-PROJECTM-LIBVISUAL "Build the projectM libvisual client" ON) +OPTION(INCLUDE-PROJECTM-LIBVISUAL-ALSA "Build experimental libvisual / alsa input standalone client (NEW!)" OFF) OPTION(INCLUDE-PROJECTM-JACK "Build the projectM JACK client" OFF) OPTION(INCLUDE-PROJECTM-TEST "Build the projectM test suite" ON) OPTION(INCLUDE-PROJECTM-XMMS "Build the projectM xmms module (deprecated, use audacious instead)" OFF) @@ -32,3 +33,7 @@ endif (INCLUDE-PROJECTM-XMMS) if (INCLUDE-PROJECTM-LIBVISUAL) add_subdirectory (projectM-libvisual) endif (INCLUDE-PROJECTM-LIBVISUAL) + +if (INCLUDE-PROJECTM-LIBVISUAL-ALSA) + add_subdirectory (projectM-libvisual-alsa) +endif (INCLUDE-PROJECTM-LIBVISUAL-ALSA) diff --git a/src/projectM-libvisual-alsa/CMakeLists.txt b/src/projectM-libvisual-alsa/CMakeLists.txt new file mode 100644 index 000000000..63cb3c000 --- /dev/null +++ b/src/projectM-libvisual-alsa/CMakeLists.txt @@ -0,0 +1,41 @@ +PROJECT(projectM-libvisual-alsa) + +ADD_EXECUTABLE(projectM-libvisual-alsa projectM-libvisual-alsa.c display.c glxdriver.c x11driver.c sdldriver.c lv_x11_key.c) + +INCLUDE(FindPkgConfig.cmake) + +FIND_PACKAGE(OpenGL) +FIND_PACKAGE(SDL) +FIND_PACKAGE(X11) + +if (${CMAKE_PROJECT_NAME} MATCHES ${PROJECT_NAME}) + pkg_search_module(LIBPROJECTM REQUIRED libprojectM) +else (${CMAKE_PROJECT_NAME} MATCHES ${PROJECT_NAME}) + set(LIBPROJECTM_FOUND true) +endif(${CMAKE_PROJECT_NAME} MATCHES ${PROJECT_NAME}) + +if (LIBPROJECTM_FOUND) +MESSAGE (STATUS "[projectM-libvisual-alsa] projectM detected.") +else(LIBPROJECTM_FOUND) +MESSAGE (FATAL_ERROR "projectM NOT detected. Please install the projectM module or build from the top level projectM source directory.") +endif(LIBPROJECTM_FOUND) + +pkg_search_module(LIBVISUAL REQUIRED libvisual-0.4) + +if(LIBVISUAL_FOUND) +MESSAGE(STATUS "[projectM-libvisual] libvisual detected.") +else(LIBVISUAL_FOUND) +MESSAGE(FATAL_ERROR "libvisual 0.4 not found! Please visit http://libvisual.sf.net and download the module.") +endif(LIBVISUAL_FOUND) + +ADD_DEFINITIONS(-DLINUX -DPROJECTM_PREFIX='"${PROJECTM_PREFIX}"') + +INCLUDE_DIRECTORIES(${SDL_INCLUDE_DIR} ${LIBVISUAL_INCLUDEDIR} ${X11_INCLUDE_DIR}) + +LINK_DIRECTORIES(${LIBVISUAL_LDFLAGS}) + +TARGET_LINK_LIBRARIES(projectM-libvisual-alsa -lXxf86vm -L/usr/X11R6/lib ${OPENGL_LIBRARIES} ${LIBVISUAL_LIBRARIES} ${X11_LIBRARIES} ${SDL_LIBRARY} ${GTK_LIBRARIES}) + +INSTALL(TARGETS projectM-libvisual-alsa DESTINATION ${CMAKE_INSTALL_PREFIX}/bin ) +install(FILES "projectM-libvisual-alsa.desktop" DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications) + diff --git a/src/projectM-libvisual-alsa/projectM-libvisual-alsa.c b/src/projectM-libvisual-alsa/projectM-libvisual-alsa.c new file mode 100644 index 000000000..97495e955 --- /dev/null +++ b/src/projectM-libvisual-alsa/projectM-libvisual-alsa.c @@ -0,0 +1,174 @@ +/* When using the sdl driver and Xgl, sdl will show a nice empty window. Be sure to set the: + * XLIB_SKIP_ARGB_VISUALS environment variable to 1 + */ + +#include + +#include + + +#include "display.h" +#include "sdldriver.h" +#include "x11driver.h" +#include "glxdriver.h" + + +int main (int argc, char **argv) +{ + SADisplay *display; + VisVideo *video; + + VisInput *input; + VisActor *actor; + VisEventQueue *localqueue; + VisVideoAttributeOptions *vidoptions; + + int running = TRUE; + int fullscreen = FALSE; + int visible = TRUE; + + VisVideoDepth depth; + + //visual_mem_alloc_install_vtable (visual_mem_alloc_vtable_profile ()); + + visual_init (&argc, &argv); + + display = display_new (sdl_driver_new ()); + + /* Libvisual stuff */ + if (argc > 1) + actor = visual_actor_new (argv[1]); + else + actor = visual_actor_new ("projectM"); + + + if (argc > 3) { + depth = visual_video_depth_enum_from_value (atoi (argv[3])); + } else + depth = visual_video_depth_get_highest (visual_actor_get_supported_depth (actor)); + + vidoptions = visual_actor_get_video_attribute_options (actor); + + display_create (display, depth, vidoptions, 480, 360, TRUE); + + visual_actor_realize (actor); + + video = display_get_video (display); + + visual_actor_set_video (actor, video); + visual_actor_video_negotiate (actor, 0, FALSE, FALSE); + + if (argc > 2) + input = visual_input_new (argv[2]); + else + input = visual_input_new ("alsa"); + + visual_input_realize (input); + + localqueue = visual_event_queue_new (); + + while (running) { + VisEventQueue *pluginqueue; + VisEvent *ev; + + /* Handle all events */ + display_drain_events (display, localqueue); + + pluginqueue = visual_plugin_get_eventqueue (visual_actor_get_plugin (actor)); + while (visual_event_queue_poll_by_reference (localqueue, &ev)) { + + if (ev->type != VISUAL_EVENT_RESIZE) + visual_event_queue_add (pluginqueue, ev); + + switch (ev->type) { + case VISUAL_EVENT_RESIZE: + video = display_get_video (display); + visual_actor_set_video (actor, video); + + visual_actor_video_negotiate (actor, depth, FALSE, FALSE); + break; + + case VISUAL_EVENT_MOUSEMOTION: + break; + + case VISUAL_EVENT_MOUSEBUTTONDOWN: + + break; + + case VISUAL_EVENT_MOUSEBUTTONUP: + break; + + case VISUAL_EVENT_KEYDOWN: + switch (ev->event.keyboard.keysym.sym) { + case VKEY_ESCAPE: + running = FALSE; + break; + + case VKEY_TAB: + fullscreen = !fullscreen; + + display_set_fullscreen (display, fullscreen, TRUE); + + /* Resync video */ + video = display_get_video (display); + visual_actor_set_video (actor, video); + + visual_actor_video_negotiate (actor, depth, FALSE, FALSE); + + break; + + default: + printf ("key: %c\n", ev->event.keyboard.keysym.sym); + break; + } + + break; + + case VISUAL_EVENT_KEYUP: + break; + + case VISUAL_EVENT_QUIT: + running = FALSE; + break; + + case VISUAL_EVENT_VISIBILITY: + visible = ev->event.visibility.is_visible; + break; + + default: + break; + } + } + + if (visible == FALSE) { + visual_input_run (input); + + visual_time_usleep (10000); + + continue; + } + + /* Do a run cycle */ + visual_input_run (input); + + display_lock (display); + visual_actor_run (actor, input->audio); + display_unlock (display); + + display_update_all (display); + + display_fps_limit (display, 30); + } + + /* Termination procedure */ + display_set_fullscreen (display, FALSE, TRUE); + display_close (display); + + visual_quit (); + + //visual_mem_alloc_profile (); + + printf ("Total frames: %d, average fps: %f\n", display_fps_total (display), display_fps_average (display)); + + return 0; +} diff --git a/src/projectM-libvisual-alsa/projectM-libvisual-alsa.desktop b/src/projectM-libvisual-alsa/projectM-libvisual-alsa.desktop new file mode 100644 index 000000000..7a75d1605 --- /dev/null +++ b/src/projectM-libvisual-alsa/projectM-libvisual-alsa.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=projectM-jack +Comment=A milkdrop based music visualizer using alsa input and libvisual +Exec=/usr/bin/projectM-libvisual-alsa +Icon=prjm16-transparent.svg +Type=Application +Categories=Application;AudioVideo;Audio; +