diff options
63 files changed, 260 insertions, 790 deletions
diff --git a/chromecast/common/media/cma_param_traits.cc b/chromecast/common/media/cma_param_traits.cc index f0ddc49..f27043d 100644 --- a/chromecast/common/media/cma_param_traits.cc +++ b/chromecast/common/media/cma_param_traits.cc @@ -12,7 +12,6 @@ #include "content/public/common/common_param_traits.h" #include "ipc/ipc_message_macros.h" #include "media/base/audio_decoder_config.h" -#include "media/base/encryption_scheme.h" #include "media/base/video_decoder_config.h" #include "ui/gfx/ipc/gfx_param_traits.h" @@ -30,16 +29,6 @@ IPC_ENUM_TRAITS_MAX_VALUE(media::VideoPixelFormat, media::PIXEL_FORMAT_MAX) namespace IPC { -template <> -struct ParamTraits<media::EncryptionScheme::Pattern> { - typedef media::EncryptionScheme::Pattern param_type; - static void Write(base::Pickle* m, const param_type& p); - static bool Read(const base::Pickle* m, base::PickleIterator* iter, - param_type* r); - static void Log(const param_type& p, std::string* l); -}; - - void ParamTraits<media::AudioDecoderConfig>::Write( base::Pickle* m, const media::AudioDecoderConfig& p) { @@ -47,7 +36,7 @@ void ParamTraits<media::AudioDecoderConfig>::Write( WriteParam(m, p.sample_format()); WriteParam(m, p.channel_layout()); WriteParam(m, p.samples_per_second()); - WriteParam(m, p.encryption_scheme()); + WriteParam(m, p.is_encrypted()); WriteParam(m, p.extra_data()); } @@ -59,17 +48,15 @@ bool ParamTraits<media::AudioDecoderConfig>::Read( media::SampleFormat sample_format; media::ChannelLayout channel_layout; int samples_per_second; - media::EncryptionScheme encryption_scheme; + bool is_encrypted; std::vector<uint8_t> extra_data; if (!ReadParam(m, iter, &codec) || !ReadParam(m, iter, &sample_format) || !ReadParam(m, iter, &channel_layout) || !ReadParam(m, iter, &samples_per_second) || - !ReadParam(m, iter, &encryption_scheme) || - !ReadParam(m, iter, &extra_data)) + !ReadParam(m, iter, &is_encrypted) || !ReadParam(m, iter, &extra_data)) return false; *r = media::AudioDecoderConfig(codec, sample_format, channel_layout, - samples_per_second, extra_data, - encryption_scheme); + samples_per_second, extra_data, is_encrypted); return true; } @@ -88,7 +75,7 @@ void ParamTraits<media::VideoDecoderConfig>::Write( WriteParam(m, p.coded_size()); WriteParam(m, p.visible_rect()); WriteParam(m, p.natural_size()); - WriteParam(m, p.encryption_scheme()); + WriteParam(m, p.is_encrypted()); WriteParam(m, p.extra_data()); } @@ -103,18 +90,17 @@ bool ParamTraits<media::VideoDecoderConfig>::Read( gfx::Size coded_size; gfx::Rect visible_rect; gfx::Size natural_size; - media::EncryptionScheme encryption_scheme; + bool is_encrypted; std::vector<uint8_t> extra_data; if (!ReadParam(m, iter, &codec) || !ReadParam(m, iter, &profile) || !ReadParam(m, iter, &format) || !ReadParam(m, iter, &color_space) || !ReadParam(m, iter, &coded_size) || !ReadParam(m, iter, &visible_rect) || !ReadParam(m, iter, &natural_size) || - !ReadParam(m, iter, &encryption_scheme) || - !ReadParam(m, iter, &extra_data)) + !ReadParam(m, iter, &is_encrypted) || !ReadParam(m, iter, &extra_data)) return false; *r = media::VideoDecoderConfig(codec, profile, format, color_space, coded_size, visible_rect, natural_size, - extra_data, encryption_scheme); + extra_data, is_encrypted); return true; } @@ -123,45 +109,4 @@ void ParamTraits<media::VideoDecoderConfig>::Log( l->append(base::StringPrintf("<VideoDecoderConfig>")); } -void ParamTraits<media::EncryptionScheme>::Write( - base::Pickle* m, const param_type& p) { - WriteParam(m, p.mode()); - WriteParam(m, p.pattern()); -} - -bool ParamTraits<media::EncryptionScheme>::Read( - const base::Pickle* m, base::PickleIterator* iter, param_type* r) { - media::EncryptionScheme::CipherMode mode; - media::EncryptionScheme::Pattern pattern; - if (!ReadParam(m, iter, &mode) || !ReadParam(m, iter, &pattern)) - return false; - *r = media::EncryptionScheme(mode, pattern); - return true; -} - -void ParamTraits<media::EncryptionScheme>::Log( - const param_type& p, std::string* l) { - l->append(base::StringPrintf("<EncryptionScheme>")); -} - -void ParamTraits<media::EncryptionScheme::Pattern>::Write( - base::Pickle* m, const param_type& p) { - WriteParam(m, p.encrypt_blocks()); - WriteParam(m, p.skip_blocks()); -} - -bool ParamTraits<media::EncryptionScheme::Pattern>::Read( - const base::Pickle* m, base::PickleIterator* iter, param_type* r) { - uint32_t encrypt_blocks, skip_blocks; - if (!ReadParam(m, iter, &encrypt_blocks) || !ReadParam(m, iter, &skip_blocks)) - return false; - *r = media::EncryptionScheme::Pattern(encrypt_blocks, skip_blocks); - return true; -} - -void ParamTraits<media::EncryptionScheme::Pattern>::Log( - const param_type& p, std::string* l) { - l->append(base::StringPrintf("<Pattern>")); -} - } // namespace IPC diff --git a/chromecast/common/media/cma_param_traits.h b/chromecast/common/media/cma_param_traits.h index 879bbf1..c8609a5 100644 --- a/chromecast/common/media/cma_param_traits.h +++ b/chromecast/common/media/cma_param_traits.h @@ -10,7 +10,6 @@ namespace media { class AudioDecoderConfig; class VideoDecoderConfig; -class EncryptionScheme; } namespace IPC { @@ -35,15 +34,6 @@ struct ParamTraits<media::VideoDecoderConfig> { static void Log(const param_type& p, std::string* l); }; -template <> -struct ParamTraits<media::EncryptionScheme> { - typedef media::EncryptionScheme param_type; - static void Write(base::Pickle* m, const param_type& p); - static bool Read(const base::Pickle* m, base::PickleIterator* iter, - param_type* r); - static void Log(const param_type& p, std::string* l); -}; - } // namespace IPC #endif // CHROMECAST_COMMON_MEDIA_CMA_PARAM_TRAITS_H_ diff --git a/chromecast/common/media/cma_param_traits_macros.h b/chromecast/common/media/cma_param_traits_macros.h index 2aae996..a25e53f 100644 --- a/chromecast/common/media/cma_param_traits_macros.h +++ b/chromecast/common/media/cma_param_traits_macros.h @@ -44,8 +44,6 @@ IPC_ENUM_TRAITS_MIN_MAX_VALUE(media::VideoCodec, media::VideoCodec::kUnknownVideoCodec, media::VideoCodec::kVideoCodecMax) IPC_ENUM_TRAITS_MAX_VALUE(media::ColorSpace, media::COLOR_SPACE_MAX) -IPC_ENUM_TRAITS_MAX_VALUE(media::EncryptionScheme::CipherMode, - media::EncryptionScheme::CIPHER_MODE_MAX); IPC_STRUCT_TRAITS_BEGIN(media::PipelineStatistics) IPC_STRUCT_TRAITS_MEMBER(audio_bytes_decoded) diff --git a/chromecast/media/audio/cast_audio_output_stream.cc b/chromecast/media/audio/cast_audio_output_stream.cc index fc91d50..ec415d7 100644 --- a/chromecast/media/audio/cast_audio_output_stream.cc +++ b/chromecast/media/audio/cast_audio_output_stream.cc @@ -47,6 +47,7 @@ MediaPipelineBackend::AudioDecoder* InitializeBackend( audio_config.bytes_per_channel = audio_params.bits_per_sample() / 8; audio_config.channel_number = audio_params.channels(); audio_config.samples_per_second = audio_params.sample_rate(); + audio_config.is_encrypted = false; if (!decoder->SetConfig(audio_config)) return nullptr; diff --git a/chromecast/media/audio/cast_audio_output_stream_unittest.cc b/chromecast/media/audio/cast_audio_output_stream_unittest.cc index 8402a6a..a8ad0f0 100644 --- a/chromecast/media/audio/cast_audio_output_stream_unittest.cc +++ b/chromecast/media/audio/cast_audio_output_stream_unittest.cc @@ -385,7 +385,7 @@ TEST_F(CastAudioOutputStreamTest, Format) { const AudioConfig& audio_config = audio_decoder->config(); EXPECT_EQ(kCodecPCM, audio_config.codec); EXPECT_EQ(kSampleFormatS16, audio_config.sample_format); - EXPECT_FALSE(audio_config.encryption_scheme.is_encrypted()); + EXPECT_FALSE(audio_config.is_encrypted); CloseStream(stream); } diff --git a/chromecast/media/cma/backend/audio_video_pipeline_device_unittest.cc b/chromecast/media/cma/backend/audio_video_pipeline_device_unittest.cc index 18de287..7fd2d1d 100644 --- a/chromecast/media/cma/backend/audio_video_pipeline_device_unittest.cc +++ b/chromecast/media/cma/backend/audio_video_pipeline_device_unittest.cc @@ -35,7 +35,6 @@ #include "media/base/audio_decoder_config.h" #include "media/base/audio_timestamp_helper.h" #include "media/base/decoder_buffer.h" -#include "media/base/encryption_scheme.h" #include "media/base/video_decoder_config.h" #include "testing/gtest/include/gtest/gtest.h" @@ -69,7 +68,7 @@ VideoConfig DefaultVideoConfig() { default_config.codec = kCodecH264; default_config.profile = kH264Main; default_config.additional_config = nullptr; - default_config.encryption_scheme = Unencrypted(); + default_config.is_encrypted = false; return default_config; } @@ -565,7 +564,7 @@ scoped_ptr<BufferFeeder> BufferFeeder::LoadVideo(MediaPipelineBackend* backend, video_config.codec = kCodecH264; video_config.profile = kH264Main; video_config.additional_config = nullptr; - video_config.encryption_scheme = Unencrypted(); + video_config.is_encrypted = false; } else { base::FilePath file_path = GetTestDataFilePath(filename); DemuxResult demux_result = FFmpegDemuxForTest(file_path, false /* audio */); diff --git a/chromecast/media/cma/base/decoder_config_adapter.cc b/chromecast/media/cma/base/decoder_config_adapter.cc index 24e8b41..3a8ab39 100644 --- a/chromecast/media/cma/base/decoder_config_adapter.cc +++ b/chromecast/media/cma/base/decoder_config_adapter.cc @@ -85,7 +85,7 @@ VideoCodec ToVideoCodec(const ::media::VideoCodec video_codec) { // Converts ::media::VideoCodecProfile to chromecast::media::VideoProfile. VideoProfile ToVideoProfile(const ::media::VideoCodecProfile codec_profile) { - switch (codec_profile) { + switch(codec_profile) { case ::media::H264PROFILE_BASELINE: return kH264Baseline; case ::media::H264PROFILE_MAIN: @@ -183,62 +183,6 @@ VideoProfile ToVideoProfile(const ::media::VideoCodecProfile codec_profile) { } } -::media::EncryptionScheme::CipherMode ToMediaCipherMode( - EncryptionScheme::CipherMode mode) { - switch (mode) { - case EncryptionScheme::CIPHER_MODE_UNENCRYPTED: - return ::media::EncryptionScheme::CIPHER_MODE_UNENCRYPTED; - case EncryptionScheme::CIPHER_MODE_AES_CTR: - return ::media::EncryptionScheme::CIPHER_MODE_AES_CTR; - case EncryptionScheme::CIPHER_MODE_AES_CBC: - return ::media::EncryptionScheme::CIPHER_MODE_AES_CBC; - default: - NOTREACHED(); - return ::media::EncryptionScheme::CIPHER_MODE_UNENCRYPTED; - } -} - -EncryptionScheme::CipherMode ToCipherMode( - ::media::EncryptionScheme::CipherMode mode) { - switch (mode) { - case ::media::EncryptionScheme::CIPHER_MODE_UNENCRYPTED: - return EncryptionScheme::CIPHER_MODE_UNENCRYPTED; - case ::media::EncryptionScheme::CIPHER_MODE_AES_CTR: - return EncryptionScheme::CIPHER_MODE_AES_CTR; - case ::media::EncryptionScheme::CIPHER_MODE_AES_CBC: - return EncryptionScheme::CIPHER_MODE_AES_CBC; - default: - NOTREACHED(); - return EncryptionScheme::CIPHER_MODE_UNENCRYPTED; - } -} - -EncryptionScheme::Pattern ToPatternSpec( - const ::media::EncryptionScheme::Pattern& pattern) { - return EncryptionScheme::Pattern( - pattern.encrypt_blocks(), pattern.skip_blocks()); -} - -::media::EncryptionScheme::Pattern ToMediaPatternSpec( - const EncryptionScheme::Pattern& pattern) { - return ::media::EncryptionScheme::Pattern( - pattern.encrypt_blocks, pattern.skip_blocks); -} - -EncryptionScheme ToEncryptionScheme( - const ::media::EncryptionScheme& scheme) { - return EncryptionScheme( - ToCipherMode(scheme.mode()), - ToPatternSpec(scheme.pattern())); -} - -::media::EncryptionScheme ToMediaEncryptionScheme( - const EncryptionScheme& scheme) { - return ::media::EncryptionScheme( - ToMediaCipherMode(scheme.mode), - ToMediaPatternSpec(scheme.pattern)); -} - } // namespace // static @@ -257,8 +201,7 @@ AudioConfig DecoderConfigAdapter::ToCastAudioConfig( ::media::ChannelLayoutToChannelCount(config.channel_layout()), audio_config.samples_per_second = config.samples_per_second(); audio_config.extra_data = config.extra_data(); - audio_config.encryption_scheme = ToEncryptionScheme( - config.encryption_scheme()); + audio_config.is_encrypted = config.is_encrypted(); return audio_config; } @@ -269,8 +212,7 @@ AudioConfig DecoderConfigAdapter::ToCastAudioConfig( ToMediaAudioCodec(config.codec), ToMediaSampleFormat(config.sample_format), ToMediaChannelLayout(config.channel_number), config.samples_per_second, - config.extra_data, - ToMediaEncryptionScheme(config.encryption_scheme)); + config.extra_data, config.is_encrypted); } // static @@ -286,8 +228,7 @@ VideoConfig DecoderConfigAdapter::ToCastVideoConfig( video_config.codec = ToVideoCodec(config.codec()); video_config.profile = ToVideoProfile(config.profile()); video_config.extra_data = config.extra_data(); - video_config.encryption_scheme = ToEncryptionScheme( - config.encryption_scheme()); + video_config.is_encrypted = config.is_encrypted(); return video_config; } diff --git a/chromecast/media/cma/base/demuxer_stream_for_test.cc b/chromecast/media/cma/base/demuxer_stream_for_test.cc index 32ee27b..9942545 100644 --- a/chromecast/media/cma/base/demuxer_stream_for_test.cc +++ b/chromecast/media/cma/base/demuxer_stream_for_test.cc @@ -63,7 +63,7 @@ void DemuxerStreamForTest::Read(const ReadCB& read_cb) { visible_rect, natural_size, ::media::EmptyExtraData(), - ::media::Unencrypted()); + false); } ::media::DemuxerStream::Type DemuxerStreamForTest::type() const { diff --git a/chromecast/media/cma/ipc_streamer/BUILD.gn b/chromecast/media/cma/ipc_streamer/BUILD.gn index 7d25f45..a3429d6 100644 --- a/chromecast/media/cma/ipc_streamer/BUILD.gn +++ b/chromecast/media/cma/ipc_streamer/BUILD.gn @@ -14,8 +14,6 @@ source_set("ipc_streamer") { "decoder_buffer_base_marshaller.h", "decrypt_config_marshaller.cc", "decrypt_config_marshaller.h", - "encryption_scheme_marshaller.cc", - "encryption_scheme_marshaller.h", "video_decoder_config_marshaller.cc", "video_decoder_config_marshaller.h", ] diff --git a/chromecast/media/cma/ipc_streamer/audio_decoder_config_marshaller.cc b/chromecast/media/cma/ipc_streamer/audio_decoder_config_marshaller.cc index 031571a..2798c6b 100644 --- a/chromecast/media/cma/ipc_streamer/audio_decoder_config_marshaller.cc +++ b/chromecast/media/cma/ipc_streamer/audio_decoder_config_marshaller.cc @@ -11,7 +11,6 @@ #include "base/logging.h" #include "chromecast/media/cma/ipc/media_message.h" -#include "chromecast/media/cma/ipc_streamer/encryption_scheme_marshaller.h" #include "media/base/audio_decoder_config.h" namespace chromecast { @@ -28,7 +27,7 @@ void AudioDecoderConfigMarshaller::Write( CHECK(msg->WritePod(config.channel_layout())); CHECK(msg->WritePod(config.samples_per_second())); CHECK(msg->WritePod(config.sample_format())); - EncryptionSchemeMarshaller::Write(config.encryption_scheme(), msg); + CHECK(msg->WritePod(config.is_encrypted())); CHECK(msg->WritePod(config.extra_data().size())); if (!config.extra_data().empty()) CHECK(msg->WriteBuffer(&config.extra_data()[0], @@ -42,15 +41,15 @@ void AudioDecoderConfigMarshaller::Write( ::media::SampleFormat sample_format; ::media::ChannelLayout channel_layout; int samples_per_second; + bool is_encrypted; size_t extra_data_size; std::vector<uint8_t> extra_data; - ::media::EncryptionScheme encryption_scheme; CHECK(msg->ReadPod(&codec)); CHECK(msg->ReadPod(&channel_layout)); CHECK(msg->ReadPod(&samples_per_second)); CHECK(msg->ReadPod(&sample_format)); - encryption_scheme = EncryptionSchemeMarshaller::Read(msg); + CHECK(msg->ReadPod(&is_encrypted)); CHECK(msg->ReadPod(&extra_data_size)); CHECK_GE(codec, ::media::kUnknownAudioCodec); @@ -68,7 +67,7 @@ void AudioDecoderConfigMarshaller::Write( return ::media::AudioDecoderConfig( codec, sample_format, channel_layout, samples_per_second, - extra_data, encryption_scheme); + extra_data, is_encrypted); } } // namespace media diff --git a/chromecast/media/cma/ipc_streamer/encryption_scheme_marshaller.cc b/chromecast/media/cma/ipc_streamer/encryption_scheme_marshaller.cc deleted file mode 100644 index a88cfc5..0000000 --- a/chromecast/media/cma/ipc_streamer/encryption_scheme_marshaller.cc +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chromecast/media/cma/ipc_streamer/encryption_scheme_marshaller.h" - -#include <stdint.h> - -#include "base/logging.h" -#include "chromecast/media/cma/ipc/media_message.h" - -namespace chromecast { -namespace media { - -namespace { - -class PatternSpecMarshaller { - public: - static void Write(const ::media::EncryptionScheme::Pattern& pattern, - MediaMessage* msg) { - CHECK(msg->WritePod(pattern.encrypt_blocks())); - CHECK(msg->WritePod(pattern.skip_blocks())); - } - - static ::media::EncryptionScheme::Pattern Read(MediaMessage* msg) { - uint32_t encrypt_blocks; - uint32_t skip_blocks; - CHECK(msg->ReadPod(&encrypt_blocks)); - CHECK(msg->ReadPod(&skip_blocks)); - return ::media::EncryptionScheme::Pattern(encrypt_blocks, skip_blocks); - } -}; - -} // namespace - -// static -void EncryptionSchemeMarshaller::Write( - const ::media::EncryptionScheme& encryption_scheme, - MediaMessage* msg) { - CHECK(msg->WritePod(encryption_scheme.mode())); - PatternSpecMarshaller::Write(encryption_scheme.pattern(), msg); -} - -// static -::media::EncryptionScheme EncryptionSchemeMarshaller::Read(MediaMessage* msg) { - ::media::EncryptionScheme::CipherMode mode; - ::media::EncryptionScheme::Pattern pattern; - CHECK(msg->ReadPod(&mode)); - pattern = PatternSpecMarshaller::Read(msg); - return ::media::EncryptionScheme(mode, pattern); -} - -} // namespace media -} // namespace chromecast diff --git a/chromecast/media/cma/ipc_streamer/encryption_scheme_marshaller.h b/chromecast/media/cma/ipc_streamer/encryption_scheme_marshaller.h deleted file mode 100644 index 0b3371b..0000000 --- a/chromecast/media/cma/ipc_streamer/encryption_scheme_marshaller.h +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROMECAST_MEDIA_CMA_IPC_STREAMER_ENCRYPTION_SCHEME_MARSHALLER_H_ -#define CHROMECAST_MEDIA_CMA_IPC_STREAMER_ENCRYPTION_SCHEME_MARSHALLER_H_ - -#include "media/base/encryption_scheme.h" - -namespace chromecast { -namespace media { -class MediaMessage; - -class EncryptionSchemeMarshaller { - public: - // Writes the serialized structure of |encryption_scheme| into |msg|. - static void Write( - const ::media::EncryptionScheme& encryption_scheme, MediaMessage* msg); - - // Returns an EncryptionScheme from its serialized structure. - static ::media::EncryptionScheme Read(MediaMessage* msg); -}; - -} // namespace media -} // namespace chromecast - -#endif // CHROMECAST_MEDIA_CMA_IPC_STREAMER_ENCRYPTION_SCHEME_MARSHALLER_H_ diff --git a/chromecast/media/cma/ipc_streamer/video_decoder_config_marshaller.cc b/chromecast/media/cma/ipc_streamer/video_decoder_config_marshaller.cc index a471eb6..b2e9aaa 100644 --- a/chromecast/media/cma/ipc_streamer/video_decoder_config_marshaller.cc +++ b/chromecast/media/cma/ipc_streamer/video_decoder_config_marshaller.cc @@ -11,7 +11,6 @@ #include "base/logging.h" #include "chromecast/media/cma/ipc/media_message.h" -#include "chromecast/media/cma/ipc_streamer/encryption_scheme_marshaller.h" #include "media/base/video_decoder_config.h" #include "ui/gfx/geometry/rect.h" #include "ui/gfx/geometry/size.h" @@ -68,7 +67,7 @@ void VideoDecoderConfigMarshaller::Write( SizeMarshaller::Write(config.coded_size(), msg); RectMarshaller::Write(config.visible_rect(), msg); SizeMarshaller::Write(config.natural_size(), msg); - EncryptionSchemeMarshaller::Write(config.encryption_scheme(), msg); + CHECK(msg->WritePod(config.is_encrypted())); CHECK(msg->WritePod(config.extra_data().size())); if (!config.extra_data().empty()) CHECK(msg->WriteBuffer(&config.extra_data()[0], @@ -85,8 +84,8 @@ void VideoDecoderConfigMarshaller::Write( gfx::Size coded_size; gfx::Rect visible_rect; gfx::Size natural_size; + bool is_encrypted; size_t extra_data_size; - ::media::EncryptionScheme encryption_scheme; std::vector<uint8_t> extra_data; CHECK(msg->ReadPod(&codec)); @@ -96,7 +95,7 @@ void VideoDecoderConfigMarshaller::Write( coded_size = SizeMarshaller::Read(msg); visible_rect = RectMarshaller::Read(msg); natural_size = SizeMarshaller::Read(msg); - encryption_scheme = EncryptionSchemeMarshaller::Read(msg); + CHECK(msg->ReadPod(&is_encrypted)); CHECK(msg->ReadPod(&extra_data_size)); CHECK_GE(codec, ::media::kUnknownVideoCodec); @@ -116,7 +115,7 @@ void VideoDecoderConfigMarshaller::Write( return ::media::VideoDecoderConfig( codec, profile, format, color_space, coded_size, visible_rect, natural_size, - extra_data, encryption_scheme); + extra_data, is_encrypted); } } // namespace media diff --git a/chromecast/media/cma/pipeline/audio_decoder_software_wrapper.cc b/chromecast/media/cma/pipeline/audio_decoder_software_wrapper.cc index a1cdf95..4b15bcc 100644 --- a/chromecast/media/cma/pipeline/audio_decoder_software_wrapper.cc +++ b/chromecast/media/cma/pipeline/audio_decoder_software_wrapper.cc @@ -59,7 +59,7 @@ bool AudioDecoderSoftwareWrapper::SetConfig(const AudioConfig& config) { return true; } - if (config.is_encrypted() || !CreateSoftwareDecoder(config)) + if (config.is_encrypted || !CreateSoftwareDecoder(config)) return false; output_config_.codec = media::kCodecPCM; @@ -67,7 +67,7 @@ bool AudioDecoderSoftwareWrapper::SetConfig(const AudioConfig& config) { output_config_.channel_number = 2; output_config_.bytes_per_channel = 2; output_config_.samples_per_second = config.samples_per_second; - output_config_.encryption_scheme = Unencrypted(); + output_config_.is_encrypted = false; return backend_decoder_->SetConfig(output_config_); } diff --git a/chromecast/media/cma/pipeline/audio_video_pipeline_impl_unittest.cc b/chromecast/media/cma/pipeline/audio_video_pipeline_impl_unittest.cc index eba1961..bd747dd 100644 --- a/chromecast/media/cma/pipeline/audio_video_pipeline_impl_unittest.cc +++ b/chromecast/media/cma/pipeline/audio_video_pipeline_impl_unittest.cc @@ -66,7 +66,7 @@ class AudioVideoPipelineImplTest ::media::AudioDecoderConfig audio_config( ::media::kCodecMP3, ::media::kSampleFormatS16, ::media::CHANNEL_LAYOUT_STEREO, 44100, ::media::EmptyExtraData(), - ::media::Unencrypted()); + false); AvPipelineClient client; client.eos_cb = base::Bind(&AudioVideoPipelineImplTest::OnEos, base::Unretained(this), STREAM_AUDIO); @@ -80,7 +80,7 @@ class AudioVideoPipelineImplTest ::media::kCodecH264, ::media::H264PROFILE_MAIN, ::media::PIXEL_FORMAT_I420, ::media::COLOR_SPACE_UNSPECIFIED, gfx::Size(640, 480), gfx::Rect(0, 0, 640, 480), gfx::Size(640, 480), - ::media::EmptyExtraData(), ::media::Unencrypted())); + ::media::EmptyExtraData(), false)); VideoPipelineClient client; client.av_pipeline_client.eos_cb = base::Bind(&AudioVideoPipelineImplTest::OnEos, base::Unretained(this), diff --git a/chromecast/media/cma/test/mock_frame_provider.cc b/chromecast/media/cma/test/mock_frame_provider.cc index 16d6393..fdab889 100644 --- a/chromecast/media/cma/test/mock_frame_provider.cc +++ b/chromecast/media/cma/test/mock_frame_provider.cc @@ -82,7 +82,7 @@ void MockFrameProvider::DoRead(const ReadCB& read_cb) { ::media::kCodecH264, ::media::VIDEO_CODEC_PROFILE_UNKNOWN, ::media::PIXEL_FORMAT_YV12, ::media::COLOR_SPACE_UNSPECIFIED, coded_size, visible_rect, natural_size, ::media::EmptyExtraData(), - ::media::Unencrypted()); + false); audio_config = ::media::AudioDecoderConfig( ::media::kCodecAAC, @@ -90,7 +90,7 @@ void MockFrameProvider::DoRead(const ReadCB& read_cb) { ::media::CHANNEL_LAYOUT_STEREO, 44100, ::media::EmptyExtraData(), - ::media::Unencrypted()); + false); } read_cb.Run(buffer, audio_config, video_config); diff --git a/chromecast/media/media.gyp b/chromecast/media/media.gyp index 077ea0c..6cabfc7 100644 --- a/chromecast/media/media.gyp +++ b/chromecast/media/media.gyp @@ -229,8 +229,6 @@ 'cma/ipc_streamer/decoder_buffer_base_marshaller.h', 'cma/ipc_streamer/decrypt_config_marshaller.cc', 'cma/ipc_streamer/decrypt_config_marshaller.h', - 'cma/ipc_streamer/encryption_scheme_marshaller.cc', - 'cma/ipc_streamer/encryption_scheme_marshaller.h', 'cma/ipc_streamer/video_decoder_config_marshaller.cc', 'cma/ipc_streamer/video_decoder_config_marshaller.h', ], diff --git a/chromecast/public/media/decoder_config.h b/chromecast/public/media/decoder_config.h index b82c5c1..261b3f1 100644 --- a/chromecast/public/media/decoder_config.h +++ b/chromecast/public/media/decoder_config.h @@ -93,78 +93,13 @@ enum VideoProfile { kVideoProfileMax = kDolbyVisionNonCompatible_BL_EL_MD, }; -// Specification of whether and how the stream is encrypted (in whole or part). -struct EncryptionScheme { - // Algorithm and mode that was used to encrypt the stream. - enum CipherMode { - CIPHER_MODE_UNENCRYPTED, - CIPHER_MODE_AES_CTR, - CIPHER_MODE_AES_CBC - }; - - // CENC 3rd Edition adds pattern encryption, through two new protection - // schemes: 'cens' (with AES-CTR) and 'cbcs' (with AES-CBC). - // The pattern applies independently to each 'encrypted' part of the frame (as - // defined by the relevant subsample entries), and reduces further the - // actual encryption applied through a repeating pattern of (encrypt:skip) - // 16 byte blocks. For example, in a (1:9) pattern, the first block is - // encrypted, and the next nine are skipped. This pattern is applied - // repeatedly until the end of the last 16-byte block in the subsample. - // Any remaining bytes are left clear. - // If either of encrypt_blocks or skip_blocks is 0, pattern encryption is - // disabled. - struct Pattern { - Pattern() {} - Pattern(uint32_t encrypt_blocks, uint32_t skip_blocks); - ~Pattern() {} - bool IsInEffect() const; - - uint32_t encrypt_blocks = 0; - uint32_t skip_blocks = 0; - }; - - EncryptionScheme() {} - EncryptionScheme(CipherMode mode, const Pattern& pattern); - ~EncryptionScheme() {} - bool is_encrypted() const { return mode != CIPHER_MODE_UNENCRYPTED; } - - CipherMode mode = CIPHER_MODE_UNENCRYPTED; - Pattern pattern; -}; - -inline EncryptionScheme::Pattern::Pattern(uint32_t encrypt_blocks, - uint32_t skip_blocks) - : encrypt_blocks(encrypt_blocks), skip_blocks(skip_blocks) { -} - -inline bool EncryptionScheme::Pattern::IsInEffect() const { - return encrypt_blocks != 0 && skip_blocks != 0; -} - -inline EncryptionScheme::EncryptionScheme(CipherMode mode, - const Pattern& pattern) - : mode(mode), pattern(pattern) { -} - -inline EncryptionScheme Unencrypted() { - return EncryptionScheme(); -} - -inline EncryptionScheme AesCtrEncryptionScheme() { - return EncryptionScheme(EncryptionScheme::CIPHER_MODE_AES_CTR, - EncryptionScheme::Pattern()); -} - - -// TODO(erickung): Remove constructor once CMA backend implementation doesn't +// TODO(erickung): Remove constructor once CMA backend implementation does't // create a new object to reset the configuration and use IsValidConfig() to // determine if the configuration is still valid or not. struct AudioConfig { AudioConfig(); ~AudioConfig(); - bool is_encrypted() const { return encryption_scheme.is_encrypted(); } - // Stream id. StreamId id; // Audio codec. @@ -179,8 +114,8 @@ struct AudioConfig { int samples_per_second; // Extra data buffer for certain codec initialization. std::vector<uint8_t> extra_data; - // Encryption scheme (if any) used for the content. - EncryptionScheme encryption_scheme; + // content is encrypted or not. + bool is_encrypted; }; inline AudioConfig::AudioConfig() @@ -189,7 +124,8 @@ inline AudioConfig::AudioConfig() sample_format(kUnknownSampleFormat), bytes_per_channel(0), channel_number(0), - samples_per_second(0) { + samples_per_second(0), + is_encrypted(false) { } inline AudioConfig::~AudioConfig() { @@ -202,8 +138,6 @@ struct VideoConfig { VideoConfig(); ~VideoConfig(); - bool is_encrypted() const { return encryption_scheme.is_encrypted(); } - // Stream Id. StreamId id; // Video codec. @@ -216,15 +150,16 @@ struct VideoConfig { VideoConfig* additional_config; // Extra data buffer for certain codec initialization. std::vector<uint8_t> extra_data; - // Encryption scheme (if any) used for the content. - EncryptionScheme encryption_scheme; + // content is encrypted or not. + bool is_encrypted; }; inline VideoConfig::VideoConfig() : id(kPrimary), codec(kVideoCodecUnknown), profile(kVideoProfileUnknown), - additional_config(nullptr) { + additional_config(nullptr), + is_encrypted(false) { } inline VideoConfig::~VideoConfig() { diff --git a/content/common/gpu/media/video_encode_accelerator_unittest.cc b/content/common/gpu/media/video_encode_accelerator_unittest.cc index d0a4981..fc27cc1 100644 --- a/content/common/gpu/media/video_encode_accelerator_unittest.cc +++ b/content/common/gpu/media/video_encode_accelerator_unittest.cc @@ -670,13 +670,11 @@ void VideoFrameQualityValidator::Initialize(const gfx::Size& coded_size, if (IsVP8(profile_)) config.Initialize(media::kCodecVP8, media::VP8PROFILE_ANY, kInputFormat, media::COLOR_SPACE_UNSPECIFIED, coded_size, visible_size, - natural_size, media::EmptyExtraData(), - media::Unencrypted()); + natural_size, media::EmptyExtraData(), false); else if (IsH264(profile_)) config.Initialize(media::kCodecH264, media::H264PROFILE_MAIN, kInputFormat, media::COLOR_SPACE_UNSPECIFIED, coded_size, visible_size, - natural_size, media::EmptyExtraData(), - media::Unencrypted()); + natural_size, media::EmptyExtraData(), false); else LOG_ASSERT(0) << "Invalid profile " << profile_; diff --git a/content/renderer/pepper/video_decoder_shim.cc b/content/renderer/pepper/video_decoder_shim.cc index 92ffcdb..fbbca2e 100644 --- a/content/renderer/pepper/video_decoder_shim.cc +++ b/content/renderer/pepper/video_decoder_shim.cc @@ -899,7 +899,7 @@ bool VideoDecoderShim::Initialize(const Config& vda_config, Client* client) { gfx::Size(32, 24), // Small sizes that won't fail. gfx::Rect(32, 24), gfx::Size(32, 24), // TODO(bbudge): Verify extra data isn't needed. - media::EmptyExtraData(), media::Unencrypted()); + media::EmptyExtraData(), false /* decryption */); media_task_runner_->PostTask( FROM_HERE, diff --git a/media/base/BUILD.gn b/media/base/BUILD.gn index 21f5449..ef69b2d 100644 --- a/media/base/BUILD.gn +++ b/media/base/BUILD.gn @@ -113,8 +113,6 @@ source_set("base") { "djb2.cc", "djb2.h", "eme_constants.h", - "encryption_scheme.cc", - "encryption_scheme.h", "key_system_info.cc", "key_system_info.h", "key_systems.cc", diff --git a/media/base/audio_decoder_config.cc b/media/base/audio_decoder_config.cc index 253c82b..3c1b94d 100644 --- a/media/base/audio_decoder_config.cc +++ b/media/base/audio_decoder_config.cc @@ -16,17 +16,18 @@ AudioDecoderConfig::AudioDecoderConfig() channel_layout_(CHANNEL_LAYOUT_UNSUPPORTED), samples_per_second_(0), bytes_per_frame_(0), - codec_delay_(0) {} + is_encrypted_(false), + codec_delay_(0) { +} -AudioDecoderConfig::AudioDecoderConfig( - AudioCodec codec, - SampleFormat sample_format, - ChannelLayout channel_layout, - int samples_per_second, - const std::vector<uint8_t>& extra_data, - const EncryptionScheme& encryption_scheme) { +AudioDecoderConfig::AudioDecoderConfig(AudioCodec codec, + SampleFormat sample_format, + ChannelLayout channel_layout, + int samples_per_second, + const std::vector<uint8_t>& extra_data, + bool is_encrypted) { Initialize(codec, sample_format, channel_layout, samples_per_second, - extra_data, encryption_scheme, base::TimeDelta(), 0); + extra_data, is_encrypted, base::TimeDelta(), 0); } AudioDecoderConfig::AudioDecoderConfig(const AudioDecoderConfig& other) = @@ -37,7 +38,7 @@ void AudioDecoderConfig::Initialize(AudioCodec codec, ChannelLayout channel_layout, int samples_per_second, const std::vector<uint8_t>& extra_data, - const EncryptionScheme& encryption_scheme, + bool is_encrypted, base::TimeDelta seek_preroll, int codec_delay) { codec_ = codec; @@ -46,7 +47,7 @@ void AudioDecoderConfig::Initialize(AudioCodec codec, sample_format_ = sample_format; bytes_per_channel_ = SampleFormatToBytesPerChannel(sample_format); extra_data_ = extra_data; - encryption_scheme_ = encryption_scheme; + is_encrypted_ = is_encrypted; seek_preroll_ = seek_preroll; codec_delay_ = codec_delay; @@ -74,7 +75,7 @@ bool AudioDecoderConfig::Matches(const AudioDecoderConfig& config) const { (channel_layout() == config.channel_layout()) && (samples_per_second() == config.samples_per_second()) && (extra_data() == config.extra_data()) && - (encryption_scheme().Matches(config.encryption_scheme())) && + (is_encrypted() == config.is_encrypted()) && (sample_format() == config.sample_format()) && (seek_preroll() == config.seek_preroll()) && (codec_delay() == config.codec_delay())); diff --git a/media/base/audio_decoder_config.h b/media/base/audio_decoder_config.h index 266de82..71c8930 100644 --- a/media/base/audio_decoder_config.h +++ b/media/base/audio_decoder_config.h @@ -14,7 +14,6 @@ #include "base/time/time.h" #include "media/base/audio_codecs.h" #include "media/base/channel_layout.h" -#include "media/base/encryption_scheme.h" #include "media/base/media_export.h" #include "media/base/sample_format.h" @@ -35,7 +34,7 @@ class MEDIA_EXPORT AudioDecoderConfig { ChannelLayout channel_layout, int samples_per_second, const std::vector<uint8_t>& extra_data, - const EncryptionScheme& encryption_scheme); + bool is_encrypted); AudioDecoderConfig(const AudioDecoderConfig& other); @@ -47,7 +46,7 @@ class MEDIA_EXPORT AudioDecoderConfig { ChannelLayout channel_layout, int samples_per_second, const std::vector<uint8_t>& extra_data, - const EncryptionScheme& encryption_scheme, + bool is_encrypted, base::TimeDelta seek_preroll, int codec_delay); @@ -80,12 +79,7 @@ class MEDIA_EXPORT AudioDecoderConfig { // Whether the audio stream is potentially encrypted. // Note that in a potentially encrypted audio stream, individual buffers // can be encrypted or not encrypted. - bool is_encrypted() const { return encryption_scheme_.is_encrypted(); } - - // Encryption scheme used for encrypted buffers. - const EncryptionScheme& encryption_scheme() const { - return encryption_scheme_; - } + bool is_encrypted() const { return is_encrypted_; } private: AudioCodec codec_; @@ -95,7 +89,7 @@ class MEDIA_EXPORT AudioDecoderConfig { int samples_per_second_; int bytes_per_frame_; std::vector<uint8_t> extra_data_; - EncryptionScheme encryption_scheme_; + bool is_encrypted_; // |seek_preroll_| is the duration of the data that the decoder must decode // before the decoded data is valid. diff --git a/media/base/encryption_scheme.cc b/media/base/encryption_scheme.cc deleted file mode 100644 index 70d133c..0000000 --- a/media/base/encryption_scheme.cc +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "media/base/encryption_scheme.h" - -namespace media { - -EncryptionScheme::Pattern::Pattern() {} - -EncryptionScheme::Pattern::Pattern(uint32_t encrypt_blocks, - uint32_t skip_blocks) - : encrypt_blocks_(encrypt_blocks), skip_blocks_(skip_blocks) {} - -EncryptionScheme::Pattern::~Pattern() {} - -bool EncryptionScheme::Pattern::Matches(const Pattern& other) const { - return encrypt_blocks_ == other.encrypt_blocks() && - skip_blocks_ == other.skip_blocks(); -} - -bool EncryptionScheme::Pattern::IsInEffect() const { - return encrypt_blocks_ != 0 && skip_blocks_ != 0; -} - -EncryptionScheme::EncryptionScheme() {} - -EncryptionScheme::EncryptionScheme(CipherMode mode, const Pattern& pattern) - : mode_(mode), pattern_(pattern) {} - -EncryptionScheme::~EncryptionScheme() {} - -bool EncryptionScheme::Matches(const EncryptionScheme& other) const { - return mode_ == other.mode_ && pattern_.Matches(other.pattern_); -} - -} // namespace media diff --git a/media/base/encryption_scheme.h b/media/base/encryption_scheme.h deleted file mode 100644 index 085599b..0000000 --- a/media/base/encryption_scheme.h +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef MEDIA_BASE_ENCRYPTION_SCHEME_H_ -#define MEDIA_BASE_ENCRYPTION_SCHEME_H_ - -#include <stdint.h> - -#include "media/base/media_export.h" - -namespace media { - -// Specification of whether and how the stream is encrypted (in whole or part). -class MEDIA_EXPORT EncryptionScheme { - public: - // Algorithm and mode used for encryption. CIPHER_MODE_UNENCRYPTED indicates - // no encryption. - enum CipherMode { - CIPHER_MODE_UNENCRYPTED, - CIPHER_MODE_AES_CTR, - CIPHER_MODE_AES_CBC, - CIPHER_MODE_MAX = CIPHER_MODE_AES_CBC - }; - - // CENC 3rd Edition adds pattern encryption, through two new protection - // schemes: 'cens' (with AES-CTR) and 'cbcs' (with AES-CBC). - // The pattern applies independently to each 'encrypted' part of the frame (as - // defined by the relevant subsample entries), and reduces further the - // actual encryption applied through a repeating pattern of (encrypt:skip) - // 16 byte blocks. For example, in a (1:9) pattern, the first block is - // encrypted, and the next nine are skipped. This pattern is applied - // repeatedly until the end of the last 16-byte block in the subsample. - // Any remaining bytes are left clear. - // If either of encrypt_blocks or skip_blocks is 0, pattern encryption is - // disabled. - class Pattern { - public: - Pattern(); - Pattern(uint32_t encrypt_blocks, uint32_t skip_blocks); - ~Pattern(); - - bool Matches(const Pattern& other) const; - - uint32_t encrypt_blocks() const { return encrypt_blocks_; } - uint32_t skip_blocks() const { return skip_blocks_; } - - bool IsInEffect() const; - - private: - uint32_t encrypt_blocks_ = 0; - uint32_t skip_blocks_ = 0; - - // Allow copy and assignment. - }; - - // The default constructor makes an instance that indicates no encryption. - EncryptionScheme(); - - // This constructor allows specification of the cipher mode and the pattern. - EncryptionScheme(CipherMode mode, const Pattern& pattern); - ~EncryptionScheme(); - - bool Matches(const EncryptionScheme& other) const; - - bool is_encrypted() const { return mode_ != CIPHER_MODE_UNENCRYPTED; } - CipherMode mode() const { return mode_; } - const Pattern& pattern() const { return pattern_; } - - private: - CipherMode mode_ = CIPHER_MODE_UNENCRYPTED; - Pattern pattern_; - - // Allow copy and assignment. -}; - -} // namespace media - -#endif // MEDIA_BASE_ENCRYPTION_SCHEME_H_ diff --git a/media/base/fake_demuxer_stream.cc b/media/base/fake_demuxer_stream.cc index 7ed5841..267b3e5 100644 --- a/media/base/fake_demuxer_stream.cc +++ b/media/base/fake_demuxer_stream.cc @@ -147,11 +147,11 @@ void FakeDemuxerStream::SeekToStart() { void FakeDemuxerStream::UpdateVideoDecoderConfig() { const gfx::Rect kVisibleRect(kStartWidth, kStartHeight); - video_decoder_config_.Initialize( - kCodecVP8, VIDEO_CODEC_PROFILE_UNKNOWN, PIXEL_FORMAT_YV12, - COLOR_SPACE_UNSPECIFIED, next_coded_size_, kVisibleRect, next_coded_size_, - EmptyExtraData(), - is_encrypted_ ? AesCtrEncryptionScheme() : Unencrypted()); + video_decoder_config_.Initialize(kCodecVP8, VIDEO_CODEC_PROFILE_UNKNOWN, + PIXEL_FORMAT_YV12, COLOR_SPACE_UNSPECIFIED, + next_coded_size_, kVisibleRect, + next_coded_size_, EmptyExtraData(), + is_encrypted_); next_coded_size_.Enlarge(kWidthDelta, kHeightDelta); } diff --git a/media/base/media_util.cc b/media/base/media_util.cc index a6516cd2..bd7929f 100644 --- a/media/base/media_util.cc +++ b/media/base/media_util.cc @@ -10,13 +10,4 @@ std::vector<uint8_t> EmptyExtraData() { return std::vector<uint8_t>(); } -EncryptionScheme Unencrypted() { - return EncryptionScheme(); -} - -EncryptionScheme AesCtrEncryptionScheme() { - return EncryptionScheme(EncryptionScheme::CIPHER_MODE_AES_CTR, - EncryptionScheme::Pattern()); -} - } // namespace media diff --git a/media/base/media_util.h b/media/base/media_util.h index c7ddc8b..4e53c9a 100644 --- a/media/base/media_util.h +++ b/media/base/media_util.h @@ -8,7 +8,6 @@ #include <stdint.h> #include <vector> -#include "media/base/encryption_scheme.h" #include "media/base/media_export.h" namespace media { @@ -17,11 +16,6 @@ namespace media { // constructed with empty extra data. MEDIA_EXPORT std::vector<uint8_t> EmptyExtraData(); -// The following helper functions return new instances of EncryptionScheme that -// indicate widely used settings. -MEDIA_EXPORT EncryptionScheme Unencrypted(); -MEDIA_EXPORT EncryptionScheme AesCtrEncryptionScheme(); - } // namespace media #endif // MEDIA_BASE_UTIL_H_ diff --git a/media/base/test_helpers.cc b/media/base/test_helpers.cc index 0ab1903..c38f629 100644 --- a/media/base/test_helpers.cc +++ b/media/base/test_helpers.cc @@ -129,11 +129,10 @@ static VideoDecoderConfig GetTestConfig(VideoCodec codec, gfx::Rect visible_rect(coded_size.width(), coded_size.height()); gfx::Size natural_size = coded_size; - return VideoDecoderConfig( - codec, VIDEO_CODEC_PROFILE_UNKNOWN, PIXEL_FORMAT_YV12, - COLOR_SPACE_UNSPECIFIED, coded_size, visible_rect, natural_size, - EmptyExtraData(), - is_encrypted ? AesCtrEncryptionScheme() : Unencrypted()); + return VideoDecoderConfig(codec, VIDEO_CODEC_PROFILE_UNKNOWN, + PIXEL_FORMAT_YV12, COLOR_SPACE_UNSPECIFIED, + coded_size, visible_rect, natural_size, + EmptyExtraData(), is_encrypted); } static const gfx::Size kNormalSize(320, 240); diff --git a/media/base/video_decoder_config.cc b/media/base/video_decoder_config.cc index a0edb40..930ffd9 100644 --- a/media/base/video_decoder_config.cc +++ b/media/base/video_decoder_config.cc @@ -39,20 +39,20 @@ VideoCodec VideoCodecProfileToVideoCodec(VideoCodecProfile profile) { VideoDecoderConfig::VideoDecoderConfig() : codec_(kUnknownVideoCodec), profile_(VIDEO_CODEC_PROFILE_UNKNOWN), - format_(PIXEL_FORMAT_UNKNOWN) {} + format_(PIXEL_FORMAT_UNKNOWN), + is_encrypted_(false) {} -VideoDecoderConfig::VideoDecoderConfig( - VideoCodec codec, - VideoCodecProfile profile, - VideoPixelFormat format, - ColorSpace color_space, - const gfx::Size& coded_size, - const gfx::Rect& visible_rect, - const gfx::Size& natural_size, - const std::vector<uint8_t>& extra_data, - const EncryptionScheme& encryption_scheme) { +VideoDecoderConfig::VideoDecoderConfig(VideoCodec codec, + VideoCodecProfile profile, + VideoPixelFormat format, + ColorSpace color_space, + const gfx::Size& coded_size, + const gfx::Rect& visible_rect, + const gfx::Size& natural_size, + const std::vector<uint8_t>& extra_data, + bool is_encrypted) { Initialize(codec, profile, format, color_space, coded_size, visible_rect, - natural_size, extra_data, encryption_scheme); + natural_size, extra_data, is_encrypted); } VideoDecoderConfig::VideoDecoderConfig(const VideoDecoderConfig& other) = @@ -68,7 +68,7 @@ void VideoDecoderConfig::Initialize(VideoCodec codec, const gfx::Rect& visible_rect, const gfx::Size& natural_size, const std::vector<uint8_t>& extra_data, - const EncryptionScheme& encryption_scheme) { + bool is_encrypted) { codec_ = codec; profile_ = profile; format_ = format; @@ -77,7 +77,7 @@ void VideoDecoderConfig::Initialize(VideoCodec codec, visible_rect_ = visible_rect; natural_size_ = natural_size; extra_data_ = extra_data; - encryption_scheme_ = encryption_scheme; + is_encrypted_ = is_encrypted; } bool VideoDecoderConfig::IsValidConfig() const { @@ -89,13 +89,14 @@ bool VideoDecoderConfig::IsValidConfig() const { } bool VideoDecoderConfig::Matches(const VideoDecoderConfig& config) const { - return ((codec() == config.codec()) && (format() == config.format()) && + return ((codec() == config.codec()) && + (format() == config.format()) && (profile() == config.profile()) && (coded_size() == config.coded_size()) && (visible_rect() == config.visible_rect()) && (natural_size() == config.natural_size()) && (extra_data() == config.extra_data()) && - (encryption_scheme().Matches(config.encryption_scheme()))); + (is_encrypted() == config.is_encrypted())); } std::string VideoDecoderConfig::AsHumanReadableString() const { diff --git a/media/base/video_decoder_config.h b/media/base/video_decoder_config.h index 50dee06..4a192d6 100644 --- a/media/base/video_decoder_config.h +++ b/media/base/video_decoder_config.h @@ -11,7 +11,6 @@ #include <vector> #include "base/macros.h" -#include "media/base/encryption_scheme.h" #include "media/base/media_export.h" #include "media/base/video_codecs.h" #include "media/base/video_types.h" @@ -39,7 +38,7 @@ class MEDIA_EXPORT VideoDecoderConfig { const gfx::Rect& visible_rect, const gfx::Size& natural_size, const std::vector<uint8_t>& extra_data, - const EncryptionScheme& encryption_scheme); + bool is_encrypted); VideoDecoderConfig(const VideoDecoderConfig& other); @@ -54,7 +53,7 @@ class MEDIA_EXPORT VideoDecoderConfig { const gfx::Rect& visible_rect, const gfx::Size& natural_size, const std::vector<uint8_t>& extra_data, - const EncryptionScheme& encryption_scheme); + bool is_encrypted); // Returns true if this object has appropriate configuration values, false // otherwise. @@ -101,12 +100,7 @@ class MEDIA_EXPORT VideoDecoderConfig { // Whether the video stream is potentially encrypted. // Note that in a potentially encrypted video stream, individual buffers // can be encrypted or not encrypted. - bool is_encrypted() const { return encryption_scheme_.is_encrypted(); } - - // Encryption scheme used for encrypted buffers. - const EncryptionScheme& encryption_scheme() const { - return encryption_scheme_; - } + bool is_encrypted() const { return is_encrypted_; } private: VideoCodec codec_; @@ -121,7 +115,7 @@ class MEDIA_EXPORT VideoDecoderConfig { std::vector<uint8_t> extra_data_; - EncryptionScheme encryption_scheme_; + bool is_encrypted_; // Not using DISALLOW_COPY_AND_ASSIGN here intentionally to allow the compiler // generated copy constructor and assignment operator. Since the extra data is diff --git a/media/base/video_decoder_config_unittest.cc b/media/base/video_decoder_config_unittest.cc index 1852833..7885c8f 100644 --- a/media/base/video_decoder_config_unittest.cc +++ b/media/base/video_decoder_config_unittest.cc @@ -19,7 +19,7 @@ TEST(VideoDecoderConfigTest, Invalid_UnsupportedPixelFormat) { VideoDecoderConfig config(kCodecVP8, VIDEO_CODEC_PROFILE_UNKNOWN, PIXEL_FORMAT_UNKNOWN, COLOR_SPACE_UNSPECIFIED, kCodedSize, kVisibleRect, kNaturalSize, - EmptyExtraData(), Unencrypted()); + EmptyExtraData(), false); EXPECT_FALSE(config.IsValidConfig()); } @@ -27,7 +27,7 @@ TEST(VideoDecoderConfigTest, Invalid_AspectRatioNumeratorZero) { gfx::Size natural_size = GetNaturalSize(kVisibleRect.size(), 0, 1); VideoDecoderConfig config(kCodecVP8, VP8PROFILE_ANY, kVideoFormat, COLOR_SPACE_UNSPECIFIED, kCodedSize, kVisibleRect, - natural_size, EmptyExtraData(), Unencrypted()); + natural_size, EmptyExtraData(), false); EXPECT_FALSE(config.IsValidConfig()); } @@ -35,7 +35,7 @@ TEST(VideoDecoderConfigTest, Invalid_AspectRatioDenominatorZero) { gfx::Size natural_size = GetNaturalSize(kVisibleRect.size(), 1, 0); VideoDecoderConfig config(kCodecVP8, VP8PROFILE_ANY, kVideoFormat, COLOR_SPACE_UNSPECIFIED, kCodedSize, kVisibleRect, - natural_size, EmptyExtraData(), Unencrypted()); + natural_size, EmptyExtraData(), false); EXPECT_FALSE(config.IsValidConfig()); } @@ -43,7 +43,7 @@ TEST(VideoDecoderConfigTest, Invalid_AspectRatioNumeratorNegative) { gfx::Size natural_size = GetNaturalSize(kVisibleRect.size(), -1, 1); VideoDecoderConfig config(kCodecVP8, VP8PROFILE_ANY, kVideoFormat, COLOR_SPACE_UNSPECIFIED, kCodedSize, kVisibleRect, - natural_size, EmptyExtraData(), Unencrypted()); + natural_size, EmptyExtraData(), false); EXPECT_FALSE(config.IsValidConfig()); } @@ -51,7 +51,7 @@ TEST(VideoDecoderConfigTest, Invalid_AspectRatioDenominatorNegative) { gfx::Size natural_size = GetNaturalSize(kVisibleRect.size(), 1, -1); VideoDecoderConfig config(kCodecVP8, VP8PROFILE_ANY, kVideoFormat, COLOR_SPACE_UNSPECIFIED, kCodedSize, kVisibleRect, - natural_size, EmptyExtraData(), Unencrypted()); + natural_size, EmptyExtraData(), false); EXPECT_FALSE(config.IsValidConfig()); } @@ -61,7 +61,7 @@ TEST(VideoDecoderConfigTest, Invalid_AspectRatioNumeratorTooLarge) { gfx::Size natural_size = GetNaturalSize(kVisibleRect.size(), num, 1); VideoDecoderConfig config(kCodecVP8, VP8PROFILE_ANY, kVideoFormat, COLOR_SPACE_UNSPECIFIED, kCodedSize, kVisibleRect, - natural_size, EmptyExtraData(), Unencrypted()); + natural_size, EmptyExtraData(), false); EXPECT_FALSE(config.IsValidConfig()); } @@ -72,7 +72,7 @@ TEST(VideoDecoderConfigTest, Invalid_AspectRatioDenominatorTooLarge) { EXPECT_EQ(0, natural_size.width()); VideoDecoderConfig config(kCodecVP8, VP8PROFILE_ANY, kVideoFormat, COLOR_SPACE_UNSPECIFIED, kCodedSize, kVisibleRect, - natural_size, EmptyExtraData(), Unencrypted()); + natural_size, EmptyExtraData(), false); EXPECT_FALSE(config.IsValidConfig()); } diff --git a/media/ffmpeg/ffmpeg_common.cc b/media/ffmpeg/ffmpeg_common.cc index f081255..51e8884 100644 --- a/media/ffmpeg/ffmpeg_common.cc +++ b/media/ffmpeg/ffmpeg_common.cc @@ -13,24 +13,12 @@ #include "build/build_config.h" #include "media/base/audio_decoder_config.h" #include "media/base/decoder_buffer.h" -#include "media/base/encryption_scheme.h" -#include "media/base/media_util.h" #include "media/base/video_decoder_config.h" #include "media/base/video_util.h" #include "media/media_features.h" namespace media { -namespace { - -EncryptionScheme GetEncryptionScheme(const AVStream* stream) { - AVDictionaryEntry* key = - av_dict_get(stream->metadata, "enc_key_id", nullptr, 0); - return key ? AesCtrEncryptionScheme() : Unencrypted(); -} - -} // namespace - // Why FF_INPUT_BUFFER_PADDING_SIZE? FFmpeg assumes all input buffers are // padded. Check here to ensure FFmpeg only receives data padded to its // specifications. @@ -315,10 +303,9 @@ static AVSampleFormat SampleFormatToAVSampleFormat(SampleFormat sample_format) { return AV_SAMPLE_FMT_NONE; } -bool AVCodecContextToAudioDecoderConfig( - const AVCodecContext* codec_context, - const EncryptionScheme& encryption_scheme, - AudioDecoderConfig* config) { +bool AVCodecContextToAudioDecoderConfig(const AVCodecContext* codec_context, + bool is_encrypted, + AudioDecoderConfig* config) { DCHECK_EQ(codec_context->codec_type, AVMEDIA_TYPE_AUDIO); AudioCodec codec = CodecIDToAudioCodec(codec_context->codec_id); @@ -384,9 +371,13 @@ bool AVCodecContextToAudioDecoderConfig( extra_data.assign(codec_context->extradata, codec_context->extradata + codec_context->extradata_size); } - - config->Initialize(codec, sample_format, channel_layout, sample_rate, - extra_data, encryption_scheme, seek_preroll, + config->Initialize(codec, + sample_format, + channel_layout, + sample_rate, + extra_data, + is_encrypted, + seek_preroll, codec_context->delay); // Verify that AudioConfig.bits_per_channel was calculated correctly for @@ -409,8 +400,13 @@ bool AVCodecContextToAudioDecoderConfig( bool AVStreamToAudioDecoderConfig(const AVStream* stream, AudioDecoderConfig* config) { - return AVCodecContextToAudioDecoderConfig( - stream->codec, GetEncryptionScheme(stream), config); + bool is_encrypted = false; + AVDictionaryEntry* key = + av_dict_get(stream->metadata, "enc_key_id", nullptr, 0); + if (key) + is_encrypted = true; + return AVCodecContextToAudioDecoderConfig(stream->codec, is_encrypted, + config); } void AudioDecoderConfigToAVCodecContext(const AudioDecoderConfig& config, @@ -501,6 +497,12 @@ bool AVStreamToVideoDecoderConfig(const AVStream* stream, coded_size.set_height((coded_size.height() + 1) / 2 * 2); } + bool is_encrypted = false; + AVDictionaryEntry* key = + av_dict_get(stream->metadata, "enc_key_id", nullptr, 0); + if (key) + is_encrypted = true; + AVDictionaryEntry* webm_alpha = av_dict_get(stream->metadata, "alpha_mode", nullptr, 0); if (webm_alpha && !strcmp(webm_alpha->value, "1")) { @@ -533,8 +535,7 @@ bool AVStreamToVideoDecoderConfig(const AVStream* stream, stream->codec->extradata + stream->codec->extradata_size); } config->Initialize(codec, profile, format, color_space, coded_size, - visible_rect, natural_size, extra_data, - GetEncryptionScheme(stream)); + visible_rect, natural_size, extra_data, is_encrypted); return true; } diff --git a/media/ffmpeg/ffmpeg_common.h b/media/ffmpeg/ffmpeg_common.h index d5ad132..b66de897 100644 --- a/media/ffmpeg/ffmpeg_common.h +++ b/media/ffmpeg/ffmpeg_common.h @@ -52,7 +52,6 @@ MSVC_POP_WARNING(); namespace media { class AudioDecoderConfig; -class EncryptionScheme; class VideoDecoderConfig; // The following implement the deleters declared in ffmpeg_deleters.h (which @@ -114,7 +113,7 @@ void VideoDecoderConfigToAVCodecContext( // is not modified. MEDIA_EXPORT bool AVCodecContextToAudioDecoderConfig( const AVCodecContext* codec_context, - const EncryptionScheme& encryption_scheme, + bool is_encrypted, AudioDecoderConfig* config); // Converts FFmpeg's channel layout to chrome's ChannelLayout. |channels| can diff --git a/media/ffmpeg/ffmpeg_common_unittest.cc b/media/ffmpeg/ffmpeg_common_unittest.cc index 0650ee6..1d33405 100644 --- a/media/ffmpeg/ffmpeg_common_unittest.cc +++ b/media/ffmpeg/ffmpeg_common_unittest.cc @@ -14,7 +14,6 @@ #include "base/memory/scoped_ptr.h" #include "media/base/audio_decoder_config.h" #include "media/base/media.h" -#include "media/base/media_util.h" #include "media/base/test_data_util.h" #include "media/base/video_decoder_config.h" #include "media/ffmpeg/ffmpeg_common.h" @@ -135,7 +134,7 @@ TEST_F(FFmpegCommonTest, OpusAudioDecoderConfig) { context.sample_rate = 44100; AudioDecoderConfig decoder_config; - ASSERT_TRUE(AVCodecContextToAudioDecoderConfig(&context, Unencrypted(), + ASSERT_TRUE(AVCodecContextToAudioDecoderConfig(&context, false, &decoder_config)); EXPECT_EQ(48000, decoder_config.samples_per_second()); } diff --git a/media/filters/audio_decoder_selector_unittest.cc b/media/filters/audio_decoder_selector_unittest.cc index 0d87edc..92c4a73 100644 --- a/media/filters/audio_decoder_selector_unittest.cc +++ b/media/filters/audio_decoder_selector_unittest.cc @@ -77,14 +77,14 @@ class AudioDecoderSelectorTest : public ::testing::Test { void UseClearStream() { AudioDecoderConfig clear_audio_config(kCodecVorbis, kSampleFormatPlanarF32, CHANNEL_LAYOUT_STEREO, 44100, - EmptyExtraData(), Unencrypted()); + EmptyExtraData(), false); demuxer_stream_->set_audio_decoder_config(clear_audio_config); } void UseEncryptedStream() { AudioDecoderConfig encrypted_audio_config( kCodecVorbis, kSampleFormatPlanarF32, CHANNEL_LAYOUT_STEREO, 44100, - EmptyExtraData(), AesCtrEncryptionScheme()); + EmptyExtraData(), true); demuxer_stream_->set_audio_decoder_config(encrypted_audio_config); } diff --git a/media/filters/audio_decoder_unittest.cc b/media/filters/audio_decoder_unittest.cc index 72881b7..c4f727b 100644 --- a/media/filters/audio_decoder_unittest.cc +++ b/media/filters/audio_decoder_unittest.cc @@ -194,7 +194,7 @@ class AudioDecoderTest : public testing::TestWithParam<DecoderTestData> { AudioDecoderConfig config; ASSERT_TRUE(AVCodecContextToAudioDecoderConfig( - reader_->codec_context_for_testing(), Unencrypted(), &config)); + reader_->codec_context_for_testing(), false, &config)); EXPECT_EQ(GetParam().codec, config.codec()); EXPECT_EQ(GetParam().samples_per_second, config.samples_per_second()); @@ -433,9 +433,14 @@ TEST_P(OpusAudioDecoderBehavioralTest, InitializeWithNoCodecDelay) { kOpusExtraData, kOpusExtraData + arraysize(kOpusExtraData)); AudioDecoderConfig decoder_config; - decoder_config.Initialize(kCodecOpus, kSampleFormatF32, CHANNEL_LAYOUT_STEREO, - 48000, extra_data, Unencrypted(), - base::TimeDelta::FromMilliseconds(80), 0); + decoder_config.Initialize(kCodecOpus, + kSampleFormatF32, + CHANNEL_LAYOUT_STEREO, + 48000, + extra_data, + false, + base::TimeDelta::FromMilliseconds(80), + 0); InitializeDecoder(decoder_config); } @@ -446,8 +451,13 @@ TEST_P(OpusAudioDecoderBehavioralTest, InitializeWithBadCodecDelay) { kOpusExtraData + arraysize(kOpusExtraData)); AudioDecoderConfig decoder_config; decoder_config.Initialize( - kCodecOpus, kSampleFormatF32, CHANNEL_LAYOUT_STEREO, 48000, extra_data, - Unencrypted(), base::TimeDelta::FromMilliseconds(80), + kCodecOpus, + kSampleFormatF32, + CHANNEL_LAYOUT_STEREO, + 48000, + extra_data, + false, + base::TimeDelta::FromMilliseconds(80), // Use a different codec delay than in the extradata. 100); InitializeDecoderWithResult(decoder_config, true); diff --git a/media/filters/decrypting_audio_decoder_unittest.cc b/media/filters/decrypting_audio_decoder_unittest.cc index 6649b68..2a37b64 100644 --- a/media/filters/decrypting_audio_decoder_unittest.cc +++ b/media/filters/decrypting_audio_decoder_unittest.cc @@ -120,7 +120,7 @@ class DecryptingAudioDecoderTest : public testing::Test { config_.Initialize(kCodecVorbis, kSampleFormatPlanarF32, CHANNEL_LAYOUT_STEREO, kSampleRate, EmptyExtraData(), - AesCtrEncryptionScheme(), base::TimeDelta(), 0); + true, base::TimeDelta(), 0); InitializeAndExpectResult(config_, true); } @@ -286,7 +286,7 @@ TEST_F(DecryptingAudioDecoderTest, Initialize_Normal) { TEST_F(DecryptingAudioDecoderTest, Initialize_UnencryptedAudioConfig) { AudioDecoderConfig config(kCodecVorbis, kSampleFormatPlanarF32, CHANNEL_LAYOUT_STEREO, kSampleRate, - EmptyExtraData(), Unencrypted()); + EmptyExtraData(), false); InitializeAndExpectResult(config, false); } @@ -294,8 +294,7 @@ TEST_F(DecryptingAudioDecoderTest, Initialize_UnencryptedAudioConfig) { // Ensure decoder handles invalid audio configs without crashing. TEST_F(DecryptingAudioDecoderTest, Initialize_InvalidAudioConfig) { AudioDecoderConfig config(kUnknownAudioCodec, kUnknownSampleFormat, - CHANNEL_LAYOUT_STEREO, 0, EmptyExtraData(), - AesCtrEncryptionScheme()); + CHANNEL_LAYOUT_STEREO, 0, EmptyExtraData(), true); InitializeAndExpectResult(config, false); } @@ -308,7 +307,7 @@ TEST_F(DecryptingAudioDecoderTest, Initialize_UnsupportedAudioConfig) { AudioDecoderConfig config(kCodecVorbis, kSampleFormatPlanarF32, CHANNEL_LAYOUT_STEREO, kSampleRate, - EmptyExtraData(), AesCtrEncryptionScheme()); + EmptyExtraData(), true); InitializeAndExpectResult(config, false); } @@ -316,7 +315,7 @@ TEST_F(DecryptingAudioDecoderTest, Initialize_CdmWithoutDecryptor) { SetCdmType(CDM_WITHOUT_DECRYPTOR); AudioDecoderConfig config(kCodecVorbis, kSampleFormatPlanarF32, CHANNEL_LAYOUT_STEREO, kSampleRate, - EmptyExtraData(), AesCtrEncryptionScheme()); + EmptyExtraData(), true); InitializeAndExpectResult(config, false); } @@ -385,7 +384,7 @@ TEST_F(DecryptingAudioDecoderTest, Reinitialize_ConfigChange) { // channel layout and samples_per_second. AudioDecoderConfig new_config(kCodecVorbis, kSampleFormatPlanarS16, CHANNEL_LAYOUT_5_1, 88200, EmptyExtraData(), - AesCtrEncryptionScheme()); + true); EXPECT_NE(new_config.bits_per_channel(), config_.bits_per_channel()); EXPECT_NE(new_config.channel_layout(), config_.channel_layout()); EXPECT_NE(new_config.samples_per_second(), config_.samples_per_second()); diff --git a/media/filters/decrypting_demuxer_stream.cc b/media/filters/decrypting_demuxer_stream.cc index a44a036..637de2a 100644 --- a/media/filters/decrypting_demuxer_stream.cc +++ b/media/filters/decrypting_demuxer_stream.cc @@ -12,7 +12,6 @@ #include "media/base/bind_to_current_loop.h" #include "media/base/decoder_buffer.h" #include "media/base/media_log.h" -#include "media/base/media_util.h" namespace media { @@ -348,12 +347,14 @@ void DecryptingDemuxerStream::InitializeDecoderConfig() { case AUDIO: { AudioDecoderConfig input_audio_config = demuxer_stream_->audio_decoder_config(); - audio_config_.Initialize( - input_audio_config.codec(), input_audio_config.sample_format(), - input_audio_config.channel_layout(), - input_audio_config.samples_per_second(), - input_audio_config.extra_data(), Unencrypted(), - input_audio_config.seek_preroll(), input_audio_config.codec_delay()); + audio_config_.Initialize(input_audio_config.codec(), + input_audio_config.sample_format(), + input_audio_config.channel_layout(), + input_audio_config.samples_per_second(), + input_audio_config.extra_data(), + false, // Output audio is not encrypted. + input_audio_config.seek_preroll(), + input_audio_config.codec_delay()); break; } @@ -365,7 +366,7 @@ void DecryptingDemuxerStream::InitializeDecoderConfig() { input_video_config.format(), input_video_config.color_space(), input_video_config.coded_size(), input_video_config.visible_rect(), input_video_config.natural_size(), input_video_config.extra_data(), - Unencrypted()); + false); // Output video is not encrypted. break; } diff --git a/media/filters/decrypting_demuxer_stream_unittest.cc b/media/filters/decrypting_demuxer_stream_unittest.cc index f08733b..45cdfe1 100644 --- a/media/filters/decrypting_demuxer_stream_unittest.cc +++ b/media/filters/decrypting_demuxer_stream_unittest.cc @@ -131,7 +131,7 @@ class DecryptingDemuxerStreamTest : public testing::Test { AudioDecoderConfig input_config(kCodecVorbis, kSampleFormatPlanarF32, CHANNEL_LAYOUT_STEREO, 44100, - EmptyExtraData(), AesCtrEncryptionScheme()); + EmptyExtraData(), true); InitializeAudioAndExpectStatus(input_config, PIPELINE_OK); const AudioDecoderConfig& output_config = @@ -305,7 +305,7 @@ TEST_F(DecryptingDemuxerStreamTest, Initialize_CdmWithoutDecryptor) { SetCdmType(CDM_WITHOUT_DECRYPTOR); AudioDecoderConfig input_config(kCodecVorbis, kSampleFormatPlanarF32, CHANNEL_LAYOUT_STEREO, 44100, - EmptyExtraData(), AesCtrEncryptionScheme()); + EmptyExtraData(), true); InitializeAudioAndExpectStatus(input_config, DECODER_ERROR_NOT_SUPPORTED); } @@ -361,7 +361,7 @@ TEST_F(DecryptingDemuxerStreamTest, KeyAdded_DuringWaitingForKey) { // Test the case where the a key is added when the decryptor is in // kPendingDecrypt state. -TEST_F(DecryptingDemuxerStreamTest, KeyAdded_DuringPendingDecrypt) { +TEST_F(DecryptingDemuxerStreamTest, KeyAdded_DruingPendingDecrypt) { Initialize(); EnterPendingDecryptState(); @@ -457,7 +457,7 @@ TEST_F(DecryptingDemuxerStreamTest, DemuxerRead_ConfigChanged) { AudioDecoderConfig new_config(kCodecVorbis, kSampleFormatPlanarF32, CHANNEL_LAYOUT_STEREO, 88200, EmptyExtraData(), - AesCtrEncryptionScheme()); + true); input_audio_stream_->set_audio_decoder_config(new_config); EXPECT_CALL(*input_audio_stream_, Read(_)) diff --git a/media/filters/ffmpeg_video_decoder_unittest.cc b/media/filters/ffmpeg_video_decoder_unittest.cc index fa91d50..6eef19f 100644 --- a/media/filters/ffmpeg_video_decoder_unittest.cc +++ b/media/filters/ffmpeg_video_decoder_unittest.cc @@ -224,7 +224,7 @@ TEST_F(FFmpegVideoDecoderTest, Initialize_OpenDecoderFails) { VideoDecoderConfig config(kCodecTheora, VIDEO_CODEC_PROFILE_UNKNOWN, kVideoFormat, COLOR_SPACE_UNSPECIFIED, kCodedSize, kVisibleRect, kNaturalSize, EmptyExtraData(), - Unencrypted()); + false); InitializeWithConfigWithResult(config, false); } diff --git a/media/filters/frame_processor_unittest.cc b/media/filters/frame_processor_unittest.cc index 3220ae6..289ca8e 100644 --- a/media/filters/frame_processor_unittest.cc +++ b/media/filters/frame_processor_unittest.cc @@ -294,7 +294,7 @@ class FrameProcessorTest : public testing::TestWithParam<bool> { audio_.reset(new ChunkDemuxerStream(DemuxerStream::AUDIO, true)); AudioDecoderConfig decoder_config(kCodecVorbis, kSampleFormatPlanarF32, CHANNEL_LAYOUT_STEREO, 1000, - EmptyExtraData(), Unencrypted()); + EmptyExtraData(), false); frame_processor_->OnPossibleAudioConfigUpdate(decoder_config); ASSERT_TRUE(audio_->UpdateAudioConfig(decoder_config, new MediaLog())); break; diff --git a/media/filters/opus_audio_decoder.cc b/media/filters/opus_audio_decoder.cc index bec37f3..83dad21 100644 --- a/media/filters/opus_audio_decoder.cc +++ b/media/filters/opus_audio_decoder.cc @@ -269,7 +269,7 @@ bool OpusAudioDecoder::ConfigureDecoder() { << " vs " << opus_extra_data.skip_samples; config_.Initialize(config_.codec(), config_.sample_format(), config_.channel_layout(), config_.samples_per_second(), - config_.extra_data(), config_.encryption_scheme(), + config_.extra_data(), config_.is_encrypted(), config_.seek_preroll(), opus_extra_data.skip_samples); } diff --git a/media/filters/source_buffer_stream.cc b/media/filters/source_buffer_stream.cc index 05f2337..e03a8c3 100644 --- a/media/filters/source_buffer_stream.cc +++ b/media/filters/source_buffer_stream.cc @@ -1476,8 +1476,7 @@ bool SourceBufferStream::UpdateAudioConfig(const AudioDecoderConfig& config) { return false; } - if (!audio_configs_[0].encryption_scheme().Matches( - config.encryption_scheme())) { + if (audio_configs_[0].is_encrypted() != config.is_encrypted()) { MEDIA_LOG(ERROR, media_log_) << "Audio encryption changes not allowed."; return false; } @@ -1508,8 +1507,7 @@ bool SourceBufferStream::UpdateVideoConfig(const VideoDecoderConfig& config) { return false; } - if (!video_configs_[0].encryption_scheme().Matches( - config.encryption_scheme())) { + if (video_configs_[0].is_encrypted() != config.is_encrypted()) { MEDIA_LOG(ERROR, media_log_) << "Video encryption changes not allowed."; return false; } diff --git a/media/filters/source_buffer_stream_unittest.cc b/media/filters/source_buffer_stream_unittest.cc index a9558a2..53e8066 100644 --- a/media/filters/source_buffer_stream_unittest.cc +++ b/media/filters/source_buffer_stream_unittest.cc @@ -95,9 +95,14 @@ class SourceBufferStreamTest : public testing::Test { void SetAudioStream() { video_config_ = TestVideoConfig::Invalid(); - audio_config_.Initialize(kCodecVorbis, kSampleFormatPlanarF32, - CHANNEL_LAYOUT_STEREO, 1000, EmptyExtraData(), - Unencrypted(), base::TimeDelta(), 0); + audio_config_.Initialize(kCodecVorbis, + kSampleFormatPlanarF32, + CHANNEL_LAYOUT_STEREO, + 1000, + EmptyExtraData(), + false, + base::TimeDelta(), + 0); stream_.reset(new SourceBufferStream(audio_config_, media_log_, true)); // Equivalent to 2ms per frame. @@ -3648,7 +3653,7 @@ TEST_F(SourceBufferStreamTest, SameTimestamp_Video_Overlap_3) { // Test all the valid same timestamp cases for audio. TEST_F(SourceBufferStreamTest, SameTimestamp_Audio) { AudioDecoderConfig config(kCodecMP3, kSampleFormatF32, CHANNEL_LAYOUT_STEREO, - 44100, EmptyExtraData(), Unencrypted()); + 44100, EmptyExtraData(), false); stream_.reset(new SourceBufferStream(config, media_log_, true)); Seek(0); NewCodedFrameGroupAppend("0K 0K 30K 30 60 60"); @@ -3659,7 +3664,7 @@ TEST_F(SourceBufferStreamTest, SameTimestamp_Audio_SingleAppend_Warning) { EXPECT_MEDIA_LOG(ContainsSameTimestampAt30MillisecondsLog()); AudioDecoderConfig config(kCodecMP3, kSampleFormatF32, CHANNEL_LAYOUT_STEREO, - 44100, EmptyExtraData(), Unencrypted()); + 44100, EmptyExtraData(), false); stream_.reset(new SourceBufferStream(config, media_log_, true)); Seek(0); @@ -4224,7 +4229,7 @@ TEST_F(SourceBufferStreamTest, Audio_SpliceFrame_ConfigChange) { AudioDecoderConfig new_config(kCodecVorbis, kSampleFormatPlanarF32, CHANNEL_LAYOUT_MONO, 1000, EmptyExtraData(), - Unencrypted()); + false); ASSERT_NE(new_config.channel_layout(), audio_config_.channel_layout()); Seek(0); @@ -4265,8 +4270,8 @@ TEST_F(SourceBufferStreamTest, Audio_SpliceFrame_NoMillisecondSplices) { video_config_ = TestVideoConfig::Invalid(); audio_config_.Initialize(kCodecVorbis, kSampleFormatPlanarF32, - CHANNEL_LAYOUT_STEREO, 4000, EmptyExtraData(), - Unencrypted(), base::TimeDelta(), 0); + CHANNEL_LAYOUT_STEREO, 4000, EmptyExtraData(), false, + base::TimeDelta(), 0); stream_.reset(new SourceBufferStream(audio_config_, media_log_, true)); // Equivalent to 0.5ms per frame. SetStreamInfo(2000, 2000); diff --git a/media/formats/mp2t/es_adapter_video_unittest.cc b/media/formats/mp2t/es_adapter_video_unittest.cc index 5946d21..a6e1684 100644 --- a/media/formats/mp2t/es_adapter_video_unittest.cc +++ b/media/formats/mp2t/es_adapter_video_unittest.cc @@ -32,7 +32,7 @@ VideoDecoderConfig CreateFakeVideoConfig() { gfx::Size natural_size(320, 240); return VideoDecoderConfig(kCodecH264, H264PROFILE_MAIN, PIXEL_FORMAT_I420, COLOR_SPACE_UNSPECIFIED, coded_size, visible_rect, - natural_size, EmptyExtraData(), Unencrypted()); + natural_size, EmptyExtraData(), false); } StreamParserBuffer::BufferQueue diff --git a/media/formats/mp2t/es_parser_adts.cc b/media/formats/mp2t/es_parser_adts.cc index b209d66..5a90973 100644 --- a/media/formats/mp2t/es_parser_adts.cc +++ b/media/formats/mp2t/es_parser_adts.cc @@ -13,7 +13,6 @@ #include "media/base/audio_timestamp_helper.h" #include "media/base/bit_reader.h" #include "media/base/channel_layout.h" -#include "media/base/media_util.h" #include "media/base/stream_parser_buffer.h" #include "media/base/timestamp_constants.h" #include "media/formats/common/offset_byte_queue.h" @@ -228,9 +227,12 @@ bool EsParserAdts::UpdateAudioConfiguration(const uint8_t* adts_header) { extra_data.push_back(static_cast<uint8_t>(extra_data_int & 0xff)); AudioDecoderConfig audio_decoder_config( - kCodecAAC, kSampleFormatS16, + kCodecAAC, + kSampleFormatS16, kADTSChannelLayoutTable[channel_configuration], - extended_samples_per_second, extra_data, Unencrypted()); + extended_samples_per_second, + extra_data, + false); if (!audio_decoder_config.Matches(last_audio_decoder_config_)) { DVLOG(1) << "Sampling frequency: " << samples_per_second; diff --git a/media/formats/mp2t/es_parser_h264.cc b/media/formats/mp2t/es_parser_h264.cc index 3b47fec..dc8315c 100644 --- a/media/formats/mp2t/es_parser_h264.cc +++ b/media/formats/mp2t/es_parser_h264.cc @@ -6,8 +6,6 @@ #include "base/logging.h" #include "base/numerics/safe_conversions.h" -#include "media/base/encryption_scheme.h" -#include "media/base/media_util.h" #include "media/base/stream_parser_buffer.h" #include "media/base/timestamp_constants.h" #include "media/base/video_frame.h" @@ -264,7 +262,7 @@ bool EsParserH264::EmitFrame(int64_t access_unit_pos, const H264SPS* sps = h264_parser_->GetSPS(pps->seq_parameter_set_id); if (!sps) return false; - RCHECK(UpdateVideoDecoderConfig(sps, Unencrypted())); + RCHECK(UpdateVideoDecoderConfig(sps)); } // Emit a frame. @@ -289,8 +287,7 @@ bool EsParserH264::EmitFrame(int64_t access_unit_pos, return es_adapter_.OnNewBuffer(stream_parser_buffer); } -bool EsParserH264::UpdateVideoDecoderConfig(const H264SPS* sps, - const EncryptionScheme& scheme) { +bool EsParserH264::UpdateVideoDecoderConfig(const H264SPS* sps) { // Set the SAR to 1 when not specified in the H264 stream. int sar_width = (sps->sar_width == 0) ? 1 : sps->sar_width; int sar_height = (sps->sar_height == 0) ? 1 : sps->sar_height; @@ -317,7 +314,7 @@ bool EsParserH264::UpdateVideoDecoderConfig(const H264SPS* sps, VideoDecoderConfig video_decoder_config( kCodecH264, ProfileIDCToVideoCodecProfile(sps->profile_idc), PIXEL_FORMAT_YV12, COLOR_SPACE_HD_REC709, coded_size, visible_rect, - natural_size, EmptyExtraData(), scheme); + natural_size, std::vector<uint8_t>(), false); if (!video_decoder_config.Matches(last_video_decoder_config_)) { DVLOG(1) << "Profile IDC: " << sps->profile_idc; diff --git a/media/formats/mp2t/es_parser_h264.h b/media/formats/mp2t/es_parser_h264.h index 184ac07..9ce8ea0 100644 --- a/media/formats/mp2t/es_parser_h264.h +++ b/media/formats/mp2t/es_parser_h264.h @@ -7,6 +7,7 @@ #include <stdint.h> +#include <list> #include <utility> #include "base/callback.h" @@ -20,7 +21,6 @@ #include "media/formats/mp2t/es_parser.h" namespace media { -class EncryptionScheme; class H264Parser; struct H264SPS; class OffsetByteQueue; @@ -70,8 +70,7 @@ class MEDIA_EXPORT EsParserH264 : public EsParser { // Update the video decoder config based on an H264 SPS. // Return true if successful. - bool UpdateVideoDecoderConfig(const H264SPS* sps, - const EncryptionScheme& scheme); + bool UpdateVideoDecoderConfig(const H264SPS* sps); EsAdapterVideo es_adapter_; diff --git a/media/formats/mp2t/es_parser_mpeg1audio.cc b/media/formats/mp2t/es_parser_mpeg1audio.cc index 96ed8d6..5032887 100644 --- a/media/formats/mp2t/es_parser_mpeg1audio.cc +++ b/media/formats/mp2t/es_parser_mpeg1audio.cc @@ -12,7 +12,6 @@ #include "media/base/audio_timestamp_helper.h" #include "media/base/bit_reader.h" #include "media/base/channel_layout.h" -#include "media/base/media_util.h" #include "media/base/stream_parser_buffer.h" #include "media/base/timestamp_constants.h" #include "media/formats/common/offset_byte_queue.h" @@ -171,8 +170,12 @@ bool EsParserMpeg1Audio::UpdateAudioConfiguration( // TODO(damienv): Verify whether Android playback requires the extra data // field for Mpeg1 audio. If yes, we should generate this field. AudioDecoderConfig audio_decoder_config( - kCodecMP3, kSampleFormatS16, header.channel_layout, header.sample_rate, - EmptyExtraData(), Unencrypted()); + kCodecMP3, + kSampleFormatS16, + header.channel_layout, + header.sample_rate, + std::vector<uint8_t>(), + false); if (!audio_decoder_config.Matches(last_audio_decoder_config_)) { DVLOG(1) << "Sampling frequency: " << header.sample_rate; diff --git a/media/formats/mp4/mp4_stream_parser.cc b/media/formats/mp4/mp4_stream_parser.cc index 4f72c5e..37b5396 100644 --- a/media/formats/mp4/mp4_stream_parser.cc +++ b/media/formats/mp4/mp4_stream_parser.cc @@ -16,7 +16,6 @@ #include "build/build_config.h" #include "media/base/audio_decoder_config.h" #include "media/base/media_tracks.h" -#include "media/base/media_util.h" #include "media/base/stream_parser_buffer.h" #include "media/base/text_track_config.h" #include "media/base/timestamp_constants.h" @@ -305,10 +304,9 @@ bool MP4StreamParser::ParseMoov(BoxReader* reader) { is_audio_track_encrypted_ = entry.sinf.info.track_encryption.is_encrypted; DVLOG(1) << "is_audio_track_encrypted_: " << is_audio_track_encrypted_; - audio_config.Initialize( - codec, sample_format, channel_layout, sample_per_second, extra_data, - is_audio_track_encrypted_ ? AesCtrEncryptionScheme() : Unencrypted(), - base::TimeDelta(), 0); + audio_config.Initialize(codec, sample_format, channel_layout, + sample_per_second, extra_data, + is_audio_track_encrypted_, base::TimeDelta(), 0); has_audio_ = true; audio_track_id_ = track->header.track_id; media_tracks->AddAudioTrack( @@ -352,8 +350,7 @@ bool MP4StreamParser::ParseMoov(BoxReader* reader) { COLOR_SPACE_HD_REC709, coded_size, visible_rect, natural_size, // No decoder-specific buffer needed for AVC; // SPS/PPS are embedded in the video stream - EmptyExtraData(), - is_video_track_encrypted_ ? AesCtrEncryptionScheme() : Unencrypted()); + std::vector<uint8_t>(), is_video_track_encrypted_); has_video_ = true; video_track_id_ = track->header.track_id; media_tracks->AddVideoTrack( diff --git a/media/formats/mpeg/mpeg_audio_stream_parser_base.cc b/media/formats/mpeg/mpeg_audio_stream_parser_base.cc index 47dd2f6..2028495 100644 --- a/media/formats/mpeg/mpeg_audio_stream_parser_base.cc +++ b/media/formats/mpeg/mpeg_audio_stream_parser_base.cc @@ -8,7 +8,6 @@ #include "base/callback_helpers.h" #include "base/message_loop/message_loop.h" #include "media/base/media_tracks.h" -#include "media/base/media_util.h" #include "media/base/stream_parser_buffer.h" #include "media/base/text_track_config.h" #include "media/base/timestamp_constants.h" @@ -206,9 +205,14 @@ int MPEGAudioStreamParserBase::ParseFrame(const uint8_t* data, } if (!config_.IsValidConfig()) { - config_.Initialize(audio_codec_, kSampleFormatF32, channel_layout, - sample_rate, std::vector<uint8_t>(), Unencrypted(), - base::TimeDelta(), codec_delay_); + config_.Initialize(audio_codec_, + kSampleFormatF32, + channel_layout, + sample_rate, + std::vector<uint8_t>(), + false, + base::TimeDelta(), + codec_delay_); base::TimeDelta base_timestamp; if (timestamp_helper_) diff --git a/media/formats/webm/webm_audio_client.cc b/media/formats/webm/webm_audio_client.cc index 173d81f..fb6a723a 100644 --- a/media/formats/webm/webm_audio_client.cc +++ b/media/formats/webm/webm_audio_client.cc @@ -29,7 +29,7 @@ bool WebMAudioClient::InitializeConfig( const std::vector<uint8_t>& codec_private, int64_t seek_preroll, int64_t codec_delay, - const EncryptionScheme& encryption_scheme, + bool is_encrypted, AudioDecoderConfig* config) { DCHECK(config); SampleFormat sample_format = kSampleFormatPlanarF32; @@ -78,11 +78,16 @@ bool WebMAudioClient::InitializeConfig( base::Time::kNanosecondsPerSecond); } - config->Initialize(audio_codec, sample_format, channel_layout, - samples_per_second, codec_private, encryption_scheme, - base::TimeDelta::FromMicroseconds( - (seek_preroll != -1 ? seek_preroll : 0) / 1000), - codec_delay_in_frames); + config->Initialize( + audio_codec, + sample_format, + channel_layout, + samples_per_second, + codec_private, + is_encrypted, + base::TimeDelta::FromMicroseconds( + (seek_preroll != -1 ? seek_preroll : 0) / 1000), + codec_delay_in_frames); return config->IsValidConfig(); } diff --git a/media/formats/webm/webm_audio_client.h b/media/formats/webm/webm_audio_client.h index 06d7e0c..fefa55f 100644 --- a/media/formats/webm/webm_audio_client.h +++ b/media/formats/webm/webm_audio_client.h @@ -16,7 +16,6 @@ namespace media { class AudioDecoderConfig; -class EncryptionScheme; // Helper class used to parse an Audio element inside a TrackEntry element. class WebMAudioClient : public WebMParserClient { @@ -28,8 +27,8 @@ class WebMAudioClient : public WebMParserClient { void Reset(); // Initialize |config| with the data in |codec_id|, |codec_private|, - // |encryption_scheme| and the fields parsed from the last audio track element - // this object was used to parse. + // |is_encrypted| and the fields parsed from the last audio track element this + // object was used to parse. // Returns true if |config| was successfully initialized. // Returns false if there was unexpected values in the provided parameters or // audio track element fields. @@ -37,7 +36,7 @@ class WebMAudioClient : public WebMParserClient { const std::vector<uint8_t>& codec_private, const int64_t seek_preroll, const int64_t codec_delay, - const EncryptionScheme& encryption_scheme, + bool is_encrypted, AudioDecoderConfig* config); private: diff --git a/media/formats/webm/webm_tracks_parser.cc b/media/formats/webm/webm_tracks_parser.cc index 112427f..5ffa0aa 100644 --- a/media/formats/webm/webm_tracks_parser.cc +++ b/media/formats/webm/webm_tracks_parser.cc @@ -7,7 +7,6 @@ #include "base/logging.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" -#include "media/base/media_util.h" #include "media/base/timestamp_constants.h" #include "media/formats/webm/webm_constants.h" #include "media/formats/webm/webm_content_encodings.h" @@ -194,9 +193,6 @@ bool WebMTracksParser::OnListEnd(int id) { content_encodings()[0]->encryption_key_id(); } - EncryptionScheme encryption_scheme = - encryption_key_id.empty() ? Unencrypted() : AesCtrEncryptionScheme(); - if (track_type_ == kWebMTrackTypeAudio) { if (audio_track_num_ == -1) { audio_track_num_ = track_num_; @@ -212,7 +208,7 @@ bool WebMTracksParser::OnListEnd(int id) { DCHECK(!audio_decoder_config_.IsValidConfig()); if (!audio_client_.InitializeConfig( codec_id_, codec_private_, seek_preroll_, codec_delay_, - encryption_scheme, &audio_decoder_config_)) { + !audio_encryption_key_id_.empty(), &audio_decoder_config_)) { return false; } media_tracks_->AddAudioTrack(audio_decoder_config_, @@ -235,9 +231,9 @@ bool WebMTracksParser::OnListEnd(int id) { video_default_duration_ = default_duration_; DCHECK(!video_decoder_config_.IsValidConfig()); - if (!video_client_.InitializeConfig(codec_id_, codec_private_, - encryption_scheme, - &video_decoder_config_)) { + if (!video_client_.InitializeConfig( + codec_id_, codec_private_, !video_encryption_key_id_.empty(), + &video_decoder_config_)) { return false; } media_tracks_->AddVideoTrack(video_decoder_config_, diff --git a/media/formats/webm/webm_video_client.cc b/media/formats/webm/webm_video_client.cc index 9d0435f..6e57dfb 100644 --- a/media/formats/webm/webm_video_client.cc +++ b/media/formats/webm/webm_video_client.cc @@ -33,7 +33,7 @@ void WebMVideoClient::Reset() { bool WebMVideoClient::InitializeConfig( const std::string& codec_id, const std::vector<uint8_t>& codec_private, - const EncryptionScheme& encryption_scheme, + bool is_encrypted, VideoDecoderConfig* config) { DCHECK(config); @@ -93,7 +93,7 @@ bool WebMVideoClient::InitializeConfig( config->Initialize(video_codec, profile, format, COLOR_SPACE_HD_REC709, coded_size, visible_rect, natural_size, codec_private, - encryption_scheme); + is_encrypted); return config->IsValidConfig(); } diff --git a/media/formats/webm/webm_video_client.h b/media/formats/webm/webm_video_client.h index d746df9..dfdc5f6 100644 --- a/media/formats/webm/webm_video_client.h +++ b/media/formats/webm/webm_video_client.h @@ -15,7 +15,6 @@ #include "media/formats/webm/webm_parser.h" namespace media { -class EncryptionScheme; class VideoDecoderConfig; // Helper class used to parse a Video element inside a TrackEntry element. @@ -28,15 +27,15 @@ class WebMVideoClient : public WebMParserClient { void Reset(); // Initialize |config| with the data in |codec_id|, |codec_private|, - // |encryption_scheme| and the fields parsed from the last video track element - // this object was used to parse. + // |is_encrypted| and the fields parsed from the last video track element this + // object was used to parse. // Returns true if |config| was successfully initialized. // Returns false if there was unexpected values in the provided parameters or // video track element fields. The contents of |config| are undefined in this // case and should not be relied upon. bool InitializeConfig(const std::string& codec_id, const std::vector<uint8_t>& codec_private, - const EncryptionScheme& encryption_scheme, + bool is_encrypted, VideoDecoderConfig* config); private: diff --git a/media/media.gyp b/media/media.gyp index 0863c02..f254b8f 100644 --- a/media/media.gyp +++ b/media/media.gyp @@ -329,8 +329,6 @@ 'base/djb2.cc', 'base/djb2.h', 'base/eme_constants.h', - 'base/encryption_scheme.cc', - 'base/encryption_scheme.h', 'base/key_system_info.cc', 'base/key_system_info.h', 'base/key_systems.cc', diff --git a/media/mojo/common/media_type_converters.cc b/media/mojo/common/media_type_converters.cc index 7725a2e..f1bf033 100644 --- a/media/mojo/common/media_type_converters.cc +++ b/media/mojo/common/media_type_converters.cc @@ -17,7 +17,6 @@ #include "media/base/decrypt_config.h" #include "media/base/decryptor.h" #include "media/base/demuxer_stream.h" -#include "media/base/encryption_scheme.h" #include "media/base/media_keys.h" #include "media/base/video_decoder_config.h" #include "media/base/video_frame.h" @@ -222,20 +221,6 @@ ASSERT_ENUM_EQ(VideoCodecProfile, , , VP9PROFILE_ANY); ASSERT_ENUM_EQ(VideoCodecProfile, , , VP9PROFILE_MAX); ASSERT_ENUM_EQ(VideoCodecProfile, , , VIDEO_CODEC_PROFILE_MAX); -// CipherMode -ASSERT_ENUM_EQ_RAW(EncryptionScheme::CipherMode, - EncryptionScheme::CipherMode::CIPHER_MODE_UNENCRYPTED, - CipherMode::UNENCRYPTED); -ASSERT_ENUM_EQ_RAW(EncryptionScheme::CipherMode, - EncryptionScheme::CipherMode::CIPHER_MODE_AES_CTR, - CipherMode::AES_CTR); -ASSERT_ENUM_EQ_RAW(EncryptionScheme::CipherMode, - EncryptionScheme::CipherMode::CIPHER_MODE_AES_CBC, - CipherMode::AES_CBC); -ASSERT_ENUM_EQ_RAW(EncryptionScheme::CipherMode, - EncryptionScheme::CipherMode::CIPHER_MODE_MAX, - CipherMode::MAX); - // Decryptor Status ASSERT_ENUM_EQ_RAW(Decryptor::Status, Decryptor::kSuccess, @@ -310,59 +295,6 @@ ASSERT_CDM_MESSAGE_TYPE(LICENSE_REQUEST); ASSERT_CDM_MESSAGE_TYPE(LICENSE_RENEWAL); ASSERT_CDM_MESSAGE_TYPE(LICENSE_RELEASE); -template <> -struct TypeConverter<media::interfaces::PatternPtr, - media::EncryptionScheme::Pattern> { - static media::interfaces::PatternPtr Convert( - const media::EncryptionScheme::Pattern& input); -}; -template <> -struct TypeConverter<media::EncryptionScheme::Pattern, - media::interfaces::PatternPtr> { - static media::EncryptionScheme::Pattern Convert( - const media::interfaces::PatternPtr& input); -}; - -// static -media::interfaces::PatternPtr -TypeConverter<media::interfaces::PatternPtr, media::EncryptionScheme::Pattern>:: - Convert(const media::EncryptionScheme::Pattern& input) { - media::interfaces::PatternPtr mojo_pattern(media::interfaces::Pattern::New()); - mojo_pattern->encrypt_blocks = input.encrypt_blocks(); - mojo_pattern->skip_blocks = input.skip_blocks(); - return mojo_pattern; -} - -// static -media::EncryptionScheme::Pattern -TypeConverter<media::EncryptionScheme::Pattern, media::interfaces::PatternPtr>:: - Convert(const media::interfaces::PatternPtr& input) { - return media::EncryptionScheme::Pattern(input->encrypt_blocks, - input->skip_blocks); -} - -// static -media::interfaces::EncryptionSchemePtr TypeConverter< - media::interfaces::EncryptionSchemePtr, - media::EncryptionScheme>::Convert(const media::EncryptionScheme& input) { - media::interfaces::EncryptionSchemePtr mojo_encryption_scheme( - media::interfaces::EncryptionScheme::New()); - mojo_encryption_scheme->mode = - static_cast<media::interfaces::CipherMode>(input.mode()); - mojo_encryption_scheme->pattern = - media::interfaces::Pattern::From(input.pattern()); - return mojo_encryption_scheme; -} - -// static -media::EncryptionScheme -TypeConverter<media::EncryptionScheme, media::interfaces::EncryptionSchemePtr>:: - Convert(const media::interfaces::EncryptionSchemePtr& input) { - return media::EncryptionScheme( - static_cast<media::EncryptionScheme::CipherMode>(input->mode), - input->pattern.To<media::EncryptionScheme::Pattern>()); -} - // static media::interfaces::SubsampleEntryPtr TypeConverter< media::interfaces::SubsampleEntryPtr, @@ -503,8 +435,7 @@ media::interfaces::AudioDecoderConfigPtr TypeConverter< } config->seek_preroll_usec = input.seek_preroll().InMicroseconds(); config->codec_delay = input.codec_delay(); - config->encryption_scheme = - media::interfaces::EncryptionScheme::From(input.encryption_scheme()); + config->is_encrypted = input.is_encrypted(); return config; } @@ -518,7 +449,7 @@ TypeConverter<media::AudioDecoderConfig, static_cast<media::SampleFormat>(input->sample_format), static_cast<media::ChannelLayout>(input->channel_layout), input->samples_per_second, input->extra_data.storage(), - input->encryption_scheme.To<media::EncryptionScheme>(), + input->is_encrypted, base::TimeDelta::FromMicroseconds(input->seek_preroll_usec), input->codec_delay); return config; @@ -543,8 +474,7 @@ media::interfaces::VideoDecoderConfigPtr TypeConverter< if (!input.extra_data().empty()) { config->extra_data = mojo::Array<uint8_t>::From(input.extra_data()); } - config->encryption_scheme = - media::interfaces::EncryptionScheme::From(input.encryption_scheme()); + config->is_encrypted = input.is_encrypted(); return config; } @@ -554,14 +484,14 @@ TypeConverter<media::VideoDecoderConfig, media::interfaces::VideoDecoderConfigPtr>:: Convert(const media::interfaces::VideoDecoderConfigPtr& input) { media::VideoDecoderConfig config; - config.Initialize( - static_cast<media::VideoCodec>(input->codec), - static_cast<media::VideoCodecProfile>(input->profile), - static_cast<media::VideoPixelFormat>(input->format), - static_cast<media::ColorSpace>(input->color_space), - input->coded_size.To<gfx::Size>(), input->visible_rect.To<gfx::Rect>(), - input->natural_size.To<gfx::Size>(), input->extra_data.storage(), - input->encryption_scheme.To<media::EncryptionScheme>()); + config.Initialize(static_cast<media::VideoCodec>(input->codec), + static_cast<media::VideoCodecProfile>(input->profile), + static_cast<media::VideoPixelFormat>(input->format), + static_cast<media::ColorSpace>(input->color_space), + input->coded_size.To<gfx::Size>(), + input->visible_rect.To<gfx::Rect>(), + input->natural_size.To<gfx::Size>(), + input->extra_data.storage(), input->is_encrypted); return config; } diff --git a/media/mojo/common/media_type_converters.h b/media/mojo/common/media_type_converters.h index 6b5664b..50cc30b 100644 --- a/media/mojo/common/media_type_converters.h +++ b/media/mojo/common/media_type_converters.h @@ -16,7 +16,6 @@ class AudioBuffer; class AudioDecoderConfig; class DecoderBuffer; class DecryptConfig; -class EncryptionScheme; class VideoDecoderConfig; class VideoFrame; struct CdmConfig; @@ -29,19 +28,6 @@ struct SubsampleEntry; namespace mojo { template <> -struct TypeConverter<media::interfaces::EncryptionSchemePtr, - media::EncryptionScheme> { - static media::interfaces::EncryptionSchemePtr Convert( - const media::EncryptionScheme& input); -}; -template <> -struct TypeConverter<media::EncryptionScheme, - media::interfaces::EncryptionSchemePtr> { - static media::EncryptionScheme Convert( - const media::interfaces::EncryptionSchemePtr& input); -}; - -template <> struct TypeConverter<media::interfaces::SubsampleEntryPtr, media::SubsampleEntry> { static media::interfaces::SubsampleEntryPtr Convert( diff --git a/media/mojo/common/media_type_converters_unittest.cc b/media/mojo/common/media_type_converters_unittest.cc index 5a2237f..9858cd0 100644 --- a/media/mojo/common/media_type_converters_unittest.cc +++ b/media/mojo/common/media_type_converters_unittest.cc @@ -13,7 +13,6 @@ #include "media/base/audio_decoder_config.h" #include "media/base/cdm_config.h" #include "media/base/decoder_buffer.h" -#include "media/base/encryption_scheme.h" #include "media/base/media_util.h" #include "media/base/sample_format.h" #include "media/base/test_helpers.h" @@ -288,7 +287,7 @@ TEST(MediaTypeConvertersTest, ConvertAudioDecoderConfig_Normal) { AudioDecoderConfig config; config.Initialize(kCodecAAC, kSampleFormatU8, CHANNEL_LAYOUT_SURROUND, 48000, - kExtraDataVector, Unencrypted(), base::TimeDelta(), 0); + kExtraDataVector, false, base::TimeDelta(), 0); interfaces::AudioDecoderConfigPtr ptr( interfaces::AudioDecoderConfig::From(config)); EXPECT_FALSE(ptr->extra_data.is_null()); @@ -299,7 +298,7 @@ TEST(MediaTypeConvertersTest, ConvertAudioDecoderConfig_Normal) { TEST(MediaTypeConvertersTest, ConvertAudioDecoderConfig_EmptyExtraData) { AudioDecoderConfig config; config.Initialize(kCodecAAC, kSampleFormatU8, CHANNEL_LAYOUT_SURROUND, 48000, - EmptyExtraData(), Unencrypted(), base::TimeDelta(), 0); + EmptyExtraData(), false, base::TimeDelta(), 0); interfaces::AudioDecoderConfigPtr ptr( interfaces::AudioDecoderConfig::From(config)); EXPECT_TRUE(ptr->extra_data.is_null()); @@ -310,11 +309,14 @@ TEST(MediaTypeConvertersTest, ConvertAudioDecoderConfig_EmptyExtraData) { TEST(MediaTypeConvertersTest, ConvertAudioDecoderConfig_Encrypted) { AudioDecoderConfig config; config.Initialize(kCodecAAC, kSampleFormatU8, CHANNEL_LAYOUT_SURROUND, 48000, - EmptyExtraData(), AesCtrEncryptionScheme(), + EmptyExtraData(), + true, // Is encrypted. base::TimeDelta(), 0); interfaces::AudioDecoderConfigPtr ptr( interfaces::AudioDecoderConfig::From(config)); + EXPECT_TRUE(ptr->is_encrypted); AudioDecoderConfig result(ptr.To<AudioDecoderConfig>()); + EXPECT_TRUE(result.is_encrypted()); EXPECT_TRUE(result.Matches(config)); } @@ -325,7 +327,7 @@ TEST(MediaTypeConvertersTest, ConvertVideoDecoderConfig_Normal) { VideoDecoderConfig config(kCodecVP8, VP8PROFILE_ANY, PIXEL_FORMAT_YV12, COLOR_SPACE_UNSPECIFIED, kCodedSize, kVisibleRect, - kNaturalSize, kExtraDataVector, Unencrypted()); + kNaturalSize, kExtraDataVector, false); interfaces::VideoDecoderConfigPtr ptr( interfaces::VideoDecoderConfig::From(config)); EXPECT_FALSE(ptr->extra_data.is_null()); @@ -336,7 +338,7 @@ TEST(MediaTypeConvertersTest, ConvertVideoDecoderConfig_Normal) { TEST(MediaTypeConvertersTest, ConvertVideoDecoderConfig_EmptyExtraData) { VideoDecoderConfig config(kCodecVP8, VP8PROFILE_ANY, PIXEL_FORMAT_YV12, COLOR_SPACE_UNSPECIFIED, kCodedSize, kVisibleRect, - kNaturalSize, EmptyExtraData(), Unencrypted()); + kNaturalSize, EmptyExtraData(), false); interfaces::VideoDecoderConfigPtr ptr( interfaces::VideoDecoderConfig::From(config)); EXPECT_TRUE(ptr->extra_data.is_null()); @@ -348,10 +350,12 @@ TEST(MediaTypeConvertersTest, ConvertVideoDecoderConfig_Encrypted) { VideoDecoderConfig config(kCodecVP8, VP8PROFILE_ANY, PIXEL_FORMAT_YV12, COLOR_SPACE_UNSPECIFIED, kCodedSize, kVisibleRect, kNaturalSize, EmptyExtraData(), - AesCtrEncryptionScheme()); + true /* is_encrypted */); interfaces::VideoDecoderConfigPtr ptr( interfaces::VideoDecoderConfig::From(config)); + EXPECT_TRUE(ptr->is_encrypted); VideoDecoderConfig result(ptr.To<VideoDecoderConfig>()); + EXPECT_TRUE(result.is_encrypted()); EXPECT_TRUE(result.Matches(config)); } @@ -454,21 +458,4 @@ TEST(MediaTypeConvertersTest, ConvertVideoFrame_ColorFrame) { CompareVideoFrames(frame, result); } -TEST(MediaTypeConvertersTest, ConvertEncryptionSchemeAesCbcWithPattern) { - // Original. - EncryptionScheme scheme(EncryptionScheme::CIPHER_MODE_AES_CBC, - EncryptionScheme::Pattern(1, 9)); - - // Convert to and back. - interfaces::EncryptionSchemePtr ptr( - interfaces::EncryptionScheme::From(scheme)); - EncryptionScheme result(ptr.To<EncryptionScheme>()); - - EXPECT_TRUE(result.Matches(scheme)); - - // Verify a couple of negative cases. - EXPECT_FALSE(result.Matches(Unencrypted())); - EXPECT_FALSE(result.Matches(AesCtrEncryptionScheme())); -} - } // namespace media diff --git a/media/mojo/interfaces/media_types.mojom b/media/mojo/interfaces/media_types.mojom index 5f4d942..44e6cdf 100644 --- a/media/mojo/interfaces/media_types.mojom +++ b/media/mojo/interfaces/media_types.mojom @@ -168,29 +168,6 @@ enum VideoCodecProfile { VIDEO_CODEC_PROFILE_MAX = VP9PROFILE_MAX, }; -// See media/base/encryption_scheme.h. -// Kept in sync with media::CipherMode via static_asserts. -enum CipherMode { - UNENCRYPTED = 0, - AES_CTR, - AES_CBC, - MAX = AES_CBC -}; - -// This defines a mojo transport format for media::EncryptionScheme::Pattern -// See media/base/encryption_scheme.h for description. -struct Pattern { - uint32 encrypt_blocks; - uint32 skip_blocks; -}; - -// This defines a mojo transport format for media::EncryptionScheme. -// See media/base/encryption_scheme.h for description. -struct EncryptionScheme { - CipherMode mode; - Pattern pattern; -}; - // This defines a mojo transport format for media::AudioDecoderConfig. // See media/base/audio_decoder_config.h for descriptions. struct AudioDecoderConfig { @@ -201,7 +178,7 @@ struct AudioDecoderConfig { array<uint8>? extra_data; int64 seek_preroll_usec; int32 codec_delay; - EncryptionScheme encryption_scheme; + bool is_encrypted; }; // This defines a mojo transport format for media::VideoDecoderConfig. @@ -215,7 +192,7 @@ struct VideoDecoderConfig { mojo.Rect visible_rect; mojo.Size natural_size; array<uint8>? extra_data; - EncryptionScheme encryption_scheme; + bool is_encrypted; }; // This defines a mojo transport format for media::SubsampleEntry. diff --git a/media/renderers/audio_renderer_impl_unittest.cc b/media/renderers/audio_renderer_impl_unittest.cc index 0b6a3df..20c5fdb 100644 --- a/media/renderers/audio_renderer_impl_unittest.cc +++ b/media/renderers/audio_renderer_impl_unittest.cc @@ -73,9 +73,12 @@ class AudioRendererImplTest : public ::testing::Test { demuxer_stream_(DemuxerStream::AUDIO), decoder_(new MockAudioDecoder()), ended_(false) { - AudioDecoderConfig audio_config(kCodec, kSampleFormat, kChannelLayout, - kInputSamplesPerSecond, EmptyExtraData(), - Unencrypted()); + AudioDecoderConfig audio_config(kCodec, + kSampleFormat, + kChannelLayout, + kInputSamplesPerSecond, + EmptyExtraData(), + false); demuxer_stream_.set_audio_decoder_config(audio_config); // Used to save callbacks and run them at a later time. |