|
From: Tapio V. <aa...@us...> - 2010-05-16 16:31:09
|
Module: performous
Branch: instrumentgraph
Commit: 3d4d8058f480f6813bcafbdb28ec115fa52425ba
Author: Tapio Vierros <tap...@gm...>
Date: Sun May 9 21:48:42 2010 +0300
Make OpenCV (and thus webcam support) optional (in style of MIDI drum support).
---
game/CMakeLists.txt | 16 ++++++++++++----
game/screen_sing.cc | 2 ++
game/webcam.cc | 17 ++++++++++++++---
game/webcam.hh | 7 ++++++-
4 files changed, 34 insertions(+), 8 deletions(-)
diff --git a/game/CMakeLists.txt b/game/CMakeLists.txt
index ee87468..06c2b2a 100644
--- a/game/CMakeLists.txt
+++ b/game/CMakeLists.txt
@@ -79,16 +79,13 @@ else()
endif()
# Find all the libs that don't require extra parameters
-foreach(lib ${OUR_LIBS} SDL PangoCairo LibRSVG LibXML++ GLEW AVFormat SWScale OpenGL Z Jpeg Png OpenCV)
+foreach(lib ${OUR_LIBS} SDL PangoCairo LibRSVG LibXML++ GLEW AVFormat SWScale OpenGL Z Jpeg Png)
find_package(${lib} REQUIRED)
include_directories(${${lib}_INCLUDE_DIRS})
list(APPEND LIBS ${${lib}_LIBRARIES})
add_definitions(${${lib}_DEFINITIONS})
endforeach(lib)
- include_directories(${OpenCV_INCLUDE_DIR})
- list(APPEND LIBS ${OpenCV_cv_LIBRARY} ${OpenCV_cvcore_LIBRARY} ${OpenCV_highgui_LIBRARY})
-
find_package(Gettext)
if(Gettext_FOUND)
include_directories(${Gettext_INCLUDE_DIRS})
@@ -109,6 +106,17 @@ else()
message(STATUS "MIDI I/O: Disabled (libportmidi not found)")
endif()
+find_package(OpenCV)
+if(OpenCV_FOUND)
+ include_directories(${OpenCV_INCLUDE_DIRS})
+ list(APPEND LIBS ${OpenCV_LIBRARIES})
+ add_definitions("-DUSE_OPENCV")
+ message(STATUS "Webcam support: Enabled")
+else()
+ message(STATUS "Webcam support: Disabled (libcv not found)")
+endif()
+
+
# Set default compile flags for GCC
if(CMAKE_COMPILER_IS_GNUCXX)
message(STATUS "GCC detected, adding compile flags")
diff --git a/game/screen_sing.cc b/game/screen_sing.cc
index d7e18e2..fec2a0c 100644
--- a/game/screen_sing.cc
+++ b/game/screen_sing.cc
@@ -247,7 +247,9 @@ void ScreenSing::manageEvent(SDL_Event event) {
if (key == SDLK_v) m_audio.streamFade("vocals", event.key.keysym.mod & KMOD_SHIFT ? 1.0 : 0.0);
if (key == SDLK_k) dispInFlash(++config["game/karaoke_mode"]); // Toggle karaoke mode
if (key == SDLK_w) dispInFlash(++config["game/pitch"]); // Toggle pitch wave
+ #ifdef USE_OPENCV
if (key == SDLK_a) dispInFlash(++config["graphic/webcam"]); // Toggle webcam
+ #endif
// Latency settings
if (key == SDLK_F1) dispInFlash(--config["audio/video_delay"]);
if (key == SDLK_F2) dispInFlash(++config["audio/video_delay"]);
diff --git a/game/webcam.cc b/game/webcam.cc
index 5595309..aa35dd0 100644
--- a/game/webcam.cc
+++ b/game/webcam.cc
@@ -3,15 +3,23 @@
#include "webcam.hh"
Webcam::Webcam(int cam_id): m_capture(NULL), m_timestamp(0) {
+ #ifdef USE_OPENCV
m_capture = cvCaptureFromCAM(cam_id);
- if (!m_capture) {
+ if (!m_capture)
std::cout << "Could not initialize webcam capturing!" << std::endl;
- return;
- }
+ #else
+ ++cam_id; // dummy
+ #endif
}
+Webcam::~Webcam() {
+ #ifdef USE_OPENCV
+ cvReleaseCapture(&m_capture);
+ #endif
+}
void Webcam::render(double time) {
+ #ifdef USE_OPENCV
if (!m_capture) return;
IplImage* frame = 0;
if (time > m_timestamp + 0.5) {
@@ -21,4 +29,7 @@ void Webcam::render(double time) {
m_timestamp = time;
}
m_surface.draw();
+ #else
+ ++time; // dummy
+ #endif
}
diff --git a/game/webcam.hh b/game/webcam.hh
index e1b7ce4..b64bece 100644
--- a/game/webcam.hh
+++ b/game/webcam.hh
@@ -1,6 +1,11 @@
+#pragma once
+#ifdef USE_OPENCV
#include <cv.h>
#include <highgui.h>
+#else
+typedef void CvCapture;
+#endif
#include "surface.hh"
@@ -9,7 +14,7 @@ class Webcam {
/// cam_id -1 means pick any device
Webcam(int cam_id = -1);
- ~Webcam() { cvReleaseCapture(&m_capture); }
+ ~Webcam();
/// Is good?
bool operator()() { return m_capture != 0; }
|