| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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 "base/logging.h" | 5 #include "base/logging.h" |
| 6 #include "media/base/synchronizer.h" | 6 #include "media/base/synchronizer.h" |
| 7 | 7 |
| 8 namespace media { | 8 namespace media { |
| 9 | 9 |
| 10 const int64 Synchronizer::kMinFrameDelayUs = 0; | 10 const int64 Synchronizer::kMinFrameDelayUs = 0; |
| (...skipping 15 matching lines...) Expand all Loading... |
| 26 | 26 |
| 27 void Synchronizer::CalculateDelay(base::TimeDelta time, | 27 void Synchronizer::CalculateDelay(base::TimeDelta time, |
| 28 const StreamSample* now, | 28 const StreamSample* now, |
| 29 const StreamSample* next, | 29 const StreamSample* next, |
| 30 base::TimeDelta* delay_out, | 30 base::TimeDelta* delay_out, |
| 31 bool* should_skip_out) { | 31 bool* should_skip_out) { |
| 32 // How long rendering took. | 32 // How long rendering took. |
| 33 base::TimeDelta render_delta = rendering_stop_ - rendering_start_; | 33 base::TimeDelta render_delta = rendering_stop_ - rendering_start_; |
| 34 | 34 |
| 35 // The duration to display the sample |now|. | 35 // The duration to display the sample |now|. |
| 36 base::TimeDelta duration = | 36 base::TimeDelta duration = now->GetDuration(); |
| 37 base::TimeDelta::FromMicroseconds(now->GetDuration()); | |
| 38 | 37 |
| 39 // The presentation timestamp (pts) of the sample |now|. | 38 // The presentation timestamp (pts) of the sample |now|. |
| 40 base::TimeDelta now_pts = | 39 base::TimeDelta now_pts = now->GetTimestamp(); |
| 41 base::TimeDelta::FromMicroseconds(now->GetTimestamp()); | |
| 42 | 40 |
| 43 // The presentation timestamp (pts) of the next sample. | 41 // The presentation timestamp (pts) of the next sample. |
| 44 base::TimeDelta next_pts; | 42 base::TimeDelta next_pts; |
| 45 | 43 |
| 46 // If we were provided the next sample in the stream |next|, use it to | 44 // If we were provided the next sample in the stream |next|, use it to |
| 47 // calculate the actual sample duration as opposed to the expected duration | 45 // calculate the actual sample duration as opposed to the expected duration |
| 48 // provided by the current sample |now|. | 46 // provided by the current sample |now|. |
| 49 // | 47 // |
| 50 // We also use |next| to get the exact next timestamp as opposed to assuming | 48 // We also use |next| to get the exact next timestamp as opposed to assuming |
| 51 // it will be |now| + |now|'s duration, which may not always be true. | 49 // it will be |now| + |now|'s duration, which may not always be true. |
| 52 if (next) { | 50 if (next) { |
| 53 next_pts = base::TimeDelta::FromMicroseconds(next->GetTimestamp()); | 51 next_pts = next->GetTimestamp(); |
| 54 duration = next_pts - now_pts; | 52 duration = next_pts - now_pts; |
| 55 | 53 |
| 56 // Timestamps appear out of order, so skip this frame. | 54 // Timestamps appear out of order, so skip this frame. |
| 57 if (duration.InMicroseconds() < 0) { | 55 if (duration.InMicroseconds() < 0) { |
| 58 *delay_out = base::TimeDelta(); | 56 *delay_out = base::TimeDelta(); |
| 59 *should_skip_out = true; | 57 *should_skip_out = true; |
| 60 return; | 58 return; |
| 61 } | 59 } |
| 62 } else { | 60 } else { |
| 63 // Assume next presentation timestamp is |now| + |now|'s duration. | 61 // Assume next presentation timestamp is |now| + |now|'s duration. |
| (...skipping 20 matching lines...) Expand all Loading... |
| 84 sleep = base::TimeDelta::FromMicroseconds(kMaxFrameDelayUs); | 82 sleep = base::TimeDelta::FromMicroseconds(kMaxFrameDelayUs); |
| 85 } | 83 } |
| 86 } | 84 } |
| 87 last_time_ = time; | 85 last_time_ = time; |
| 88 | 86 |
| 89 *delay_out = sleep; | 87 *delay_out = sleep; |
| 90 *should_skip_out = false; | 88 *should_skip_out = false; |
| 91 } | 89 } |
| 92 | 90 |
| 93 } // namespace media | 91 } // namespace media |
| OLD | NEW |