OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chromecast/media/cma/backend/media_clock_device_default.h" | 5 #include "chromecast/media/cma/backend/media_clock_device_default.h" |
6 | 6 |
| 7 #include "chromecast/base/time_conversions.h" |
7 #include "media/base/buffers.h" | 8 #include "media/base/buffers.h" |
8 | 9 |
9 namespace chromecast { | 10 namespace chromecast { |
10 namespace media { | 11 namespace media { |
11 | 12 |
12 MediaClockDeviceDefault::MediaClockDeviceDefault() | 13 MediaClockDeviceDefault::MediaClockDeviceDefault() |
13 : state_(kStateUninitialized), | 14 : state_(kStateUninitialized), media_time_(TimeDelta::Invalid()) { |
14 media_time_(::media::kNoTimestamp()) { | 15 thread_checker_.DetachFromThread(); |
15 DetachFromThread(); | |
16 } | 16 } |
17 | 17 |
18 MediaClockDeviceDefault::~MediaClockDeviceDefault() { | 18 MediaClockDeviceDefault::~MediaClockDeviceDefault() { |
19 } | 19 } |
20 | 20 |
21 MediaClockDevice::State MediaClockDeviceDefault::GetState() const { | 21 MediaClockDevice::State MediaClockDeviceDefault::GetState() const { |
22 DCHECK(CalledOnValidThread()); | 22 DCHECK(thread_checker_.CalledOnValidThread()); |
23 return state_; | 23 return state_; |
24 } | 24 } |
25 | 25 |
26 bool MediaClockDeviceDefault::SetState(State new_state) { | 26 bool MediaClockDeviceDefault::SetState(State new_state) { |
27 DCHECK(CalledOnValidThread()); | 27 DCHECK(thread_checker_.CalledOnValidThread()); |
28 if (!MediaClockDevice::IsValidStateTransition(state_, new_state)) | 28 if (!MediaClockDevice::IsValidStateTransition(state_, new_state)) |
29 return false; | 29 return false; |
30 | 30 |
31 if (new_state == state_) | 31 if (new_state == state_) |
32 return true; | 32 return true; |
33 | 33 |
34 state_ = new_state; | 34 state_ = new_state; |
35 | 35 |
36 if (state_ == kStateRunning) { | 36 if (state_ == kStateRunning) { |
37 stc_ = base::TimeTicks::Now(); | 37 stc_ = base::TimeTicks::Now(); |
38 DCHECK(media_time_ != ::media::kNoTimestamp()); | 38 DCHECK(media_time_ != TimeDelta::Invalid()); |
39 return true; | 39 return true; |
40 } | 40 } |
41 | 41 |
42 if (state_ == kStateIdle) { | 42 if (state_ == kStateIdle) { |
43 media_time_ = ::media::kNoTimestamp(); | 43 media_time_ = TimeDelta::Invalid(); |
44 return true; | 44 return true; |
45 } | 45 } |
46 | 46 |
47 return true; | 47 return true; |
48 } | 48 } |
49 | 49 |
50 bool MediaClockDeviceDefault::ResetTimeline(base::TimeDelta time) { | 50 bool MediaClockDeviceDefault::ResetTimeline(TimeDelta time) { |
51 DCHECK(CalledOnValidThread()); | 51 DCHECK(thread_checker_.CalledOnValidThread()); |
52 DCHECK_EQ(state_, kStateIdle); | 52 DCHECK_EQ(state_, kStateIdle); |
53 media_time_ = time; | 53 media_time_ = time; |
54 return true; | 54 return true; |
55 } | 55 } |
56 | 56 |
57 bool MediaClockDeviceDefault::SetRate(float rate) { | 57 bool MediaClockDeviceDefault::SetRate(float rate) { |
58 DCHECK(CalledOnValidThread()); | 58 DCHECK(thread_checker_.CalledOnValidThread()); |
59 if (state_ == kStateRunning) { | 59 if (state_ == kStateRunning) { |
60 base::TimeTicks now = base::TimeTicks::Now(); | 60 base::TimeTicks now = base::TimeTicks::Now(); |
61 media_time_ = media_time_ + (now - stc_) * rate_; | 61 media_time_ = media_time_ + FromBaseTimeDelta((now - stc_) * rate_); |
62 stc_ = now; | 62 stc_ = now; |
63 } | 63 } |
64 | 64 |
65 rate_ = rate; | 65 rate_ = rate; |
66 return true; | 66 return true; |
67 } | 67 } |
68 | 68 |
69 base::TimeDelta MediaClockDeviceDefault::GetTime() { | 69 TimeDelta MediaClockDeviceDefault::GetTime() { |
70 DCHECK(CalledOnValidThread()); | 70 DCHECK(thread_checker_.CalledOnValidThread()); |
71 if (state_ != kStateRunning) | 71 if (state_ != kStateRunning) |
72 return media_time_; | 72 return media_time_; |
73 | 73 |
74 if (media_time_ == ::media::kNoTimestamp()) | 74 if (media_time_ == TimeDelta::Invalid()) |
75 return ::media::kNoTimestamp(); | 75 return TimeDelta::Invalid(); |
76 | 76 |
77 base::TimeTicks now = base::TimeTicks::Now(); | 77 base::TimeTicks now = base::TimeTicks::Now(); |
78 base::TimeDelta interpolated_media_time = | 78 TimeDelta interpolated_media_time = |
79 media_time_ + (now - stc_) * rate_; | 79 media_time_ + FromBaseTimeDelta((now - stc_) * rate_); |
80 return interpolated_media_time; | 80 return interpolated_media_time; |
81 } | 81 } |
82 | 82 |
83 } // namespace media | 83 } // namespace media |
84 } // namespace chromecast | 84 } // namespace chromecast |
OLD | NEW |