예제 #1
0
UEyeCaptureInterface::~UEyeCaptureInterface()
{
    cout << "Request for killing the thread" << endl;
    shouldStopSpinThread = true;
    bool result = spinRunning.tryLock(1000);

    is_DisableEvent(leftCamera .mCamera, IS_SET_EVENT_FRAME);
    is_DisableEvent(rightCamera.mCamera, IS_SET_EVENT_FRAME);

#ifdef Q_OS_WIN
    is_ExitEvent (leftCamera .mCamera, IS_SET_EVENT_FRAME);
    is_ExitEvent (rightCamera.mCamera, IS_SET_EVENT_FRAME);

    CloseHandle(leftCamera .mWinEvent);
    CloseHandle(rightCamera.mWinEvent);
#endif

    if (result)
        printf("Camera thread killed\n");
    else
        printf("Unable to exit Camera thread\n");

    printf("Deleting image buffers\n");

    leftCamera.deAllocImages();
    rightCamera.deAllocImages();

    printf("uEye: Closing camera...");
    is_ExitCamera(leftCamera.mCamera);
    is_ExitCamera(rightCamera.mCamera);
    printf("done\n");

}
INT UEyeCamDriver::setStandbyMode() {
    if (!isConnected())
        return IS_INVALID_CAMERA_HANDLE;

    INT is_err = IS_SUCCESS;

    if (extTriggerModeActive()) {
        if ((is_err = is_DisableEvent(cam_handle_, IS_SET_EVENT_FRAME)) != IS_SUCCESS) {
            std::cerr << "Could not disable frame event for UEye camera '"
                      << cam_name_ << "' (" << err2str(is_err) << ")" << std::endl;
            return is_err;
        }
        if ((is_err = is_SetExternalTrigger(cam_handle_, IS_SET_TRIGGER_OFF)) != IS_SUCCESS) {
            std::cerr
                    << "Could not disable external trigger mode on UEye camera '"
                    << cam_name_ << "' (" << err2str(is_err) << ")" << std::endl;
            return is_err;
        }
        is_SetExternalTrigger(cam_handle_, IS_GET_TRIGGER_STATUS); // documentation seems to suggest that this is needed to disable external trigger mode (to go into free-run mode)
        if ((is_err = is_StopLiveVideo(cam_handle_, IS_WAIT)) != IS_SUCCESS) {
            std::cerr << "Could not stop live video mode on UEye camera '"
                      << cam_name_ << "' (" << err2str(is_err) << ")" << std::endl;
            return is_err;
        }
        std::cout << "Stopped external trigger mode on UEye camera '" + cam_name_ + "'"
                  << std::endl;
    } else if (freeRunModeActive()) {
        UINT nMode = IO_FLASH_MODE_OFF;
        if ((is_err = is_IO(cam_handle_, IS_IO_CMD_FLASH_SET_MODE,
                            (void*) &nMode, sizeof(nMode)))
            != IS_SUCCESS) {
            std::cerr << "Could not disable flash output for UEye camera '"
                      << cam_name_ << "' (" << err2str(is_err) << ")" << std::endl;
            return is_err;
        }
        if ((is_err = is_DisableEvent(cam_handle_, IS_SET_EVENT_FRAME)) != IS_SUCCESS) {
            std::cerr << "Could not disable frame event for UEye camera '"
                      << cam_name_ << "' (" << err2str(is_err) << ")" << std::endl;
            return is_err;
        }
        if ((is_err = is_StopLiveVideo(cam_handle_, IS_WAIT)) != IS_SUCCESS) {
            std::cerr << "Could not stop live video mode on UEye camera '"
                      << cam_name_ << "' (" << err2str(is_err) << ")" << std::endl;
            return is_err;
        }
        std::cout << "Stopped free-run live video mode on UEye camera '" + cam_name_ + "'"
                  << std::endl;
    }
    if ((is_err = is_CameraStatus(cam_handle_, IS_STANDBY, IS_GET_STATUS)) != IS_SUCCESS) {
        std::cerr << "Could not set standby mode for UEye camera '" << cam_name_
                  << "' (" << err2str(is_err) << ")" << std::endl;
        return is_err;
    }

    return is_err;
}
예제 #3
0
void UEye_EventThread::stop(void) {

    this->m_stop = true;
    this->waitForThreadEnd();
    is_DisableEvent(this->m_camera->getCameraID(), this->m_event); 

}
예제 #4
0
bool IdsSourceSink::GrabFrame(ImagePacket &target, int indexIncrement)
{
    if (indexIncrement<0) qDebug()<<"Cannot stream backwards";

#ifdef Q_OS_WIN32
    if (WaitForSingleObject(hEvent, EVENTTHREAD_WAIT_TIMEOUT) == WAIT_OBJECT_0) {
#else
    if (is_WaitEvent (hCam, IS_SET_EVENT_FRAME, camTimeStep*5) == IS_SUCCESS) {
#endif
        void *pMemVoid; //pointer to where the image is stored  **********************
        is_GetImageMem (hCam, &pMemVoid);
        buffer.data =  (unsigned char*)pMemVoid;
        is_GetImageInfo( hCam, memId, &ImageInfo, sizeof(ImageInfo)); //Get info ASAP in case of an interruption due to a click
        target.image=buffer.clone();

        if (camTimeOffset==0) {
            camTimeOffset=3600000*ImageInfo.TimestampSystem.wHour+60000*ImageInfo.TimestampSystem.wMinute+1000.0*ImageInfo.TimestampSystem.wSecond+ImageInfo.TimestampSystem.wMilliseconds;
            target.timeStamp=0;
        } else {
            double tis;
            tis=3600000*ImageInfo.TimestampSystem.wHour+60000*ImageInfo.TimestampSystem.wMinute+1000.0*ImageInfo.TimestampSystem.wSecond+ImageInfo.TimestampSystem.wMilliseconds-camTimeOffset;
            target.timeStamp=tis;
        }
        target.seqNumber=ImageInfo.u64FrameNumber;

        target.pixFormat="MONO8";

    }

    return true;

}


bool IdsSourceSink::StopAcquisition() {
    is_StopLiveVideo(hCam, IS_WAIT);
    is_DisableEvent (hCam, IS_SET_EVENT_FRAME); //added by Sam
#ifdef Q_OS_WIN32
    is_ExitEvent(hCam, hEvent);
#endif
    is_FreeImageMem (hCam, imgMem, memId);
    Sleeper::msleep(10*camTimeStep); // NEEDS some sleep to stop all internal events
    return true;
}
void GUeyeCameraEventThread::run ()
{
    //printf ("start waiting on event %d\n", m_event);
    while (m_bRunEventThread)
    {
#ifdef __LINUX__
        if (is_WaitEvent (m_hCam, m_event, 1) == IS_SUCCESS)
#else
        if (WaitForSingleObject(m_hEvent, 1000) == WAIT_OBJECT_0)
#endif
        {
            //printf ("event %d detected\n", m_event);
            emit eventhappen (m_event);
        }
    }
    m_bRunEventThread = FALSE;
    is_DisableEvent (m_hCam, m_event);
#ifndef __LINUX__
    is_ExitEvent(m_hCam, m_event);
#endif
    //printf ("stop waiting on event %d\n", m_event);
}