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> |
(...skipping 1133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1144 } | 1144 } |
1145 | 1145 |
1146 void WebMediaPlayerImpl::StartPipeline() { | 1146 void WebMediaPlayerImpl::StartPipeline() { |
1147 DCHECK(main_loop_->BelongsToCurrentThread()); | 1147 DCHECK(main_loop_->BelongsToCurrentThread()); |
1148 const CommandLine* cmd_line = CommandLine::ForCurrentProcess(); | 1148 const CommandLine* cmd_line = CommandLine::ForCurrentProcess(); |
1149 | 1149 |
1150 // Keep track if this is a MSE or non-MSE playback. | 1150 // Keep track if this is a MSE or non-MSE playback. |
1151 UMA_HISTOGRAM_BOOLEAN("Media.MSE.Playback", | 1151 UMA_HISTOGRAM_BOOLEAN("Media.MSE.Playback", |
1152 (load_type_ == LoadTypeMediaSource)); | 1152 (load_type_ == LoadTypeMediaSource)); |
1153 | 1153 |
| 1154 media::LogCB mse_log_cb; |
| 1155 |
1154 // Figure out which demuxer to use. | 1156 // Figure out which demuxer to use. |
1155 if (load_type_ != LoadTypeMediaSource) { | 1157 if (load_type_ != LoadTypeMediaSource) { |
1156 DCHECK(!chunk_demuxer_); | 1158 DCHECK(!chunk_demuxer_); |
1157 DCHECK(data_source_); | 1159 DCHECK(data_source_); |
1158 | 1160 |
1159 demuxer_.reset(new media::FFmpegDemuxer( | 1161 demuxer_.reset(new media::FFmpegDemuxer( |
1160 media_loop_, data_source_.get(), | 1162 media_loop_, data_source_.get(), |
1161 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnNeedKey), | 1163 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnNeedKey), |
1162 media_log_)); | 1164 media_log_)); |
1163 } else { | 1165 } else { |
1164 DCHECK(!chunk_demuxer_); | 1166 DCHECK(!chunk_demuxer_); |
1165 DCHECK(!data_source_); | 1167 DCHECK(!data_source_); |
1166 | 1168 |
| 1169 mse_log_cb = base::Bind(&LogMediaSourceError, media_log_); |
| 1170 |
1167 chunk_demuxer_ = new media::ChunkDemuxer( | 1171 chunk_demuxer_ = new media::ChunkDemuxer( |
1168 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnDemuxerOpened), | 1172 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnDemuxerOpened), |
1169 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnNeedKey), | 1173 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnNeedKey), |
1170 base::Bind(&LogMediaSourceError, media_log_), | 1174 mse_log_cb, |
1171 true); | 1175 true); |
1172 demuxer_.reset(chunk_demuxer_); | 1176 demuxer_.reset(chunk_demuxer_); |
1173 } | 1177 } |
1174 | 1178 |
1175 scoped_ptr<media::FilterCollection> filter_collection( | 1179 scoped_ptr<media::FilterCollection> filter_collection( |
1176 new media::FilterCollection()); | 1180 new media::FilterCollection()); |
1177 filter_collection->SetDemuxer(demuxer_.get()); | 1181 filter_collection->SetDemuxer(demuxer_.get()); |
1178 | 1182 |
1179 media::SetDecryptorReadyCB set_decryptor_ready_cb = | 1183 media::SetDecryptorReadyCB set_decryptor_ready_cb = |
1180 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::SetDecryptorReadyCB); | 1184 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::SetDecryptorReadyCB); |
1181 | 1185 |
1182 // Create our audio decoders and renderer. | 1186 // Create our audio decoders and renderer. |
1183 ScopedVector<media::AudioDecoder> audio_decoders; | 1187 ScopedVector<media::AudioDecoder> audio_decoders; |
1184 audio_decoders.push_back(new media::FFmpegAudioDecoder(media_loop_)); | 1188 audio_decoders.push_back(new media::FFmpegAudioDecoder(media_loop_, |
| 1189 mse_log_cb)); |
1185 audio_decoders.push_back(new media::OpusAudioDecoder(media_loop_)); | 1190 audio_decoders.push_back(new media::OpusAudioDecoder(media_loop_)); |
1186 | 1191 |
1187 scoped_ptr<media::AudioRenderer> audio_renderer(new media::AudioRendererImpl( | 1192 scoped_ptr<media::AudioRenderer> audio_renderer(new media::AudioRendererImpl( |
1188 media_loop_, | 1193 media_loop_, |
1189 audio_source_provider_.get(), | 1194 audio_source_provider_.get(), |
1190 audio_decoders.Pass(), | 1195 audio_decoders.Pass(), |
1191 set_decryptor_ready_cb, | 1196 set_decryptor_ready_cb, |
1192 RenderThreadImpl::current()->GetAudioHardwareConfig())); | 1197 RenderThreadImpl::current()->GetAudioHardwareConfig())); |
1193 filter_collection->SetAudioRenderer(audio_renderer.Pass()); | 1198 filter_collection->SetAudioRenderer(audio_renderer.Pass()); |
1194 | 1199 |
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1373 compositor_task_runner_->PostTask(FROM_HERE, | 1378 compositor_task_runner_->PostTask(FROM_HERE, |
1374 base::Bind(&GetCurrentFrameAndSignal, | 1379 base::Bind(&GetCurrentFrameAndSignal, |
1375 base::Unretained(compositor_), | 1380 base::Unretained(compositor_), |
1376 &video_frame, | 1381 &video_frame, |
1377 &event)); | 1382 &event)); |
1378 event.Wait(); | 1383 event.Wait(); |
1379 return video_frame; | 1384 return video_frame; |
1380 } | 1385 } |
1381 | 1386 |
1382 } // namespace content | 1387 } // namespace content |
OLD | NEW |