Пример #1
0
void IOServicePool::join() {
    // Other threads won't work if they still have work
    stopWork();

    for(ThreadList::iterator it = mThreads.begin(); it != mThreads.end(); it++)
        (*it)->join();
}
bool ControlCubeCache::stopCache()
{
	if (cudaSuccess != cudaStreamDestroy(_stream))
	{
		std::cerr<<"Control Cube Cache, cuda create stream error: "<<cudaGetErrorString(cudaGetLastError())<<std::endl;
		return false;
	}

	return stopWork();
}
Пример #3
0
    void run() {
        for (int i = 0; i < Manager::WorkerCount; ++i) {
            auto w = new Worker();
            connect(this, SIGNAL(startWork()), w, SLOT(doWork()));
            connect(this, SIGNAL(stopWork()), w, SLOT(stop()));
            connect(this, SIGNAL(finished()), w, SLOT(deleteLater()));
            workers_ << w;
        }

        exec();
    }
BlueCoreDeviceController_newStyle::Implementation::~Implementation( )
{
    //  stop the world, I want to get off.
    if ( mConnectionToChip )
        mConnectionToChip->stop();
    if ( mConnectionOnOffer )
        mConnectionOnOffer->stop();
    stopWork();

    //  now the world is stopped, delete it all...
    for ( int i = 0 ; i < PDU::csr_hci_extensions_count ; i++ )
        delete pending[i];
    delete offered;
    delete mConnectionToChip;
    delete mConnectionOnOffer;
}
SWCreateAvatarInterface::SWCreateAvatarInterface(QApplication *parent) :  m_uiCreateAvatar(new Ui::SWUI_WCreateAvatar),
    m_oTimer(new QBasicTimer), m_bGLFullScreen(false)
{
    // set absolute path
        m_absolutePath = QDir::currentPath() + "/";

    m_bWorkStarted = false;
    m_bResetKinect = false;

    // init rects
        m_oFaceRect.width = 0;
        m_oNoseRect.width = 0;

	// init main widget
    m_uiCreateAvatar->setupUi(this);
	this->setWindowTitle(QString("SWoOz : Create avatar"));
    this->setWindowIcon(QIcon(m_absolutePath + "../data/images/logos/icon_swooz_avatar.png"));

	// init opengl context
    QHBoxLayout *l_pGLContainerLayout = new QHBoxLayout();
    l_pGLContainerLayout->layout()->setContentsMargins(0,0,0,0);
    m_pGLContainer = new QWidget();
    QGLFormat l_glFormat;
    l_glFormat.setVersion( 4, 3 );
    l_glFormat.setProfile(QGLFormat::CompatibilityProfile);
    l_glFormat.setSampleBuffers(true);
    QGLContext *l_glContext1 = new QGLContext(l_glFormat);
    QGLContext *l_glContext2 = new QGLContext(l_glFormat);
		
	// add widgets
	//	display widgets
    //      rgb
    m_WRGBDisplay =  new SWDisplayImageWidget(this);
    m_uiCreateAvatar->hlRGB->addWidget(m_WRGBDisplay);
    //      radial proj
    m_WRadialProjDisplay =  new SWDisplayImageWidget(this, false, true);
    m_uiCreateAvatar->hlRadial->addWidget(m_WRadialProjDisplay);
    //      face texture
    m_WFaceTextureDisplay =  new SWDisplayImageWidget(this);
    m_uiCreateAvatar->hlFaceTexture->addWidget(m_WFaceTextureDisplay);

    //	cloud gl widget
    m_WCloudGL = new SWGLCloudWidget(l_glContext1, this);
    m_WCloudGL->setCameraMode(SWQtCamera::TRACKBALL_CAMERA);
//    m_WCloudGL->setMaximumSize(640,480);
    m_uiCreateAvatar->hlCloud->addWidget(m_WCloudGL);
    // mesh gl widget
    m_WMeshGL = new SWGLMeshWidget(l_glContext2, this, m_absolutePath + "../data/shaders/createAvatarMesh.vert", m_absolutePath + "../data/shaders/createAvatarMesh.frag");
    m_WMeshGL->setCameraMode(SWQtCamera::TRACKBALL_CAMERA);


    m_pGLContainer->setLayout(l_pGLContainerLayout);
    l_pGLContainerLayout->addWidget(m_WMeshGL);
    m_uiCreateAvatar->hlMesh->addWidget(m_pGLContainer);

	// init workers
    m_WCreateAvatar = new SWCreateAvatarWorker(&m_oKinectThread);

    // set connections
    //      menu
        QObject::connect(m_uiCreateAvatar->actionExit, SIGNAL(triggered()), parent, SLOT(quit()));
        QObject::connect(m_uiCreateAvatar->actionOnline_documentation, SIGNAL(triggered()), this, SLOT(openOnlineDocumentation()));
        QObject::connect(m_uiCreateAvatar->actionSave_result, SIGNAL(triggered()), this, SLOT(saveMeshFile()));
        QObject::connect(m_uiCreateAvatar->actionAbout, SIGNAL(triggered()), this, SLOT(openAboutWindow()));
    //      start work
        QObject::connect(m_uiCreateAvatar->pbStart, SIGNAL(clicked()), this, SLOT(startWork()));
        QObject::connect(this, SIGNAL(startWorkSignal()), m_WCreateAvatar, SLOT(doWork()));

    //      stop work
        QObject::connect(m_uiCreateAvatar->pbStop, SIGNAL(clicked()), m_WCreateAvatar, SLOT(stopWork()));
        QObject::connect(this, SIGNAL(leaveProgram()), m_WCreateAvatar, SLOT(stopWork()));
        QObject::connect(m_WCreateAvatar, SIGNAL(stopWorkSignal()), SLOT(switchDetect()));

    //      reconstruct
        QObject::connect(m_uiCreateAvatar->pbReconstruct, SIGNAL(clicked()), m_WCreateAvatar, SLOT(reconstruct()));

    //      reset selected contours
        QObject::connect(m_uiCreateAvatar->pbResetSelectedContours, SIGNAL(clicked()), m_WCreateAvatar,      SLOT(resetDeletedPointsRadialProj()));
        QObject::connect(m_uiCreateAvatar->pbResetSelectedContours, SIGNAL(clicked()), m_WRadialProjDisplay, SLOT(resetSelectedPoints()));

    //      rectangles
        QObject::connect(m_WCreateAvatar, SIGNAL(sendFaceRect(cv::Rect*)), this, SLOT(updateFaceRectangle(cv::Rect*)));
        QObject::connect(m_WCreateAvatar, SIGNAL(sendNoseRect(cv::Rect*)), this, SLOT(updateNoseRectangle(cv::Rect*)));

    //      stasmm points
        QObject::connect(m_WCreateAvatar, SIGNAL(sendStasmPoints(std::vector<cv::Point2i>)), this, SLOT(updateStasmPoints(std::vector<cv::Point2i>)));

    //      cloud
        QObject::connect(m_WCreateAvatar, SIGNAL(sendCloud(swCloud::SWCloud*, bool)), m_WCloudGL, SLOT(setCloud(swCloud::SWCloud*, bool)));

    //      mesh
        QObject::connect(m_WCreateAvatar, SIGNAL(sendMesh(swMesh::SWMesh*,bool)), m_WMeshGL, SLOT(setMesh(swMesh::SWMesh*,bool)));
        QObject::connect(m_uiCreateAvatar->pbSaveAvatar, SIGNAL(clicked()), this,   SLOT(saveMeshFile()));
        QObject::connect(this,  SIGNAL(saveMeshFileSignal(QString)),  m_WCreateAvatar, SLOT(saveMeshFile(QString)));

    //      ui
        QObject::connect(m_WCreateAvatar, SIGNAL(switchTab(int)),m_uiCreateAvatar->tw3D,   SLOT(setCurrentIndex(int)));
        QObject::connect(m_WCreateAvatar, SIGNAL(enableInterfaceSignal()), this,   SLOT(enableInterface()));

    //      display
        QObject::connect(m_WCreateAvatar, SIGNAL(sendMat(cv::Mat*)),     this,  SLOT(updateRadialProjDisplay(cv::Mat*)));
        QObject::connect(m_WCreateAvatar, SIGNAL(sendTexture(cv::Mat*)), this,  SLOT(udpdateTexture3DDisplay(cv::Mat*)));        
        QObject::connect(m_WCreateAvatar, SIGNAL(sendTexture(cv::Mat*)), this,  SLOT(updateFaceTextureDisplay(cv::Mat*)));

    //      parameters
    //          projection
        QObject::connect(m_uiCreateAvatar->sbWidth,     SIGNAL(valueChanged(int)),  m_WCreateAvatar,  SLOT(setRadialWidth(const int)));
        QObject::connect(m_uiCreateAvatar->sbHeight,    SIGNAL(valueChanged(int)),  m_WCreateAvatar,  SLOT(setRadialHeight(const int)));
//        QObject::connect(m_uiCreateAvatar->dsbRadius,   SIGNAL(valueChanged(double)),m_WCreateAvatar, SLOT(setCylinderRadius(double)));
        QObject::connect(m_uiCreateAvatar->sbErode,     SIGNAL(valueChanged(int)),  m_WCreateAvatar,  SLOT(setErode(int)));
        QObject::connect(m_uiCreateAvatar->sbDilate,    SIGNAL(valueChanged(int)),  m_WCreateAvatar,  SLOT(setDilate(int)));
        QObject::connect(m_uiCreateAvatar->sbExpandValue,SIGNAL(valueChanged(int)), m_WCreateAvatar,  SLOT(setExpandValue(int)));
        QObject::connect(m_uiCreateAvatar->sbExpandConnex,SIGNAL(valueChanged(int)), m_WCreateAvatar,  SLOT(setExpandConnex(int)));
        QObject::connect(m_uiCreateAvatar->sbEraseValue,SIGNAL(valueChanged(int)), m_WCreateAvatar,  SLOT(setEraseValue(int)));
        QObject::connect(m_uiCreateAvatar->sbEraseConnex,SIGNAL(valueChanged(int)), m_WCreateAvatar,  SLOT(setEraseConnex(int)));
    //          filter
        QObject::connect(m_uiCreateAvatar->sbColor,     SIGNAL(valueChanged(int)),  m_WCreateAvatar,  SLOT(setBilateralColor(const int)));
        QObject::connect(m_uiCreateAvatar->sbSpace,     SIGNAL(valueChanged(int)),  m_WCreateAvatar,  SLOT(setBilateralSpace(const int)));
//        QObject::connect(m_uiCreateAvatar->sbDiameter,  SIGNAL(valueChanged(int)),  m_WCreateAvatar,  SLOT(setBilateralDiameter(const int)));
        QObject::connect(m_uiCreateAvatar->sbClouds,    SIGNAL(valueChanged(int)),  m_WCreateAvatar,  SLOT(setCloudNumberValue(const int)));
        QObject::connect(m_uiCreateAvatar->cbBilateralFilter,SIGNAL(toggled(bool)) ,m_WCreateAvatar,  SLOT(setUseBilateralFilter(bool)));
    //          rgbd device
        QObject::connect(m_uiCreateAvatar->sbXOffset,   SIGNAL(valueChanged(int)),  m_WCreateAvatar,  SLOT(setCalibrationXValue(const int)));
        QObject::connect(m_uiCreateAvatar->sbYOffset,   SIGNAL(valueChanged(int)),  m_WCreateAvatar,  SLOT(setCalibrationYValue(const int)));
        QObject::connect(m_uiCreateAvatar->dsbFaceDepth,SIGNAL(valueChanged(double)),  m_WCloudGL,      SLOT(setDepthRect(const double)));
        QObject::connect(m_uiCreateAvatar->dsbFaceDepth,SIGNAL(valueChanged(double)),  m_WCreateAvatar, SLOT(setDepthCloud(const double)));
    //          misc
        QObject::connect(m_uiCreateAvatar->cbSTASM,     SIGNAL(toggled(bool))      ,m_WCreateAvatar,  SLOT(setUseStasm(bool)));
    //          display
        QObject::connect(m_uiCreateAvatar->cbDisplayLines,   SIGNAL(toggled(bool)), m_WMeshGL,        SLOT(setMeshLinesRender(const bool)));
        QObject::connect(m_uiCreateAvatar->cbApplyTexture,   SIGNAL(toggled(bool)), m_WMeshGL,        SLOT(applyTexture(bool)));
//        QObject::connect(m_uiCreateAvatar->dsbFOV,      SIGNAL(valueChanged(double)),m_WMeshGL,       SLOT(setFOV(const double)));
//        QObject::connect(m_uiCreateAvatar->dsbFOV,      SIGNAL(valueChanged(double)),m_WCloudGL,      SLOT(setFOV(const double)));
        QObject::connect(m_WCreateAvatar,               SIGNAL(sendNumCloud(int)),  this,             SLOT(setNumCloud(const int)));

    //      reset kinect
        QObject::connect(m_uiCreateAvatar->sbDeviceMode,SIGNAL(valueChanged(int)),  this,             SLOT(resetKinect(int)));
        QObject::connect(m_WCreateAvatar,   SIGNAL(endResetKinect()),   this,       SLOT(releaseKinectMutex()));

    //      others
        QObject::connect(m_WRadialProjDisplay, SIGNAL(clickPoint(QPoint, QSize, bool)), m_WCreateAvatar,   SLOT(addPointToDeleteRadialProj(QPoint, QSize, bool)));

        // fullscreen
        QObject::connect(m_WMeshGL, SIGNAL(enableFullScreen()), this, SLOT(enableGLFullScreen()));
        QObject::connect(m_WMeshGL, SIGNAL(disableFullScreen()), this, SLOT(disableGLFullScreen()));

    // init worker parameters values
        // radial projection width / height
            m_WCreateAvatar->setRadialWidth(m_uiCreateAvatar->sbWidth->value());
            m_WCreateAvatar->setRadialHeight(m_uiCreateAvatar->sbHeight->value());
        // spatial filter
            m_WCreateAvatar->setBilateralColor(m_uiCreateAvatar->sbColor->value());
            m_WCreateAvatar->setBilateralSpace(m_uiCreateAvatar->sbSpace->value());
            m_WCreateAvatar->setBilateralDiameter(-1);
        // temporal filter
            m_WCreateAvatar->setCloudNumberValue(m_uiCreateAvatar->sbClouds->value());
        // calibration
            m_WCreateAvatar->setCalibrationXValue(m_uiCreateAvatar->sbXOffset->value());
            m_WCreateAvatar->setCalibrationYValue(m_uiCreateAvatar->sbYOffset->value());
        // expand / erase
            m_WCreateAvatar->setExpandValue(m_uiCreateAvatar->sbExpandValue->value());
            m_WCreateAvatar->setExpandConnex(m_uiCreateAvatar->sbExpandConnex->value());
            m_WCreateAvatar->setEraseValue(m_uiCreateAvatar->sbEraseValue->value());
            m_WCreateAvatar->setEraseConnex(m_uiCreateAvatar->sbEraseConnex->value());
        // dilate / erode
            m_WCreateAvatar->setDilate(m_uiCreateAvatar->sbDilate->value());
            m_WCreateAvatar->setErode(m_uiCreateAvatar->sbErode->value());
        // stasm
            m_WCreateAvatar->setUseStasm(m_uiCreateAvatar->cbSTASM->isChecked());

        // cloud
            m_WCloudGL->setDepthRect(m_uiCreateAvatar->dsbFaceDepth->value());
            m_WCreateAvatar->setDepthCloud(m_uiCreateAvatar->dsbFaceDepth->value());

    // desactive debug interface components
//            m_uiCreateAvatar->laPixelDiameter->setVisible(false);
//            m_uiCreateAvatar->sbDiameter->setVisible(false);
//            m_uiCreateAvatar->laCynlinderRadius->setVisible(false);
//            m_uiCreateAvatar->dsbRadius->setVisible(false);
//            m_uiCreateAvatar->laFOV->setVisible(false);
//            m_uiCreateAvatar->dsbFOV->setVisible(false);
    setStyleSheet("QGroupBox { padding: 10 0px 0 0px; color: blue; border: 1px solid gray; border-radius: 5px; margin-top: 1ex; /* leave space at the top for the title */}");


    // init and start create avatar thread
        m_WCreateAvatar->moveToThread(&m_TCreateAvatar);
        m_TCreateAvatar.start();

    // init face detection
        m_CFaceDetectPtr = SWFaceDetectionPtr(new swDetect::SWFaceDetection(cv::Size(80,80)));
        m_oLastRectFace.width = 0;

    // launch timer for updating the display widget
        m_oTimer->start(1000/30, this);
}
Пример #6
0
IOServicePool::~IOServicePool() {
    if (mWork) stopWork();
    for(ThreadList::iterator it = mThreads.begin(); it != mThreads.end(); it++)
        delete *it;
    delete mIO;
}
RobotListener::~RobotListener()
{
    stopWork();
}
BlueCoreDeviceController::Implementation::~Implementation( )
{
    stopWork();
    delete mThread;
}
Пример #9
0
RTLSDRThread::~RTLSDRThread()
{
	stopWork();
}
Пример #10
0
void
MainWindow::stopCamera() {
    emit stopWork();
}
Пример #11
0
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)
{

    setCentralWidget(new QWidget);
    QVBoxLayout* layout = new QVBoxLayout( centralWidget() );
    layout->setContentsMargins(0,0,0,0);
    layout->setSpacing(0);

    layout->addWidget( ui.header = new Header( this ) );
    connect( &Socket::sock(), SIGNAL(userLoggedIn(QString)), ui.header, SLOT(onUserConnected(QString)) );
    connect( &Socket::sock(), SIGNAL(userLoggedOut()), ui.header, SLOT(onUserDisconnected()) );
    connect( ui.header, SIGNAL(disconnectClicked()), &Socket::sock(), SLOT(logout()) );
    // mettre obligatoirement ici pour corriger un petit bug d'affichage

//    /*temp refresh button*/
//    QPushButton *refreshBtn = new QPushButton( "Refresh" );
//    refreshBtn->setObjectName( "refreshBtn" );
//    mainLayout->addWidget( refreshBtn );
//    connect(refreshBtn, SIGNAL(clicked()), ui.header, SLOT( onRefreshClicked() ) );

    QHBoxLayout* centralLayout = new QHBoxLayout( );
    centralLayout->addWidget( ui.sideBar = new SideBar( this ) );
    centralLayout->addWidget( ui.stackedWidget = new StackedWidget( this ) );

    layout->addLayout( centralLayout );

    connect(ui.sideBar, SIGNAL( currentChanged( int ) ), ui.stackedWidget, SLOT( setCurrentIndex( int ) ) );
    connect(ui.sideBar, SIGNAL( currentChanged( int ) ), SLOT( loadViewData( int ) ) );


    // LOG
    connect( &Socket::sock(), SIGNAL(clientEvent(int)), &Socket::sock(), SLOT(log(int)) );


    // LIGHT BOX
    lightBox = new QLightBoxWidget(this);
    QHBoxLayout *mainLayout = new QHBoxLayout( lightBox );

    QWidget *fm = new QWidget();
    fm->setObjectName("connexionFrame");
    mainLayout->addWidget( fm );

    QGridLayout *lightBoxLayout = new QGridLayout( fm );
    lightBoxLayout->setRowStretch(1, 1);

    settings = new QSettings("smoky.ini",QSettings::IniFormat);


    lightBoxLayout->addWidget( new QLabel( "IP du serveur" ), 0, 0);
    lightBoxLayout->addWidget( serverIpEdt = new QLineEdit(), 0, 1 );
    serverIpEdt->setInputMask( "000.000.000.000; " );
    serverIpEdt->setText( settings->value("serverIp").toString() );
    serverIpEdt->setObjectName( "serverIpEdt" );

    lightBoxLayout->addWidget( localhostCbx = new QCheckBox("localhost"), 1,1);
    localhostCbx->setObjectName( "localhostCbx" );
    connect( localhostCbx, SIGNAL( stateChanged(int)), SLOT(onLocalhostCbx(int)) );

    lightBoxLayout->addWidget( loginIndication = new QLabel(), 1, 0);
    loginIndication->setObjectName( "loginIndication" );
    loginIndication->setText("<center><small>Placez votre visage<br>face à la caméra</small></center>");

    lightBoxLayout->addWidget( loginAvatarLbl = new QLabel(""), 2, 0, 2, 1);
    loginAvatarLbl->setObjectName( "loginAvatarLbl" );

    lightBoxLayout->addWidget( loginUserEdt = new QLineEdit(), 2, 1);
    loginUserEdt->setPlaceholderText("Nom d'utilisateur");
    loginUserEdt->setObjectName( "loginUserEdt" );

    lightBoxLayout->addWidget( loginPasswordEdt = new QLineEdit(), 3, 1);
    loginPasswordEdt->setObjectName( "loginPasswordEdt" );
    loginPasswordEdt->setEchoMode( QLineEdit::Password );
    loginPasswordEdt->setPlaceholderText("Mot de passe");


    lightBoxLayout->addWidget( loginSubmitBtn = new QPushButton("Connexion"), 4, 1);
    loginSubmitBtn->setObjectName( "loginSubmitBtn" );

    lightBoxLayout->addWidget( statLbl = new QLabel( "" ), 5,0, 1, 2 );
    statLbl->setObjectName( "statLbl" );

    lightBox->show();



    Camera *cam = new Camera();
    t = new QThread();

    mTimer = new QTimer();
    mTimer->setInterval(1000/24);
    connect(mTimer, SIGNAL(timeout()), cam, SLOT(queryFrame()) );
    connect( this, SIGNAL(startWork()), cam, SLOT(openCamera()) );
    connect( this, SIGNAL(startWork()), mTimer, SLOT(start()) );

    connect( cam, SIGNAL(stopCamera()), mTimer, SLOT(stop()) );
    connect( this, SIGNAL(stopWork()), cam, SLOT(closeCamera()) );

    /*destruction*/
    // connect( qApp, SIGNAL(aboutToQuit()),mTimer, SLOT(stop()) );
    // connect( qApp, SIGNAL(aboutToQuit()),mTimer, SLOT(deleteLater()) );

    // connect( qApp, SIGNAL(aboutToQuit()), cam, SLOT(closeCamera()) );
    // connect( qApp, SIGNAL(aboutToQuit()), cam, SLOT(deleteLater()) );

    connect(t, SIGNAL(finished()), cam, SLOT(deleteLater()));
    // connect(this, &Controller::operate, worker, &Worker::doWork);

    //connect( qApp, SIGNAL(aboutToQuit()), t, SLOT(quit()) );
    // connect( t, SIGNAL(finished()), t, SLOT(deleteLater()) );

    // user logged out
    connect( &Socket::sock(), SIGNAL(userLoggedOut()), SLOT(startCamera()) );

    // user logged in
    connect( &Socket::sock(), SIGNAL(userLoggedIn(QString)), SLOT(stopCamera()) );

    cam->moveToThread( t );
    mTimer->moveToThread( t );
    t->start( QThread::IdlePriority );

    emit startWork();

    connect(cam, SIGNAL(sendShot(QImage, QRect)), SLOT(onShotSent(QImage)) ); // receive shots

    connect( &Socket::sock(), SIGNAL(userLoggedIn(QString)), loginPasswordEdt, SLOT(clear()) );
    connect( &Socket::sock(), SIGNAL(userLoggedIn(QString)), lightBox, SLOT(hide()) );

    // rendre la page d'accueil
    connect( &Socket::sock(), SIGNAL(userLoggedOut()), SLOT(resetThings()) );

    connect( &Socket::sock(), SIGNAL(invalidCred()), SLOT(onInvalidCred()) );

    connect( loginSubmitBtn, SIGNAL(clicked()), SLOT(connectUser()) );


    connect( &Socket::sock(), SIGNAL(connexionError(int)), SLOT(onConnexionError(int)) );

    // move(QApplication::desktop()->screen()->rect().center() - this->rect().center());
    /*
        QDesktopWidget desktop;
        QRect desktop_geometry = desktop.screenGeometry();
    */

    // resize( 780, 650 );

    /*int x = desktop_geometry.width()/2 - width()/2;
    int y = desktop_geometry.height()/2 - height()/2;
    move( x, y );*/

    // showMaximized();
}