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 "media/blink/webmediaplayer_impl.h" | 5 #include "media/blink/webmediaplayer_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <cmath> | 8 #include <cmath> |
9 #include <limits> | 9 #include <limits> |
10 #include <string> | 10 #include <string> |
(...skipping 825 matching lines...) Loading... |
836 } | 836 } |
837 | 837 |
838 // TODO(xhwang): Update this UMA name. | 838 // TODO(xhwang): Update this UMA name. |
839 UMA_HISTOGRAM_COUNTS("Media.EME.NeedKey", 1); | 839 UMA_HISTOGRAM_COUNTS("Media.EME.NeedKey", 1); |
840 | 840 |
841 encrypted_client_->encrypted( | 841 encrypted_client_->encrypted( |
842 ConvertToWebInitDataType(init_data_type), init_data.data(), | 842 ConvertToWebInitDataType(init_data_type), init_data.data(), |
843 base::saturated_cast<unsigned int>(init_data.size())); | 843 base::saturated_cast<unsigned int>(init_data.size())); |
844 } | 844 } |
845 | 845 |
| 846 void WebMediaPlayerImpl::OnMediaTracksUpdated(scoped_ptr<MediaTracks> tracks) { |
| 847 // For MSE/chunk_demuxer case the media tracks should be handled by WSBI |
| 848 DCHECK(!chunk_demuxer_); |
| 849 DCHECK(client_); |
| 850 |
| 851 // Remove the old tracks first, if any were present |
| 852 while (!blink_audio_tracks_.empty()) { |
| 853 client_->removeAudioTrack(blink_audio_tracks_[0]); |
| 854 blink_audio_tracks_.erase(blink_audio_tracks_.begin()); |
| 855 } |
| 856 while (!blink_video_tracks_.empty()) { |
| 857 client_->removeVideoTrack(blink_video_tracks_[0]); |
| 858 blink_audio_tracks_.erase(blink_audio_tracks_.begin()); |
| 859 } |
| 860 |
| 861 // Now report the new media tracks to blink |
| 862 for (const auto& track : tracks->tracks()) { |
| 863 if (track->type() == MediaTrack::Audio) { |
| 864 auto track_id = client_->addAudioTrack( |
| 865 blink::WebString::fromUTF8(track->id()), |
| 866 blink::WebMediaPlayerClient::AudioTrackKindMain, |
| 867 blink::WebString::fromUTF8(track->label()), |
| 868 blink::WebString::fromUTF8(track->language()), |
| 869 /*enabled*/ true); |
| 870 blink_audio_tracks_.push_back(track_id); |
| 871 } else if (track->type() == MediaTrack::Video) { |
| 872 auto track_id = client_->addVideoTrack( |
| 873 blink::WebString::fromUTF8(track->id()), |
| 874 blink::WebMediaPlayerClient::VideoTrackKindMain, |
| 875 blink::WebString::fromUTF8(track->label()), |
| 876 blink::WebString::fromUTF8(track->language()), |
| 877 /*selected*/ true); |
| 878 blink_video_tracks_.push_back(track_id); |
| 879 } else { |
| 880 // Text tracks are not supported yet. |
| 881 NOTREACHED(); |
| 882 } |
| 883 } |
| 884 } |
| 885 |
846 void WebMediaPlayerImpl::OnWaitingForDecryptionKey() { | 886 void WebMediaPlayerImpl::OnWaitingForDecryptionKey() { |
847 encrypted_client_->didBlockPlaybackWaitingForKey(); | 887 encrypted_client_->didBlockPlaybackWaitingForKey(); |
848 | 888 |
849 // TODO(jrummell): didResumePlaybackBlockedForKey() should only be called | 889 // TODO(jrummell): didResumePlaybackBlockedForKey() should only be called |
850 // when a key has been successfully added (e.g. OnSessionKeysChange() with | 890 // when a key has been successfully added (e.g. OnSessionKeysChange() with |
851 // |has_additional_usable_key| = true). http://crbug.com/461903 | 891 // |has_additional_usable_key| = true). http://crbug.com/461903 |
852 encrypted_client_->didResumePlaybackBlockedForKey(); | 892 encrypted_client_->didResumePlaybackBlockedForKey(); |
853 } | 893 } |
854 | 894 |
855 void WebMediaPlayerImpl::SetCdm(const CdmAttachedCB& cdm_attached_cb, | 895 void WebMediaPlayerImpl::SetCdm(const CdmAttachedCB& cdm_attached_cb, |
(...skipping 508 matching lines...) Loading... |
1364 media_task_runner_, worker_task_runner_, audio_source_provider_.get(), | 1404 media_task_runner_, worker_task_runner_, audio_source_provider_.get(), |
1365 compositor_, request_surface_cb); | 1405 compositor_, request_surface_cb); |
1366 } | 1406 } |
1367 | 1407 |
1368 void WebMediaPlayerImpl::StartPipeline() { | 1408 void WebMediaPlayerImpl::StartPipeline() { |
1369 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 1409 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
1370 | 1410 |
1371 Demuxer::EncryptedMediaInitDataCB encrypted_media_init_data_cb = | 1411 Demuxer::EncryptedMediaInitDataCB encrypted_media_init_data_cb = |
1372 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnEncryptedMediaInitData); | 1412 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnEncryptedMediaInitData); |
1373 | 1413 |
| 1414 Demuxer::MediaTracksUpdatedCB media_tracks_updated_cb = |
| 1415 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnMediaTracksUpdated); |
| 1416 |
1374 // Figure out which demuxer to use. | 1417 // Figure out which demuxer to use. |
1375 if (load_type_ != LoadTypeMediaSource) { | 1418 if (load_type_ != LoadTypeMediaSource) { |
1376 DCHECK(!chunk_demuxer_); | 1419 DCHECK(!chunk_demuxer_); |
1377 DCHECK(data_source_); | 1420 DCHECK(data_source_); |
1378 | 1421 |
1379 #if !defined(MEDIA_DISABLE_FFMPEG) | 1422 #if !defined(MEDIA_DISABLE_FFMPEG) |
1380 demuxer_.reset(new FFmpegDemuxer(media_task_runner_, data_source_.get(), | 1423 demuxer_.reset(new FFmpegDemuxer(media_task_runner_, data_source_.get(), |
1381 encrypted_media_init_data_cb, media_log_)); | 1424 encrypted_media_init_data_cb, |
| 1425 media_tracks_updated_cb, media_log_)); |
1382 #else | 1426 #else |
1383 OnPipelineError(PipelineStatus::DEMUXER_ERROR_COULD_NOT_OPEN); | 1427 OnPipelineError(PipelineStatus::DEMUXER_ERROR_COULD_NOT_OPEN); |
1384 return; | 1428 return; |
1385 #endif | 1429 #endif |
1386 } else { | 1430 } else { |
1387 DCHECK(!chunk_demuxer_); | 1431 DCHECK(!chunk_demuxer_); |
1388 DCHECK(!data_source_); | 1432 DCHECK(!data_source_); |
1389 | 1433 |
1390 chunk_demuxer_ = new ChunkDemuxer( | 1434 chunk_demuxer_ = new ChunkDemuxer( |
1391 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnDemuxerOpened), | 1435 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnDemuxerOpened), |
(...skipping 188 matching lines...) Loading... |
1580 << ", Video: " << stats.video_memory_usage << ", DataSource: " | 1624 << ", Video: " << stats.video_memory_usage << ", DataSource: " |
1581 << (data_source_ ? data_source_->GetMemoryUsage() : 0) | 1625 << (data_source_ ? data_source_->GetMemoryUsage() : 0) |
1582 << ", Demuxer: " << demuxer_memory_usage; | 1626 << ", Demuxer: " << demuxer_memory_usage; |
1583 | 1627 |
1584 const int64_t delta = current_memory_usage - last_reported_memory_usage_; | 1628 const int64_t delta = current_memory_usage - last_reported_memory_usage_; |
1585 last_reported_memory_usage_ = current_memory_usage; | 1629 last_reported_memory_usage_ = current_memory_usage; |
1586 adjust_allocated_memory_cb_.Run(delta); | 1630 adjust_allocated_memory_cb_.Run(delta); |
1587 } | 1631 } |
1588 | 1632 |
1589 } // namespace media | 1633 } // namespace media |
OLD | NEW |