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 <limits> | 8 #include <limits> |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
(...skipping 682 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
693 result.completeWithError( | 693 result.completeWithError( |
694 blink::WebContentDecryptionModuleExceptionNotSupportedError, 0, | 694 blink::WebContentDecryptionModuleExceptionNotSupportedError, 0, |
695 "Null MediaKeys object is not supported."); | 695 "Null MediaKeys object is not supported."); |
696 return; | 696 return; |
697 } | 697 } |
698 | 698 |
699 SetCdm(ToWebContentDecryptionModuleImpl(cdm)->GetCdmContext(), | 699 SetCdm(ToWebContentDecryptionModuleImpl(cdm)->GetCdmContext(), |
700 BIND_TO_RENDER_LOOP1(&WebMediaPlayerImpl::OnCdmAttached, result)); | 700 BIND_TO_RENDER_LOOP1(&WebMediaPlayerImpl::OnCdmAttached, result)); |
701 } | 701 } |
702 | 702 |
703 void WebMediaPlayerImpl::OnNeedKey(const std::string& init_data_type, | 703 void WebMediaPlayerImpl::OnEncryptedMediaInitData( |
704 const std::vector<uint8>& init_data) { | 704 const std::string& init_data_type, |
| 705 const std::vector<uint8>& init_data) { |
705 DCHECK(!init_data_type.empty()); | 706 DCHECK(!init_data_type.empty()); |
706 | 707 |
707 // Do not fire NeedKey event if encrypted media is not enabled. | 708 // Do not fire "encrypted" event if encrypted media is not enabled. |
708 // TODO(xhwang): Handle this in |client_|. | 709 // TODO(xhwang): Handle this in |client_|. |
709 if (!blink::WebRuntimeFeatures::isPrefixedEncryptedMediaEnabled() && | 710 if (!blink::WebRuntimeFeatures::isPrefixedEncryptedMediaEnabled() && |
710 !blink::WebRuntimeFeatures::isEncryptedMediaEnabled()) { | 711 !blink::WebRuntimeFeatures::isEncryptedMediaEnabled()) { |
711 return; | 712 return; |
712 } | 713 } |
713 | 714 |
| 715 // TODO(xhwang): Update this UMA name. |
714 UMA_HISTOGRAM_COUNTS("Media.EME.NeedKey", 1); | 716 UMA_HISTOGRAM_COUNTS("Media.EME.NeedKey", 1); |
715 | 717 |
716 encrypted_media_support_.SetInitDataType(init_data_type); | 718 encrypted_media_support_.SetInitDataType(init_data_type); |
717 | 719 |
718 const uint8* init_data_ptr = init_data.empty() ? nullptr : &init_data[0]; | 720 const uint8* init_data_ptr = init_data.empty() ? nullptr : &init_data[0]; |
719 client_->encrypted(WebString::fromUTF8(init_data_type), init_data_ptr, | 721 client_->encrypted(WebString::fromUTF8(init_data_type), init_data_ptr, |
720 base::saturated_cast<unsigned int>(init_data.size())); | 722 base::saturated_cast<unsigned int>(init_data.size())); |
721 } | 723 } |
722 | 724 |
723 void WebMediaPlayerImpl::SetCdm(CdmContext* cdm_context, | 725 void WebMediaPlayerImpl::SetCdm(CdmContext* cdm_context, |
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
923 } | 925 } |
924 | 926 |
925 void WebMediaPlayerImpl::StartPipeline() { | 927 void WebMediaPlayerImpl::StartPipeline() { |
926 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 928 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
927 | 929 |
928 // Keep track if this is a MSE or non-MSE playback. | 930 // Keep track if this is a MSE or non-MSE playback. |
929 UMA_HISTOGRAM_BOOLEAN("Media.MSE.Playback", | 931 UMA_HISTOGRAM_BOOLEAN("Media.MSE.Playback", |
930 (load_type_ == LoadTypeMediaSource)); | 932 (load_type_ == LoadTypeMediaSource)); |
931 | 933 |
932 LogCB mse_log_cb; | 934 LogCB mse_log_cb; |
933 Demuxer::NeedKeyCB need_key_cb = | 935 Demuxer::EncryptedMediaInitDataCB encrypted_media_init_data_cb = |
934 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnNeedKey); | 936 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnEncryptedMediaInitData); |
935 | 937 |
936 // Figure out which demuxer to use. | 938 // Figure out which demuxer to use. |
937 if (load_type_ != LoadTypeMediaSource) { | 939 if (load_type_ != LoadTypeMediaSource) { |
938 DCHECK(!chunk_demuxer_); | 940 DCHECK(!chunk_demuxer_); |
939 DCHECK(data_source_); | 941 DCHECK(data_source_); |
940 | 942 |
941 demuxer_.reset(new FFmpegDemuxer( | 943 demuxer_.reset(new FFmpegDemuxer(media_task_runner_, data_source_.get(), |
942 media_task_runner_, data_source_.get(), | 944 encrypted_media_init_data_cb, media_log_)); |
943 need_key_cb, | |
944 media_log_)); | |
945 } else { | 945 } else { |
946 DCHECK(!chunk_demuxer_); | 946 DCHECK(!chunk_demuxer_); |
947 DCHECK(!data_source_); | 947 DCHECK(!data_source_); |
948 | 948 |
949 mse_log_cb = base::Bind(&LogMediaSourceError, media_log_); | 949 mse_log_cb = base::Bind(&LogMediaSourceError, media_log_); |
950 | 950 |
951 chunk_demuxer_ = new ChunkDemuxer( | 951 chunk_demuxer_ = new ChunkDemuxer( |
952 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnDemuxerOpened), | 952 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnDemuxerOpened), |
953 need_key_cb, | 953 encrypted_media_init_data_cb, mse_log_cb, media_log_, true); |
954 mse_log_cb, | |
955 media_log_, | |
956 true); | |
957 demuxer_.reset(chunk_demuxer_); | 954 demuxer_.reset(chunk_demuxer_); |
958 } | 955 } |
959 | 956 |
960 // ... and we're ready to go! | 957 // ... and we're ready to go! |
961 seeking_ = true; | 958 seeking_ = true; |
962 | 959 |
963 if (!renderer_) | 960 if (!renderer_) |
964 renderer_ = CreateRenderer(); | 961 renderer_ = CreateRenderer(); |
965 | 962 |
966 pipeline_.Start( | 963 pipeline_.Start( |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1072 compositor_task_runner_->PostTask(FROM_HERE, | 1069 compositor_task_runner_->PostTask(FROM_HERE, |
1073 base::Bind(&GetCurrentFrameAndSignal, | 1070 base::Bind(&GetCurrentFrameAndSignal, |
1074 base::Unretained(compositor_), | 1071 base::Unretained(compositor_), |
1075 &video_frame, | 1072 &video_frame, |
1076 &event)); | 1073 &event)); |
1077 event.Wait(); | 1074 event.Wait(); |
1078 return video_frame; | 1075 return video_frame; |
1079 } | 1076 } |
1080 | 1077 |
1081 } // namespace media | 1078 } // namespace media |
OLD | NEW |