Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrachytski <siarhei.rachytski@gmail.com>2011-10-24 20:15:40 +0400
committerAlex Zolotarev <alex@maps.me>2015-09-23 01:26:38 +0300
commit943d893105e3e76839be98529994414c4b0b01a0 (patch)
treec9a0dd11971b9bd300323d8b01b6fd11f03ed473 /platform
parent9906d541f6b2279b550d05ec6e5a6422c5e7ccf6 (diff)
using VideoTimer in Desktop and iOS version. stopping it, when the pause is longer than 60 cycles. refactored WindowHandle. implemented QtVideoTimer. closes #356
Diffstat (limited to 'platform')
-rw-r--r--platform/apple_video_timer.mm40
-rw-r--r--platform/ios_video_timer.mm15
-rw-r--r--platform/video_timer.cpp20
-rw-r--r--platform/video_timer.hpp18
4 files changed, 78 insertions, 15 deletions
diff --git a/platform/apple_video_timer.mm b/platform/apple_video_timer.mm
index 6092d33901..7d0dce0733 100644
--- a/platform/apple_video_timer.mm
+++ b/platform/apple_video_timer.mm
@@ -20,38 +20,52 @@ public:
stop();
}
+ static CVReturn displayLinkCallback(
+ CVDisplayLinkRef /*displayLink*/,
+ const CVTimeStamp * /*inNow*/,
+ const CVTimeStamp * /*inOutputTime*/,
+ CVOptionFlags /*flagsIn*/,
+ CVOptionFlags * /*flagsOut*/,
+ void * displayLinkContext
+ )
+ {
+ AppleVideoTimer * t = reinterpret_cast<AppleVideoTimer*>(displayLinkContext);
+ t->perform();
+
+ return kCVReturnSuccess;
+ }
+
void start()
{
if (m_displayLink == 0)
{
CVDisplayLinkCreateWithActiveCGDisplays(&m_displayLink);
CVDisplayLinkSetOutputCallback(m_displayLink, &displayLinkCallback, (void*)this);
- CVDisplayLinkStart(m_displayLink);
+ resume();
}
}
- static CVReturn displayLinkCallback(
- CVDisplayLinkRef displayLink,
- const CVTimeStamp *inNow,
- const CVTimeStamp *inOutputTime,
- CVOptionFlags flagsIn,
- CVOptionFlags *flagsOut,
- void *displayLinkContext
- )
+ void resume()
{
- AppleVideoTimer * t = reinterpret_cast<AppleVideoTimer*>(displayLinkContext);
- t->perform();
+ CVDisplayLinkStart(m_displayLink);
+ m_state = ERunning;
+ }
- return kCVReturnSuccess;
+ void pause()
+ {
+ CVDisplayLinkStop(m_displayLink);
+ m_state = EPaused;
}
void stop()
{
if (m_displayLink)
{
- CVDisplayLinkStop(m_displayLink);
+ if (state() == ERunning)
+ pause();
CVDisplayLinkRelease(m_displayLink);
m_displayLink = 0;
+ m_state = EStopped;
}
}
diff --git a/platform/ios_video_timer.mm b/platform/ios_video_timer.mm
index 4a80809ac5..0f2eb42db9 100644
--- a/platform/ios_video_timer.mm
+++ b/platform/ios_video_timer.mm
@@ -38,7 +38,9 @@ public:
m_objCppWrapper = [[VideoTimerWrapper alloc] initWithTimer:this];
m_displayLink = [CADisplayLink displayLinkWithTarget:m_objCppWrapper selector:@selector(perform)];
m_displayLink.frameInterval = 1;
+ m_displayLink.paused = true;
[m_displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
+ resume();
}
}
@@ -49,9 +51,22 @@ public:
[m_displayLink invalidate];
[m_objCppWrapper release];
m_displayLink = 0;
+ m_state = EStopped;
}
}
+ void pause()
+ {
+ m_displayLink.paused = true;
+ m_state = EPaused;
+ }
+
+ void resume()
+ {
+ m_displayLink.paused = false;
+ m_state = ERunning;
+ }
+
void perform()
{
m_frameFn();
diff --git a/platform/video_timer.cpp b/platform/video_timer.cpp
index 288534d04a..8f731f58a3 100644
--- a/platform/video_timer.cpp
+++ b/platform/video_timer.cpp
@@ -1,4 +1,22 @@
#include "video_timer.hpp"
-VideoTimer::VideoTimer(TFrameFn fn) : m_frameFn(fn)
+VideoTimer::VideoTimer(TFrameFn fn) : m_frameFn(fn), m_state(EStopped)
{}
+
+VideoTimer::EState VideoTimer::state() const
+{
+ return m_state;
+}
+
+VideoTimer::~VideoTimer()
+{}
+
+VideoTimer::TFrameFn VideoTimer::frameFn() const
+{
+ return m_frameFn;
+}
+
+void VideoTimer::setFrameFn(TFrameFn fn)
+{
+ m_frameFn = fn;
+}
diff --git a/platform/video_timer.hpp b/platform/video_timer.hpp
index d19cf14d13..dc286df6f2 100644
--- a/platform/video_timer.hpp
+++ b/platform/video_timer.hpp
@@ -9,13 +9,29 @@ public:
typedef function<void()> TFrameFn;
+ enum EState
+ {
+ EStopped,
+ EPaused,
+ ERunning
+ };
+
protected:
TFrameFn m_frameFn;
+ EState m_state;
public:
VideoTimer(TFrameFn fn);
- virtual ~VideoTimer() {}
+ virtual ~VideoTimer();
+
+ TFrameFn frameFn() const;
+ void setFrameFn(TFrameFn fn);
+
+ EState state() const;
+
+ virtual void resume() = 0;
+ virtual void pause() = 0;
virtual void start() = 0;
virtual void stop() = 0;