| Index: webkit/media/webmediaplayer_impl.cc
|
| diff --git a/webkit/media/webmediaplayer_impl.cc b/webkit/media/webmediaplayer_impl.cc
|
| index 6c3612bbe8f12d14b7be9d61c21dffa4cbfed11e..4c47acdfdedb6ac080429776af064dd09ef323c6 100644
|
| --- a/webkit/media/webmediaplayer_impl.cc
|
| +++ b/webkit/media/webmediaplayer_impl.cc
|
| @@ -81,8 +81,8 @@ const int kPlayerExtraMemory = 1024 * 1024;
|
| // Also our timers are not very accurate (especially for ogg), which becomes
|
| // evident at low speeds and on Vista. Since other speeds are risky and outside
|
| // the norms, we think 1/16x to 16x is a safe and useful range for now.
|
| -const float kMinRate = 0.0625f;
|
| -const float kMaxRate = 16.0f;
|
| +const double kMinRate = 0.0625;
|
| +const double kMaxRate = 16.0;
|
|
|
| // Prefix for histograms related to Encrypted Media Extensions.
|
| const char* kMediaEme = "Media.EME.";
|
| @@ -375,7 +375,7 @@ void WebMediaPlayerImpl::seekFloat(float seconds) {
|
| seek(seconds);
|
| }
|
|
|
| -void WebMediaPlayerImpl::seek(float seconds) {
|
| +void WebMediaPlayerImpl::seek(double seconds) {
|
| DCHECK(main_loop_->BelongsToCurrentThread());
|
|
|
| if (starting_ || seeking_) {
|
| @@ -409,7 +409,7 @@ void WebMediaPlayerImpl::setEndTimeFloat(float seconds) {
|
| setEndTime(seconds);
|
| }
|
|
|
| -void WebMediaPlayerImpl::setEndTime(float seconds) {
|
| +void WebMediaPlayerImpl::setEndTime(double seconds) {
|
| DCHECK(main_loop_->BelongsToCurrentThread());
|
|
|
| // TODO(hclam): add method call when it has been implemented.
|
| @@ -420,16 +420,16 @@ void WebMediaPlayerImpl::setRateFloat(float rate) {
|
| setRate(rate);
|
| }
|
|
|
| -void WebMediaPlayerImpl::setRate(float rate) {
|
| +void WebMediaPlayerImpl::setRate(double rate) {
|
| DCHECK(main_loop_->BelongsToCurrentThread());
|
|
|
| // TODO(kylep): Remove when support for negatives is added. Also, modify the
|
| // following checks so rewind uses reasonable values also.
|
| - if (rate < 0.0f)
|
| + if (rate < 0.0)
|
| return;
|
|
|
| // Limit rates to reasonable values by clamping.
|
| - if (rate != 0.0f) {
|
| + if (rate != 0.0) {
|
| if (rate < kMinRate)
|
| rate = kMinRate;
|
| else if (rate > kMaxRate)
|
| @@ -446,7 +446,7 @@ void WebMediaPlayerImpl::setVolumeFloat(float volume) {
|
| setVolume(volume);
|
| }
|
|
|
| -void WebMediaPlayerImpl::setVolume(float volume) {
|
| +void WebMediaPlayerImpl::setVolume(double volume) {
|
| DCHECK(main_loop_->BelongsToCurrentThread());
|
|
|
| pipeline_->SetVolume(volume);
|
| @@ -517,21 +517,10 @@ bool WebMediaPlayerImpl::seeking() const {
|
| }
|
|
|
| float WebMediaPlayerImpl::durationFloat() const {
|
| - return duration();
|
| -}
|
| -
|
| -float WebMediaPlayerImpl::duration() const {
|
| - DCHECK(main_loop_->BelongsToCurrentThread());
|
| -
|
| if (ready_state_ == WebMediaPlayer::ReadyStateHaveNothing)
|
| return std::numeric_limits<float>::quiet_NaN();
|
|
|
| - double duration;
|
| - if (chunk_demuxer_) {
|
| - duration = chunk_demuxer_->GetDuration();
|
| - } else {
|
| - duration = GetPipelineDuration();
|
| - }
|
| + double result = duration();
|
|
|
| // Make sure super small durations don't get truncated to 0 and
|
| // large durations don't get converted to infinity by the double -> float
|
| @@ -539,25 +528,36 @@ float WebMediaPlayerImpl::duration() const {
|
| //
|
| // TODO(acolwell): Remove when WebKit is changed to report duration as a
|
| // double.
|
| - if (duration > 0.0 && duration < std::numeric_limits<double>::infinity()) {
|
| - duration = std::max(duration,
|
| - static_cast<double>(std::numeric_limits<float>::min()));
|
| - duration = std::min(duration,
|
| - static_cast<double>(std::numeric_limits<float>::max()));
|
| + if (result > 0.0 && result < std::numeric_limits<double>::infinity()) {
|
| + result = std::max(result,
|
| + static_cast<double>(std::numeric_limits<float>::min()));
|
| + result = std::min(result,
|
| + static_cast<double>(std::numeric_limits<float>::max()));
|
| }
|
|
|
| - return static_cast<float>(duration);
|
| + return static_cast<float>(result);
|
| +
|
| +}
|
| +
|
| +double WebMediaPlayerImpl::duration() const {
|
| + DCHECK(main_loop_->BelongsToCurrentThread());
|
| +
|
| + if (ready_state_ == WebMediaPlayer::ReadyStateHaveNothing)
|
| + return std::numeric_limits<double>::quiet_NaN();
|
| +
|
| + if (chunk_demuxer_)
|
| + return chunk_demuxer_->GetDuration();
|
| +
|
| + return GetPipelineDuration();
|
| }
|
|
|
| float WebMediaPlayerImpl::currentTimeFloat() const {
|
| - return currentTime();
|
| + return static_cast<float>(currentTime());
|
| }
|
|
|
| -float WebMediaPlayerImpl::currentTime() const {
|
| +double WebMediaPlayerImpl::currentTime() const {
|
| DCHECK(main_loop_->BelongsToCurrentThread());
|
| - if (paused_)
|
| - return static_cast<float>(paused_time_.InSecondsF());
|
| - return static_cast<float>(pipeline_->GetMediaTime().InSecondsF());
|
| + return (paused_ ? paused_time_ : pipeline_->GetMediaTime()).InSecondsF();
|
| }
|
|
|
| int WebMediaPlayerImpl::dataRate() const {
|
| @@ -586,10 +586,6 @@ const WebKit::WebTimeRanges& WebMediaPlayerImpl::buffered() {
|
| }
|
|
|
| float WebMediaPlayerImpl::maxTimeSeekableFloat() const {
|
| - return maxTimeSeekable();
|
| -}
|
| -
|
| -float WebMediaPlayerImpl::maxTimeSeekable() const {
|
| DCHECK(main_loop_->BelongsToCurrentThread());
|
|
|
| // If we haven't even gotten to ReadyStateHaveMetadata yet then just
|
| @@ -600,6 +596,20 @@ float WebMediaPlayerImpl::maxTimeSeekable() const {
|
| // We don't support seeking in streaming media.
|
| if (data_source_ && data_source_->IsStreaming())
|
| return 0.0f;
|
| + return durationFloat();
|
| +}
|
| +
|
| +double WebMediaPlayerImpl::maxTimeSeekable() const {
|
| + DCHECK(main_loop_->BelongsToCurrentThread());
|
| +
|
| + // If we haven't even gotten to ReadyStateHaveMetadata yet then just
|
| + // return 0 so that the seekable range is empty.
|
| + if (ready_state_ < WebMediaPlayer::ReadyStateHaveMetadata)
|
| + return 0.0;
|
| +
|
| + // We don't support seeking in streaming media.
|
| + if (data_source_ && data_source_->IsStreaming())
|
| + return 0.0;
|
| return duration();
|
| }
|
|
|
| @@ -671,7 +681,7 @@ float WebMediaPlayerImpl::mediaTimeForTimeValueFloat(float timeValue) const {
|
| return mediaTimeForTimeValue(timeValue);
|
| }
|
|
|
| -float WebMediaPlayerImpl::mediaTimeForTimeValue(float timeValue) const {
|
| +double WebMediaPlayerImpl::mediaTimeForTimeValue(double timeValue) const {
|
| return ConvertSecondsToTimestamp(timeValue).InSecondsF();
|
| }
|
|
|
|
|