diff options
Diffstat (limited to 'chromium/media/renderers/win/media_foundation_stream_wrapper.cc')
-rw-r--r-- | chromium/media/renderers/win/media_foundation_stream_wrapper.cc | 37 |
1 files changed, 34 insertions, 3 deletions
diff --git a/chromium/media/renderers/win/media_foundation_stream_wrapper.cc b/chromium/media/renderers/win/media_foundation_stream_wrapper.cc index 7eb15906d5c..0d7783695af 100644 --- a/chromium/media/renderers/win/media_foundation_stream_wrapper.cc +++ b/chromium/media/renderers/win/media_foundation_stream_wrapper.cc @@ -122,6 +122,7 @@ HRESULT MediaFoundationStreamWrapper::Create( int stream_id, IMFMediaSource* parent_source, DemuxerStream* demuxer_stream, + std::unique_ptr<MediaLog> media_log, scoped_refptr<base::SequencedTaskRunner> task_runner, MediaFoundationStreamWrapper** stream_out) { DVLOG(1) << __func__ << ": stream_id=" << stream_id; @@ -130,11 +131,13 @@ HRESULT MediaFoundationStreamWrapper::Create( switch (demuxer_stream->type()) { case DemuxerStream::Type::VIDEO: RETURN_IF_FAILED(MediaFoundationVideoStream::Create( - stream_id, parent_source, demuxer_stream, &stream)); + stream_id, parent_source, demuxer_stream, std::move(media_log), + &stream)); break; case DemuxerStream::Type::AUDIO: RETURN_IF_FAILED(MediaFoundationAudioStream::Create( - stream_id, parent_source, demuxer_stream, &stream)); + stream_id, parent_source, demuxer_stream, std::move(media_log), + &stream)); break; default: DLOG(ERROR) << "Unsupported demuxer stream type: " @@ -149,7 +152,8 @@ HRESULT MediaFoundationStreamWrapper::Create( HRESULT MediaFoundationStreamWrapper::RuntimeClassInitialize( int stream_id, IMFMediaSource* parent_source, - DemuxerStream* demuxer_stream) { + DemuxerStream* demuxer_stream, + std::unique_ptr<MediaLog> media_log) { { base::AutoLock auto_lock(lock_); parent_source_ = parent_source; @@ -161,6 +165,8 @@ HRESULT MediaFoundationStreamWrapper::RuntimeClassInitialize( DVLOG_FUNC(1) << "stream_id=" << stream_id << ", stream_type=" << DemuxerStream::GetTypeName(stream_type_); + media_log_ = std::move(media_log); + RETURN_IF_FAILED(GenerateStreamDescriptor()); RETURN_IF_FAILED(MFCreateEventQueue(&mf_media_event_queue_)); return S_OK; @@ -394,6 +400,11 @@ void MediaFoundationStreamWrapper::OnDemuxerStreamRead( HRESULT hr = S_OK; if (status == DemuxerStream::Status::kOk) { + if (!encryption_type_reported_) { + encryption_type_reported_ = true; + ReportEncryptionType(buffer); + } + // Push |buffer| to process later if needed. Otherwise, process it // immediately. if (flushed_ || !post_flush_buffers_.empty()) { @@ -601,4 +612,24 @@ GUID MediaFoundationStreamWrapper::GetLastKeyId() const { return last_key_id_; } +void MediaFoundationStreamWrapper::ReportEncryptionType( + const scoped_refptr<DecoderBuffer>& buffer) { + auto encryption_type = EncryptionType::kClear; + if (IsEncrypted()) { + bool is_buffer_encrypted = buffer->decrypt_config(); + encryption_type = !is_buffer_encrypted + ? EncryptionType::kEncryptedWithClearLead + : EncryptionType::kEncrypted; + } + + if (encryption_type == EncryptionType::kEncryptedWithClearLead) { + MEDIA_LOG(INFO, media_log_) << "MediaFoundationStreamWrapper: " + << DemuxerStream::GetTypeName(stream_type_) + << " stream is encrypted with clear lead"; + } + + // TODO(xhwang): Report `encryption_type` to `PipelineStatistics` so it's + // also reported to UKM. +} + } // namespace media |