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

Side by Side Diff: media/blink/webmediaplayer_impl.cc

Issue 1053113002: Prime the landing pad for the new video rendering pipeline. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Comments. Revert canvas changes. Created 5 years, 8 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
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 "media/blink/webmediaplayer_impl.h" 5 #include "media/blink/webmediaplayer_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 ended_(false), 126 ended_(false),
127 pending_seek_(false), 127 pending_seek_(false),
128 pending_seek_seconds_(0.0f), 128 pending_seek_seconds_(0.0f),
129 should_notify_time_changed_(false), 129 should_notify_time_changed_(false),
130 client_(client), 130 client_(client),
131 delegate_(delegate), 131 delegate_(delegate),
132 defer_load_cb_(params.defer_load_cb()), 132 defer_load_cb_(params.defer_load_cb()),
133 context_3d_cb_(params.context_3d_cb()), 133 context_3d_cb_(params.context_3d_cb()),
134 supports_save_(true), 134 supports_save_(true),
135 chunk_demuxer_(NULL), 135 chunk_demuxer_(NULL),
136 compositor_task_runner_(params.compositor_task_runner()), 136 // Threaded compositing isn't enabled universally yet.
137 compositor_task_runner_(
138 params.compositor_task_runner()
139 ? params.compositor_task_runner()
140 : base::MessageLoop::current()->task_runner()),
137 compositor_(new VideoFrameCompositor( 141 compositor_(new VideoFrameCompositor(
142 compositor_task_runner_,
138 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnNaturalSizeChanged), 143 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnNaturalSizeChanged),
139 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnOpacityChanged))), 144 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnOpacityChanged))),
140 encrypted_media_support_( 145 encrypted_media_support_(
141 cdm_factory, 146 cdm_factory,
142 client, 147 client,
143 params.media_permission(), 148 params.media_permission(),
144 base::Bind(&WebMediaPlayerImpl::SetCdm, AsWeakPtr())), 149 base::Bind(&WebMediaPlayerImpl::SetCdm, AsWeakPtr())),
145 renderer_factory_(renderer_factory.Pass()) { 150 renderer_factory_(renderer_factory.Pass()) {
146 // Threaded compositing isn't enabled universally yet.
147 if (!compositor_task_runner_.get())
148 compositor_task_runner_ = base::MessageLoopProxy::current();
149
150 media_log_->AddEvent( 151 media_log_->AddEvent(
151 media_log_->CreateEvent(MediaLogEvent::WEBMEDIAPLAYER_CREATED)); 152 media_log_->CreateEvent(MediaLogEvent::WEBMEDIAPLAYER_CREATED));
152 153
153 if (params.initial_cdm()) { 154 if (params.initial_cdm()) {
154 SetCdm( 155 SetCdm(
155 ToWebContentDecryptionModuleImpl(params.initial_cdm())->GetCdmContext(), 156 ToWebContentDecryptionModuleImpl(params.initial_cdm())->GetCdmContext(),
156 base::Bind(&IgnoreCdmAttached)); 157 base::Bind(&IgnoreCdmAttached));
157 } 158 }
158 159
159 // TODO(xhwang): When we use an external Renderer, many methods won't work, 160 // TODO(xhwang): When we use an external Renderer, many methods won't work,
(...skipping 734 matching lines...) Expand 10 before | Expand all | Expand 10 after
894 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnDemuxerOpened), 895 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnDemuxerOpened),
895 encrypted_media_init_data_cb, mse_log_cb, media_log_, true); 896 encrypted_media_init_data_cb, mse_log_cb, media_log_, true);
896 demuxer_.reset(chunk_demuxer_); 897 demuxer_.reset(chunk_demuxer_);
897 } 898 }
898 899
899 // ... and we're ready to go! 900 // ... and we're ready to go!
900 seeking_ = true; 901 seeking_ = true;
901 902
902 pipeline_.Start( 903 pipeline_.Start(
903 demuxer_.get(), 904 demuxer_.get(),
904 renderer_factory_->CreateRenderer(media_task_runner_, 905 renderer_factory_->CreateRenderer(
905 audio_source_provider_.get()), 906 media_task_runner_, audio_source_provider_.get(), compositor_),
906 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineEnded), 907 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineEnded),
907 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineError), 908 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineError),
908 BIND_TO_RENDER_LOOP1(&WebMediaPlayerImpl::OnPipelineSeeked, false), 909 BIND_TO_RENDER_LOOP1(&WebMediaPlayerImpl::OnPipelineSeeked, false),
909 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineMetadata), 910 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineMetadata),
910 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineBufferingStateChanged), 911 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineBufferingStateChanged),
911 base::Bind(&WebMediaPlayerImpl::FrameReady, base::Unretained(this)),
912 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnDurationChanged), 912 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnDurationChanged),
913 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnAddTextTrack), 913 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnAddTextTrack),
914 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnWaitingForDecryptionKey)); 914 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnWaitingForDecryptionKey));
915 } 915 }
916 916
917 void WebMediaPlayerImpl::SetNetworkState(WebMediaPlayer::NetworkState state) { 917 void WebMediaPlayerImpl::SetNetworkState(WebMediaPlayer::NetworkState state) {
918 DVLOG(1) << __FUNCTION__ << "(" << state << ")"; 918 DVLOG(1) << __FUNCTION__ << "(" << state << ")";
919 DCHECK(main_task_runner_->BelongsToCurrentThread()); 919 DCHECK(main_task_runner_->BelongsToCurrentThread());
920 network_state_ = state; 920 network_state_ = state;
921 // Always notify to ensure client has the latest value. 921 // Always notify to ensure client has the latest value.
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
972 972
973 void WebMediaPlayerImpl::OnOpacityChanged(bool opaque) { 973 void WebMediaPlayerImpl::OnOpacityChanged(bool opaque) {
974 DCHECK(main_task_runner_->BelongsToCurrentThread()); 974 DCHECK(main_task_runner_->BelongsToCurrentThread());
975 DCHECK_NE(ready_state_, WebMediaPlayer::ReadyStateHaveNothing); 975 DCHECK_NE(ready_state_, WebMediaPlayer::ReadyStateHaveNothing);
976 976
977 opaque_ = opaque; 977 opaque_ = opaque;
978 if (video_weblayer_) 978 if (video_weblayer_)
979 video_weblayer_->setOpaque(opaque_); 979 video_weblayer_->setOpaque(opaque_);
980 } 980 }
981 981
982 void WebMediaPlayerImpl::FrameReady(
983 const scoped_refptr<VideoFrame>& frame) {
984 compositor_task_runner_->PostTask(
985 FROM_HERE,
986 base::Bind(&VideoFrameCompositor::UpdateCurrentFrame,
987 base::Unretained(compositor_),
988 frame));
989 }
990
991 static void GetCurrentFrameAndSignal( 982 static void GetCurrentFrameAndSignal(
992 VideoFrameCompositor* compositor, 983 VideoFrameCompositor* compositor,
993 scoped_refptr<VideoFrame>* video_frame_out, 984 scoped_refptr<VideoFrame>* video_frame_out,
994 base::WaitableEvent* event) { 985 base::WaitableEvent* event) {
995 TRACE_EVENT0("media", "GetCurrentFrameAndSignal"); 986 TRACE_EVENT0("media", "GetCurrentFrameAndSignal");
996 *video_frame_out = compositor->GetCurrentFrame(); 987 *video_frame_out = compositor->GetCurrentFrame();
997 event->Signal(); 988 event->Signal();
998 } 989 }
999 990
1000 scoped_refptr<VideoFrame> 991 scoped_refptr<VideoFrame>
(...skipping 20 matching lines...) Expand all
1021 1012
1022 // pause() may be called after playback has ended and the HTMLMediaElement 1013 // pause() may be called after playback has ended and the HTMLMediaElement
1023 // requires that currentTime() == duration() after ending. We want to ensure 1014 // requires that currentTime() == duration() after ending. We want to ensure
1024 // |paused_time_| matches currentTime() in this case or a future seek() may 1015 // |paused_time_| matches currentTime() in this case or a future seek() may
1025 // incorrectly discard what it thinks is a seek to the existing time. 1016 // incorrectly discard what it thinks is a seek to the existing time.
1026 paused_time_ = 1017 paused_time_ =
1027 ended_ ? pipeline_.GetMediaDuration() : pipeline_.GetMediaTime(); 1018 ended_ ? pipeline_.GetMediaDuration() : pipeline_.GetMediaTime();
1028 } 1019 }
1029 1020
1030 } // namespace media 1021 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698