OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |