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

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

Issue 1407703003: Reland: Use GpuMemoryBufferVideoFramePool for WebMediaPlayerMS and MediaStreamVideoRendererSink (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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
« no previous file with comments | « content/renderer/media/webmediaplayer_ms.h ('k') | content/renderer/render_frame_impl.cc » ('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 <limits> 7 #include <limits>
8 #include <string> 8 #include <string>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 scoped_refptr<media::VideoFrame> CopyFrameToYV12( 55 scoped_refptr<media::VideoFrame> CopyFrameToYV12(
56 const scoped_refptr<media::VideoFrame>& frame, 56 const scoped_refptr<media::VideoFrame>& frame,
57 media::SkCanvasVideoRenderer* video_renderer) { 57 media::SkCanvasVideoRenderer* video_renderer) {
58 const scoped_refptr<media::VideoFrame> new_frame = 58 const scoped_refptr<media::VideoFrame> new_frame =
59 media::VideoFrame::CreateFrame(media::PIXEL_FORMAT_YV12, 59 media::VideoFrame::CreateFrame(media::PIXEL_FORMAT_YV12,
60 frame->coded_size(), frame->visible_rect(), 60 frame->coded_size(), frame->visible_rect(),
61 frame->natural_size(), frame->timestamp()); 61 frame->natural_size(), frame->timestamp());
62 62
63 if (frame->HasTextures()) { 63 if (frame->HasTextures()) {
64 DCHECK(frame->format() == media::PIXEL_FORMAT_ARGB || 64 DCHECK(frame->format() == media::PIXEL_FORMAT_ARGB ||
65 frame->format() == media::PIXEL_FORMAT_XRGB); 65 frame->format() == media::PIXEL_FORMAT_XRGB ||
66 frame->format() == media::PIXEL_FORMAT_I420 ||
67 frame->format() == media::PIXEL_FORMAT_UYVY);
66 SkBitmap bitmap; 68 SkBitmap bitmap;
67 bitmap.allocN32Pixels(frame->visible_rect().width(), 69 bitmap.allocN32Pixels(frame->visible_rect().width(),
68 frame->visible_rect().height()); 70 frame->visible_rect().height());
69 SkCanvas canvas(bitmap); 71 SkCanvas canvas(bitmap);
70 72
71 cc::ContextProvider* const provider = 73 cc::ContextProvider* const provider =
72 RenderThreadImpl::current()->SharedMainThreadContextProvider().get(); 74 RenderThreadImpl::current()->SharedMainThreadContextProvider().get();
73 if (provider) { 75 if (provider) {
74 const media::Context3D context_3d = 76 const media::Context3D context_3d =
75 media::Context3D(provider->ContextGL(), provider->GrContext()); 77 media::Context3D(provider->ContextGL(), provider->GrContext());
(...skipping 20 matching lines...) Expand all
96 } 98 }
97 99
98 } // anonymous namespace 100 } // anonymous namespace
99 101
100 WebMediaPlayerMS::WebMediaPlayerMS( 102 WebMediaPlayerMS::WebMediaPlayerMS(
101 blink::WebFrame* frame, 103 blink::WebFrame* frame,
102 blink::WebMediaPlayerClient* client, 104 blink::WebMediaPlayerClient* client,
103 base::WeakPtr<media::WebMediaPlayerDelegate> delegate, 105 base::WeakPtr<media::WebMediaPlayerDelegate> delegate,
104 media::MediaLog* media_log, 106 media::MediaLog* media_log,
105 scoped_ptr<MediaStreamRendererFactory> factory, 107 scoped_ptr<MediaStreamRendererFactory> factory,
106 const scoped_refptr<base::SingleThreadTaskRunner>& compositor_task_runner) 108 const scoped_refptr<base::SingleThreadTaskRunner>& compositor_task_runner,
109 const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner,
110 const scoped_refptr<base::TaskRunner>& worker_task_runner,
111 const scoped_refptr<media::GpuVideoAcceleratorFactories>& gpu_factories)
107 : frame_(frame), 112 : frame_(frame),
108 network_state_(WebMediaPlayer::NetworkStateEmpty), 113 network_state_(WebMediaPlayer::NetworkStateEmpty),
109 ready_state_(WebMediaPlayer::ReadyStateHaveNothing), 114 ready_state_(WebMediaPlayer::ReadyStateHaveNothing),
110 buffered_(static_cast<size_t>(0)), 115 buffered_(static_cast<size_t>(0)),
111 volume_(1.0f), 116 volume_(1.0f),
112 client_(client), 117 client_(client),
113 delegate_(delegate), 118 delegate_(delegate),
114 paused_(true), 119 paused_(true),
115 received_first_frame_(false), 120 received_first_frame_(false),
116 media_log_(media_log), 121 media_log_(media_log),
117 renderer_factory_(factory.Pass()), 122 renderer_factory_(factory.Pass()),
123 media_task_runner_(media_task_runner),
124 worker_task_runner_(worker_task_runner),
125 gpu_factories_(gpu_factories),
118 compositor_(new Compositor(compositor_task_runner)), 126 compositor_(new Compositor(compositor_task_runner)),
119 compositor_task_runner_(compositor_task_runner) { 127 compositor_task_runner_(compositor_task_runner) {
120 DVLOG(1) << "WebMediaPlayerMS::ctor"; 128 DVLOG(1) << "WebMediaPlayerMS::ctor";
121 media_log_->AddEvent( 129 media_log_->AddEvent(
122 media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED)); 130 media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED));
123 } 131 }
124 132
125 WebMediaPlayerMS::~WebMediaPlayerMS() { 133 WebMediaPlayerMS::~WebMediaPlayerMS() {
126 DVLOG(1) << "WebMediaPlayerMS::dtor"; 134 DVLOG(1) << "WebMediaPlayerMS::dtor";
127 DCHECK(thread_checker_.CalledOnValidThread()); 135 DCHECK(thread_checker_.CalledOnValidThread());
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 uint32 hash_value = base::Hash(url.string().utf8()); 177 uint32 hash_value = base::Hash(url.string().utf8());
170 compositor_->SetSerial(((hash_value & 0x7FFFFFFF) << 1) | (remote ? 1 : 0)); 178 compositor_->SetSerial(((hash_value & 0x7FFFFFFF) << 1) | (remote ? 1 : 0));
171 179
172 SetNetworkState(WebMediaPlayer::NetworkStateLoading); 180 SetNetworkState(WebMediaPlayer::NetworkStateLoading);
173 SetReadyState(WebMediaPlayer::ReadyStateHaveNothing); 181 SetReadyState(WebMediaPlayer::ReadyStateHaveNothing);
174 media_log_->AddEvent(media_log_->CreateLoadEvent(url.spec())); 182 media_log_->AddEvent(media_log_->CreateLoadEvent(url.spec()));
175 183
176 video_frame_provider_ = renderer_factory_->GetVideoFrameProvider( 184 video_frame_provider_ = renderer_factory_->GetVideoFrameProvider(
177 url, 185 url,
178 base::Bind(&WebMediaPlayerMS::OnSourceError, AsWeakPtr()), 186 base::Bind(&WebMediaPlayerMS::OnSourceError, AsWeakPtr()),
179 base::Bind(&WebMediaPlayerMS::OnFrameAvailable, AsWeakPtr())); 187 base::Bind(&WebMediaPlayerMS::OnFrameAvailable, AsWeakPtr()),
188 media_task_runner_,
189 worker_task_runner_,
190 gpu_factories_);
180 191
181 RenderFrame* const frame = RenderFrame::FromWebFrame(frame_); 192 RenderFrame* const frame = RenderFrame::FromWebFrame(frame_);
182 audio_renderer_ = renderer_factory_->GetAudioRenderer( 193 audio_renderer_ = renderer_factory_->GetAudioRenderer(
183 url, frame->GetRoutingID(), std::string(), url::Origin()); 194 url, frame->GetRoutingID(), std::string(), url::Origin());
184 195
185 if (!video_frame_provider_ && !audio_renderer_) { 196 if (!video_frame_provider_ && !audio_renderer_) {
186 SetNetworkState(WebMediaPlayer::NetworkStateNetworkError); 197 SetNetworkState(WebMediaPlayer::NetworkStateNetworkError);
187 return; 198 return;
188 } 199 }
189 200
(...skipping 569 matching lines...) Expand 10 before | Expand all | Expand 10 after
759 bool WebMediaPlayerMS::Compositor::GetAlgorithmEnabled() { 770 bool WebMediaPlayerMS::Compositor::GetAlgorithmEnabled() {
760 DCHECK(thread_checker_.CalledOnValidThread()); 771 DCHECK(thread_checker_.CalledOnValidThread());
761 return !!frame_pool_; 772 return !!frame_pool_;
762 } 773 }
763 774
764 void WebMediaPlayerMS::Compositor::SetSerial(uint32 serial) { 775 void WebMediaPlayerMS::Compositor::SetSerial(uint32 serial) {
765 DCHECK(thread_checker_.CalledOnValidThread()); 776 DCHECK(thread_checker_.CalledOnValidThread());
766 serial_ = serial; 777 serial_ = serial;
767 } 778 }
768 } // namespace content 779 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/webmediaplayer_ms.h ('k') | content/renderer/render_frame_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698