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 "webkit/renderer/media/webmediaplayer_impl.h" | 5 #include "webkit/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> |
(...skipping 1032 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1043 else if (is_downloading && network_state_ == WebMediaPlayer::NetworkStateIdle) | 1043 else if (is_downloading && network_state_ == WebMediaPlayer::NetworkStateIdle) |
1044 SetNetworkState(WebMediaPlayer::NetworkStateLoading); | 1044 SetNetworkState(WebMediaPlayer::NetworkStateLoading); |
1045 media_log_->AddEvent( | 1045 media_log_->AddEvent( |
1046 media_log_->CreateBooleanEvent( | 1046 media_log_->CreateBooleanEvent( |
1047 media::MediaLogEvent::NETWORK_ACTIVITY_SET, | 1047 media::MediaLogEvent::NETWORK_ACTIVITY_SET, |
1048 "is_downloading_data", is_downloading)); | 1048 "is_downloading_data", is_downloading)); |
1049 } | 1049 } |
1050 | 1050 |
1051 void WebMediaPlayerImpl::StartPipeline(WebKit::WebMediaSource* media_source) { | 1051 void WebMediaPlayerImpl::StartPipeline(WebKit::WebMediaSource* media_source) { |
1052 const CommandLine* cmd_line = CommandLine::ForCurrentProcess(); | 1052 const CommandLine* cmd_line = CommandLine::ForCurrentProcess(); |
1053 | 1053 bool increase_preroll_on_underflow = true; |
1054 | 1054 |
1055 // Figure out which demuxer to use. | 1055 // Figure out which demuxer to use. |
1056 if (!media_source) { | 1056 if (!media_source) { |
1057 DCHECK(!chunk_demuxer_); | 1057 DCHECK(!chunk_demuxer_); |
1058 DCHECK(data_source_); | 1058 DCHECK(data_source_); |
1059 | 1059 |
1060 demuxer_.reset(new media::FFmpegDemuxer( | 1060 demuxer_.reset(new media::FFmpegDemuxer( |
1061 media_thread_.message_loop_proxy(), data_source_.get(), | 1061 media_thread_.message_loop_proxy(), data_source_.get(), |
1062 BIND_TO_RENDER_LOOP_2(&WebMediaPlayerImpl::OnNeedKey, "", ""))); | 1062 BIND_TO_RENDER_LOOP_2(&WebMediaPlayerImpl::OnNeedKey, "", ""))); |
1063 } else { | 1063 } else { |
1064 DCHECK(!chunk_demuxer_); | 1064 DCHECK(!chunk_demuxer_); |
1065 DCHECK(!data_source_); | 1065 DCHECK(!data_source_); |
1066 | 1066 |
1067 scoped_ptr<WebKit::WebMediaSource> ms(media_source); | 1067 scoped_ptr<WebKit::WebMediaSource> ms(media_source); |
1068 chunk_demuxer_ = new media::ChunkDemuxer( | 1068 chunk_demuxer_ = new media::ChunkDemuxer( |
1069 BIND_TO_RENDER_LOOP_1(&WebMediaPlayerImpl::OnDemuxerOpened, | 1069 BIND_TO_RENDER_LOOP_1(&WebMediaPlayerImpl::OnDemuxerOpened, |
1070 base::Passed(&ms)), | 1070 base::Passed(&ms)), |
1071 BIND_TO_RENDER_LOOP_2(&WebMediaPlayerImpl::OnNeedKey, "", ""), | 1071 BIND_TO_RENDER_LOOP_2(&WebMediaPlayerImpl::OnNeedKey, "", ""), |
1072 base::Bind(&WebMediaPlayerImpl::OnTextTrack, base::Unretained(this)), | 1072 base::Bind(&WebMediaPlayerImpl::OnTextTrack, base::Unretained(this)), |
1073 base::Bind(&LogMediaSourceError, media_log_)); | 1073 base::Bind(&LogMediaSourceError, media_log_)); |
1074 demuxer_.reset(chunk_demuxer_); | 1074 demuxer_.reset(chunk_demuxer_); |
1075 | 1075 |
1076 // Disable GpuVideoDecoder creation until it supports codec config changes. | 1076 // Disable GpuVideoDecoder creation until it supports codec config changes. |
1077 // TODO(acolwell): Remove this once http://crbug.com/151045 is fixed. | 1077 // TODO(acolwell): Remove this once http://crbug.com/151045 is fixed. |
1078 gpu_factories_ = NULL; | 1078 gpu_factories_ = NULL; |
| 1079 |
| 1080 // Disable preroll increases on underflow since the web application has no |
| 1081 // way to detect that this is happening and runs the risk of triggering |
| 1082 // unwanted garbage collection if it is to aggressive about appending data. |
| 1083 // TODO(acolwell): Remove this once http://crbug.com/144683 is fixed. |
| 1084 increase_preroll_on_underflow = false; |
1079 } | 1085 } |
1080 | 1086 |
1081 scoped_ptr<media::FilterCollection> filter_collection( | 1087 scoped_ptr<media::FilterCollection> filter_collection( |
1082 new media::FilterCollection()); | 1088 new media::FilterCollection()); |
1083 filter_collection->SetDemuxer(demuxer_.get()); | 1089 filter_collection->SetDemuxer(demuxer_.get()); |
1084 | 1090 |
1085 // Figure out if EME is enabled. | 1091 // Figure out if EME is enabled. |
1086 media::SetDecryptorReadyCB set_decryptor_ready_cb; | 1092 media::SetDecryptorReadyCB set_decryptor_ready_cb; |
1087 if (decryptor_) { | 1093 if (decryptor_) { |
1088 set_decryptor_ready_cb = base::Bind(&ProxyDecryptor::SetDecryptorReadyCB, | 1094 set_decryptor_ready_cb = base::Bind(&ProxyDecryptor::SetDecryptorReadyCB, |
1089 base::Unretained(decryptor_.get())); | 1095 base::Unretained(decryptor_.get())); |
1090 } | 1096 } |
1091 | 1097 |
1092 // Create our audio decoders and renderer. | 1098 // Create our audio decoders and renderer. |
1093 ScopedVector<media::AudioDecoder> audio_decoders; | 1099 ScopedVector<media::AudioDecoder> audio_decoders; |
1094 audio_decoders.push_back(new media::FFmpegAudioDecoder( | 1100 audio_decoders.push_back(new media::FFmpegAudioDecoder( |
1095 media_thread_.message_loop_proxy())); | 1101 media_thread_.message_loop_proxy())); |
1096 if (cmd_line->HasSwitch(switches::kEnableOpusPlayback)) { | 1102 if (cmd_line->HasSwitch(switches::kEnableOpusPlayback)) { |
1097 audio_decoders.push_back(new media::OpusAudioDecoder( | 1103 audio_decoders.push_back(new media::OpusAudioDecoder( |
1098 media_thread_.message_loop_proxy())); | 1104 media_thread_.message_loop_proxy())); |
1099 } | 1105 } |
1100 | 1106 |
1101 scoped_ptr<media::AudioRenderer> audio_renderer( | 1107 scoped_ptr<media::AudioRenderer> audio_renderer( |
1102 new media::AudioRendererImpl(media_thread_.message_loop_proxy(), | 1108 new media::AudioRendererImpl(media_thread_.message_loop_proxy(), |
1103 audio_source_provider_.get(), | 1109 audio_source_provider_.get(), |
1104 audio_decoders.Pass(), | 1110 audio_decoders.Pass(), |
1105 set_decryptor_ready_cb)); | 1111 set_decryptor_ready_cb, |
| 1112 increase_preroll_on_underflow)); |
1106 filter_collection->SetAudioRenderer(audio_renderer.Pass()); | 1113 filter_collection->SetAudioRenderer(audio_renderer.Pass()); |
1107 | 1114 |
1108 // Create our video decoders and renderer. | 1115 // Create our video decoders and renderer. |
1109 ScopedVector<media::VideoDecoder> video_decoders; | 1116 ScopedVector<media::VideoDecoder> video_decoders; |
1110 | 1117 |
1111 if (gpu_factories_.get()) { | 1118 if (gpu_factories_.get()) { |
1112 video_decoders.push_back(new media::GpuVideoDecoder( | 1119 video_decoders.push_back(new media::GpuVideoDecoder( |
1113 media_thread_.message_loop_proxy(), gpu_factories_)); | 1120 media_thread_.message_loop_proxy(), gpu_factories_)); |
1114 } | 1121 } |
1115 | 1122 |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1254 | 1261 |
1255 if (pending_repaint_) | 1262 if (pending_repaint_) |
1256 return; | 1263 return; |
1257 | 1264 |
1258 pending_repaint_ = true; | 1265 pending_repaint_ = true; |
1259 main_loop_->PostTask(FROM_HERE, base::Bind( | 1266 main_loop_->PostTask(FROM_HERE, base::Bind( |
1260 &WebMediaPlayerImpl::Repaint, AsWeakPtr())); | 1267 &WebMediaPlayerImpl::Repaint, AsWeakPtr())); |
1261 } | 1268 } |
1262 | 1269 |
1263 } // namespace webkit_media | 1270 } // namespace webkit_media |
OLD | NEW |