From b227e26b829bd2670c91f670ce71d16c89e1fe58 Mon Sep 17 00:00:00 2001 From: Sascha Volkenandt Date: Fri, 4 May 2007 19:39:38 +0000 Subject: - added intervals for min/max grabs --- grab.cpp | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'grab.cpp') diff --git a/grab.cpp b/grab.cpp index 9211b92..5d6b3f5 100644 --- a/grab.cpp +++ b/grab.cpp @@ -1,21 +1,31 @@ #include #include +#include #include "grab.h" namespace vdrlive { using namespace std; +const unsigned int GrabMinIntervalMs = 500; +const unsigned int GrabPauseIntervalMs = GrabMinIntervalMs * 10; + class GrabImageTask: public StickyTask { public: explicit GrabImageTask( int quality = 80, int width = 320, int height = 240 ) - : m_quality( quality ) + : m_firstTime( 0 ) + , m_lastTime( 0 ) + , m_quality( quality ) , m_width( width ) , m_height( height ) {} + void Activate() { m_firstTime = 0; } + private: + uint64_t m_firstTime; + uint64_t m_lastTime; int m_quality; int m_width; int m_height; @@ -25,6 +35,14 @@ private: 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; + cDevice* device = cDevice::PrimaryDevice(); if ( device == 0 ) { SetError( tr("Couldn't aquire primary device") ); @@ -39,6 +57,7 @@ void GrabImageTask::Action() } LiveGrabImageManager().PutImage( reinterpret_cast< char* >( image ), size ); + m_lastTime = now; } GrabImageManager::GrabImageManager() @@ -51,6 +70,7 @@ GrabImageManager::GrabImageManager() GrabImageInfo GrabImageManager::GetImage() const { cMutexLock lock( &LiveTaskManager() ); + m_task->Activate(); return make_pair( m_image, m_size ); } -- cgit v1.2.3