Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / media / base / wall_clock_time_source.h
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef MEDIA_BASE_WALL_CLOCK_TIME_SOURCE_H_
6 #define MEDIA_BASE_WALL_CLOCK_TIME_SOURCE_H_
7
8 #include "base/memory/scoped_ptr.h"
9 #include "base/synchronization/lock.h"
10 #include "media/base/media_export.h"
11 #include "media/base/time_source.h"
12
13 namespace base {
14 class TickClock;
15 }
16
17 namespace media {
18
19 // A time source that uses interpolation based on the system clock.
20 class MEDIA_EXPORT WallClockTimeSource : public TimeSource {
21  public:
22   WallClockTimeSource();
23   virtual ~WallClockTimeSource();
24
25   // TimeSource implementation.
26   virtual void StartTicking() OVERRIDE;
27   virtual void StopTicking() OVERRIDE;
28   virtual void SetPlaybackRate(float playback_rate) OVERRIDE;
29   virtual void SetMediaTime(base::TimeDelta time) OVERRIDE;
30   virtual base::TimeDelta CurrentMediaTime() OVERRIDE;
31   virtual base::TimeDelta CurrentMediaTimeForSyncingVideo() OVERRIDE;
32
33   void SetTickClockForTesting(scoped_ptr<base::TickClock> tick_clock);
34
35  private:
36   base::TimeDelta CurrentMediaTime_Locked();
37
38   scoped_ptr<base::TickClock> tick_clock_;
39   bool ticking_;
40
41   // While ticking we can interpolate the current media time by measuring the
42   // delta between our reference ticks and the current system ticks and scaling
43   // that time by the playback rate.
44   float playback_rate_;
45   base::TimeDelta base_time_;
46   base::TimeTicks reference_wall_ticks_;
47
48   // TODO(scherkus): Remove internal locking from this class after access to
49   // Renderer::CurrentMediaTime() is single threaded http://crbug.com/370634
50   base::Lock lock_;
51
52   DISALLOW_COPY_AND_ASSIGN(WallClockTimeSource);
53 };
54
55 }  // namespace media
56
57 #endif  // MEDIA_BASE_WALL_CLOCK_TIME_SOURCE_H_