summaryrefslogtreecommitdiff
path: root/chromium/media/renderers/win/media_foundation_stream_wrapper.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/media/renderers/win/media_foundation_stream_wrapper.cc')
-rw-r--r--chromium/media/renderers/win/media_foundation_stream_wrapper.cc37
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