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_impl.h" | 5 #include "content/renderer/media/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> |
11 | 11 |
12 #include "base/bind.h" | 12 #include "base/bind.h" |
13 #include "base/callback.h" | 13 #include "base/callback.h" |
14 #include "base/callback_helpers.h" | 14 #include "base/callback_helpers.h" |
15 #include "base/command_line.h" | 15 #include "base/command_line.h" |
16 #include "base/debug/alias.h" | 16 #include "base/debug/alias.h" |
17 #include "base/debug/crash_logging.h" | 17 #include "base/debug/crash_logging.h" |
18 #include "base/debug/trace_event.h" | 18 #include "base/debug/trace_event.h" |
19 #include "base/message_loop/message_loop_proxy.h" | 19 #include "base/message_loop/message_loop_proxy.h" |
20 #include "base/metrics/histogram.h" | 20 #include "base/metrics/histogram.h" |
21 #include "base/single_thread_task_runner.h" | 21 #include "base/single_thread_task_runner.h" |
22 #include "base/synchronization/waitable_event.h" | 22 #include "base/synchronization/waitable_event.h" |
23 #include "cc/blink/web_layer_impl.h" | 23 #include "cc/blink/web_layer_impl.h" |
24 #include "cc/layers/video_layer.h" | 24 #include "cc/layers/video_layer.h" |
25 #include "content/public/common/content_switches.h" | 25 #include "content/public/common/content_switches.h" |
26 #include "content/public/renderer/render_frame.h" | |
27 #include "content/renderer/media/buffered_data_source.h" | 26 #include "content/renderer/media/buffered_data_source.h" |
28 #include "content/renderer/media/crypto/encrypted_media_player_support.h" | 27 #include "content/renderer/media/crypto/encrypted_media_player_support.h" |
29 #include "content/renderer/media/render_media_log.h" | |
30 #include "content/renderer/media/texttrack_impl.h" | 28 #include "content/renderer/media/texttrack_impl.h" |
31 #include "content/renderer/media/webaudiosourceprovider_impl.h" | 29 #include "content/renderer/media/webaudiosourceprovider_impl.h" |
32 #include "content/renderer/media/webinbandtexttrack_impl.h" | 30 #include "content/renderer/media/webinbandtexttrack_impl.h" |
33 #include "content/renderer/media/webmediaplayer_delegate.h" | 31 #include "content/renderer/media/webmediaplayer_delegate.h" |
34 #include "content/renderer/media/webmediaplayer_params.h" | 32 #include "content/renderer/media/webmediaplayer_params.h" |
35 #include "content/renderer/media/webmediaplayer_util.h" | 33 #include "content/renderer/media/webmediaplayer_util.h" |
36 #include "content/renderer/media/webmediasource_impl.h" | 34 #include "content/renderer/media/webmediasource_impl.h" |
37 #include "content/renderer/render_thread_impl.h" | |
38 #include "gpu/GLES2/gl2extchromium.h" | 35 #include "gpu/GLES2/gl2extchromium.h" |
39 #include "gpu/command_buffer/common/mailbox_holder.h" | 36 #include "gpu/command_buffer/common/mailbox_holder.h" |
40 #include "media/audio/null_audio_sink.h" | 37 #include "media/audio/null_audio_sink.h" |
41 #include "media/base/audio_hardware_config.h" | 38 #include "media/base/audio_hardware_config.h" |
42 #include "media/base/bind_to_current_loop.h" | 39 #include "media/base/bind_to_current_loop.h" |
43 #include "media/base/filter_collection.h" | 40 #include "media/base/filter_collection.h" |
44 #include "media/base/limits.h" | 41 #include "media/base/limits.h" |
45 #include "media/base/media_log.h" | 42 #include "media/base/media_log.h" |
46 #include "media/base/media_switches.h" | 43 #include "media/base/media_switches.h" |
47 #include "media/base/pipeline.h" | 44 #include "media/base/pipeline.h" |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
143 WebMediaPlayerImpl::WebMediaPlayerImpl( | 140 WebMediaPlayerImpl::WebMediaPlayerImpl( |
144 blink::WebLocalFrame* frame, | 141 blink::WebLocalFrame* frame, |
145 blink::WebMediaPlayerClient* client, | 142 blink::WebMediaPlayerClient* client, |
146 base::WeakPtr<WebMediaPlayerDelegate> delegate, | 143 base::WeakPtr<WebMediaPlayerDelegate> delegate, |
147 const WebMediaPlayerParams& params) | 144 const WebMediaPlayerParams& params) |
148 : frame_(frame), | 145 : frame_(frame), |
149 network_state_(WebMediaPlayer::NetworkStateEmpty), | 146 network_state_(WebMediaPlayer::NetworkStateEmpty), |
150 ready_state_(WebMediaPlayer::ReadyStateHaveNothing), | 147 ready_state_(WebMediaPlayer::ReadyStateHaveNothing), |
151 preload_(AUTO), | 148 preload_(AUTO), |
152 main_task_runner_(base::MessageLoopProxy::current()), | 149 main_task_runner_(base::MessageLoopProxy::current()), |
153 media_task_runner_( | 150 media_task_runner_(params.media_task_runner()), |
154 RenderThreadImpl::current()->GetMediaThreadTaskRunner()), | 151 media_log_(params.media_log()), |
155 media_log_(new RenderMediaLog()), | |
156 pipeline_(media_task_runner_, media_log_.get()), | 152 pipeline_(media_task_runner_, media_log_.get()), |
157 load_type_(LoadTypeURL), | 153 load_type_(LoadTypeURL), |
158 opaque_(false), | 154 opaque_(false), |
159 paused_(true), | 155 paused_(true), |
160 seeking_(false), | 156 seeking_(false), |
161 playback_rate_(0.0f), | 157 playback_rate_(0.0f), |
162 pending_seek_(false), | 158 pending_seek_(false), |
163 pending_seek_seconds_(0.0f), | 159 pending_seek_seconds_(0.0f), |
164 should_notify_time_changed_(false), | 160 should_notify_time_changed_(false), |
165 client_(client), | 161 client_(client), |
166 delegate_(delegate), | 162 delegate_(delegate), |
167 defer_load_cb_(params.defer_load_cb()), | 163 defer_load_cb_(params.defer_load_cb()), |
168 gpu_factories_(RenderThreadImpl::current()->GetGpuFactories()), | 164 gpu_factories_(params.gpu_factories()), |
169 supports_save_(true), | 165 supports_save_(true), |
170 chunk_demuxer_(NULL), | 166 chunk_demuxer_(NULL), |
171 // Threaded compositing isn't enabled universally yet. | 167 compositor_task_runner_(params.compositor_task_runner()), |
172 compositor_task_runner_( | |
173 RenderThreadImpl::current()->compositor_message_loop_proxy() | |
174 ? RenderThreadImpl::current()->compositor_message_loop_proxy() | |
175 : base::MessageLoopProxy::current()), | |
176 compositor_(new VideoFrameCompositor( | 168 compositor_(new VideoFrameCompositor( |
177 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnNaturalSizeChanged), | 169 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnNaturalSizeChanged), |
178 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnOpacityChanged))), | 170 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnOpacityChanged))), |
179 text_track_index_(0), | 171 text_track_index_(0), |
180 encrypted_media_support_(EncryptedMediaPlayerSupport::Create(client)) { | 172 encrypted_media_support_( |
173 params.CreateEncryptedMediaPlayerSupport(client).Pass()), | |
scherkus (not reviewing)
2014/08/28 21:04:04
I *think* you can drop .Pass() if the function is
acolwell GONE FROM CHROMIUM
2014/08/28 21:15:05
Done.
| |
174 audio_hardware_config_(params.audio_hardware_config()) { | |
181 DCHECK(encrypted_media_support_); | 175 DCHECK(encrypted_media_support_); |
182 | 176 |
177 // Threaded compositing isn't enabled universally yet. | |
178 if (!compositor_task_runner_) | |
179 compositor_task_runner_ = base::MessageLoopProxy::current(); | |
180 | |
183 media_log_->AddEvent( | 181 media_log_->AddEvent( |
184 media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED)); | 182 media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED)); |
185 | 183 |
186 // |gpu_factories_| requires that its entry points be called on its | 184 // |gpu_factories_| requires that its entry points be called on its |
187 // |GetTaskRunner()|. Since |pipeline_| will own decoders created from the | 185 // |GetTaskRunner()|. Since |pipeline_| will own decoders created from the |
188 // factories, require that their message loops are identical. | 186 // factories, require that their message loops are identical. |
189 DCHECK(!gpu_factories_.get() || | 187 DCHECK(!gpu_factories_.get() || |
190 (gpu_factories_->GetTaskRunner() == media_task_runner_.get())); | 188 (gpu_factories_->GetTaskRunner() == media_task_runner_.get())); |
191 | 189 |
192 // Use the null sink if no sink was provided. | 190 // Use the null sink if no sink was provided. |
(...skipping 641 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
834 media::LogCB log_cb = base::Bind(&LogMediaSourceError, media_log_); | 832 media::LogCB log_cb = base::Bind(&LogMediaSourceError, media_log_); |
835 audio_decoders.push_back(new media::FFmpegAudioDecoder(media_task_runner_, | 833 audio_decoders.push_back(new media::FFmpegAudioDecoder(media_task_runner_, |
836 log_cb)); | 834 log_cb)); |
837 audio_decoders.push_back(new media::OpusAudioDecoder(media_task_runner_)); | 835 audio_decoders.push_back(new media::OpusAudioDecoder(media_task_runner_)); |
838 | 836 |
839 scoped_ptr<media::AudioRenderer> audio_renderer(new media::AudioRendererImpl( | 837 scoped_ptr<media::AudioRenderer> audio_renderer(new media::AudioRendererImpl( |
840 media_task_runner_, | 838 media_task_runner_, |
841 audio_source_provider_.get(), | 839 audio_source_provider_.get(), |
842 audio_decoders.Pass(), | 840 audio_decoders.Pass(), |
843 set_decryptor_ready_cb, | 841 set_decryptor_ready_cb, |
844 RenderThreadImpl::current()->GetAudioHardwareConfig())); | 842 audio_hardware_config_)); |
845 | 843 |
846 // Create our video decoders and renderer. | 844 // Create our video decoders and renderer. |
847 ScopedVector<media::VideoDecoder> video_decoders; | 845 ScopedVector<media::VideoDecoder> video_decoders; |
848 | 846 |
849 if (gpu_factories_.get()) { | 847 if (gpu_factories_.get()) { |
850 video_decoders.push_back( | 848 video_decoders.push_back( |
851 new media::GpuVideoDecoder(gpu_factories_, media_log_)); | 849 new media::GpuVideoDecoder(gpu_factories_, media_log_)); |
852 } | 850 } |
853 | 851 |
854 #if !defined(MEDIA_DISABLE_LIBVPX) | 852 #if !defined(MEDIA_DISABLE_LIBVPX) |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1030 compositor_task_runner_->PostTask(FROM_HERE, | 1028 compositor_task_runner_->PostTask(FROM_HERE, |
1031 base::Bind(&GetCurrentFrameAndSignal, | 1029 base::Bind(&GetCurrentFrameAndSignal, |
1032 base::Unretained(compositor_), | 1030 base::Unretained(compositor_), |
1033 &video_frame, | 1031 &video_frame, |
1034 &event)); | 1032 &event)); |
1035 event.Wait(); | 1033 event.Wait(); |
1036 return video_frame; | 1034 return video_frame; |
1037 } | 1035 } |
1038 | 1036 |
1039 } // namespace content | 1037 } // namespace content |
OLD | NEW |