void * UEye_EventThread::handler(void * arg) {

    UEye_EventThread * thread = reinterpret_cast<UEye_EventThread *>(arg);

    while(!thread->m_stop) {
        
        if(is_WaitEvent(thread->m_camera->getCameraID(), thread->m_event, EVENT_TIMEOUT) == IS_SUCCESS) {
            thread->m_eventCallback(thread->m_camera);  
        }
    }

    thread->m_running = false;
    return NULL; 
}
const char* UEyeCamDriver::processNextFrame(INT timeout_ms) {
    if (!freeRunModeActive() && !extTriggerModeActive())
        return NULL;

    INT is_err = IS_SUCCESS;

    // Wait for frame event
    if ((is_err = is_WaitEvent(cam_handle_, IS_SET_EVENT_FRAME, timeout_ms)) != IS_SUCCESS) {
        std::cerr << "Failed to acquire image from UEye camera '" << cam_name_
                  << "' (" << err2str(is_err) << ")" << std::endl;
        return NULL;
    }

    return cam_buffer_;
}
Example #3
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);
}