Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(532)

Side by Side Diff: content/renderer/media/webmediaplayer_ms.cc

Issue 2108153002: Do not wait for first video frame to start playing audio in a MediaStream. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix test Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | content/test/data/media/getusermedia.html » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "content/renderer/media/webmediaplayer_ms.h" 5 #include "content/renderer/media/webmediaplayer_ms.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <limits> 8 #include <limits>
9 #include <string> 9 #include <string>
10 #include <utility> 10 #include <utility>
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 SetNetworkState(WebMediaPlayer::NetworkStateNetworkError); 145 SetNetworkState(WebMediaPlayer::NetworkStateNetworkError);
146 return; 146 return;
147 } 147 }
148 148
149 if (audio_renderer_) { 149 if (audio_renderer_) {
150 audio_renderer_->SetVolume(volume_); 150 audio_renderer_->SetVolume(volume_);
151 audio_renderer_->Start(); 151 audio_renderer_->Start();
152 } 152 }
153 if (video_frame_provider_) 153 if (video_frame_provider_)
154 video_frame_provider_->Start(); 154 video_frame_provider_->Start();
155 if (audio_renderer_ && !video_frame_provider_) { 155 if (audio_renderer_) {
156 // This is audio-only mode. 156 // Do not wait for first video frame to start playing
157 SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata); 157 SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata);
158 SetReadyState(WebMediaPlayer::ReadyStateHaveEnoughData); 158 SetReadyState(WebMediaPlayer::ReadyStateHaveEnoughData);
159 } 159 }
160 } 160 }
161 161
162 void WebMediaPlayerMS::play() { 162 void WebMediaPlayerMS::play() {
163 DVLOG(1) << __FUNCTION__; 163 DVLOG(1) << __FUNCTION__;
164 DCHECK(thread_checker_.CalledOnValidThread()); 164 DCHECK(thread_checker_.CalledOnValidThread());
165 165
166 media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PLAY)); 166 media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PLAY));
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after
481 if (frame->metadata()->GetTimeTicks(media::VideoFrameMetadata::REFERENCE_TIME, 481 if (frame->metadata()->GetTimeTicks(media::VideoFrameMetadata::REFERENCE_TIME,
482 &render_time)) { 482 &render_time)) {
483 TRACE_EVENT1("webrtc", "WebMediaPlayerMS::OnFrameAvailable", 483 TRACE_EVENT1("webrtc", "WebMediaPlayerMS::OnFrameAvailable",
484 "Ideal Render Instant", render_time.ToInternalValue()); 484 "Ideal Render Instant", render_time.ToInternalValue());
485 } else { 485 } else {
486 TRACE_EVENT0("webrtc", "WebMediaPlayerMS::OnFrameAvailable"); 486 TRACE_EVENT0("webrtc", "WebMediaPlayerMS::OnFrameAvailable");
487 } 487 }
488 488
489 if (!received_first_frame_) { 489 if (!received_first_frame_) {
490 received_first_frame_ = true; 490 received_first_frame_ = true;
491 SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata); 491 if (getReadyState() < WebMediaPlayer::ReadyStateHaveEnoughData) {
492 SetReadyState(WebMediaPlayer::ReadyStateHaveEnoughData); 492 SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata);
493 SetReadyState(WebMediaPlayer::ReadyStateHaveEnoughData);
494 }
493 495
494 if (video_frame_provider_.get()) { 496 if (video_frame_provider_.get()) {
495 video_weblayer_.reset(new cc_blink::WebLayerImpl( 497 video_weblayer_.reset(new cc_blink::WebLayerImpl(
496 cc::VideoLayer::Create(compositor_.get(), media::VIDEO_ROTATION_0))); 498 cc::VideoLayer::Create(compositor_.get(), media::VIDEO_ROTATION_0)));
497 video_weblayer_->layer()->SetContentsOpaque(false); 499 video_weblayer_->layer()->SetContentsOpaque(false);
498 video_weblayer_->SetContentsOpaqueIsFixed(true); 500 video_weblayer_->SetContentsOpaqueIsFixed(true);
499 get_client()->setWebLayer(video_weblayer_.get()); 501 get_client()->setWebLayer(video_weblayer_.get());
500 } 502 }
501 } 503 }
502 504
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
536 void WebMediaPlayerMS::ResetCanvasCache() { 538 void WebMediaPlayerMS::ResetCanvasCache() {
537 DCHECK(thread_checker_.CalledOnValidThread()); 539 DCHECK(thread_checker_.CalledOnValidThread());
538 video_renderer_.ResetCache(); 540 video_renderer_.ResetCache();
539 } 541 }
540 542
541 void WebMediaPlayerMS::TriggerResize() { 543 void WebMediaPlayerMS::TriggerResize() {
542 get_client()->sizeChanged(); 544 get_client()->sizeChanged();
543 } 545 }
544 546
545 } // namespace content 547 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | content/test/data/media/getusermedia.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698