summaryrefslogtreecommitdiff
path: root/grab.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'grab.cpp')
-rw-r--r--grab.cpp42
1 files changed, 32 insertions, 10 deletions
diff --git a/grab.cpp b/grab.cpp
index 211cee9..a89c852 100644
--- a/grab.cpp
+++ b/grab.cpp
@@ -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 );