diff options
Diffstat (limited to 'grab.cpp')
-rw-r--r-- | grab.cpp | 42 |
1 files changed, 32 insertions, 10 deletions
@@ -22,6 +22,7 @@ public: {} void Activate() { m_firstTime = 0; } + bool IsActive(); private: uint64_t m_firstTime; @@ -29,34 +30,50 @@ private: int m_quality; int m_width; int m_height; + + bool GrabImage(); virtual void Action(); }; -void GrabImageTask::Action() +bool GrabImageTask::IsActive() { - uint64_t now = cTimeMs::Now(); - - if ( m_firstTime == 0 ) - m_firstTime = now; - - if ( now - m_lastTime < GrabMinIntervalMs || now - m_firstTime > GrabPauseIntervalMs ) - return; + cMutexLock lock( &LiveTaskManager() ); + return GrabImage(); +} +bool GrabImageTask::GrabImage() +{ cDevice* device = cDevice::PrimaryDevice(); if ( device == 0 ) { SetError( tr("Couldn't aquire primary device") ); - return; + return false; } int size = 0; uchar* image = device->GrabImage( size, true, m_quality, m_width, m_height ); if ( image == 0 ) { SetError( tr("Couldn't grab image from primary device") ); - return; + return false; } LiveGrabImageManager().PutImage( reinterpret_cast< char* >( image ), size ); + return true; +} + +void GrabImageTask::Action() +{ + uint64_t now = cTimeMs::Now(); + + if ( m_firstTime == 0 ) + m_firstTime = now; + + if ( now - m_lastTime < GrabMinIntervalMs || now - m_firstTime > GrabPauseIntervalMs ) + return; + + if ( !GrabImage() ) + return; + m_lastTime = now; } @@ -74,6 +91,11 @@ GrabImageInfo GrabImageManager::GetImage() const return make_pair( m_image, m_size ); } +bool GrabImageManager::CanGrab() const +{ + return m_task->IsActive(); +} + void GrabImageManager::PutImage( char* image, int size ) { m_image.reset( image, &free ); |