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

Side by Side Diff: webkit/media/webmediaplayer_ms.cc

Issue 11198055: Fix media stream playback event as media element. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: fire events after first frame is avaialbe Created 8 years, 2 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 | Annotate | Revision Log
« no previous file with comments | « webkit/media/webmediaplayer_ms.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "webkit/media/webmediaplayer_ms.h" 5 #include "webkit/media/webmediaplayer_ms.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback.h" 10 #include "base/callback.h"
(...skipping 27 matching lines...) Expand all
38 base::WeakPtr<WebMediaPlayerDelegate> delegate, 38 base::WeakPtr<WebMediaPlayerDelegate> delegate,
39 MediaStreamClient* media_stream_client, 39 MediaStreamClient* media_stream_client,
40 media::MediaLog* media_log) 40 media::MediaLog* media_log)
41 : frame_(frame), 41 : frame_(frame),
42 network_state_(WebMediaPlayer::NetworkStateEmpty), 42 network_state_(WebMediaPlayer::NetworkStateEmpty),
43 ready_state_(WebMediaPlayer::ReadyStateHaveNothing), 43 ready_state_(WebMediaPlayer::ReadyStateHaveNothing),
44 buffered_(static_cast<size_t>(1)), 44 buffered_(static_cast<size_t>(1)),
45 client_(client), 45 client_(client),
46 delegate_(delegate), 46 delegate_(delegate),
47 media_stream_client_(media_stream_client), 47 media_stream_client_(media_stream_client),
48 video_frame_provider_started_(false),
49 paused_(true), 48 paused_(true),
50 pending_repaint_(false), 49 pending_repaint_(false),
51 got_first_frame_(false), 50 received_first_frame_(false),
51 sequence_started_(false),
52 total_frame_count_(0), 52 total_frame_count_(0),
53 dropped_frame_count_(0), 53 dropped_frame_count_(0),
54 media_log_(media_log) { 54 media_log_(media_log) {
55 DVLOG(1) << "WebMediaPlayerMS::ctor"; 55 DVLOG(1) << "WebMediaPlayerMS::ctor";
56 DCHECK(media_stream_client); 56 DCHECK(media_stream_client);
57 media_log_->AddEvent( 57 media_log_->AddEvent(
58 media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED)); 58 media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED));
59 } 59 }
60 60
61 WebMediaPlayerMS::~WebMediaPlayerMS() { 61 WebMediaPlayerMS::~WebMediaPlayerMS() {
(...skipping 23 matching lines...) Expand all
85 85
86 // Check if this url is media stream. 86 // Check if this url is media stream.
87 video_frame_provider_ = media_stream_client_->GetVideoFrameProvider( 87 video_frame_provider_ = media_stream_client_->GetVideoFrameProvider(
88 url, 88 url,
89 base::Bind(&WebMediaPlayerMS::OnSourceError, AsWeakPtr()), 89 base::Bind(&WebMediaPlayerMS::OnSourceError, AsWeakPtr()),
90 base::Bind(&WebMediaPlayerMS::OnFrameAvailable, AsWeakPtr())); 90 base::Bind(&WebMediaPlayerMS::OnFrameAvailable, AsWeakPtr()));
91 if (video_frame_provider_) { 91 if (video_frame_provider_) {
92 SetNetworkState(WebMediaPlayer::NetworkStateLoaded); 92 SetNetworkState(WebMediaPlayer::NetworkStateLoaded);
93 GetClient()->sourceOpened(); 93 GetClient()->sourceOpened();
94 GetClient()->setOpaque(true); 94 GetClient()->setOpaque(true);
95 SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata); 95 video_frame_provider_->Start();
96 SetReadyState(WebMediaPlayer::ReadyStateHaveEnoughData);
97 RepaintInternal();
98 } else { 96 } else {
99 SetNetworkState(WebMediaPlayer::NetworkStateNetworkError); 97 SetNetworkState(WebMediaPlayer::NetworkStateNetworkError);
100 } 98 }
101 } 99 }
102 100
103 void WebMediaPlayerMS::cancelLoad() { 101 void WebMediaPlayerMS::cancelLoad() {
104 DCHECK(thread_checker_.CalledOnValidThread()); 102 DCHECK(thread_checker_.CalledOnValidThread());
105 } 103 }
106 104
107 void WebMediaPlayerMS::play() { 105 void WebMediaPlayerMS::play() {
108 DVLOG(1) << "WebMediaPlayerMS::play"; 106 DVLOG(1) << "WebMediaPlayerMS::play";
109 DCHECK(thread_checker_.CalledOnValidThread()); 107 DCHECK(thread_checker_.CalledOnValidThread());
110 108
109 if (video_frame_provider_ && paused_) {
110 video_frame_provider_->Play();
111 }
111 paused_ = false; 112 paused_ = false;
112 if (video_frame_provider_) { 113
113 if (video_frame_provider_started_) {
114 video_frame_provider_->Play();
115 } else {
116 video_frame_provider_started_ = true;
117 video_frame_provider_->Start();
118 }
119 }
120 // TODO(wjia): add audio. See crbug.com/142988. 114 // TODO(wjia): add audio. See crbug.com/142988.
121 115
122 media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PLAY)); 116 media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PLAY));
123 117
124 if (delegate_) 118 if (delegate_)
125 delegate_->DidPlay(this); 119 delegate_->DidPlay(this);
126 } 120 }
127 121
128 void WebMediaPlayerMS::pause() { 122 void WebMediaPlayerMS::pause() {
129 DVLOG(1) << "WebMediaPlayerMS::pause"; 123 DVLOG(1) << "WebMediaPlayerMS::pause";
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 if (web_video_frame) { 333 if (web_video_frame) {
340 delete web_video_frame; 334 delete web_video_frame;
341 } 335 }
342 } 336 }
343 337
344 void WebMediaPlayerMS::OnFrameAvailable( 338 void WebMediaPlayerMS::OnFrameAvailable(
345 const scoped_refptr<media::VideoFrame>& frame) { 339 const scoped_refptr<media::VideoFrame>& frame) {
346 DVLOG(3) << "WebMediaPlayerMS::OnFrameAvailable"; 340 DVLOG(3) << "WebMediaPlayerMS::OnFrameAvailable";
347 DCHECK(thread_checker_.CalledOnValidThread()); 341 DCHECK(thread_checker_.CalledOnValidThread());
348 ++total_frame_count_; 342 ++total_frame_count_;
349 if (!got_first_frame_) { 343 if (!received_first_frame_) {
350 got_first_frame_ = true; 344 received_first_frame_ = true;
345 current_frame_ = media::VideoFrame::CreateBlackFrame(frame->natural_size());
346 SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata);
347 SetReadyState(WebMediaPlayer::ReadyStateHaveEnoughData);
348 GetClient()->sizeChanged();
349 }
350
351 // Do not update |current_frame_| when paused.
352 if (paused_)
353 return;
354
355 if (!sequence_started_) {
356 sequence_started_ = true;
351 start_time_ = frame->GetTimestamp(); 357 start_time_ = frame->GetTimestamp();
scherkus (not reviewing) 2012/10/22 17:40:05 when we play, then pause, then play again won't ti
352 } 358 }
353 bool size_changed = !current_frame_ || 359 bool size_changed = !current_frame_ ||
354 current_frame_->natural_size() != frame->natural_size(); 360 current_frame_->natural_size() != frame->natural_size();
355 361
356 current_frame_ = frame; 362 current_frame_ = frame;
357 current_frame_->SetTimestamp(frame->GetTimestamp() - start_time_); 363 current_frame_->SetTimestamp(frame->GetTimestamp() - start_time_);
358 364
359 if (size_changed) 365 if (size_changed)
360 GetClient()->sizeChanged(); 366 GetClient()->sizeChanged();
361 367
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
397 GetClient()->readyStateChanged(); 403 GetClient()->readyStateChanged();
398 } 404 }
399 405
400 WebKit::WebMediaPlayerClient* WebMediaPlayerMS::GetClient() { 406 WebKit::WebMediaPlayerClient* WebMediaPlayerMS::GetClient() {
401 DCHECK(thread_checker_.CalledOnValidThread()); 407 DCHECK(thread_checker_.CalledOnValidThread());
402 DCHECK(client_); 408 DCHECK(client_);
403 return client_; 409 return client_;
404 } 410 }
405 411
406 } // namespace webkit_media 412 } // namespace webkit_media
OLDNEW
« no previous file with comments | « webkit/media/webmediaplayer_ms.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698