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

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: 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 got_first_frame_(false),
52 total_frame_count_(0), 51 total_frame_count_(0),
53 dropped_frame_count_(0), 52 dropped_frame_count_(0),
54 media_log_(media_log) { 53 media_log_(media_log) {
55 DVLOG(1) << "WebMediaPlayerMS::ctor"; 54 DVLOG(1) << "WebMediaPlayerMS::ctor";
56 DCHECK(media_stream_client); 55 DCHECK(media_stream_client);
57 media_log_->AddEvent( 56 media_log_->AddEvent(
58 media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED)); 57 media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED));
(...skipping 27 matching lines...) Expand all
86 // Check if this url is media stream. 85 // Check if this url is media stream.
87 video_frame_provider_ = media_stream_client_->GetVideoFrameProvider( 86 video_frame_provider_ = media_stream_client_->GetVideoFrameProvider(
88 url, 87 url,
89 base::Bind(&WebMediaPlayerMS::OnSourceError, AsWeakPtr()), 88 base::Bind(&WebMediaPlayerMS::OnSourceError, AsWeakPtr()),
90 base::Bind(&WebMediaPlayerMS::OnFrameAvailable, AsWeakPtr())); 89 base::Bind(&WebMediaPlayerMS::OnFrameAvailable, AsWeakPtr()));
91 if (video_frame_provider_) { 90 if (video_frame_provider_) {
92 SetNetworkState(WebMediaPlayer::NetworkStateLoaded); 91 SetNetworkState(WebMediaPlayer::NetworkStateLoaded);
93 GetClient()->sourceOpened(); 92 GetClient()->sourceOpened();
94 GetClient()->setOpaque(true); 93 GetClient()->setOpaque(true);
95 SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata); 94 SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata);
96 SetReadyState(WebMediaPlayer::ReadyStateHaveEnoughData); 95 video_frame_provider_->Start();
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 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 (!got_first_frame_) {
350 got_first_frame_ = true; 344 got_first_frame_ = true;
351 start_time_ = frame->GetTimestamp(); 345 start_time_ = frame->GetTimestamp();
346 paused_ = false;
scherkus (not reviewing) 2012/10/19 22:16:37 as discussed offline... you shouldn't set this
wjia(left Chromium) 2012/10/21 22:11:12 Done.
347 SetReadyState(WebMediaPlayer::ReadyStateHaveEnoughData);
348 RepaintInternal();
352 } 349 }
353 bool size_changed = !current_frame_ || 350 bool size_changed = !current_frame_ ||
354 current_frame_->natural_size() != frame->natural_size(); 351 current_frame_->natural_size() != frame->natural_size();
355 352
356 current_frame_ = frame; 353 current_frame_ = frame;
357 current_frame_->SetTimestamp(frame->GetTimestamp() - start_time_); 354 current_frame_->SetTimestamp(frame->GetTimestamp() - start_time_);
358 355
359 if (size_changed) 356 if (size_changed)
360 GetClient()->sizeChanged(); 357 GetClient()->sizeChanged();
361 358
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
397 GetClient()->readyStateChanged(); 394 GetClient()->readyStateChanged();
398 } 395 }
399 396
400 WebKit::WebMediaPlayerClient* WebMediaPlayerMS::GetClient() { 397 WebKit::WebMediaPlayerClient* WebMediaPlayerMS::GetClient() {
401 DCHECK(thread_checker_.CalledOnValidThread()); 398 DCHECK(thread_checker_.CalledOnValidThread());
402 DCHECK(client_); 399 DCHECK(client_);
403 return client_; 400 return client_;
404 } 401 }
405 402
406 } // namespace webkit_media 403 } // 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