| 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 |