Provide option to enable/disable webcam (disabled by default).

This commit is contained in:
Andrzej Kapolka 2013-06-19 10:46:54 -07:00
parent dbde66cbd5
commit 352f7ca3cf
3 changed files with 20 additions and 12 deletions

View file

@ -1241,8 +1241,8 @@ void Application::initMenu() {
(_gravityUse = optionsMenu->addAction("Use Gravity"))->setCheckable(true);
_gravityUse->setChecked(true);
_gravityUse->setShortcut(Qt::SHIFT | Qt::Key_G);
(_fullScreenMode = optionsMenu->addAction("Fullscreen", this, SLOT(setFullscreen(bool)), Qt::Key_F))->setCheckable(true);
optionsMenu->addAction("Webcam", &_webcam, SLOT(setEnabled(bool)))->setCheckable(true);
QMenu* renderMenu = menuBar->addMenu("Render");
(_renderVoxels = renderMenu->addAction("Voxels"))->setCheckable(true);
@ -1416,8 +1416,6 @@ void Application::init() {
QMetaObject::invokeMethod(_fullScreenMode, "trigger", Qt::QueuedConnection);
}
_webcam.init();
gettimeofday(&_timerStart, NULL);
gettimeofday(&_lastTimeIdle, NULL);

View file

@ -20,22 +20,31 @@
#include "Application.h"
#include "Webcam.h"
Webcam::Webcam() : _frameTextureID(0), _startTimestamp(0), _frameCount(0) {
Webcam::Webcam() : _enabled(false), _frameTextureID(0) {
// the grabber simply runs as fast as possible
_grabber = new FrameGrabber();
_grabber->moveToThread(&_grabberThread);
}
void Webcam::init() {
// start the grabber thread
_grabberThread.start();
void Webcam::setEnabled(bool enabled) {
if (_enabled == enabled) {
return;
}
if (_enabled = enabled) {
_grabberThread.start();
_startTimestamp = 0;
_frameCount = 0;
// let the grabber know we're ready for the first frame
QMetaObject::invokeMethod(_grabber, "grabFrame");
// let the grabber know we're ready for the first frame
QMetaObject::invokeMethod(_grabber, "grabFrame");
} else {
_grabberThread.quit();
}
}
void Webcam::renderPreview(int screenWidth, int screenHeight) {
if (_frameTextureID != 0) {
if (_enabled && _frameTextureID != 0) {
glBindTexture(GL_TEXTURE_2D, _frameTextureID);
glEnable(GL_TEXTURE_2D);
glColor3f(1.0f, 1.0f, 1.0f);
@ -125,7 +134,7 @@ void FrameGrabber::grabFrame() {
cvSetCaptureProperty(_capture, CV_CAP_PROP_FRAME_HEIGHT, IDEAL_FRAME_HEIGHT);
#ifdef __APPLE__
configureCamera(0x5ac, 0x8510, 0, 0.9, 0.5, 0.5, 0.5, 1, 0.5);
configureCamera(0x5ac, 0x8510, true, 0.5, 0.5, 0.5, 0.5, false, 0.5);
#endif
}
IplImage* image = cvQueryFrame(_capture);

View file

@ -28,11 +28,11 @@ public:
Webcam();
~Webcam();
void init();
void renderPreview(int screenWidth, int screenHeight);
public slots:
void setEnabled(bool enabled);
void setFrame(void* image);
private:
@ -40,6 +40,7 @@ private:
QThread _grabberThread;
FrameGrabber* _grabber;
bool _enabled;
int _frameWidth;
int _frameHeight;
GLuint _frameTextureID;