File indexing completed on 2024-05-05 09:08:38
0001 /*************************************************************************** 0002 * Copyright (C) 2005-2017 by Linuxstopmotion contributors; * 0003 * see the AUTHORS file for details. * 0004 * * 0005 * This program is free software; you can redistribute it and/or modify * 0006 * it under the terms of the GNU General Public License as published by * 0007 * the Free Software Foundation; either version 2 of the License, or * 0008 * (at your option) any later version. * 0009 * * 0010 * This program is distributed in the hope that it will be useful, * 0011 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 0012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 0013 * GNU General Public License for more details. * 0014 * * 0015 * You should have received a copy of the GNU General Public License * 0016 * along with this program; if not, write to the * 0017 * Free Software Foundation, Inc., * 0018 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * 0019 ***************************************************************************/ 0020 #include "camerahandler.h" 0021 0022 #include <QTimer> 0023 #include <QPushButton> 0024 #include <QPixmap> 0025 0026 #include "modelhandler.h" 0027 #include "workspacefile.h" 0028 #include "frontends/frontend.h" 0029 #include "graphics/icons/cameraoff.xpm" 0030 #include "graphics/icons/cameraon.xpm" 0031 #include "src/domain/domainfacade.h" 0032 #include "src/foundation/logger.h" 0033 #include "src/foundation/preferencestool.h" 0034 #include "src/foundation/uiexception.h" 0035 #include "src/presentation/frontends/qtfrontend/frameview.h" 0036 0037 0038 CameraHandler::CameraHandler ( QObject *parent, QStatusBar *sb, 0039 ModelHandler* modelHandler, const char *name) 0040 : QObject(parent), statusBar(sb), cameraButton(0), timer(0), 0041 capturedFile(WorkspaceFile::capturedImage), isCameraOn(false), 0042 modelHandler(modelHandler), frameView(0) { 0043 timer = new QTimer(this); 0044 timer->setSingleShot(true); 0045 QObject::connect( timer, SIGNAL(timeout()), this, SLOT(storeFrame()) ); 0046 setObjectName(name); 0047 } 0048 0049 0050 CameraHandler::~CameraHandler( ) { 0051 } 0052 0053 0054 void CameraHandler::setFrameView( FrameView * frameView ) 0055 { 0056 this->frameView = frameView; 0057 } 0058 0059 0060 void CameraHandler::setCameraButton( QPushButton *cameraButton ) 0061 { 0062 this->cameraButton = cameraButton; 0063 } 0064 0065 0066 bool CameraHandler::setViewMode(int mode) 0067 { 0068 return frameView->setViewMode((FrameView::ImageMode) mode); 0069 } 0070 0071 0072 void CameraHandler::cameraOn() 0073 { 0074 DomainFacade::getFacade()->getFrontend()->showProgress( 0075 Frontend::connectingCamera); 0076 cameraButton->setIcon( QPixmap(cameraoff) ); 0077 isCameraOn = frameView->on(); 0078 if (!isCameraOn) { 0079 cameraOff(); 0080 } else { 0081 emit cameraStateChanged(true); 0082 } 0083 DomainFacade::getFacade()->getFrontend()->hideProgress(); 0084 } 0085 0086 0087 void CameraHandler::cameraOff() 0088 { 0089 cameraButton->setIcon( QPixmap(cameraon) ); 0090 frameView->off(); 0091 isCameraOn = false; 0092 emit cameraStateChanged(false); 0093 } 0094 0095 0096 void CameraHandler::toggleCamera() 0097 { 0098 if(isCameraOn == false) { 0099 Logger::get().logDebug("Playing video from webcam"); 0100 cameraOn(); 0101 } 0102 else { 0103 cameraOff(); 0104 } 0105 } 0106 0107 0108 void CameraHandler::captureFrame() 0109 { 0110 Logger::get().logDebug("Capturing image from webcam"); 0111 timer->start(60); 0112 } 0113 0114 0115 void CameraHandler::storeFrame() 0116 { 0117 QImage i; 0118 const char* path = capturedFile.path(); 0119 i.load(path); 0120 if ( !i.isNull() ) { 0121 modelHandler->addFrame(path); 0122 emit capturedFrame(); 0123 } else { 0124 timer->start(60); 0125 } 0126 } 0127 0128 0129 void CameraHandler::switchToVideoView() 0130 { 0131 cameraButton->setEnabled(true); 0132 emit cameraStateChanged(true); 0133 DomainFacade::getFacade()->getFrontend()->hideProgress(); 0134 } 0135 0136 0137 void CameraHandler::setMixCount(int mixCount) 0138 { 0139 frameView->setMixCount(mixCount); 0140 0141 PreferencesTool* preferences = PreferencesTool::get(); 0142 switch( frameView->getViewMode() ) { 0143 case 0: 0144 { 0145 preferences->setPreference("mixcount", mixCount); 0146 break; 0147 } 0148 case 2: 0149 { 0150 preferences->setPreference("playbackcount", mixCount); 0151 break; 0152 } 0153 } 0154 try { 0155 preferences->flush(); 0156 } catch (UiException& ex) { 0157 DomainFacade::getFacade()->getFrontend()->handleException(ex); 0158 } 0159 } 0160 0161 0162 bool CameraHandler::isCameraRunning() 0163 { 0164 return isCameraOn; 0165 } 0166 0167 0168 void CameraHandler::setPlaybackSpeed(int playBackSpeed) 0169 { 0170 frameView->setPlaybackSpeed(playBackSpeed); 0171 }