summaryrefslogtreecommitdiff
path: root/chromium/media/base
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/media/base')
-rw-r--r--chromium/media/base/BUILD.gn4
-rw-r--r--chromium/media/base/android/android_cdm_factory.h6
-rw-r--r--chromium/media/base/android/android_overlay.h5
-rw-r--r--chromium/media/base/android/jni_hdr_metadata.h6
-rw-r--r--chromium/media/base/android/media_codec_bridge.h6
-rw-r--r--chromium/media/base/android/media_codec_bridge_impl.cc12
-rw-r--r--chromium/media/base/android/media_codec_bridge_impl.h16
-rw-r--r--chromium/media/base/android/media_codec_bridge_impl_unittest.cc58
-rw-r--r--chromium/media/base/android/media_codec_loop.cc7
-rw-r--r--chromium/media/base/android/media_codec_loop_unittest.cc13
-rw-r--r--chromium/media/base/android/media_codec_util.cc30
-rw-r--r--chromium/media/base/android/media_codec_util_unittest.cc5
-rw-r--r--chromium/media/base/android/media_crypto_context.h7
-rw-r--r--chromium/media/base/android/media_crypto_context_impl.h5
-rw-r--r--chromium/media/base/android/media_drm_bridge_client.h6
-rw-r--r--chromium/media/base/android/media_drm_bridge_delegate.h7
-rw-r--r--chromium/media/base/android/media_drm_bridge_factory.h6
-rw-r--r--chromium/media/base/android/media_drm_storage_bridge.h6
-rw-r--r--chromium/media/base/android/media_player_bridge.cc6
-rw-r--r--chromium/media/base/android/media_player_bridge.h6
-rw-r--r--chromium/media/base/android/media_player_bridge_unittest.cc2
-rw-r--r--chromium/media/base/android/media_player_listener.h6
-rw-r--r--chromium/media/base/android/media_server_crash_listener.h5
-rw-r--r--chromium/media/base/android/media_service_throttler.cc17
-rw-r--r--chromium/media/base/android/media_service_throttler_unittest.cc31
-rw-r--r--chromium/media/base/android/mock_android_overlay.h6
-rw-r--r--chromium/media/base/android/mock_media_codec_bridge.h6
-rw-r--r--chromium/media/base/android/mock_media_crypto_context.h5
-rw-r--r--chromium/media/base/android/test_destruction_observable.h10
-rw-r--r--chromium/media/base/audio_block_fifo.h6
-rw-r--r--chromium/media/base/audio_block_fifo_unittest.cc11
-rw-r--r--chromium/media/base/audio_buffer.cc8
-rw-r--r--chromium/media/base/audio_buffer_converter_unittest.cc2
-rw-r--r--chromium/media/base/audio_buffer_queue.h6
-rw-r--r--chromium/media/base/audio_buffer_unittest.cc20
-rw-r--r--chromium/media/base/audio_bus.h5
-rw-r--r--chromium/media/base/audio_bus_unittest.cc6
-rw-r--r--chromium/media/base/audio_codecs.cc64
-rw-r--r--chromium/media/base/audio_codecs.h46
-rw-r--r--chromium/media/base/audio_decoder.h6
-rw-r--r--chromium/media/base/audio_decoder_config.cc9
-rw-r--r--chromium/media/base/audio_decoder_config.h13
-rw-r--r--chromium/media/base/audio_discard_helper_unittest.cc48
-rw-r--r--chromium/media/base/audio_fifo.h6
-rw-r--r--chromium/media/base/audio_fifo_unittest.cc7
-rw-r--r--chromium/media/base/audio_hash.h6
-rw-r--r--chromium/media/base/audio_hash_unittest.cc5
-rw-r--r--chromium/media/base/audio_latency_unittest.cc77
-rw-r--r--chromium/media/base/audio_parameters.cc2
-rw-r--r--chromium/media/base/audio_power_monitor.h5
-rw-r--r--chromium/media/base/audio_power_monitor_unittest.cc4
-rw-r--r--chromium/media/base/audio_pull_fifo.h6
-rw-r--r--chromium/media/base/audio_pull_fifo_unittest.cc6
-rw-r--r--chromium/media/base/audio_push_fifo.h5
-rw-r--r--chromium/media/base/audio_push_fifo_unittest.cc6
-rw-r--r--chromium/media/base/audio_renderer.h6
-rw-r--r--chromium/media/base/audio_renderer_mixer.cc2
-rw-r--r--chromium/media/base/audio_renderer_mixer.h6
-rw-r--r--chromium/media/base/audio_renderer_mixer_pool.h7
-rw-r--r--chromium/media/base/audio_renderer_mixer_unittest.cc4
-rw-r--r--chromium/media/base/audio_shifter.cc31
-rw-r--r--chromium/media/base/audio_shifter_unittest.cc37
-rw-r--r--chromium/media/base/audio_timestamp_helper.cc6
-rw-r--r--chromium/media/base/audio_timestamp_helper_unittest.cc48
-rw-r--r--chromium/media/base/bit_reader.h6
-rw-r--r--chromium/media/base/bit_reader_core.h6
-rw-r--r--chromium/media/base/bitstream_buffer.h5
-rw-r--r--chromium/media/base/byte_queue.h6
-rw-r--r--chromium/media/base/callback_registry.h18
-rw-r--r--chromium/media/base/cdm_callback_promise.h6
-rw-r--r--chromium/media/base/cdm_context.cc3
-rw-r--r--chromium/media/base/cdm_context.h11
-rw-r--r--chromium/media/base/cdm_factory.h7
-rw-r--r--chromium/media/base/cdm_promise.h16
-rw-r--r--chromium/media/base/cdm_promise_adapter.h5
-rw-r--r--chromium/media/base/cdm_session_tracker.h6
-rw-r--r--chromium/media/base/channel_mixer.h6
-rw-r--r--chromium/media/base/channel_mixing_matrix.h5
-rw-r--r--chromium/media/base/data_buffer_unittest.cc8
-rw-r--r--chromium/media/base/data_source.h7
-rw-r--r--chromium/media/base/decode_status.h9
-rw-r--r--chromium/media/base/decoder_buffer_queue.h6
-rw-r--r--chromium/media/base/decoder_buffer_queue_unittest.cc2
-rw-r--r--chromium/media/base/decoder_factory.h7
-rw-r--r--chromium/media/base/decryptor.h7
-rw-r--r--chromium/media/base/demuxer.h7
-rw-r--r--chromium/media/base/demuxer_memory_limit_cast.cc12
-rw-r--r--chromium/media/base/demuxer_memory_limit_cast_unittest.cc12
-rw-r--r--chromium/media/base/encryption_scheme.cc16
-rw-r--r--chromium/media/base/encryption_scheme.h5
-rw-r--r--chromium/media/base/fake_audio_render_callback.h6
-rw-r--r--chromium/media/base/fake_audio_worker.h6
-rw-r--r--chromium/media/base/fake_audio_worker_unittest.cc17
-rw-r--r--chromium/media/base/fake_demuxer_stream.cc6
-rw-r--r--chromium/media/base/fake_demuxer_stream.h12
-rw-r--r--chromium/media/base/fake_demuxer_stream_unittest.cc7
-rw-r--r--chromium/media/base/fake_single_thread_task_runner.cc4
-rw-r--r--chromium/media/base/fake_text_track_stream.h6
-rw-r--r--chromium/media/base/feedback_signal_accumulator_unittest.cc10
-rw-r--r--chromium/media/base/frame_rate_estimator_unittest.cc4
-rw-r--r--chromium/media/base/ipc/media_param_traits_macros.h4
-rw-r--r--chromium/media/base/key_systems.cc30
-rw-r--r--chromium/media/base/key_systems_unittest.cc1
-rw-r--r--chromium/media/base/loopback_audio_converter.h5
-rw-r--r--chromium/media/base/mac/video_frame_mac_unittests.cc2
-rw-r--r--chromium/media/base/media_content_type.cc2
-rw-r--r--chromium/media/base/media_drm_storage.h7
-rw-r--r--chromium/media/base/media_log.h6
-rw-r--r--chromium/media/base/media_permission.h7
-rw-r--r--chromium/media/base/media_resource.h7
-rw-r--r--chromium/media/base/media_serializers.h51
-rw-r--r--chromium/media/base/media_serializers_unittest.cc2
-rw-r--r--chromium/media/base/media_switches.cc42
-rw-r--r--chromium/media/base/media_switches.h10
-rw-r--r--chromium/media/base/media_tracks.h6
-rw-r--r--chromium/media/base/media_types.cc22
-rw-r--r--chromium/media/base/media_url_demuxer.h6
-rw-r--r--chromium/media/base/media_util.h7
-rw-r--r--chromium/media/base/memory_dump_provider_proxy.h5
-rw-r--r--chromium/media/base/mime_util_internal.cc52
-rw-r--r--chromium/media/base/mime_util_internal.h7
-rw-r--r--chromium/media/base/mime_util_unittest.cc50
-rw-r--r--chromium/media/base/mock_demuxer_host.h7
-rw-r--r--chromium/media/base/mock_filters.h141
-rw-r--r--chromium/media/base/mock_media_log.h6
-rw-r--r--chromium/media/base/moving_average.cc2
-rw-r--r--chromium/media/base/moving_average.h6
-rw-r--r--chromium/media/base/moving_average_unittest.cc30
-rw-r--r--chromium/media/base/multi_channel_resampler.h6
-rw-r--r--chromium/media/base/multi_channel_resampler_unittest.cc7
-rw-r--r--chromium/media/base/null_video_sink.h6
-rw-r--r--chromium/media/base/null_video_sink_unittest.cc12
-rw-r--r--chromium/media/base/offloading_video_encoder.cc3
-rw-r--r--chromium/media/base/pipeline_impl.cc27
-rw-r--r--chromium/media/base/pipeline_impl.h6
-rw-r--r--chromium/media/base/pipeline_impl_unittest.cc111
-rw-r--r--chromium/media/base/reentrancy_checker.h6
-rw-r--r--chromium/media/base/renderer.h6
-rw-r--r--chromium/media/base/renderer_factory.h7
-rw-r--r--chromium/media/base/renderer_factory_selector.h6
-rw-r--r--chromium/media/base/scoped_async_trace.h5
-rw-r--r--chromium/media/base/scopedfd_helper.h1
-rw-r--r--chromium/media/base/seekable_buffer.cc3
-rw-r--r--chromium/media/base/seekable_buffer.h5
-rw-r--r--chromium/media/base/seekable_buffer_unittest.cc6
-rw-r--r--chromium/media/base/serial_runner_unittest.cc6
-rw-r--r--chromium/media/base/silent_sink_suspender.cc11
-rw-r--r--chromium/media/base/silent_sink_suspender.h6
-rw-r--r--chromium/media/base/silent_sink_suspender_unittest.cc16
-rw-r--r--chromium/media/base/simple_watch_timer.cc3
-rw-r--r--chromium/media/base/simple_watch_timer.h6
-rw-r--r--chromium/media/base/sinc_resampler.h6
-rw-r--r--chromium/media/base/sinc_resampler_unittest.cc6
-rw-r--r--chromium/media/base/status.cc82
-rw-r--r--chromium/media/base/status.h419
-rw-r--r--chromium/media/base/status.md178
-rw-r--r--chromium/media/base/status_codes.h261
-rw-r--r--chromium/media/base/status_unittest.cc119
-rw-r--r--chromium/media/base/stream_parser.h7
-rw-r--r--chromium/media/base/stream_parser_buffer.h6
-rw-r--r--chromium/media/base/supported_types.cc116
-rw-r--r--chromium/media/base/supported_types_unittest.cc166
-rw-r--r--chromium/media/base/supported_video_decoder_config_unittest.cc2
-rw-r--r--chromium/media/base/svc_scalability_mode.cc79
-rw-r--r--chromium/media/base/svc_scalability_mode.h54
-rw-r--r--chromium/media/base/test_data_util.cc8
-rw-r--r--chromium/media/base/test_data_util.h8
-rw-r--r--chromium/media/base/test_helpers.cc36
-rw-r--r--chromium/media/base/test_helpers.h28
-rw-r--r--chromium/media/base/text_ranges.h6
-rw-r--r--chromium/media/base/text_ranges_unittest.cc4
-rw-r--r--chromium/media/base/text_renderer_unittest.cc9
-rw-r--r--chromium/media/base/time_delta_interpolator.cc3
-rw-r--r--chromium/media/base/time_delta_interpolator.h6
-rw-r--r--chromium/media/base/time_delta_interpolator_unittest.cc48
-rw-r--r--chromium/media/base/tuneable.cc6
-rw-r--r--chromium/media/base/tuneable_unittest.cc12
-rw-r--r--chromium/media/base/unaligned_shared_memory.h15
-rw-r--r--chromium/media/base/use_after_free_checker.h1
-rw-r--r--chromium/media/base/user_input_monitor.h13
-rw-r--r--chromium/media/base/user_input_monitor_linux.cc6
-rw-r--r--chromium/media/base/user_input_monitor_mac.cc8
-rw-r--r--chromium/media/base/user_input_monitor_win.cc12
-rw-r--r--chromium/media/base/video_codecs.cc65
-rw-r--r--chromium/media/base/video_codecs.h31
-rw-r--r--chromium/media/base/video_color_space_unittest.cc2
-rw-r--r--chromium/media/base/video_decoder_config.cc2
-rw-r--r--chromium/media/base/video_decoder_config.h2
-rw-r--r--chromium/media/base/video_decoder_config_unittest.cc13
-rw-r--r--chromium/media/base/video_encoder.h6
-rw-r--r--chromium/media/base/video_frame.cc59
-rw-r--r--chromium/media/base/video_frame.h7
-rw-r--r--chromium/media/base/video_frame_metadata.cc3
-rw-r--r--chromium/media/base/video_frame_metadata.h13
-rw-r--r--chromium/media/base/video_frame_pool.cc2
-rw-r--r--chromium/media/base/video_frame_pool_unittest.cc12
-rw-r--r--chromium/media/base/video_frame_unittest.cc150
-rw-r--r--chromium/media/base/video_thumbnail_decoder_unittest.cc7
-rw-r--r--chromium/media/base/video_util.cc386
-rw-r--r--chromium/media/base/video_util.h21
-rw-r--r--chromium/media/base/video_util_unittest.cc43
-rw-r--r--chromium/media/base/wall_clock_time_source.cc4
-rw-r--r--chromium/media/base/wall_clock_time_source.h6
-rw-r--r--chromium/media/base/wall_clock_time_source_unittest.cc17
-rw-r--r--chromium/media/base/win/d3d11_mocks.cc3
-rw-r--r--chromium/media/base/win/d3d11_mocks.h13
-rw-r--r--chromium/media/base/win/dcomp_texture_wrapper.h31
-rw-r--r--chromium/media/base/win/dxgi_device_manager.cc2
-rw-r--r--chromium/media/base/win/mf_helpers.cc23
-rw-r--r--chromium/media/base/win/mf_helpers.h13
210 files changed, 2732 insertions, 1847 deletions
diff --git a/chromium/media/base/BUILD.gn b/chromium/media/base/BUILD.gn
index d9a305666ee..49851ba6197 100644
--- a/chromium/media/base/BUILD.gn
+++ b/chromium/media/base/BUILD.gn
@@ -295,6 +295,8 @@ source_set("base") {
"supported_types.h",
"supported_video_decoder_config.cc",
"supported_video_decoder_config.h",
+ "svc_scalability_mode.cc",
+ "svc_scalability_mode.h",
"text_cue.cc",
"text_cue.h",
"text_ranges.cc",
@@ -360,6 +362,7 @@ source_set("base") {
":video_facing",
"//media:media_buildflags",
"//media:shared_memory_support",
+ "//media/gpu:buildflags",
"//ui/gfx:color_space",
"//ui/gl",
]
@@ -539,6 +542,7 @@ static_library("test_support") {
deps = [
"//base",
"//base/test:test_support",
+ "//build:chromeos_buildflags",
"//testing/gmock",
"//ui/gfx:test_support",
"//url",
diff --git a/chromium/media/base/android/android_cdm_factory.h b/chromium/media/base/android/android_cdm_factory.h
index 3ff0ae5e2c8..862ab3662b5 100644
--- a/chromium/media/base/android/android_cdm_factory.h
+++ b/chromium/media/base/android/android_cdm_factory.h
@@ -25,6 +25,10 @@ class MEDIA_EXPORT AndroidCdmFactory final : public CdmFactory {
public:
AndroidCdmFactory(CreateFetcherCB create_fetcher_cb,
CreateStorageCB create_storage_cb);
+
+ AndroidCdmFactory(const AndroidCdmFactory&) = delete;
+ AndroidCdmFactory& operator=(const AndroidCdmFactory&) = delete;
+
~AndroidCdmFactory() override;
// CdmFactory implementation.
@@ -53,8 +57,6 @@ class MEDIA_EXPORT AndroidCdmFactory final : public CdmFactory {
base::flat_map<uint32_t, PendingCreation> pending_creations_;
base::WeakPtrFactory<AndroidCdmFactory> weak_factory_{this};
-
- DISALLOW_COPY_AND_ASSIGN(AndroidCdmFactory);
};
} // namespace media
diff --git a/chromium/media/base/android/android_overlay.h b/chromium/media/base/android/android_overlay.h
index 3f8998e651c..03d4215548f 100644
--- a/chromium/media/base/android/android_overlay.h
+++ b/chromium/media/base/android/android_overlay.h
@@ -40,6 +40,9 @@ namespace media {
// AndroidOverlay isn't technically supposed to do that.
class MEDIA_EXPORT AndroidOverlay {
public:
+ AndroidOverlay(const AndroidOverlay&) = delete;
+ AndroidOverlay& operator=(const AndroidOverlay&) = delete;
+
virtual ~AndroidOverlay();
// Schedules a relayout of this overlay. If called before the client is
@@ -73,8 +76,6 @@ class MEDIA_EXPORT AndroidOverlay {
std::list<AndroidOverlayConfig::DeletedCB> deletion_cbs_;
base::WeakPtrFactory<AndroidOverlay> weak_factory_{this};
-
- DISALLOW_COPY_AND_ASSIGN(AndroidOverlay);
};
} // namespace media
diff --git a/chromium/media/base/android/jni_hdr_metadata.h b/chromium/media/base/android/jni_hdr_metadata.h
index eb2bf5ffa92..8b94fdd6bc8 100644
--- a/chromium/media/base/android/jni_hdr_metadata.h
+++ b/chromium/media/base/android/jni_hdr_metadata.h
@@ -17,6 +17,10 @@ class JniHdrMetadata {
public:
JniHdrMetadata(const VideoColorSpace& color_space,
const gfx::HDRMetadata& hdr_metadata);
+
+ JniHdrMetadata(const JniHdrMetadata&) = delete;
+ JniHdrMetadata& operator=(const JniHdrMetadata&) = delete;
+
~JniHdrMetadata();
base::android::ScopedJavaLocalRef<jobject> obj() { return jobject_; }
@@ -62,8 +66,6 @@ class JniHdrMetadata {
const VideoColorSpace& color_space_;
const gfx::HDRMetadata& hdr_metadata_;
base::android::ScopedJavaLocalRef<jobject> jobject_;
-
- DISALLOW_COPY_AND_ASSIGN(JniHdrMetadata);
};
} // namespace media
diff --git a/chromium/media/base/android/media_codec_bridge.h b/chromium/media/base/android/media_codec_bridge.h
index c4306a194cb..3d99eebe486 100644
--- a/chromium/media/base/android/media_codec_bridge.h
+++ b/chromium/media/base/android/media_codec_bridge.h
@@ -47,6 +47,10 @@ enum MediaCodecStatus {
class MEDIA_EXPORT MediaCodecBridge {
public:
MediaCodecBridge() = default;
+
+ MediaCodecBridge(const MediaCodecBridge&) = delete;
+ MediaCodecBridge& operator=(const MediaCodecBridge&) = delete;
+
virtual ~MediaCodecBridge() = default;
// Calls MediaCodec#stop(). However, due to buggy implementations (b/8125974)
@@ -164,8 +168,6 @@ class MEDIA_EXPORT MediaCodecBridge {
// Returns the max input size we configured the codec with.
virtual size_t GetMaxInputSize() = 0;
-
- DISALLOW_COPY_AND_ASSIGN(MediaCodecBridge);
};
} // namespace media
diff --git a/chromium/media/base/android/media_codec_bridge_impl.cc b/chromium/media/base/android/media_codec_bridge_impl.cc
index 54d9ede545e..6e65daad8cb 100644
--- a/chromium/media/base/android/media_codec_bridge_impl.cc
+++ b/chromium/media/base/android/media_codec_bridge_impl.cc
@@ -73,11 +73,11 @@ bool GetCodecSpecificDataForAudio(const AudioDecoderConfig& config,
const size_t extra_data_size = config.extra_data().size();
*output_frame_has_adts_header = false;
- if (extra_data_size == 0 && config.codec() != kCodecOpus)
+ if (extra_data_size == 0 && config.codec() != AudioCodec::kOpus)
return true;
switch (config.codec()) {
- case kCodecVorbis: {
+ case AudioCodec::kVorbis: {
if (extra_data[0] != 2) {
LOG(ERROR) << "Invalid number of vorbis headers before the codec "
<< "header: " << extra_data[0];
@@ -118,7 +118,7 @@ bool GetCodecSpecificDataForAudio(const AudioDecoderConfig& config,
extra_data + extra_data_size);
break;
}
- case kCodecFLAC: {
+ case AudioCodec::kFLAC: {
// According to MediaCodec spec, CSB buffer #0 for FLAC should be:
// "fLaC", the FLAC stream marker in ASCII, followed by the STREAMINFO
// block (the mandatory metadata block), optionally followed by any number
@@ -131,13 +131,13 @@ bool GetCodecSpecificDataForAudio(const AudioDecoderConfig& config,
extra_data + extra_data_size);
break;
}
- case kCodecAAC: {
+ case AudioCodec::kAAC: {
output_csd0->assign(extra_data, extra_data + extra_data_size);
*output_frame_has_adts_header =
config.profile() != AudioCodecProfile::kXHE_AAC;
break;
}
- case kCodecOpus: {
+ case AudioCodec::kOpus: {
if (!extra_data || extra_data_size == 0 || codec_delay_ns < 0 ||
seek_preroll_ns < 0) {
LOG(ERROR) << "Invalid Opus Header";
@@ -493,7 +493,7 @@ MediaCodecStatus MediaCodecBridgeImpl::DequeueOutputBuffer(
*size = base::checked_cast<size_t>(
Java_DequeueOutputResult_numBytes(env, result));
if (presentation_time) {
- *presentation_time = base::TimeDelta::FromMicroseconds(
+ *presentation_time = base::Microseconds(
Java_DequeueOutputResult_presentationTimeMicroseconds(env, result));
}
int flags = Java_DequeueOutputResult_flags(env, result);
diff --git a/chromium/media/base/android/media_codec_bridge_impl.h b/chromium/media/base/android/media_codec_bridge_impl.h
index 5b306bae53d..41ebb412677 100644
--- a/chromium/media/base/android/media_codec_bridge_impl.h
+++ b/chromium/media/base/android/media_codec_bridge_impl.h
@@ -30,9 +30,13 @@ class VideoColorSpace;
class MEDIA_EXPORT VideoCodecConfig {
public:
VideoCodecConfig();
+
+ VideoCodecConfig(const VideoCodecConfig&) = delete;
+ VideoCodecConfig& operator=(const VideoCodecConfig&) = delete;
+
~VideoCodecConfig();
- VideoCodec codec = kUnknownVideoCodec;
+ VideoCodec codec = VideoCodec::kUnknown;
CodecType codec_type = CodecType::kAny;
@@ -62,9 +66,6 @@ class MEDIA_EXPORT VideoCodecConfig {
//
// May only be used on API level 23 and higher.
base::RepeatingClosure on_buffers_available_cb;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(VideoCodecConfig);
};
// A bridge to a Java MediaCodec.
@@ -78,7 +79,7 @@ class MEDIA_EXPORT MediaCodecBridgeImpl : public MediaCodecBridge {
// Creates and starts a new MediaCodec configured for encoding. Returns
// nullptr on failure.
static std::unique_ptr<MediaCodecBridge> CreateVideoEncoder(
- VideoCodec codec, // e.g. media::kCodecVP8
+ VideoCodec codec, // e.g. media::VideoCodec::kVP8
const gfx::Size& size, // input frame size
int bit_rate, // bits/second
int frame_rate, // frames/second
@@ -102,6 +103,9 @@ class MEDIA_EXPORT MediaCodecBridgeImpl : public MediaCodecBridge {
// creating a MediaCodec. Does nothing unless on API level 23+.
static void SetupCallbackHandlerForTesting();
+ MediaCodecBridgeImpl(const MediaCodecBridgeImpl&) = delete;
+ MediaCodecBridgeImpl& operator=(const MediaCodecBridgeImpl&) = delete;
+
~MediaCodecBridgeImpl() override;
// MediaCodecBridge implementation.
@@ -181,8 +185,6 @@ class MEDIA_EXPORT MediaCodecBridgeImpl : public MediaCodecBridge {
// The Java MediaCodecBridge instance.
base::android::ScopedJavaGlobalRef<jobject> j_bridge_;
-
- DISALLOW_COPY_AND_ASSIGN(MediaCodecBridgeImpl);
};
} // namespace media
diff --git a/chromium/media/base/android/media_codec_bridge_impl_unittest.cc b/chromium/media/base/android/media_codec_bridge_impl_unittest.cc
index 60328e5c82b..47ad1c212ca 100644
--- a/chromium/media/base/android/media_codec_bridge_impl_unittest.cc
+++ b/chromium/media/base/android/media_codec_bridge_impl_unittest.cc
@@ -131,7 +131,7 @@ static const int kPresentationTimeBase = 100;
static const int kMaxInputPts = kPresentationTimeBase + 2;
static inline const base::TimeDelta InfiniteTimeOut() {
- return base::TimeDelta::FromMicroseconds(-1);
+ return base::Microseconds(-1);
}
void DecodeMediaFrame(MediaCodecBridge* media_codec,
@@ -164,7 +164,7 @@ void DecodeMediaFrame(MediaCodecBridge* media_codec,
}
// Output time stamp should not be smaller than old timestamp.
ASSERT_TRUE(new_timestamp >= timestamp);
- input_pts += base::TimeDelta::FromMicroseconds(33000);
+ input_pts += base::Microseconds(33000);
timestamp = new_timestamp;
}
}
@@ -290,7 +290,7 @@ TEST(MediaCodecBridgeTest, CreateH264Decoder) {
SKIP_TEST_IF_MEDIA_CODEC_IS_NOT_AVAILABLE();
VideoCodecConfig config;
- config.codec = kCodecH264;
+ config.codec = VideoCodec::kH264;
config.codec_type = CodecType::kAny;
config.initial_expected_coded_size = gfx::Size(640, 480);
@@ -301,7 +301,7 @@ TEST(MediaCodecBridgeTest, DoNormal) {
SKIP_TEST_IF_MEDIA_CODEC_IS_NOT_AVAILABLE();
std::unique_ptr<media::MediaCodecBridge> media_codec =
- MediaCodecBridgeImpl::CreateAudioDecoder(NewAudioConfig(kCodecMP3),
+ MediaCodecBridgeImpl::CreateAudioDecoder(NewAudioConfig(AudioCodec::kMP3),
nullptr);
ASSERT_THAT(media_codec, NotNull());
@@ -313,11 +313,11 @@ TEST(MediaCodecBridgeTest, DoNormal) {
int64_t input_pts = kPresentationTimeBase;
media_codec->QueueInputBuffer(input_buf_index, test_mp3, sizeof(test_mp3),
- base::TimeDelta::FromMicroseconds(++input_pts));
+ base::Microseconds(++input_pts));
status = media_codec->DequeueInputBuffer(InfiniteTimeOut(), &input_buf_index);
media_codec->QueueInputBuffer(input_buf_index, test_mp3, sizeof(test_mp3),
- base::TimeDelta::FromMicroseconds(++input_pts));
+ base::Microseconds(++input_pts));
status = media_codec->DequeueInputBuffer(InfiniteTimeOut(), &input_buf_index);
media_codec->QueueEOS(input_buf_index);
@@ -336,7 +336,6 @@ TEST(MediaCodecBridgeTest, DoNormal) {
switch (status) {
case MEDIA_CODEC_TRY_AGAIN_LATER:
FAIL();
- return;
case MEDIA_CODEC_OUTPUT_FORMAT_CHANGED:
continue;
@@ -360,9 +359,10 @@ TEST(MediaCodecBridgeTest, InvalidVorbisHeader) {
// The first byte of the header is not 0x02.
std::vector<uint8_t> invalid_first_byte = {{0x00, 0xff, 0xff, 0xff, 0xff}};
- ASSERT_THAT(MediaCodecBridgeImpl::CreateAudioDecoder(
- NewAudioConfig(kCodecVorbis, invalid_first_byte), nullptr),
- IsNull());
+ ASSERT_THAT(
+ MediaCodecBridgeImpl::CreateAudioDecoder(
+ NewAudioConfig(AudioCodec::kVorbis, invalid_first_byte), nullptr),
+ IsNull());
// Size of the header is too large.
size_t large_size = 8 * 1024 * 1024 + 2;
@@ -370,7 +370,7 @@ TEST(MediaCodecBridgeTest, InvalidVorbisHeader) {
large_header.front() = 0x02;
large_header.back() = 0xfe;
ASSERT_THAT(MediaCodecBridgeImpl::CreateAudioDecoder(
- NewAudioConfig(kCodecVorbis, large_header), nullptr),
+ NewAudioConfig(AudioCodec::kVorbis, large_header), nullptr),
IsNull());
}
@@ -380,16 +380,16 @@ TEST(MediaCodecBridgeTest, InvalidOpusHeader) {
std::vector<uint8_t> dummy_extra_data = {{0, 0}};
// Codec Delay is < 0.
- ASSERT_THAT(
- MediaCodecBridgeImpl::CreateAudioDecoder(
- NewAudioConfig(kCodecOpus, dummy_extra_data, base::TimeDelta(), -1),
- nullptr),
- IsNull());
+ ASSERT_THAT(MediaCodecBridgeImpl::CreateAudioDecoder(
+ NewAudioConfig(AudioCodec::kOpus, dummy_extra_data,
+ base::TimeDelta(), -1),
+ nullptr),
+ IsNull());
// Seek Preroll is < 0.
ASSERT_THAT(MediaCodecBridgeImpl::CreateAudioDecoder(
- NewAudioConfig(kCodecOpus, dummy_extra_data,
- base::TimeDelta::FromMicroseconds(-1)),
+ NewAudioConfig(AudioCodec::kOpus, dummy_extra_data,
+ base::Microseconds(-1)),
nullptr),
IsNull());
}
@@ -401,7 +401,7 @@ TEST(MediaCodecBridgeTest, PresentationTimestampsDoNotDecrease) {
}
VideoCodecConfig config;
- config.codec = kCodecVP8;
+ config.codec = VideoCodec::kVP8;
config.codec_type = CodecType::kAny;
config.initial_expected_coded_size = gfx::Size(320, 240);
@@ -418,23 +418,21 @@ TEST(MediaCodecBridgeTest, PresentationTimestampsDoNotDecrease) {
buffer->data() + buffer->data_size());
media_codec->Flush();
DecodeMediaFrame(media_codec.get(), &chunk[0], chunk.size(),
- base::TimeDelta::FromMicroseconds(10000000),
- base::TimeDelta::FromMicroseconds(9900000));
+ base::Microseconds(10000000), base::Microseconds(9900000));
// Simulate a seek to 5 seconds.
media_codec->Flush();
DecodeMediaFrame(media_codec.get(), &chunk[0], chunk.size(),
- base::TimeDelta::FromMicroseconds(5000000),
- base::TimeDelta::FromMicroseconds(4900000));
+ base::Microseconds(5000000), base::Microseconds(4900000));
}
TEST(MediaCodecBridgeTest, CreateUnsupportedCodec) {
EXPECT_THAT(MediaCodecBridgeImpl::CreateAudioDecoder(
- NewAudioConfig(kUnknownAudioCodec), nullptr),
+ NewAudioConfig(AudioCodec::kUnknown), nullptr),
IsNull());
VideoCodecConfig config;
- config.codec = kUnknownVideoCodec;
+ config.codec = VideoCodec::kUnknown;
config.codec_type = CodecType::kAny;
config.initial_expected_coded_size = gfx::Size(320, 240);
EXPECT_THAT(MediaCodecBridgeImpl::CreateVideoDecoder(config), IsNull());
@@ -465,7 +463,7 @@ TEST(MediaCodecBridgeTest, H264VideoEncodeAndValidate) {
std::unique_ptr<MediaCodecBridge> media_codec(
MediaCodecBridgeImpl::CreateVideoEncoder(
- kCodecH264, gfx::Size(width, height), bit_rate, frame_rate,
+ VideoCodec::kH264, gfx::Size(width, height), bit_rate, frame_rate,
i_frame_interval, color_format));
ASSERT_THAT(media_codec, NotNull());
@@ -493,8 +491,8 @@ TEST(MediaCodecBridgeTest, H264VideoEncodeAndValidate) {
// Src_file contains 1 frames. Encode it 3 times.
for (int frame = 0; frame < num_frames && frame < 3; frame++) {
- input_timestamp += base::TimeDelta::FromMicroseconds(
- base::Time::kMicrosecondsPerSecond / frame_rate);
+ input_timestamp +=
+ base::Microseconds(base::Time::kMicrosecondsPerSecond / frame_rate);
EncodeMediaFrame(media_codec.get(), frame_data.get(), frame_size, width,
height, input_timestamp);
}
@@ -503,8 +501,8 @@ TEST(MediaCodecBridgeTest, H264VideoEncodeAndValidate) {
// also contain SPS/PPS NALUs.
media_codec->RequestKeyFrameSoon();
for (int frame = 0; frame < num_frames && frame < 3; frame++) {
- input_timestamp += base::TimeDelta::FromMicroseconds(
- base::Time::kMicrosecondsPerSecond / frame_rate);
+ input_timestamp +=
+ base::Microseconds(base::Time::kMicrosecondsPerSecond / frame_rate);
EncodeMediaFrame(media_codec.get(), frame_data.get(), frame_size, width,
height, input_timestamp);
}
diff --git a/chromium/media/base/android/media_codec_loop.cc b/chromium/media/base/android/media_codec_loop.cc
index 57227366eff..7e09e387173 100644
--- a/chromium/media/base/android/media_codec_loop.cc
+++ b/chromium/media/base/android/media_codec_loop.cc
@@ -15,10 +15,9 @@
namespace media {
namespace {
-constexpr base::TimeDelta kDecodePollDelay =
- base::TimeDelta::FromMilliseconds(10);
-constexpr base::TimeDelta kNoWaitTimeout = base::TimeDelta::FromMicroseconds(0);
-constexpr base::TimeDelta kIdleTimerTimeout = base::TimeDelta::FromSeconds(1);
+constexpr base::TimeDelta kDecodePollDelay = base::Milliseconds(10);
+constexpr base::TimeDelta kNoWaitTimeout = base::Microseconds(0);
+constexpr base::TimeDelta kIdleTimerTimeout = base::Seconds(1);
} // namespace
diff --git a/chromium/media/base/android/media_codec_loop_unittest.cc b/chromium/media/base/android/media_codec_loop_unittest.cc
index f3ac9638026..c7df7a22f6d 100644
--- a/chromium/media/base/android/media_codec_loop_unittest.cc
+++ b/chromium/media/base/android/media_codec_loop_unittest.cc
@@ -50,6 +50,9 @@ class MediaCodecLoopTest : public testing::Test {
: task_runner_handle_(mock_task_runner_),
client_(std::make_unique<MockMediaCodecLoopClient>()) {}
+ MediaCodecLoopTest(const MediaCodecLoopTest&) = delete;
+ MediaCodecLoopTest& operator=(const MediaCodecLoopTest&) = delete;
+
~MediaCodecLoopTest() override {}
protected:
@@ -85,7 +88,7 @@ class MediaCodecLoopTest : public testing::Test {
// TODO(liberato): assume that MCL doesn't retry for 30 seconds. Note
// that this doesn't actually wall-clock wait.
- mock_task_runner_->FastForwardBy(base::TimeDelta::FromSeconds(30));
+ mock_task_runner_->FastForwardBy(base::Seconds(30));
}
void ConstructCodecLoop(int sdk_int = base::android::SDK_VERSION_LOLLIPOP) {
@@ -139,7 +142,7 @@ class MediaCodecLoopTest : public testing::Test {
MediaCodecLoop::InputData data;
data.memory = reinterpret_cast<const uint8_t*>("big buck bunny");
data.length = 14;
- data.presentation_time = base::TimeDelta::FromSeconds(1);
+ data.presentation_time = base::Seconds(1);
return data;
}
@@ -147,7 +150,7 @@ class MediaCodecLoopTest : public testing::Test {
int index = 1;
size_t offset = 0;
size_t size = 1024;
- base::TimeDelta pts = base::TimeDelta::FromSeconds(1);
+ base::TimeDelta pts = base::Seconds(1);
bool eos = false;
bool key_frame = true;
};
@@ -191,8 +194,6 @@ class MediaCodecLoopTest : public testing::Test {
std::unique_ptr<MediaCodecLoop> codec_loop_;
std::unique_ptr<MockMediaCodecLoopClient> client_;
-
- DISALLOW_COPY_AND_ASSIGN(MediaCodecLoopTest);
};
TEST_F(MediaCodecLoopTest, TestConstructionWithNullCodec) {
@@ -403,7 +404,7 @@ TEST_F(MediaCodecLoopTest, TestSeveralPendingIOBuffers) {
OutputBuffer buffer;
buffer.index = i;
buffer.size += i;
- buffer.pts = base::TimeDelta::FromSeconds(i + 1);
+ buffer.pts = base::Seconds(i + 1);
ExpectDequeueOutputBuffer(buffer);
ExpectOnDecodedFrame(buffer);
}
diff --git a/chromium/media/base/android/media_codec_util.cc b/chromium/media/base/android/media_codec_util.cc
index 84e4c1be115..d9bbb10bd7b 100644
--- a/chromium/media/base/android/media_codec_util.cc
+++ b/chromium/media/base/android/media_codec_util.cc
@@ -127,19 +127,19 @@ std::string MediaCodecUtil::CodecToAndroidMimeType(AudioCodec codec) {
return kBitstreamAudioMimeType;
switch (codec) {
- case kCodecMP3:
+ case AudioCodec::kMP3:
return kMp3MimeType;
- case kCodecVorbis:
+ case AudioCodec::kVorbis:
return kVorbisMimeType;
- case kCodecFLAC:
+ case AudioCodec::kFLAC:
return kFLACMimeType;
- case kCodecOpus:
+ case AudioCodec::kOpus:
return kOpusMimeType;
- case kCodecAAC:
+ case AudioCodec::kAAC:
return kAacMimeType;
- case kCodecAC3:
+ case AudioCodec::kAC3:
return kAc3MimeType;
- case kCodecEAC3:
+ case AudioCodec::kEAC3:
return kEac3MimeType;
default:
return std::string();
@@ -149,17 +149,17 @@ std::string MediaCodecUtil::CodecToAndroidMimeType(AudioCodec codec) {
// static
std::string MediaCodecUtil::CodecToAndroidMimeType(VideoCodec codec) {
switch (codec) {
- case kCodecH264:
+ case VideoCodec::kH264:
return kAvcMimeType;
- case kCodecHEVC:
+ case VideoCodec::kHEVC:
return kHevcMimeType;
- case kCodecVP8:
+ case VideoCodec::kVP8:
return kVp8MimeType;
- case kCodecVP9:
+ case VideoCodec::kVP9:
return kVp9MimeType;
- case kCodecDolbyVision:
+ case VideoCodec::kDolbyVision:
return kDolbyVisionMimeType;
- case kCodecAV1:
+ case VideoCodec::kAV1:
return kAv1MimeType;
default:
return std::string();
@@ -309,7 +309,7 @@ bool MediaCodecUtil::IsSetOutputSurfaceSupported() {
// static
bool MediaCodecUtil::IsPassthroughAudioFormat(AudioCodec codec) {
- return codec == kCodecAC3 || codec == kCodecEAC3;
+ return codec == AudioCodec::kAC3 || codec == AudioCodec::kEAC3;
}
// static
@@ -376,7 +376,7 @@ bool MediaCodecUtil::IsKnownUnaccelerated(VideoCodec codec,
// MediaTek hardware vp8 is known slower than the software implementation.
if (base::StartsWith(codec_name, "OMX.MTK.", base::CompareCase::SENSITIVE)) {
- if (codec == kCodecVP8) {
+ if (codec == VideoCodec::kVP8) {
// We may still reject VP8 hardware decoding later on certain chipsets,
// see isDecoderSupportedForDevice(). We don't have the the chipset ID
// here to check now though.
diff --git a/chromium/media/base/android/media_codec_util_unittest.cc b/chromium/media/base/android/media_codec_util_unittest.cc
index d496e884f39..fb8760b7f19 100644
--- a/chromium/media/base/android/media_codec_util_unittest.cc
+++ b/chromium/media/base/android/media_codec_util_unittest.cc
@@ -20,10 +20,13 @@ using base::android::SDK_VERSION_NOUGAT_MR1;
class MediaCodecUtilTest : public testing::Test {
public:
MediaCodecUtilTest() {}
+
+ MediaCodecUtilTest(const MediaCodecUtilTest&) = delete;
+ MediaCodecUtilTest& operator=(const MediaCodecUtilTest&) = delete;
+
~MediaCodecUtilTest() override {}
public:
- DISALLOW_COPY_AND_ASSIGN(MediaCodecUtilTest);
};
TEST_F(MediaCodecUtilTest, TestCodecAvailableIfNewerVersion) {
diff --git a/chromium/media/base/android/media_crypto_context.h b/chromium/media/base/android/media_crypto_context.h
index bfeb84dfde5..c15ddfe3ae9 100644
--- a/chromium/media/base/android/media_crypto_context.h
+++ b/chromium/media/base/android/media_crypto_context.h
@@ -23,6 +23,10 @@ namespace media {
class MEDIA_EXPORT MediaCryptoContext {
public:
MediaCryptoContext() = default;
+
+ MediaCryptoContext(const MediaCryptoContext&) = delete;
+ MediaCryptoContext& operator=(const MediaCryptoContext&) = delete;
+
virtual ~MediaCryptoContext() = default;
// Notification called when MediaCrypto object is ready.
@@ -38,9 +42,6 @@ class MEDIA_EXPORT MediaCryptoContext {
bool requires_secure_video_codec)>;
virtual void SetMediaCryptoReadyCB(
MediaCryptoReadyCB media_crypto_ready_cb) = 0;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MediaCryptoContext);
};
} // namespace media
diff --git a/chromium/media/base/android/media_crypto_context_impl.h b/chromium/media/base/android/media_crypto_context_impl.h
index 24ec089555e..5951fea7759 100644
--- a/chromium/media/base/android/media_crypto_context_impl.h
+++ b/chromium/media/base/android/media_crypto_context_impl.h
@@ -25,6 +25,9 @@ class MEDIA_EXPORT MediaCryptoContextImpl final : public MediaCryptoContext {
// The |media_drm_bridge| owns |this| and is guaranteed to outlive |this|.
explicit MediaCryptoContextImpl(MediaDrmBridge* media_drm_bridge);
+ MediaCryptoContextImpl(const MediaCryptoContextImpl&) = delete;
+ MediaCryptoContextImpl& operator=(const MediaCryptoContextImpl&) = delete;
+
~MediaCryptoContextImpl() override;
// MediaCryptoContext implementation.
@@ -32,8 +35,6 @@ class MEDIA_EXPORT MediaCryptoContextImpl final : public MediaCryptoContext {
private:
MediaDrmBridge* const media_drm_bridge_;
-
- DISALLOW_COPY_AND_ASSIGN(MediaCryptoContextImpl);
};
} // namespace media
diff --git a/chromium/media/base/android/media_drm_bridge_client.h b/chromium/media/base/android/media_drm_bridge_client.h
index fc083a40e50..643d0d8075f 100644
--- a/chromium/media/base/android/media_drm_bridge_client.h
+++ b/chromium/media/base/android/media_drm_bridge_client.h
@@ -39,6 +39,10 @@ class MEDIA_EXPORT MediaDrmBridgeClient {
typedef std::unordered_map<std::string, UUID> KeySystemUuidMap;
MediaDrmBridgeClient();
+
+ MediaDrmBridgeClient(const MediaDrmBridgeClient&) = delete;
+ MediaDrmBridgeClient& operator=(const MediaDrmBridgeClient&) = delete;
+
virtual ~MediaDrmBridgeClient();
// Adds extra mappings from key-system name to Android UUID into |map|.
@@ -51,8 +55,6 @@ class MEDIA_EXPORT MediaDrmBridgeClient {
private:
friend class KeySystemManager;
-
- DISALLOW_COPY_AND_ASSIGN(MediaDrmBridgeClient);
};
} // namespace media
diff --git a/chromium/media/base/android/media_drm_bridge_delegate.h b/chromium/media/base/android/media_drm_bridge_delegate.h
index d1c66b96972..f3e1064ac42 100644
--- a/chromium/media/base/android/media_drm_bridge_delegate.h
+++ b/chromium/media/base/android/media_drm_bridge_delegate.h
@@ -22,6 +22,10 @@ namespace media {
class MEDIA_EXPORT MediaDrmBridgeDelegate {
public:
MediaDrmBridgeDelegate();
+
+ MediaDrmBridgeDelegate(const MediaDrmBridgeDelegate&) = delete;
+ MediaDrmBridgeDelegate& operator=(const MediaDrmBridgeDelegate&) = delete;
+
virtual ~MediaDrmBridgeDelegate();
// Returns the UUID of the DRM scheme that this delegate applies to.
@@ -38,9 +42,6 @@ class MEDIA_EXPORT MediaDrmBridgeDelegate {
const std::vector<uint8_t>& init_data,
std::vector<uint8_t>* init_data_out,
std::vector<std::string>* optional_parameters_out);
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MediaDrmBridgeDelegate);
};
} // namespace media
diff --git a/chromium/media/base/android/media_drm_bridge_factory.h b/chromium/media/base/android/media_drm_bridge_factory.h
index 264aeb1e18b..f15876c75b3 100644
--- a/chromium/media/base/android/media_drm_bridge_factory.h
+++ b/chromium/media/base/android/media_drm_bridge_factory.h
@@ -28,6 +28,10 @@ class MEDIA_EXPORT MediaDrmBridgeFactory final : public CdmFactory {
public:
MediaDrmBridgeFactory(CreateFetcherCB create_fetcher_cb,
CreateStorageCB create_storage_cb);
+
+ MediaDrmBridgeFactory(const MediaDrmBridgeFactory&) = delete;
+ MediaDrmBridgeFactory& operator=(const MediaDrmBridgeFactory&) = delete;
+
~MediaDrmBridgeFactory() override;
// CdmFactory implementation.
@@ -72,8 +76,6 @@ class MEDIA_EXPORT MediaDrmBridgeFactory final : public CdmFactory {
scoped_refptr<MediaDrmBridge> media_drm_bridge_;
base::WeakPtrFactory<MediaDrmBridgeFactory> weak_factory_{this};
-
- DISALLOW_COPY_AND_ASSIGN(MediaDrmBridgeFactory);
};
} // namespace media
diff --git a/chromium/media/base/android/media_drm_storage_bridge.h b/chromium/media/base/android/media_drm_storage_bridge.h
index ee4edf9fc43..8787f9f6d97 100644
--- a/chromium/media/base/android/media_drm_storage_bridge.h
+++ b/chromium/media/base/android/media_drm_storage_bridge.h
@@ -30,6 +30,10 @@ class MediaDrmStorageBridge {
using InitCB = base::OnceCallback<void(bool)>;
MediaDrmStorageBridge();
+
+ MediaDrmStorageBridge(const MediaDrmStorageBridge&) = delete;
+ MediaDrmStorageBridge& operator=(const MediaDrmStorageBridge&) = delete;
+
~MediaDrmStorageBridge();
// Once storage is initialized, |init_cb| will be called and it will have a
@@ -90,8 +94,6 @@ class MediaDrmStorageBridge {
scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
base::WeakPtrFactory<MediaDrmStorageBridge> weak_factory_{this};
-
- DISALLOW_COPY_AND_ASSIGN(MediaDrmStorageBridge);
};
} // namespace media
diff --git a/chromium/media/base/android/media_player_bridge.cc b/chromium/media/base/android/media_player_bridge.cc
index 1f06c8f7e82..3e08054e50e 100644
--- a/chromium/media/base/android/media_player_bridge.cc
+++ b/chromium/media/base/android/media_player_bridge.cc
@@ -384,7 +384,7 @@ base::TimeDelta MediaPlayerBridge::GetCurrentTime() {
if (!prepared_)
return pending_seek_;
JNIEnv* env = base::android::AttachCurrentThread();
- return base::TimeDelta::FromMilliseconds(
+ return base::Milliseconds(
Java_MediaPlayerBridge_getCurrentPosition(env, j_media_player_bridge_));
}
@@ -395,7 +395,7 @@ base::TimeDelta MediaPlayerBridge::GetDuration() {
const int duration_ms =
Java_MediaPlayerBridge_getDuration(env, j_media_player_bridge_);
return duration_ms < 0 ? media::kInfiniteDuration
- : base::TimeDelta::FromMilliseconds(duration_ms);
+ : base::Milliseconds(duration_ms);
}
void MediaPlayerBridge::Release() {
@@ -477,7 +477,7 @@ void MediaPlayerBridge::OnMediaPrepared() {
// events.
if (should_seek_on_prepare_) {
SeekInternal(pending_seek_);
- pending_seek_ = base::TimeDelta::FromMilliseconds(0);
+ pending_seek_ = base::Milliseconds(0);
should_seek_on_prepare_ = false;
}
diff --git a/chromium/media/base/android/media_player_bridge.h b/chromium/media/base/android/media_player_bridge.h
index 4b1bfe2d156..701299c0a0b 100644
--- a/chromium/media/base/android/media_player_bridge.h
+++ b/chromium/media/base/android/media_player_bridge.h
@@ -85,6 +85,10 @@ class MEDIA_EXPORT MediaPlayerBridge {
Client* client,
bool allow_credentials,
bool is_hls);
+
+ MediaPlayerBridge(const MediaPlayerBridge&) = delete;
+ MediaPlayerBridge& operator=(const MediaPlayerBridge&) = delete;
+
virtual ~MediaPlayerBridge();
// Initialize this object and extract the metadata from the media.
@@ -281,8 +285,6 @@ class MEDIA_EXPORT MediaPlayerBridge {
// Weak pointer passed to `listener_` for callbacks.
// NOTE: Weak pointers must be invalidated before all other member variables.
base::WeakPtrFactory<MediaPlayerBridge> weak_factory_{this};
-
- DISALLOW_COPY_AND_ASSIGN(MediaPlayerBridge);
};
} // namespace media
diff --git a/chromium/media/base/android/media_player_bridge_unittest.cc b/chromium/media/base/android/media_player_bridge_unittest.cc
index 36cf5c8297f..2fc4439db26 100644
--- a/chromium/media/base/android/media_player_bridge_unittest.cc
+++ b/chromium/media/base/android/media_player_bridge_unittest.cc
@@ -63,7 +63,7 @@ class MediaPlayerBridgeTest : public testing::Test {
};
TEST_F(MediaPlayerBridgeTest, Client_OnMediaMetadataChanged) {
- const base::TimeDelta kDuration = base::TimeDelta::FromSeconds(20);
+ const base::TimeDelta kDuration = base::Seconds(20);
EXPECT_CALL(client_, OnMediaDurationChanged(kDuration));
diff --git a/chromium/media/base/android/media_player_listener.h b/chromium/media/base/android/media_player_listener.h
index 8c7c5ed42a2..820473b856c 100644
--- a/chromium/media/base/android/media_player_listener.h
+++ b/chromium/media/base/android/media_player_listener.h
@@ -30,6 +30,10 @@ class MediaPlayerListener {
MediaPlayerListener(
const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
base::WeakPtr<MediaPlayerBridge> media_player);
+
+ MediaPlayerListener(const MediaPlayerListener&) = delete;
+ MediaPlayerListener& operator=(const MediaPlayerListener&) = delete;
+
virtual ~MediaPlayerListener();
// Called by the Java MediaPlayerListener and mirrored to corresponding
@@ -65,8 +69,6 @@ class MediaPlayerListener {
base::WeakPtr<MediaPlayerBridge> media_player_;
base::android::ScopedJavaGlobalRef<jobject> j_media_player_listener_;
-
- DISALLOW_COPY_AND_ASSIGN(MediaPlayerListener);
};
} // namespace media
diff --git a/chromium/media/base/android/media_server_crash_listener.h b/chromium/media/base/android/media_server_crash_listener.h
index 7a19e20205e..16c9977ec68 100644
--- a/chromium/media/base/android/media_server_crash_listener.h
+++ b/chromium/media/base/android/media_server_crash_listener.h
@@ -29,6 +29,10 @@ class MediaServerCrashListener {
MediaServerCrashListener(
OnMediaServerCrashCB on_server_crash_cb,
scoped_refptr<base::SingleThreadTaskRunner> callback_task_runner);
+
+ MediaServerCrashListener(const MediaServerCrashListener&) = delete;
+ MediaServerCrashListener& operator=(const MediaServerCrashListener&) = delete;
+
~MediaServerCrashListener();
// Ensure the underlying watchdog MediaPlayer is created.
@@ -50,7 +54,6 @@ class MediaServerCrashListener {
scoped_refptr<base::SingleThreadTaskRunner> callback_task_runner_;
base::android::ScopedJavaGlobalRef<jobject> j_crash_listener_;
- DISALLOW_COPY_AND_ASSIGN(MediaServerCrashListener);
};
} // namespace media
diff --git a/chromium/media/base/android/media_service_throttler.cc b/chromium/media/base/android/media_service_throttler.cc
index d950218eebd..603e5543365 100644
--- a/chromium/media/base/android/media_service_throttler.cc
+++ b/chromium/media/base/android/media_service_throttler.cc
@@ -19,32 +19,31 @@ namespace {
// Period of inactivity after which we stop listening for MediaServer crashes.
// NOTE: Server crashes don't count as activity. Only calls to
// GetDelayForClientCreation() do.
-constexpr auto kReleaseInactivityDelay = base::TimeDelta::FromMinutes(1);
+constexpr auto kReleaseInactivityDelay = base::Minutes(1);
// Elapsed time between crashes needed to completely reset the media server
// crash count.
-constexpr auto kTimeUntilCrashReset = base::TimeDelta::FromMinutes(1);
+constexpr auto kTimeUntilCrashReset = base::Minutes(1);
// Elapsed time between schedule calls needed to completely reset the
// scheduling clock.
-constexpr auto kTimeUntilScheduleReset = base::TimeDelta::FromMinutes(1);
+constexpr auto kTimeUntilScheduleReset = base::Minutes(1);
// Rate at which client creations will be exponentially throttled based on the
// number of media server crashes.
// NOTE: Since our exponential delay formula is 2^(server crashes), 0 server
// crashes still result in this delay being added once.
-constexpr auto kBaseExponentialDelay = base::TimeDelta::FromMilliseconds(120);
+constexpr auto kBaseExponentialDelay = base::Milliseconds(120);
// Base rate at which we schedule client creations.
// The minimal delay is |kLinearThrottlingDelay| + |kBaseExponentialDelay|.
constexpr auto kLinearThrottlingDelay =
- base::TimeDelta::FromSecondsD(0.2) - kBaseExponentialDelay;
+ base::Seconds(0.2) - kBaseExponentialDelay;
// Max exponential throttling rate from media server crashes.
// The max delay will still be |kLinearThrottlingDelay| +
// |kMaxExponentialDelay|.
-constexpr auto kMaxExponentialDelay =
- base::TimeDelta::FromSeconds(3) - kLinearThrottlingDelay;
+constexpr auto kMaxExponentialDelay = base::Seconds(3) - kLinearThrottlingDelay;
// Max number of clients to schedule immediately (e.g when loading a new page).
const uint32_t kMaxBurstClients = 10;
@@ -172,8 +171,8 @@ void MediaServiceThrottler::UpdateServerCrashes() {
current_crashes_ = 0.0;
} else {
// Decay at the rate of 1 crash/minute otherwise.
- const double decay = (now - last_current_crash_update_time_) /
- base::TimeDelta::FromMinutes(1);
+ const double decay =
+ (now - last_current_crash_update_time_) / base::Minutes(1);
current_crashes_ = std::max(0.0, current_crashes_ - decay);
}
diff --git a/chromium/media/base/android/media_service_throttler_unittest.cc b/chromium/media/base/android/media_service_throttler_unittest.cc
index af3b45a367e..554142b2358 100644
--- a/chromium/media/base/android/media_service_throttler_unittest.cc
+++ b/chromium/media/base/android/media_service_throttler_unittest.cc
@@ -140,11 +140,10 @@ TEST_F(MediaServiceThrottlerTest,
// reset.
TEST_F(MediaServiceThrottlerTest, NoCrash_LongInactivity_ShouldReset) {
// Schedule two minutes' worth of clients.
- SimulateClientCreations(
- base::ClampFloor(base::TimeDelta::FromMinutes(2) / base_delay_));
+ SimulateClientCreations(base::ClampFloor(base::Minutes(2) / base_delay_));
// Advance the time so the scheduler perceived a full minute of inactivity.
- clock_.Advance(base::TimeDelta::FromSeconds(61));
+ clock_.Advance(base::Seconds(61));
// Make sure new clients are burst scheduled.
EXPECT_EQ(base::TimeDelta(), throttler_->GetDelayForClientCreation());
@@ -172,7 +171,7 @@ TEST_F(MediaServiceThrottlerTest,
SimulateClientCreations(kMaxBurstClients);
SimulateCrashes(1);
- clock_.Advance(base::TimeDelta::FromMilliseconds(1));
+ clock_.Advance(base::Milliseconds(1));
// Because we use the floor function when calculating crashes, a small time
// advance should nullify a single crash.
@@ -185,7 +184,7 @@ TEST_F(MediaServiceThrottlerTest, WithCrash_ManyCrashes_DelayShouldIncrease) {
SimulateClientCreations(kMaxBurstClients);
SimulateCrashes(2);
- clock_.Advance(base::TimeDelta::FromMilliseconds(1));
+ clock_.Advance(base::Milliseconds(1));
// The delay after crashes should be greater than the base delay.
EXPECT_LT(base_delay_, GetCurrentDelayBetweenClients());
@@ -238,7 +237,7 @@ TEST_F(MediaServiceThrottlerTest, WithCrash_NoCrashesForAMinute_ShouldReset) {
// The effective server crash count should be reset because it has been over
// a minute since the last crash.
- clock_.Advance(base::TimeDelta::FromSeconds(61));
+ clock_.Advance(base::Seconds(61));
SimulateClientCreations(kMaxBurstClients);
@@ -250,9 +249,9 @@ TEST_F(MediaServiceThrottlerTest, WithCrash_ConstantCrashes_ShouldNotReset) {
SimulateCrashes(9);
// The effective server crash count should not be reset.
- clock_.Advance(base::TimeDelta::FromSeconds(59));
+ clock_.Advance(base::Seconds(59));
SimulateCrashes(1);
- clock_.Advance(base::TimeDelta::FromSeconds(2));
+ clock_.Advance(base::Seconds(2));
SimulateClientCreations(kMaxBurstClients);
@@ -265,11 +264,10 @@ TEST_F(MediaServiceThrottlerTest, CrashListener_NoRequests_ShouldShutDown) {
// Schedule many minutes worth of clients. This is to prove that the
// MediaServerCrashListener's clean up happens after lack of requests, as
// opposed to lack of actually scheduled clients.
- SimulateClientCreations(
- base::ClampFloor(base::TimeDelta::FromMinutes(3) / base_delay_));
+ SimulateClientCreations(base::ClampFloor(base::Minutes(3) / base_delay_));
// The MediaServerCrashListener should be alive, with 1s second to spare.
- clock_.Advance(base::TimeDelta::FromSeconds(59));
+ clock_.Advance(base::Seconds(59));
test_task_runner_->RunTasks();
EXPECT_TRUE(throttler_->IsCrashListenerAliveForTesting());
@@ -278,12 +276,12 @@ TEST_F(MediaServiceThrottlerTest, CrashListener_NoRequests_ShouldShutDown) {
throttler_->GetDelayForClientCreation();
// The MediaServerCrashListener should be alive, with 58s second to spare.
- clock_.Advance(base::TimeDelta::FromSeconds(2));
+ clock_.Advance(base::Seconds(2));
test_task_runner_->RunTasks();
EXPECT_TRUE(throttler_->IsCrashListenerAliveForTesting());
// The MediaServerCrashListener should be dead.
- clock_.Advance(base::TimeDelta::FromSeconds(59));
+ clock_.Advance(base::Seconds(59));
test_task_runner_->RunTasks();
EXPECT_FALSE(throttler_->IsCrashListenerAliveForTesting());
}
@@ -295,11 +293,10 @@ TEST_F(MediaServiceThrottlerTest,
// Schedule many minutes worth of clients. This is to prove that the
// MediaServerCrashListener's clean up happens after lack of requests, as
// opposed to lack of actually scheduled clients.
- SimulateClientCreations(
- base::ClampFloor(base::TimeDelta::FromMinutes(3) / base_delay_));
+ SimulateClientCreations(base::ClampFloor(base::Minutes(3) / base_delay_));
// The MediaServerCrashListener should be alive, with 1s second to spare.
- clock_.Advance(base::TimeDelta::FromSeconds(59));
+ clock_.Advance(base::Seconds(59));
test_task_runner_->RunTasks();
EXPECT_TRUE(throttler_->IsCrashListenerAliveForTesting());
@@ -307,7 +304,7 @@ TEST_F(MediaServiceThrottlerTest,
SimulateCrashes(1);
// The MediaServerCrashListener should be dead.
- clock_.Advance(base::TimeDelta::FromSeconds(2));
+ clock_.Advance(base::Seconds(2));
test_task_runner_->RunTasks();
EXPECT_FALSE(throttler_->IsCrashListenerAliveForTesting());
}
diff --git a/chromium/media/base/android/mock_android_overlay.h b/chromium/media/base/android/mock_android_overlay.h
index 34c1f7af57b..52d1cdf934e 100644
--- a/chromium/media/base/android/mock_android_overlay.h
+++ b/chromium/media/base/android/mock_android_overlay.h
@@ -19,6 +19,10 @@ class MockAndroidOverlay : public testing::NiceMock<AndroidOverlay>,
public DestructionObservable {
public:
MockAndroidOverlay();
+
+ MockAndroidOverlay(const MockAndroidOverlay&) = delete;
+ MockAndroidOverlay& operator=(const MockAndroidOverlay&) = delete;
+
~MockAndroidOverlay() override;
MOCK_METHOD1(ScheduleLayout, void(const gfx::Rect&));
@@ -63,8 +67,6 @@ class MockAndroidOverlay : public testing::NiceMock<AndroidOverlay>,
std::unique_ptr<AndroidOverlayConfig> config_;
base::WeakPtrFactory<MockAndroidOverlay> weak_factory_{this};
-
- DISALLOW_COPY_AND_ASSIGN(MockAndroidOverlay);
};
} // namespace media
diff --git a/chromium/media/base/android/mock_media_codec_bridge.h b/chromium/media/base/android/mock_media_codec_bridge.h
index db20d7f58a3..44b7a6c41be 100644
--- a/chromium/media/base/android/mock_media_codec_bridge.h
+++ b/chromium/media/base/android/mock_media_codec_bridge.h
@@ -18,6 +18,10 @@ class MockMediaCodecBridge : public MediaCodecBridge,
public DestructionObservable {
public:
MockMediaCodecBridge();
+
+ MockMediaCodecBridge(const MockMediaCodecBridge&) = delete;
+ MockMediaCodecBridge& operator=(const MockMediaCodecBridge&) = delete;
+
~MockMediaCodecBridge() override;
// Helpers for conveniently setting expectations.
@@ -87,8 +91,6 @@ class MockMediaCodecBridge : public MediaCodecBridge,
bool is_drained_ = true;
CodecType codec_type_ = CodecType::kAny;
-
- DISALLOW_COPY_AND_ASSIGN(MockMediaCodecBridge);
};
} // namespace media
diff --git a/chromium/media/base/android/mock_media_crypto_context.h b/chromium/media/base/android/mock_media_crypto_context.h
index 1cd64809cfd..ed6e81b4b25 100644
--- a/chromium/media/base/android/mock_media_crypto_context.h
+++ b/chromium/media/base/android/mock_media_crypto_context.h
@@ -18,6 +18,10 @@ class MEDIA_EXPORT MockMediaCryptoContext
public testing::NiceMock<MediaCryptoContext> {
public:
explicit MockMediaCryptoContext(bool has_media_crypto_context);
+
+ MockMediaCryptoContext(const MockMediaCryptoContext&) = delete;
+ MockMediaCryptoContext& operator=(const MockMediaCryptoContext&) = delete;
+
~MockMediaCryptoContext() override;
// CdmContext implementation.
@@ -38,7 +42,6 @@ class MEDIA_EXPORT MockMediaCryptoContext
private:
bool has_media_crypto_context_;
- DISALLOW_COPY_AND_ASSIGN(MockMediaCryptoContext);
};
} // namespace media
diff --git a/chromium/media/base/android/test_destruction_observable.h b/chromium/media/base/android/test_destruction_observable.h
index d11b7ab9dda..c4b77bbe3b4 100644
--- a/chromium/media/base/android/test_destruction_observable.h
+++ b/chromium/media/base/android/test_destruction_observable.h
@@ -19,11 +19,14 @@ class DestructionObserver;
class DestructionObservable {
public:
DestructionObservable();
+
+ DestructionObservable(const DestructionObservable&) = delete;
+ DestructionObservable& operator=(const DestructionObservable&) = delete;
+
virtual ~DestructionObservable();
std::unique_ptr<DestructionObserver> CreateDestructionObserver();
base::ScopedClosureRunner destruction_cb;
- DISALLOW_COPY_AND_ASSIGN(DestructionObservable);
};
// DestructionObserver lets you set expectations about the destruction of an
@@ -31,6 +34,10 @@ class DestructionObservable {
class DestructionObserver {
public:
DestructionObserver(DestructionObservable* observable);
+
+ DestructionObserver(const DestructionObserver&) = delete;
+ DestructionObserver& operator=(const DestructionObserver&) = delete;
+
virtual ~DestructionObserver();
void VerifyAndClearExpectations();
@@ -58,7 +65,6 @@ class DestructionObserver {
absl::optional<bool> expect_destruction_;
base::WeakPtrFactory<DestructionObserver> weak_factory_{this};
- DISALLOW_COPY_AND_ASSIGN(DestructionObserver);
};
} // namespace media
diff --git a/chromium/media/base/audio_block_fifo.h b/chromium/media/base/audio_block_fifo.h
index a88208aca4a..fb234d4b32a 100644
--- a/chromium/media/base/audio_block_fifo.h
+++ b/chromium/media/base/audio_block_fifo.h
@@ -21,6 +21,10 @@ class MEDIA_EXPORT AudioBlockFifo {
// Creates a new AudioBlockFifo and allocates |blocks| memory, each block
// of memory can store |channels| of length |frames| data.
AudioBlockFifo(int channels, int frames, int blocks);
+
+ AudioBlockFifo(const AudioBlockFifo&) = delete;
+ AudioBlockFifo& operator=(const AudioBlockFifo&) = delete;
+
virtual ~AudioBlockFifo();
// Pushes interleaved audio data from |source| to the FIFO.
@@ -78,8 +82,6 @@ class MEDIA_EXPORT AudioBlockFifo {
// Current write position in the current written block.
int write_pos_;
-
- DISALLOW_COPY_AND_ASSIGN(AudioBlockFifo);
};
} // namespace media
diff --git a/chromium/media/base/audio_block_fifo_unittest.cc b/chromium/media/base/audio_block_fifo_unittest.cc
index cf0bb669d0a..383d8593155 100644
--- a/chromium/media/base/audio_block_fifo_unittest.cc
+++ b/chromium/media/base/audio_block_fifo_unittest.cc
@@ -15,6 +15,10 @@ namespace media {
class AudioBlockFifoTest : public testing::Test {
public:
AudioBlockFifoTest() = default;
+
+ AudioBlockFifoTest(const AudioBlockFifoTest&) = delete;
+ AudioBlockFifoTest& operator=(const AudioBlockFifoTest&) = delete;
+
~AudioBlockFifoTest() override = default;
void PushAndVerify(AudioBlockFifo* fifo,
@@ -54,9 +58,6 @@ class AudioBlockFifoTest : public testing::Test {
EXPECT_GT(bus->channel(i)[bus->frames() - 1], 0.0f);
}
}
-
- private:
- DISALLOW_COPY_AND_ASSIGN(AudioBlockFifoTest);
};
// Verify that construction works as intended.
@@ -114,7 +115,7 @@ TEST_F(AudioBlockFifoTest, PushAndConsume) {
// Consume all blocks of data.
for (int i = 1; i <= blocks; ++i) {
- const AudioBus* bus = fifo.Consume();
+ bus = fifo.Consume();
EXPECT_TRUE(channels == bus->channels());
EXPECT_TRUE(frames == bus->frames());
EXPECT_TRUE(fifo.GetUnfilledFrames() == frames * i);
@@ -132,7 +133,7 @@ TEST_F(AudioBlockFifoTest, PushAndConsume) {
// Consume all the existing filled blocks of data.
while (fifo.available_blocks()) {
- const AudioBus* bus = fifo.Consume();
+ bus = fifo.Consume();
EXPECT_TRUE(channels == bus->channels());
EXPECT_TRUE(frames == bus->frames());
}
diff --git a/chromium/media/base/audio_buffer.cc b/chromium/media/base/audio_buffer.cc
index b153acd3964..cd50f60c2bf 100644
--- a/chromium/media/base/audio_buffer.cc
+++ b/chromium/media/base/audio_buffer.cc
@@ -6,7 +6,6 @@
#include <cmath>
-#include "base/callback_helpers.h"
#include "base/logging.h"
#include "base/notreached.h"
#include "media/base/audio_bus.h"
@@ -40,8 +39,8 @@ void CopyConvertFromInterleaved(
static base::TimeDelta CalculateDuration(int frames, double sample_rate) {
DCHECK_GT(sample_rate, 0);
- return base::TimeDelta::FromMicroseconds(
- frames * base::Time::kMicrosecondsPerSecond / sample_rate);
+ return base::Microseconds(frames * base::Time::kMicrosecondsPerSecond /
+ sample_rate);
}
AudioBufferMemoryPool::AudioBufferMemoryPool() = default;
@@ -301,8 +300,7 @@ std::unique_ptr<AudioBus> AudioBuffer::WrapOrCopyToAudioBus(
// Keep |buffer| alive as long as |audio_bus|.
audio_bus->SetWrappedDataDeleter(
- base::BindOnce(base::DoNothing::Once<scoped_refptr<AudioBuffer>>(),
- std::move(buffer)));
+ base::BindOnce([](scoped_refptr<AudioBuffer>) {}, std::move(buffer)));
return audio_bus;
}
diff --git a/chromium/media/base/audio_buffer_converter_unittest.cc b/chromium/media/base/audio_buffer_converter_unittest.cc
index 64d8e450f79..a72a1703ff3 100644
--- a/chromium/media/base/audio_buffer_converter_unittest.cc
+++ b/chromium/media/base/audio_buffer_converter_unittest.cc
@@ -28,7 +28,7 @@ static scoped_refptr<AudioBuffer> MakeTestBuffer(int sample_rate,
int frames) {
return MakeAudioBuffer<uint8_t>(kSampleFormatU8, channel_layout,
channel_count, sample_rate, 0, 1, frames,
- base::TimeDelta::FromSeconds(0));
+ base::Seconds(0));
}
class AudioBufferConverterTest : public ::testing::Test {
diff --git a/chromium/media/base/audio_buffer_queue.h b/chromium/media/base/audio_buffer_queue.h
index cb709e80e53..c16993946ce 100644
--- a/chromium/media/base/audio_buffer_queue.h
+++ b/chromium/media/base/audio_buffer_queue.h
@@ -23,6 +23,10 @@ class AudioBus;
class MEDIA_EXPORT AudioBufferQueue {
public:
AudioBufferQueue();
+
+ AudioBufferQueue(const AudioBufferQueue&) = delete;
+ AudioBufferQueue& operator=(const AudioBufferQueue&) = delete;
+
~AudioBufferQueue();
// Clears the buffer queue.
@@ -77,8 +81,6 @@ class MEDIA_EXPORT AudioBufferQueue {
// Number of frames available to be read in the buffer.
int frames_;
-
- DISALLOW_COPY_AND_ASSIGN(AudioBufferQueue);
};
} // namespace media
diff --git a/chromium/media/base/audio_buffer_unittest.cc b/chromium/media/base/audio_buffer_unittest.cc
index bb4128bb01a..7a11dcf12c5 100644
--- a/chromium/media/base/audio_buffer_unittest.cc
+++ b/chromium/media/base/audio_buffer_unittest.cc
@@ -58,7 +58,7 @@ static void TrimRangeTest(SampleFormat sample_format) {
const int channels = ChannelLayoutToChannelCount(channel_layout);
const int frames = kSampleRate / 10;
const base::TimeDelta timestamp = base::TimeDelta();
- const base::TimeDelta duration = base::TimeDelta::FromMilliseconds(100);
+ const base::TimeDelta duration = base::Milliseconds(100);
scoped_refptr<AudioBuffer> buffer = MakeAudioBuffer<float>(sample_format,
channel_layout,
channels,
@@ -80,7 +80,7 @@ static void TrimRangeTest(SampleFormat sample_format) {
// Trim 10ms of frames from the middle of the buffer.
int trim_start = frames / 2;
const int trim_length = kSampleRate / 100;
- const base::TimeDelta trim_duration = base::TimeDelta::FromMilliseconds(10);
+ const base::TimeDelta trim_duration = base::Milliseconds(10);
buffer->TrimRange(trim_start, trim_start + trim_length);
EXPECT_EQ(frames - trim_length, buffer->frame_count());
EXPECT_EQ(timestamp, buffer->timestamp());
@@ -187,7 +187,7 @@ TEST(AudioBufferTest, CopyFromAudioBus) {
auto audio_bus = media::AudioBus::Create(kChannelCount, kFrameCount);
temp_buffer->ReadFrames(kFrameCount, 0, 0, audio_bus.get());
- const base::TimeDelta kTimestamp = base::TimeDelta::FromMilliseconds(123);
+ const base::TimeDelta kTimestamp = base::Milliseconds(123);
auto audio_buffer_from_bus =
media::AudioBuffer::CopyFrom(kSampleRate, kTimestamp, audio_bus.get());
@@ -219,7 +219,7 @@ TEST(AudioBufferTest, CopyBitstreamFrom) {
const uint8_t kTestData[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
22, 23, 24, 25, 26, 27, 28, 29, 30, 31};
- const base::TimeDelta kTimestamp = base::TimeDelta::FromMicroseconds(1337);
+ const base::TimeDelta kTimestamp = base::Microseconds(1337);
const uint8_t* const data[] = {kTestData};
scoped_refptr<AudioBuffer> buffer = AudioBuffer::CopyBitstreamFrom(
@@ -263,7 +263,7 @@ TEST(AudioBufferTest, FrameSize) {
const uint8_t kTestData[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
22, 23, 24, 25, 26, 27, 28, 29, 30, 31};
- const base::TimeDelta kTimestamp = base::TimeDelta::FromMicroseconds(1337);
+ const base::TimeDelta kTimestamp = base::Microseconds(1337);
const uint8_t* const data[] = {kTestData};
scoped_refptr<AudioBuffer> buffer =
@@ -548,7 +548,7 @@ TEST(AudioBufferTest, EmptyBuffer) {
channel_layout, channels, kSampleRate, frames, start_time);
EXPECT_EQ(frames, buffer->frame_count());
EXPECT_EQ(start_time, buffer->timestamp());
- EXPECT_EQ(base::TimeDelta::FromMilliseconds(10), buffer->duration());
+ EXPECT_EQ(base::Milliseconds(10), buffer->duration());
EXPECT_FALSE(buffer->end_of_stream());
// Read all frames from the buffer. All data should be 0.
@@ -567,7 +567,7 @@ TEST(AudioBufferTest, TrimEmptyBuffer) {
const int channels = ChannelLayoutToChannelCount(channel_layout);
const int frames = kSampleRate / 10;
const base::TimeDelta start_time;
- const base::TimeDelta duration = base::TimeDelta::FromMilliseconds(100);
+ const base::TimeDelta duration = base::Milliseconds(100);
scoped_refptr<AudioBuffer> buffer = AudioBuffer::CreateEmptyBuffer(
channel_layout, channels, kSampleRate, frames, start_time);
EXPECT_EQ(frames, buffer->frame_count());
@@ -583,7 +583,7 @@ TEST(AudioBufferTest, TrimEmptyBuffer) {
// Trim 10ms of frames from the middle of the buffer.
int trim_start = frames / 2;
const int trim_length = kSampleRate / 100;
- const base::TimeDelta trim_duration = base::TimeDelta::FromMilliseconds(10);
+ const base::TimeDelta trim_duration = base::Milliseconds(10);
buffer->TrimRange(trim_start, trim_start + trim_length);
EXPECT_EQ(frames - trim_length, buffer->frame_count());
EXPECT_EQ(start_time, buffer->timestamp());
@@ -598,7 +598,7 @@ TEST(AudioBufferTest, Trim) {
const int channels = ChannelLayoutToChannelCount(channel_layout);
const int frames = kSampleRate / 10;
const base::TimeDelta start_time;
- const base::TimeDelta duration = base::TimeDelta::FromMilliseconds(100);
+ const base::TimeDelta duration = base::Milliseconds(100);
scoped_refptr<AudioBuffer> buffer =
MakeAudioBuffer<float>(kSampleFormatPlanarF32,
channel_layout,
@@ -613,7 +613,7 @@ TEST(AudioBufferTest, Trim) {
EXPECT_EQ(duration, buffer->duration());
const int ten_ms_of_frames = kSampleRate / 100;
- const base::TimeDelta ten_ms = base::TimeDelta::FromMilliseconds(10);
+ const base::TimeDelta ten_ms = base::Milliseconds(10);
std::unique_ptr<AudioBus> bus = AudioBus::Create(channels, frames);
buffer->ReadFrames(buffer->frame_count(), 0, 0, bus.get());
diff --git a/chromium/media/base/audio_bus.h b/chromium/media/base/audio_bus.h
index 75792baa9b8..ce48cd79dda 100644
--- a/chromium/media/base/audio_bus.h
+++ b/chromium/media/base/audio_bus.h
@@ -182,6 +182,9 @@ class MEDIA_SHMEM_EXPORT AudioBus {
// the channels are valid.
void SwapChannels(int a, int b);
+ AudioBus(const AudioBus&) = delete;
+ AudioBus& operator=(const AudioBus&) = delete;
+
virtual ~AudioBus();
protected:
@@ -235,8 +238,6 @@ class MEDIA_SHMEM_EXPORT AudioBus {
// Run on destruction. Frees memory to the data set via SetChannelData().
// Only used with CreateWrapper().
base::OnceClosure wrapped_data_deleter_cb_;
-
- DISALLOW_COPY_AND_ASSIGN(AudioBus);
};
// Delegates to FromInterleavedPartial()
diff --git a/chromium/media/base/audio_bus_unittest.cc b/chromium/media/base/audio_bus_unittest.cc
index f6b0815f41a..7b2f328582b 100644
--- a/chromium/media/base/audio_bus_unittest.cc
+++ b/chromium/media/base/audio_bus_unittest.cc
@@ -32,6 +32,10 @@ static const int kSampleRate = 48000;
class AudioBusTest : public testing::Test {
public:
AudioBusTest() = default;
+
+ AudioBusTest(const AudioBusTest&) = delete;
+ AudioBusTest& operator=(const AudioBusTest&) = delete;
+
~AudioBusTest() override {
for (size_t i = 0; i < data_.size(); ++i)
base::AlignedFree(data_[i]);
@@ -125,8 +129,6 @@ class AudioBusTest : public testing::Test {
protected:
std::vector<float*> data_;
-
- DISALLOW_COPY_AND_ASSIGN(AudioBusTest);
};
// Verify basic Create(...) method works as advertised.
diff --git a/chromium/media/base/audio_codecs.cc b/chromium/media/base/audio_codecs.cc
index 06a9e73c295..901098149db 100644
--- a/chromium/media/base/audio_codecs.cc
+++ b/chromium/media/base/audio_codecs.cc
@@ -4,6 +4,8 @@
#include "media/base/audio_codecs.h"
+#include <ostream>
+
#include "base/strings/string_util.h"
namespace media {
@@ -11,39 +13,39 @@ namespace media {
// These names come from src/third_party/ffmpeg/libavcodec/codec_desc.c
std::string GetCodecName(AudioCodec codec) {
switch (codec) {
- case kUnknownAudioCodec:
+ case AudioCodec::kUnknown:
return "unknown";
- case kCodecAAC:
+ case AudioCodec::kAAC:
return "aac";
- case kCodecMP3:
+ case AudioCodec::kMP3:
return "mp3";
- case kCodecPCM:
- case kCodecPCM_S16BE:
- case kCodecPCM_S24BE:
+ case AudioCodec::kPCM:
+ case AudioCodec::kPCM_S16BE:
+ case AudioCodec::kPCM_S24BE:
return "pcm";
- case kCodecVorbis:
+ case AudioCodec::kVorbis:
return "vorbis";
- case kCodecFLAC:
+ case AudioCodec::kFLAC:
return "flac";
- case kCodecAMR_NB:
+ case AudioCodec::kAMR_NB:
return "amr_nb";
- case kCodecAMR_WB:
+ case AudioCodec::kAMR_WB:
return "amr_wb";
- case kCodecPCM_MULAW:
+ case AudioCodec::kPCM_MULAW:
return "pcm_mulaw";
- case kCodecGSM_MS:
+ case AudioCodec::kGSM_MS:
return "gsm_ms";
- case kCodecOpus:
+ case AudioCodec::kOpus:
return "opus";
- case kCodecPCM_ALAW:
+ case AudioCodec::kPCM_ALAW:
return "pcm_alaw";
- case kCodecEAC3:
+ case AudioCodec::kEAC3:
return "eac3";
- case kCodecALAC:
+ case AudioCodec::kALAC:
return "alac";
- case kCodecAC3:
+ case AudioCodec::kAC3:
return "ac3";
- case kCodecMpegHAudio:
+ case AudioCodec::kMpegHAudio:
return "mpeg-h-audio";
}
}
@@ -59,28 +61,32 @@ std::string GetProfileName(AudioCodecProfile profile) {
AudioCodec StringToAudioCodec(const std::string& codec_id) {
if (codec_id == "aac")
- return kCodecAAC;
+ return AudioCodec::kAAC;
if (codec_id == "ac-3" || codec_id == "mp4a.A5" || codec_id == "mp4a.a5")
- return kCodecAC3;
+ return AudioCodec::kAC3;
if (codec_id == "ec-3" || codec_id == "mp4a.A6" || codec_id == "mp4a.a6")
- return kCodecEAC3;
+ return AudioCodec::kEAC3;
if (codec_id == "mp3" || codec_id == "mp4a.69" || codec_id == "mp4a.6B")
- return kCodecMP3;
+ return AudioCodec::kMP3;
if (codec_id == "alac")
- return kCodecALAC;
+ return AudioCodec::kALAC;
if (codec_id == "flac")
- return kCodecFLAC;
+ return AudioCodec::kFLAC;
if (base::StartsWith(codec_id, "mhm1.", base::CompareCase::SENSITIVE) ||
base::StartsWith(codec_id, "mha1.", base::CompareCase::SENSITIVE)) {
- return kCodecMpegHAudio;
+ return AudioCodec::kMpegHAudio;
}
if (codec_id == "opus")
- return kCodecOpus;
+ return AudioCodec::kOpus;
if (codec_id == "vorbis")
- return kCodecVorbis;
+ return AudioCodec::kVorbis;
if (base::StartsWith(codec_id, "mp4a.40.", base::CompareCase::SENSITIVE))
- return kCodecAAC;
- return kUnknownAudioCodec;
+ return AudioCodec::kAAC;
+ return AudioCodec::kUnknown;
+}
+
+std::ostream& operator<<(std::ostream& os, const AudioCodec& codec) {
+ return os << GetCodecName(codec);
}
} // namespace media
diff --git a/chromium/media/base/audio_codecs.h b/chromium/media/base/audio_codecs.h
index 5eb5ddcb1a4..f679513a20b 100644
--- a/chromium/media/base/audio_codecs.h
+++ b/chromium/media/base/audio_codecs.h
@@ -10,36 +10,36 @@
namespace media {
-enum AudioCodec {
+enum class AudioCodec {
// These values are histogrammed over time; do not change their ordinal
// values. When deleting a codec replace it with a dummy value; when adding a
- // codec, do so at the bottom before kAudioCodecMax, and update the value of
- // kAudioCodecMax to equal the new codec.
- kUnknownAudioCodec = 0,
- kCodecAAC = 1,
- kCodecMP3 = 2,
- kCodecPCM = 3,
- kCodecVorbis = 4,
- kCodecFLAC = 5,
- kCodecAMR_NB = 6,
- kCodecAMR_WB = 7,
- kCodecPCM_MULAW = 8,
- kCodecGSM_MS = 9,
- kCodecPCM_S16BE = 10,
- kCodecPCM_S24BE = 11,
- kCodecOpus = 12,
- kCodecEAC3 = 13,
- kCodecPCM_ALAW = 14,
- kCodecALAC = 15,
- kCodecAC3 = 16,
- kCodecMpegHAudio = 17,
+ // codec, do so at the bottom before kMaxValue, and update the value of
+ // kMaxValue to equal the new codec.
+ kUnknown = 0,
+ kAAC = 1,
+ kMP3 = 2,
+ kPCM = 3,
+ kVorbis = 4,
+ kFLAC = 5,
+ kAMR_NB = 6,
+ kAMR_WB = 7,
+ kPCM_MULAW = 8,
+ kGSM_MS = 9,
+ kPCM_S16BE = 10,
+ kPCM_S24BE = 11,
+ kOpus = 12,
+ kEAC3 = 13,
+ kPCM_ALAW = 14,
+ kALAC = 15,
+ kAC3 = 16,
+ kMpegHAudio = 17,
// DO NOT ADD RANDOM AUDIO CODECS!
//
// The only acceptable time to add a new codec is if there is production code
// that uses said codec in the same CL.
// Must always be equal to the largest entry ever logged.
- kAudioCodecMax = kCodecMpegHAudio,
+ kMaxValue = kMpegHAudio,
};
enum class AudioCodecProfile {
@@ -55,6 +55,8 @@ enum class AudioCodecProfile {
std::string MEDIA_EXPORT GetCodecName(AudioCodec codec);
std::string MEDIA_EXPORT GetProfileName(AudioCodecProfile profile);
+MEDIA_EXPORT std::ostream& operator<<(std::ostream& os,
+ const AudioCodec& codec);
MEDIA_EXPORT AudioCodec StringToAudioCodec(const std::string& codec_id);
} // namespace media
diff --git a/chromium/media/base/audio_decoder.h b/chromium/media/base/audio_decoder.h
index 961d570e561..78853acf33e 100644
--- a/chromium/media/base/audio_decoder.h
+++ b/chromium/media/base/audio_decoder.h
@@ -42,6 +42,9 @@ class MEDIA_EXPORT AudioDecoder : public Decoder {
AudioDecoder();
+ AudioDecoder(const AudioDecoder&) = delete;
+ AudioDecoder& operator=(const AudioDecoder&) = delete;
+
// Fires any pending callbacks, stops and destroys the decoder.
// Note: Since this is a destructor, |this| will be destroyed after this call.
// Make sure the callbacks fired from this call doesn't post any task that
@@ -87,9 +90,6 @@ class MEDIA_EXPORT AudioDecoder : public Decoder {
// Returns the type of the decoder for statistics recording purposes.
virtual AudioDecoderType GetDecoderType() const = 0;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(AudioDecoder);
};
} // namespace media
diff --git a/chromium/media/base/audio_decoder_config.cc b/chromium/media/base/audio_decoder_config.cc
index 1fcbb4119aa..5bbd6f7a73c 100644
--- a/chromium/media/base/audio_decoder_config.cc
+++ b/chromium/media/base/audio_decoder_config.cc
@@ -54,7 +54,7 @@ void AudioDecoderConfig::Initialize(AudioCodec codec,
AudioDecoderConfig::~AudioDecoderConfig() = default;
bool AudioDecoderConfig::IsValidConfig() const {
- return codec_ != kUnknownAudioCodec &&
+ return codec_ != AudioCodec::kUnknown &&
channel_layout_ != CHANNEL_LAYOUT_UNSUPPORTED &&
bytes_per_channel_ > 0 &&
bytes_per_channel_ <= limits::kMaxBytesPerSample &&
@@ -78,7 +78,8 @@ bool AudioDecoderConfig::Matches(const AudioDecoderConfig& config) const {
(should_discard_decoder_delay() ==
config.should_discard_decoder_delay()) &&
(target_output_channel_layout() ==
- config.target_output_channel_layout()));
+ config.target_output_channel_layout()) &&
+ (aac_extra_data() == config.aac_extra_data()));
}
std::string AudioDecoderConfig::AsHumanReadableString() const {
@@ -98,7 +99,9 @@ std::string AudioDecoderConfig::AsHumanReadableString() const {
<< ", discard decoder delay: "
<< (should_discard_decoder_delay() ? "true" : "false")
<< ", target_output_channel_layout: "
- << ChannelLayoutToString(target_output_channel_layout());
+ << ChannelLayoutToString(target_output_channel_layout())
+ << ", has aac extra data: "
+ << (aac_extra_data().empty() ? "false" : "true");
return s.str();
}
diff --git a/chromium/media/base/audio_decoder_config.h b/chromium/media/base/audio_decoder_config.h
index 1ec4ed073b9..7be1ed8a40e 100644
--- a/chromium/media/base/audio_decoder_config.h
+++ b/chromium/media/base/audio_decoder_config.h
@@ -116,6 +116,11 @@ class MEDIA_EXPORT AudioDecoderConfig {
return target_output_channel_layout_;
}
+ void set_aac_extra_data(std::vector<uint8_t> aac_extra_data) {
+ aac_extra_data_ = std::move(aac_extra_data);
+ }
+ const std::vector<uint8_t>& aac_extra_data() const { return aac_extra_data_; }
+
private:
// WARNING: When modifying or adding any parameters, update the following:
// - AudioDecoderConfig::AsHumanReadableString()
@@ -126,7 +131,7 @@ class MEDIA_EXPORT AudioDecoderConfig {
// Mandatory parameters passed in constructor:
- AudioCodec codec_ = kUnknownAudioCodec;
+ AudioCodec codec_ = AudioCodec::kUnknown;
SampleFormat sample_format_ = kUnknownSampleFormat;
ChannelLayout channel_layout_ = CHANNEL_LAYOUT_UNSUPPORTED;
int samples_per_second_ = 0;
@@ -148,6 +153,12 @@ class MEDIA_EXPORT AudioDecoderConfig {
// Layout of the output hardware. Optionally set. See setter comments.
ChannelLayout target_output_channel_layout_ = CHANNEL_LAYOUT_NONE;
+ // This is a hack for backward compatibility. For AAC, to preserve existing
+ // behavior, we set `aac_extra_data_` on all platforms but only set
+ // `extra_data` on Android.
+ // TODO(crbug.com/1250841): Remove this after we land a long term fix.
+ std::vector<uint8_t> aac_extra_data_;
+
// Indicates if a decoder should implicitly discard decoder delay without it
// being explicitly marked in discard padding.
bool should_discard_decoder_delay_ = true;
diff --git a/chromium/media/base/audio_discard_helper_unittest.cc b/chromium/media/base/audio_discard_helper_unittest.cc
index 9300fea296c..b934b0579f7 100644
--- a/chromium/media/base/audio_discard_helper_unittest.cc
+++ b/chromium/media/base/audio_discard_helper_unittest.cc
@@ -47,24 +47,21 @@ TEST(AudioDiscardHelperTest, TimeDeltaToFrames) {
AudioDiscardHelper discard_helper(kSampleRate, 0, false);
EXPECT_EQ(0u, discard_helper.TimeDeltaToFrames(base::TimeDelta()));
- EXPECT_EQ(
- kSampleRate / 100,
- discard_helper.TimeDeltaToFrames(base::TimeDelta::FromMilliseconds(10)));
+ EXPECT_EQ(kSampleRate / 100,
+ discard_helper.TimeDeltaToFrames(base::Milliseconds(10)));
// Ensure partial frames are rounded down correctly. The equation below
// calculates a frame count with a fractional part < 0.5.
const int small_remainder =
base::Time::kMicrosecondsPerSecond * (kSampleRate - 0.9) / kSampleRate;
- EXPECT_EQ(kSampleRate - 1,
- discard_helper.TimeDeltaToFrames(
- base::TimeDelta::FromMicroseconds(small_remainder)));
+ EXPECT_EQ(kSampleRate - 1, discard_helper.TimeDeltaToFrames(
+ base::Microseconds(small_remainder)));
// Ditto, but rounded up using a fractional part > 0.5.
const int large_remainder =
base::Time::kMicrosecondsPerSecond * (kSampleRate - 0.4) / kSampleRate;
- EXPECT_EQ(kSampleRate,
- discard_helper.TimeDeltaToFrames(
- base::TimeDelta::FromMicroseconds(large_remainder)));
+ EXPECT_EQ(kSampleRate, discard_helper.TimeDeltaToFrames(
+ base::Microseconds(large_remainder)));
}
TEST(AudioDiscardHelperTest, BasicProcessBuffers) {
@@ -75,9 +72,8 @@ TEST(AudioDiscardHelperTest, BasicProcessBuffers) {
// Use an estimated duration which doesn't match the number of decoded frames
// to ensure the helper is correctly setting durations based on output frames.
- const base::TimeDelta kEstimatedDuration =
- base::TimeDelta::FromMilliseconds(9);
- const base::TimeDelta kActualDuration = base::TimeDelta::FromMilliseconds(10);
+ const base::TimeDelta kEstimatedDuration = base::Milliseconds(9);
+ const base::TimeDelta kActualDuration = base::Milliseconds(10);
const int kTestFrames = discard_helper.TimeDeltaToFrames(kActualDuration);
scoped_refptr<DecoderBuffer> encoded_buffer =
@@ -104,8 +100,8 @@ TEST(AudioDiscardHelperTest, NegativeTimestampClampsToZero) {
AudioDiscardHelper discard_helper(kSampleRate, 0, false);
ASSERT_FALSE(discard_helper.initialized());
- const base::TimeDelta kTimestamp = -base::TimeDelta::FromSeconds(1);
- const base::TimeDelta kDuration = base::TimeDelta::FromMilliseconds(10);
+ const base::TimeDelta kTimestamp = -base::Seconds(1);
+ const base::TimeDelta kDuration = base::Milliseconds(10);
const int kTestFrames = discard_helper.TimeDeltaToFrames(kDuration);
scoped_refptr<DecoderBuffer> encoded_buffer =
@@ -126,7 +122,7 @@ TEST(AudioDiscardHelperTest, ProcessBuffersWithInitialDiscard) {
ASSERT_FALSE(discard_helper.initialized());
const base::TimeDelta kTimestamp = base::TimeDelta();
- const base::TimeDelta kDuration = base::TimeDelta::FromMilliseconds(10);
+ const base::TimeDelta kDuration = base::Milliseconds(10);
const int kTestFrames = discard_helper.TimeDeltaToFrames(kDuration);
// Tell the helper we want to discard half of the initial frames.
@@ -153,7 +149,7 @@ TEST(AudioDiscardHelperTest, ProcessBuffersWithLargeInitialDiscard) {
ASSERT_FALSE(discard_helper.initialized());
const base::TimeDelta kTimestamp = base::TimeDelta();
- const base::TimeDelta kDuration = base::TimeDelta::FromMilliseconds(10);
+ const base::TimeDelta kDuration = base::Milliseconds(10);
const int kTestFrames = discard_helper.TimeDeltaToFrames(kDuration);
// Tell the helper we want to discard 1.5 buffers worth of frames.
@@ -188,7 +184,7 @@ TEST(AudioDiscardHelperTest, AllowNonMonotonicTimestamps) {
ASSERT_FALSE(discard_helper.initialized());
const base::TimeDelta kTimestamp = base::TimeDelta();
- const base::TimeDelta kDuration = base::TimeDelta::FromMilliseconds(10);
+ const base::TimeDelta kDuration = base::Milliseconds(10);
const int kTestFrames = discard_helper.TimeDeltaToFrames(kDuration);
scoped_refptr<DecoderBuffer> encoded_buffer =
@@ -216,7 +212,7 @@ TEST(AudioDiscardHelperTest, DiscardEndPadding) {
ASSERT_FALSE(discard_helper.initialized());
const base::TimeDelta kTimestamp = base::TimeDelta();
- const base::TimeDelta kDuration = base::TimeDelta::FromMilliseconds(10);
+ const base::TimeDelta kDuration = base::Milliseconds(10);
const int kTestFrames = discard_helper.TimeDeltaToFrames(kDuration);
scoped_refptr<DecoderBuffer> encoded_buffer =
@@ -240,7 +236,7 @@ TEST(AudioDiscardHelperTest, BadDiscardEndPadding) {
ASSERT_FALSE(discard_helper.initialized());
const base::TimeDelta kTimestamp = base::TimeDelta();
- const base::TimeDelta kDuration = base::TimeDelta::FromMilliseconds(10);
+ const base::TimeDelta kDuration = base::Milliseconds(10);
const int kTestFrames = discard_helper.TimeDeltaToFrames(kDuration);
scoped_refptr<DecoderBuffer> encoded_buffer =
@@ -262,7 +258,7 @@ TEST(AudioDiscardHelperTest, InitialDiscardAndDiscardEndPadding) {
ASSERT_FALSE(discard_helper.initialized());
const base::TimeDelta kTimestamp = base::TimeDelta();
- const base::TimeDelta kDuration = base::TimeDelta::FromMilliseconds(10);
+ const base::TimeDelta kDuration = base::Milliseconds(10);
const int kTestFrames = discard_helper.TimeDeltaToFrames(kDuration);
scoped_refptr<DecoderBuffer> encoded_buffer =
@@ -292,7 +288,7 @@ TEST(AudioDiscardHelperTest, InitialDiscardAndDiscardPadding) {
ASSERT_FALSE(discard_helper.initialized());
const base::TimeDelta kTimestamp = base::TimeDelta();
- const base::TimeDelta kDuration = base::TimeDelta::FromMilliseconds(10);
+ const base::TimeDelta kDuration = base::Milliseconds(10);
const int kTestFrames = discard_helper.TimeDeltaToFrames(kDuration);
scoped_refptr<DecoderBuffer> encoded_buffer =
@@ -323,7 +319,7 @@ TEST(AudioDiscardHelperTest, InitialDiscardAndDiscardPaddingAndDecoderDelay) {
discard_helper.Reset(kDecoderDelay);
const base::TimeDelta kTimestamp = base::TimeDelta();
- const base::TimeDelta kDuration = base::TimeDelta::FromMilliseconds(10);
+ const base::TimeDelta kDuration = base::Milliseconds(10);
const int kTestFrames = discard_helper.TimeDeltaToFrames(kDuration);
scoped_refptr<DecoderBuffer> encoded_buffer =
@@ -434,7 +430,7 @@ TEST(AudioDiscardHelperTest, DelayedDiscardInitialDiscardAndDiscardPadding) {
ASSERT_FALSE(discard_helper.initialized());
const base::TimeDelta kTimestamp = base::TimeDelta();
- const base::TimeDelta kDuration = base::TimeDelta::FromMilliseconds(10);
+ const base::TimeDelta kDuration = base::Milliseconds(10);
const int kTestFrames = discard_helper.TimeDeltaToFrames(kDuration);
scoped_refptr<DecoderBuffer> encoded_buffer =
@@ -470,7 +466,7 @@ TEST(AudioDiscardHelperTest, CompleteDiscard) {
ASSERT_FALSE(discard_helper.initialized());
const base::TimeDelta kTimestamp = base::TimeDelta();
- const base::TimeDelta kDuration = base::TimeDelta::FromMilliseconds(10);
+ const base::TimeDelta kDuration = base::Milliseconds(10);
const int kTestFrames = discard_helper.TimeDeltaToFrames(kDuration);
discard_helper.Reset(0);
@@ -502,7 +498,7 @@ TEST(AudioDiscardHelperTest, CompleteDiscardWithDelayedDiscard) {
ASSERT_FALSE(discard_helper.initialized());
const base::TimeDelta kTimestamp = base::TimeDelta();
- const base::TimeDelta kDuration = base::TimeDelta::FromMilliseconds(10);
+ const base::TimeDelta kDuration = base::Milliseconds(10);
const int kTestFrames = discard_helper.TimeDeltaToFrames(kDuration);
discard_helper.Reset(0);
@@ -541,7 +537,7 @@ TEST(AudioDiscardHelperTest, CompleteDiscardWithInitialDiscardDecoderDelay) {
discard_helper.Reset(kDecoderDelay);
const base::TimeDelta kTimestamp = base::TimeDelta();
- const base::TimeDelta kDuration = base::TimeDelta::FromMilliseconds(10);
+ const base::TimeDelta kDuration = base::Milliseconds(10);
const int kTestFrames = discard_helper.TimeDeltaToFrames(kDuration);
scoped_refptr<DecoderBuffer> encoded_buffer =
diff --git a/chromium/media/base/audio_fifo.h b/chromium/media/base/audio_fifo.h
index 65349f50dd7..ac1af1f5bf2 100644
--- a/chromium/media/base/audio_fifo.h
+++ b/chromium/media/base/audio_fifo.h
@@ -22,6 +22,10 @@ class MEDIA_EXPORT AudioFifo {
public:
// Creates a new AudioFifo and allocates |channels| of length |frames|.
AudioFifo(int channels, int frames);
+
+ AudioFifo(const AudioFifo&) = delete;
+ AudioFifo& operator=(const AudioFifo&) = delete;
+
virtual ~AudioFifo();
// Pushes all audio channel data from |source| to the FIFO.
@@ -60,8 +64,6 @@ class MEDIA_EXPORT AudioFifo {
// Current write position.
int write_pos_;
-
- DISALLOW_COPY_AND_ASSIGN(AudioFifo);
};
} // namespace media
diff --git a/chromium/media/base/audio_fifo_unittest.cc b/chromium/media/base/audio_fifo_unittest.cc
index 2f69e3628f2..752c87373ce 100644
--- a/chromium/media/base/audio_fifo_unittest.cc
+++ b/chromium/media/base/audio_fifo_unittest.cc
@@ -15,6 +15,10 @@ namespace media {
class AudioFifoTest : public testing::Test {
public:
AudioFifoTest() = default;
+
+ AudioFifoTest(const AudioFifoTest&) = delete;
+ AudioFifoTest& operator=(const AudioFifoTest&) = delete;
+
~AudioFifoTest() override = default;
void VerifyValue(const float data[], int size, float value) {
@@ -23,7 +27,6 @@ class AudioFifoTest : public testing::Test {
}
protected:
- DISALLOW_COPY_AND_ASSIGN(AudioFifoTest);
};
// Verify that construction works as intended.
@@ -121,7 +124,7 @@ TEST_F(AudioFifoTest, FramesInFifo) {
const int frames_in_fifo = bus2->frames();
fifo.Push(bus2.get());
EXPECT_EQ(fifo.frames(), frames_in_fifo);
- for (int n = 0; n < kMaxFrameCount; ++n) {
+ for (n = 0; n < kMaxFrameCount; ++n) {
fifo.Push(bus2.get());
fifo.Consume(bus2.get(), 0, frames_in_fifo);
EXPECT_EQ(fifo.frames(), frames_in_fifo);
diff --git a/chromium/media/base/audio_hash.h b/chromium/media/base/audio_hash.h
index 5ac1aa267b7..cc261abb228 100644
--- a/chromium/media/base/audio_hash.h
+++ b/chromium/media/base/audio_hash.h
@@ -35,6 +35,10 @@ class AudioBus;
class MEDIA_EXPORT AudioHash {
public:
AudioHash();
+
+ AudioHash(const AudioHash&) = delete;
+ AudioHash& operator=(const AudioHash&) = delete;
+
~AudioHash();
// Update current hash with the contents of the provided AudioBus.
@@ -57,8 +61,6 @@ class MEDIA_EXPORT AudioHash {
// The total number of samples processed per channel. Uses a uint32_t instead
// of size_t so overflows on 64-bit and 32-bit machines are equivalent.
uint32_t sample_count_;
-
- DISALLOW_COPY_AND_ASSIGN(AudioHash);
};
} // namespace media
diff --git a/chromium/media/base/audio_hash_unittest.cc b/chromium/media/base/audio_hash_unittest.cc
index 03383cfb3f8..a14a3eb6dc8 100644
--- a/chromium/media/base/audio_hash_unittest.cc
+++ b/chromium/media/base/audio_hash_unittest.cc
@@ -41,14 +41,15 @@ class AudioHashTest : public testing::Test {
}
}
+ AudioHashTest(const AudioHashTest&) = delete;
+ AudioHashTest& operator=(const AudioHashTest&) = delete;
+
~AudioHashTest() override = default;
protected:
std::unique_ptr<AudioBus> bus_one_;
std::unique_ptr<AudioBus> bus_two_;
FakeAudioRenderCallback fake_callback_;
-
- DISALLOW_COPY_AND_ASSIGN(AudioHashTest);
};
// Ensure the same data hashes the same.
diff --git a/chromium/media/base/audio_latency_unittest.cc b/chromium/media/base/audio_latency_unittest.cc
index aa9ac668785..d7722927fa0 100644
--- a/chromium/media/base/audio_latency_unittest.cc
+++ b/chromium/media/base/audio_latency_unittest.cc
@@ -46,63 +46,57 @@ class AudioLatencyTest : public testing::TestWithParam<AudioLatencyTestData> {
max_buffer_size
: (limits::kMaxWebAudioBufferSize / multiplier) * multiplier;
- EXPECT_EQ(platform_min_buffer_size,
- media::AudioLatency::GetExactBufferSize(
- base::TimeDelta::FromSecondsD(0.0), hardware_sample_rate,
- hardware_buffer_size, min_buffer_size, max_buffer_size,
- limits::kMaxWebAudioBufferSize));
EXPECT_EQ(
platform_min_buffer_size,
media::AudioLatency::GetExactBufferSize(
- base::TimeDelta::FromSecondsD(
- min_buffer_size / static_cast<double>(hardware_sample_rate)),
- hardware_sample_rate, hardware_buffer_size, min_buffer_size,
- max_buffer_size, limits::kMaxWebAudioBufferSize));
- EXPECT_EQ(
- multiplier * 2,
- media::AudioLatency::GetExactBufferSize(
- base::TimeDelta::FromSecondsD(
- (multiplier * 2) / static_cast<double>(hardware_sample_rate)),
- hardware_sample_rate, hardware_buffer_size, min_buffer_size,
- max_buffer_size, limits::kMaxWebAudioBufferSize));
+ base::Seconds(0.0), hardware_sample_rate, hardware_buffer_size,
+ min_buffer_size, max_buffer_size, limits::kMaxWebAudioBufferSize));
+ EXPECT_EQ(platform_min_buffer_size,
+ media::AudioLatency::GetExactBufferSize(
+ base::Seconds(min_buffer_size /
+ static_cast<double>(hardware_sample_rate)),
+ hardware_sample_rate, hardware_buffer_size, min_buffer_size,
+ max_buffer_size, limits::kMaxWebAudioBufferSize));
+ EXPECT_EQ(multiplier * 2,
+ media::AudioLatency::GetExactBufferSize(
+ base::Seconds((multiplier * 2) /
+ static_cast<double>(hardware_sample_rate)),
+ hardware_sample_rate, hardware_buffer_size, min_buffer_size,
+ max_buffer_size, limits::kMaxWebAudioBufferSize));
+ EXPECT_EQ(multiplier * 2,
+ media::AudioLatency::GetExactBufferSize(
+ base::Seconds((multiplier * 1.1) /
+ static_cast<double>(hardware_sample_rate)),
+ hardware_sample_rate, hardware_buffer_size, min_buffer_size,
+ max_buffer_size, limits::kMaxWebAudioBufferSize));
EXPECT_EQ(
- multiplier * 2,
+ platform_max_buffer_size,
media::AudioLatency::GetExactBufferSize(
- base::TimeDelta::FromSecondsD(
- (multiplier * 1.1) / static_cast<double>(hardware_sample_rate)),
- hardware_sample_rate, hardware_buffer_size, min_buffer_size,
- max_buffer_size, limits::kMaxWebAudioBufferSize));
- EXPECT_EQ(platform_max_buffer_size,
- media::AudioLatency::GetExactBufferSize(
- base::TimeDelta::FromSecondsD(10.0), hardware_sample_rate,
- hardware_buffer_size, min_buffer_size, max_buffer_size,
- limits::kMaxWebAudioBufferSize));
+ base::Seconds(10.0), hardware_sample_rate, hardware_buffer_size,
+ min_buffer_size, max_buffer_size, limits::kMaxWebAudioBufferSize));
if (max_buffer_size) {
- EXPECT_EQ(
- max_buffer_size,
- media::AudioLatency::GetExactBufferSize(
- base::TimeDelta::FromSecondsD(
- max_buffer_size / static_cast<double>(hardware_sample_rate)),
- hardware_sample_rate, hardware_buffer_size, min_buffer_size,
- max_buffer_size, limits::kMaxWebAudioBufferSize));
+ EXPECT_EQ(max_buffer_size,
+ media::AudioLatency::GetExactBufferSize(
+ base::Seconds(max_buffer_size /
+ static_cast<double>(hardware_sample_rate)),
+ hardware_sample_rate, hardware_buffer_size, min_buffer_size,
+ max_buffer_size, limits::kMaxWebAudioBufferSize));
}
#if defined(OS_WIN)
if (min_buffer_size && min_buffer_size < hardware_buffer_size) {
EXPECT_EQ(hardware_buffer_size,
media::AudioLatency::GetExactBufferSize(
- base::TimeDelta::FromSecondsD(
- (min_buffer_size * 1.1) /
- static_cast<double>(hardware_sample_rate)),
+ base::Seconds((min_buffer_size * 1.1) /
+ static_cast<double>(hardware_sample_rate)),
hardware_sample_rate, hardware_buffer_size, min_buffer_size,
max_buffer_size, limits::kMaxWebAudioBufferSize));
}
#elif defined(OS_MAC)
EXPECT_EQ(limits::kMaxWebAudioBufferSize,
media::AudioLatency::GetExactBufferSize(
- base::TimeDelta::FromSecondsD(
- (limits::kMaxAudioBufferSize * 1.1) /
- static_cast<double>(hardware_sample_rate)),
+ base::Seconds((limits::kMaxAudioBufferSize * 1.1) /
+ static_cast<double>(hardware_sample_rate)),
hardware_sample_rate, hardware_buffer_size, min_buffer_size,
max_buffer_size, limits::kMaxWebAudioBufferSize));
#endif
@@ -110,9 +104,8 @@ class AudioLatencyTest : public testing::TestWithParam<AudioLatencyTestData> {
int previous_buffer_size = 0;
for (int i = 0; i < 1000; i++) {
int buffer_size = media::AudioLatency::GetExactBufferSize(
- base::TimeDelta::FromSecondsD(i / 1000.0), hardware_sample_rate,
- hardware_buffer_size, min_buffer_size, max_buffer_size,
- limits::kMaxWebAudioBufferSize);
+ base::Seconds(i / 1000.0), hardware_sample_rate, hardware_buffer_size,
+ min_buffer_size, max_buffer_size, limits::kMaxWebAudioBufferSize);
EXPECT_GE(buffer_size, previous_buffer_size);
#if defined(OS_WIN)
EXPECT_TRUE(buffer_size == min_buffer_size ||
diff --git a/chromium/media/base/audio_parameters.cc b/chromium/media/base/audio_parameters.cc
index b3b07180107..73660aeecf1 100644
--- a/chromium/media/base/audio_parameters.cc
+++ b/chromium/media/base/audio_parameters.cc
@@ -162,7 +162,7 @@ double AudioParameters::GetMicrosecondsPerFrame() const {
}
base::TimeDelta AudioParameters::GetBufferDuration() const {
- return base::TimeDelta::FromMicroseconds(static_cast<int64_t>(
+ return base::Microseconds(static_cast<int64_t>(
frames_per_buffer_ * base::Time::kMicrosecondsPerSecond /
static_cast<float>(sample_rate_)));
}
diff --git a/chromium/media/base/audio_power_monitor.h b/chromium/media/base/audio_power_monitor.h
index d95b2836064..012879f1ecf 100644
--- a/chromium/media/base/audio_power_monitor.h
+++ b/chromium/media/base/audio_power_monitor.h
@@ -42,6 +42,9 @@ class MEDIA_EXPORT AudioPowerMonitor {
// ~63.2% of maximum given a step input signal.
AudioPowerMonitor(int sample_rate, base::TimeDelta time_constant);
+ AudioPowerMonitor(const AudioPowerMonitor&) = delete;
+ AudioPowerMonitor& operator=(const AudioPowerMonitor&) = delete;
+
~AudioPowerMonitor();
// Reset power monitor to initial state (zero power level). This should not
@@ -79,8 +82,6 @@ class MEDIA_EXPORT AudioPowerMonitor {
base::Lock reading_lock_;
float power_reading_;
bool clipped_reading_;
-
- DISALLOW_COPY_AND_ASSIGN(AudioPowerMonitor);
};
} // namespace media
diff --git a/chromium/media/base/audio_power_monitor_unittest.cc b/chromium/media/base/audio_power_monitor_unittest.cc
index 7ce16e04301..6b01f582fe0 100644
--- a/chromium/media/base/audio_power_monitor_unittest.cc
+++ b/chromium/media/base/audio_power_monitor_unittest.cc
@@ -146,9 +146,7 @@ class MeasurementObserver {
class AudioPowerMonitorTest : public ::testing::TestWithParam<TestScenario> {
public:
AudioPowerMonitorTest()
- : power_monitor_(kSampleRate,
- base::TimeDelta::FromMilliseconds(kTimeConstantMillis)) {
- }
+ : power_monitor_(kSampleRate, base::Milliseconds(kTimeConstantMillis)) {}
void FeedAndCheckExpectedPowerIsMeasured(const AudioBus& bus,
float power,
diff --git a/chromium/media/base/audio_pull_fifo.h b/chromium/media/base/audio_pull_fifo.h
index 9d9ac6f5a9d..1a58d530bb8 100644
--- a/chromium/media/base/audio_pull_fifo.h
+++ b/chromium/media/base/audio_pull_fifo.h
@@ -33,6 +33,10 @@ class MEDIA_EXPORT AudioPullFifo {
// FIFO can contain |channel| number of channels, where each channel is of
// length |frames| audio frames.
AudioPullFifo(int channels, int frames, ReadCB read_cb);
+
+ AudioPullFifo(const AudioPullFifo&) = delete;
+ AudioPullFifo& operator=(const AudioPullFifo&) = delete;
+
virtual ~AudioPullFifo();
// Consumes |frames_to_consume| audio frames from the FIFO and copies
@@ -58,8 +62,6 @@ class MEDIA_EXPORT AudioPullFifo {
// Temporary audio bus to hold the data from the producer.
std::unique_ptr<AudioBus> fifo_;
int fifo_index_;
-
- DISALLOW_COPY_AND_ASSIGN(AudioPullFifo);
};
} // namespace media
diff --git a/chromium/media/base/audio_pull_fifo_unittest.cc b/chromium/media/base/audio_pull_fifo_unittest.cc
index 358485a1831..073b433b77c 100644
--- a/chromium/media/base/audio_pull_fifo_unittest.cc
+++ b/chromium/media/base/audio_pull_fifo_unittest.cc
@@ -39,6 +39,10 @@ class AudioPullFifoTest
last_frame_delay_(-1) {
EXPECT_EQ(kMaxFramesInFifo, pull_fifo_.SizeInFrames());
}
+
+ AudioPullFifoTest(const AudioPullFifoTest&) = delete;
+ AudioPullFifoTest& operator=(const AudioPullFifoTest&) = delete;
+
virtual ~AudioPullFifoTest() = default;
void VerifyValue(const float data[], int size, float start_value) {
@@ -86,8 +90,6 @@ class AudioPullFifoTest
std::unique_ptr<AudioBus> audio_bus_;
int fill_value_;
int last_frame_delay_;
-
- DISALLOW_COPY_AND_ASSIGN(AudioPullFifoTest);
};
TEST_P(AudioPullFifoTest, Consume) {
diff --git a/chromium/media/base/audio_push_fifo.h b/chromium/media/base/audio_push_fifo.h
index fb9c615c397..d0aa4a3c27b 100644
--- a/chromium/media/base/audio_push_fifo.h
+++ b/chromium/media/base/audio_push_fifo.h
@@ -36,6 +36,9 @@ class MEDIA_EXPORT AudioPushFifo final {
// |callback|.
explicit AudioPushFifo(const OutputCallback& callback);
+ AudioPushFifo(const AudioPushFifo&) = delete;
+ AudioPushFifo& operator=(const AudioPushFifo&) = delete;
+
~AudioPushFifo();
// Returns the number of frames in each AudioBus delivered to the
@@ -69,8 +72,6 @@ class MEDIA_EXPORT AudioPushFifo final {
// Queue of frames pending for delivery.
std::unique_ptr<AudioBus> audio_queue_;
int queued_frames_;
-
- DISALLOW_COPY_AND_ASSIGN(AudioPushFifo);
};
} // namespace media
diff --git a/chromium/media/base/audio_push_fifo_unittest.cc b/chromium/media/base/audio_push_fifo_unittest.cc
index a5fc8a37885..ecbc8443254 100644
--- a/chromium/media/base/audio_push_fifo_unittest.cc
+++ b/chromium/media/base/audio_push_fifo_unittest.cc
@@ -20,6 +20,10 @@ namespace {
class AudioPushFifoTest : public testing::TestWithParam<int> {
public:
AudioPushFifoTest() = default;
+
+ AudioPushFifoTest(const AudioPushFifoTest&) = delete;
+ AudioPushFifoTest& operator=(const AudioPushFifoTest&) = delete;
+
~AudioPushFifoTest() override = default;
int output_chunk_size() const { return GetParam(); }
@@ -161,8 +165,6 @@ class AudioPushFifoTest : public testing::TestWithParam<int> {
}
uint32_t rand_seed_ = 0x7e110;
-
- DISALLOW_COPY_AND_ASSIGN(AudioPushFifoTest);
};
// Tests an atypical edge case: Push()ing one frame at a time.
diff --git a/chromium/media/base/audio_renderer.h b/chromium/media/base/audio_renderer.h
index 907d0fc7f82..6eb4fa59981 100644
--- a/chromium/media/base/audio_renderer.h
+++ b/chromium/media/base/audio_renderer.h
@@ -24,6 +24,9 @@ class MEDIA_EXPORT AudioRenderer {
public:
AudioRenderer();
+ AudioRenderer(const AudioRenderer&) = delete;
+ AudioRenderer& operator=(const AudioRenderer&) = delete;
+
// Stop all operations and fire all pending callbacks.
virtual ~AudioRenderer();
@@ -71,9 +74,6 @@ class MEDIA_EXPORT AudioRenderer {
// Sets a flag indicating whether the audio stream was initiated by autoplay.
virtual void SetAutoplayInitiated(bool autoplay_initiated) = 0;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(AudioRenderer);
};
} // namespace media
diff --git a/chromium/media/base/audio_renderer_mixer.cc b/chromium/media/base/audio_renderer_mixer.cc
index 604a9ecba91..1c4cc33111f 100644
--- a/chromium/media/base/audio_renderer_mixer.cc
+++ b/chromium/media/base/audio_renderer_mixer.cc
@@ -15,7 +15,7 @@
namespace media {
-constexpr base::TimeDelta kPauseDelay = base::TimeDelta::FromSeconds(10);
+constexpr base::TimeDelta kPauseDelay = base::Seconds(10);
AudioRendererMixer::AudioRendererMixer(const AudioParameters& output_params,
scoped_refptr<AudioRendererSink> sink)
diff --git a/chromium/media/base/audio_renderer_mixer.h b/chromium/media/base/audio_renderer_mixer.h
index cc45740f147..6b7d5852942 100644
--- a/chromium/media/base/audio_renderer_mixer.h
+++ b/chromium/media/base/audio_renderer_mixer.h
@@ -31,6 +31,10 @@ class MEDIA_EXPORT AudioRendererMixer
public:
AudioRendererMixer(const AudioParameters& output_params,
scoped_refptr<AudioRendererSink> sink);
+
+ AudioRendererMixer(const AudioRendererMixer&) = delete;
+ AudioRendererMixer& operator=(const AudioRendererMixer&) = delete;
+
~AudioRendererMixer() override;
// Add or remove a mixer input from mixing; called by AudioRendererMixerInput.
@@ -94,8 +98,6 @@ class MEDIA_EXPORT AudioRendererMixer
base::TimeDelta pause_delay_ GUARDED_BY(lock_);
base::TimeTicks last_play_time_ GUARDED_BY(lock_);
bool playing_ GUARDED_BY(lock_);
-
- DISALLOW_COPY_AND_ASSIGN(AudioRendererMixer);
};
} // namespace media
diff --git a/chromium/media/base/audio_renderer_mixer_pool.h b/chromium/media/base/audio_renderer_mixer_pool.h
index 8562d5880f0..9071f1ff8e3 100644
--- a/chromium/media/base/audio_renderer_mixer_pool.h
+++ b/chromium/media/base/audio_renderer_mixer_pool.h
@@ -24,6 +24,10 @@ class AudioRendererSink;
class MEDIA_EXPORT AudioRendererMixerPool {
public:
AudioRendererMixerPool() = default;
+
+ AudioRendererMixerPool(const AudioRendererMixerPool&) = delete;
+ AudioRendererMixerPool& operator=(const AudioRendererMixerPool&) = delete;
+
virtual ~AudioRendererMixerPool() = default;
// Obtains a pointer to mixer instance based on AudioParameters. The pointer
@@ -50,9 +54,6 @@ class MEDIA_EXPORT AudioRendererMixerPool {
virtual scoped_refptr<AudioRendererSink> GetSink(
const base::UnguessableToken& owner_token,
const std::string& device_id) = 0;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(AudioRendererMixerPool);
};
} // namespace media
diff --git a/chromium/media/base/audio_renderer_mixer_unittest.cc b/chromium/media/base/audio_renderer_mixer_unittest.cc
index bec6fd5e6cd..3e6c86b6386 100644
--- a/chromium/media/base/audio_renderer_mixer_unittest.cc
+++ b/chromium/media/base/audio_renderer_mixer_unittest.cc
@@ -479,7 +479,7 @@ TEST_P(AudioRendererMixerBehavioralTest, OnRenderErrorPausedInput) {
// Ensure the physical stream is paused after a certain amount of time with no
// inputs playing. The test will hang if the behavior is incorrect.
TEST_P(AudioRendererMixerBehavioralTest, MixerPausesStream) {
- const base::TimeDelta kPauseTime = base::TimeDelta::FromMilliseconds(500);
+ const base::TimeDelta kPauseTime = base::Milliseconds(500);
// This value can't be too low or valgrind, tsan will timeout on the bots.
const base::TimeDelta kTestTimeout = 10 * kPauseTime;
mixer_->SetPauseDelayForTesting(kPauseTime);
@@ -492,7 +492,7 @@ TEST_P(AudioRendererMixerBehavioralTest, MixerPausesStream) {
InitializeInputs(1);
// Ensure never playing the input results in a sink pause.
- const base::TimeDelta kSleepTime = base::TimeDelta::FromMilliseconds(100);
+ const base::TimeDelta kSleepTime = base::Milliseconds(100);
base::TimeTicks start_time = base::TimeTicks::Now();
while (!pause_event.IsSignaled()) {
mixer_callback_->Render(base::TimeDelta(), base::TimeTicks::Now(), 0,
diff --git a/chromium/media/base/audio_shifter.cc b/chromium/media/base/audio_shifter.cc
index 90c416168da..462fdf702fd 100644
--- a/chromium/media/base/audio_shifter.cc
+++ b/chromium/media/base/audio_shifter.cc
@@ -108,8 +108,7 @@ void AudioShifter::Push(std::unique_ptr<AudioBus> input,
(playout_time - base::TimeTicks()).InMillisecondsF());
if (!queue_.empty()) {
playout_time = input_clock_smoother_->Smooth(
- playout_time,
- base::TimeDelta::FromSecondsD(queue_.back().audio->frames() / rate_));
+ playout_time, base::Seconds(queue_.back().audio->frames() / rate_));
}
queue_.push_back(AudioQueueEntry(playout_time, std::move(input)));
while (!queue_.empty() &&
@@ -128,11 +127,9 @@ void AudioShifter::Pull(AudioBus* output,
// Add the kernel size since we incur some internal delay in resampling. All
// resamplers incur some delay, and for the SincResampler (used by
// MultiChannelResampler), this is (currently) kKernelSize / 2 frames.
- playout_time +=
- base::TimeDelta::FromSecondsD(SincResampler::kKernelSize / 2 / rate_);
+ playout_time += base::Seconds(SincResampler::kKernelSize / 2 / rate_);
playout_time = output_clock_smoother_->Smooth(
- playout_time,
- base::TimeDelta::FromSecondsD(previous_requested_samples_ / rate_));
+ playout_time, base::Seconds(previous_requested_samples_ / rate_));
previous_requested_samples_ = output->frames();
base::TimeTicks stream_time;
@@ -145,21 +142,19 @@ void AudioShifter::Pull(AudioBus* output,
stream_time = queue_.front().target_playout_time;
buffer_end_time = queue_.back().target_playout_time;
}
- stream_time += base::TimeDelta::FromSecondsD(
- (position_ - resampler_.BufferedFrames()) / rate_);
+ stream_time +=
+ base::Seconds((position_ - resampler_.BufferedFrames()) / rate_);
- if (!running_ && base::TimeDelta::FromSecondsD(output->frames() * 2 / rate_) +
- clock_accuracy_ >
- buffer_end_time - stream_time) {
+ if (!running_ &&
+ base::Seconds(output->frames() * 2 / rate_) + clock_accuracy_ >
+ buffer_end_time - stream_time) {
// We're not running right now, and we don't really have enough data
// to satisfy output reliably. Wait.
Zero(output);
return;
}
- if (playout_time <
- stream_time -
- base::TimeDelta::FromSecondsD(output->frames() / rate_ / 2) -
- (running_ ? clock_accuracy_ : base::TimeDelta())) {
+ if (playout_time < stream_time - base::Seconds(output->frames() / rate_ / 2) -
+ (running_ ? clock_accuracy_ : base::TimeDelta())) {
// |playout_time| is too far before the earliest known audio sample.
Zero(output);
return;
@@ -172,7 +167,7 @@ void AudioShifter::Pull(AudioBus* output,
// bias to avoid buffer underruns in the future.
if (bias_.is_zero()) {
bias_ = playout_time - stream_time + clock_accuracy_ +
- base::TimeDelta::FromSecondsD(output->frames() / rate_);
+ base::Seconds(output->frames() / rate_);
}
stream_time += bias_;
} else {
@@ -207,7 +202,7 @@ void AudioShifter::Pull(AudioBus* output,
double slow_ratio = steady_ratio + time_difference / adjustment_time_;
slow_ratio = base::clamp(slow_ratio, 0.9, 1.1);
const base::TimeDelta adjustment_time =
- base::TimeDelta::FromSecondsD(output->frames() / rate_);
+ base::Seconds(output->frames() / rate_);
// This is ratio we we'd need get perfect sync at the end of the
// current output audiobus.
double fast_ratio = steady_ratio + time_difference / adjustment_time;
@@ -260,7 +255,7 @@ void AudioShifter::ResamplerCallback(int frame_delay, AudioBus* destination) {
if (position_ >= static_cast<size_t>(queue_.front().audio->frames())) {
end_of_last_consumed_audiobus_ =
queue_.front().target_playout_time +
- base::TimeDelta::FromSecondsD(queue_.front().audio->frames() / rate_);
+ base::Seconds(queue_.front().audio->frames() / rate_);
position_ -= queue_.front().audio->frames();
queue_.pop_front();
}
diff --git a/chromium/media/base/audio_shifter_unittest.cc b/chromium/media/base/audio_shifter_unittest.cc
index 42a0e058380..0d651f9736e 100644
--- a/chromium/media/base/audio_shifter_unittest.cc
+++ b/chromium/media/base/audio_shifter_unittest.cc
@@ -22,18 +22,17 @@ class AudioShifterTest :
public ::testing::TestWithParam<::testing::tuple<int, int, int, bool> > {
public:
AudioShifterTest()
- : shifter_(base::TimeDelta::FromMilliseconds(2000),
- base::TimeDelta::FromMilliseconds(3),
- base::TimeDelta::FromMilliseconds(100),
+ : shifter_(base::Milliseconds(2000),
+ base::Milliseconds(3),
+ base::Milliseconds(100),
kSampleRate,
2),
- end2end_latency_(base::TimeDelta::FromMilliseconds(30)),
- playback_latency_(base::TimeDelta::FromMilliseconds(10)),
+ end2end_latency_(base::Milliseconds(30)),
+ playback_latency_(base::Milliseconds(10)),
tag_input_(false),
expect_smooth_output_(true),
input_sample_n_(0),
- output_sample_(0) {
- }
+ output_sample_(0) {}
void SetupInput(int size, base::TimeDelta rate) {
input_size_ = size;
@@ -62,12 +61,10 @@ class AudioShifterTest :
void SetUp() override {
SetupInput(
kInputPacketSize + ::testing::get<0>(GetParam()) - 1,
- base::TimeDelta::FromMicroseconds(
- 1000 + ::testing::get<1>(GetParam()) * 5 - 5));
+ base::Microseconds(1000 + ::testing::get<1>(GetParam()) * 5 - 5));
SetupOutput(
kOutputPacketSize,
- base::TimeDelta::FromMicroseconds(
- 500 + ::testing::get<2>(GetParam()) * 3 - 3));
+ base::Microseconds(500 + ::testing::get<2>(GetParam()) * 3 - 3));
if (::testing::get<3>(GetParam())) {
end2end_latency_ = -end2end_latency_;
}
@@ -89,9 +86,8 @@ class AudioShifterTest :
if (test_output_->channel(0)[j] != 0.0) {
silence = false;
if (test_output_->channel(0)[j] > 3000000.0) {
- marker_outputs_.push_back(
- now_ + playback_latency_ +
- base::TimeDelta::FromSeconds(j) / kSampleRate);
+ marker_outputs_.push_back(now_ + playback_latency_ +
+ base::Seconds(j) / kSampleRate);
} else {
// We don't expect smooth output once we insert a tag,
// or in the very beginning.
@@ -128,8 +124,8 @@ class AudioShifterTest :
if (end2end_latency_ > base::TimeDelta()) {
CHECK(!marker_outputs_.empty());
base::TimeDelta actual_offset = marker_outputs_[0] - expected_mark_time;
- EXPECT_LT(actual_offset, base::TimeDelta::FromMicroseconds(100));
- EXPECT_GT(actual_offset, base::TimeDelta::FromMicroseconds(-100));
+ EXPECT_LT(actual_offset, base::Microseconds(100));
+ EXPECT_GT(actual_offset, base::Microseconds(-100));
} else {
EXPECT_GT(marker_outputs_.size(), 0UL);
}
@@ -174,8 +170,7 @@ TEST_P(AudioShifterTest, TestSyncWithPull) {
expect_smooth_output_ = false;
Run(100);
for (int i = 0; i < 100; i++) {
- shifter_.Pull(test_output_.get(),
- now_ + base::TimeDelta::FromMilliseconds(i));
+ shifter_.Pull(test_output_.get(), now_ + base::Milliseconds(i));
}
RunAndCheckSync(1000);
EXPECT_LE(skip_outputs_.size(), 1UL);
@@ -185,12 +180,10 @@ TEST_P(AudioShifterTest, UnderOverFlow) {
expect_smooth_output_ = false;
SetupInput(
kInputPacketSize + ::testing::get<0>(GetParam()) * 10 - 10,
- base::TimeDelta::FromMicroseconds(
- 1000 + ::testing::get<1>(GetParam()) * 100 - 100));
+ base::Microseconds(1000 + ::testing::get<1>(GetParam()) * 100 - 100));
SetupOutput(
kOutputPacketSize,
- base::TimeDelta::FromMicroseconds(
- 500 + ::testing::get<2>(GetParam()) * 50 - 50));
+ base::Microseconds(500 + ::testing::get<2>(GetParam()) * 50 - 50));
// Sane output is not expected, but let's make sure we don't crash.
Run(1000);
}
diff --git a/chromium/media/base/audio_timestamp_helper.cc b/chromium/media/base/audio_timestamp_helper.cc
index ee87ed2ab45..01ec6be22ef 100644
--- a/chromium/media/base/audio_timestamp_helper.cc
+++ b/chromium/media/base/audio_timestamp_helper.cc
@@ -13,8 +13,8 @@ namespace media {
base::TimeDelta AudioTimestampHelper::FramesToTime(int64_t frames,
int samples_per_second) {
DCHECK_GT(samples_per_second, 0);
- return base::TimeDelta::FromMicroseconds(
- frames * base::Time::kMicrosecondsPerSecond / samples_per_second);
+ return base::Microseconds(frames * base::Time::kMicrosecondsPerSecond /
+ samples_per_second);
}
// static
@@ -82,7 +82,7 @@ base::TimeDelta AudioTimestampHelper::ComputeTimestamp(
DCHECK_GE(frame_count, 0);
DCHECK(base_timestamp_ != kNoTimestamp);
double frames_us = microseconds_per_frame_ * frame_count;
- return base_timestamp_ + base::TimeDelta::FromMicroseconds(frames_us);
+ return base_timestamp_ + base::Microseconds(frames_us);
}
} // namespace media
diff --git a/chromium/media/base/audio_timestamp_helper_unittest.cc b/chromium/media/base/audio_timestamp_helper_unittest.cc
index 272e9f728d1..1a70066e1fe 100644
--- a/chromium/media/base/audio_timestamp_helper_unittest.cc
+++ b/chromium/media/base/audio_timestamp_helper_unittest.cc
@@ -35,7 +35,7 @@ class AudioTimestampHelperTest : public ::testing::Test {
int64_t FramesToTarget(int target_in_microseconds) {
return helper_.GetFramesToTarget(
- base::TimeDelta::FromMicroseconds(target_in_microseconds));
+ base::Microseconds(target_in_microseconds));
}
void TestGetFramesToTargetRange(int frame_count, int start, int end) {
@@ -54,49 +54,49 @@ class AudioTimestampHelperTest : public ::testing::Test {
TEST_F(AudioTimestampHelperTest, FramesToTime) {
// Negative value.
- EXPECT_EQ(base::TimeDelta::FromSeconds(-1),
+ EXPECT_EQ(base::Seconds(-1),
AudioTimestampHelper::FramesToTime(-48000, k48kHz));
// Zero.
- EXPECT_EQ(base::TimeDelta::FromMicroseconds(0),
+ EXPECT_EQ(base::Microseconds(0),
AudioTimestampHelper::FramesToTime(0, k48kHz));
// One frame.
- EXPECT_EQ(base::TimeDelta::FromMicroseconds(20),
+ EXPECT_EQ(base::Microseconds(20),
AudioTimestampHelper::FramesToTime(1, k48kHz));
// Exact value with maximum precision of TimeDelta.
- EXPECT_EQ(base::TimeDelta::FromMicroseconds(15625),
+ EXPECT_EQ(base::Microseconds(15625),
AudioTimestampHelper::FramesToTime(750, k48kHz));
// One second.
- EXPECT_EQ(base::TimeDelta::FromSeconds(1),
+ EXPECT_EQ(base::Seconds(1),
AudioTimestampHelper::FramesToTime(48000, k48kHz));
// Argument and return value exceeding 32 bits.
- EXPECT_EQ(base::TimeDelta::FromSeconds(1000000),
+ EXPECT_EQ(base::Seconds(1000000),
AudioTimestampHelper::FramesToTime(48000000000, k48kHz));
}
TEST_F(AudioTimestampHelperTest, TimeToFrames) {
// Negative value.
- EXPECT_EQ(-48000, AudioTimestampHelper::TimeToFrames(
- base::TimeDelta::FromSeconds(-1), k48kHz));
+ EXPECT_EQ(-48000,
+ AudioTimestampHelper::TimeToFrames(base::Seconds(-1), k48kHz));
// Zero.
- EXPECT_EQ(0, AudioTimestampHelper::TimeToFrames(
- base::TimeDelta::FromMicroseconds(0), k48kHz));
+ EXPECT_EQ(0,
+ AudioTimestampHelper::TimeToFrames(base::Microseconds(0), k48kHz));
// Duration of each frame is 20.833 microseconds. The result is rounded to
// integral.
- EXPECT_EQ(0, AudioTimestampHelper::TimeToFrames(
- base::TimeDelta::FromMicroseconds(10), k48kHz));
- EXPECT_EQ(1, AudioTimestampHelper::TimeToFrames(
- base::TimeDelta::FromMicroseconds(20), k48kHz));
- EXPECT_EQ(1, AudioTimestampHelper::TimeToFrames(
- base::TimeDelta::FromMicroseconds(21), k48kHz));
+ EXPECT_EQ(0,
+ AudioTimestampHelper::TimeToFrames(base::Microseconds(10), k48kHz));
+ EXPECT_EQ(1,
+ AudioTimestampHelper::TimeToFrames(base::Microseconds(20), k48kHz));
+ EXPECT_EQ(1,
+ AudioTimestampHelper::TimeToFrames(base::Microseconds(21), k48kHz));
// Exact value with maximum precision of TimeDelta.
- EXPECT_EQ(750, AudioTimestampHelper::TimeToFrames(
- base::TimeDelta::FromMicroseconds(15625), k48kHz));
+ EXPECT_EQ(750, AudioTimestampHelper::TimeToFrames(base::Microseconds(15625),
+ k48kHz));
// One second.
- EXPECT_EQ(48000, AudioTimestampHelper::TimeToFrames(
- base::TimeDelta::FromSeconds(1), k48kHz));
+ EXPECT_EQ(48000,
+ AudioTimestampHelper::TimeToFrames(base::Seconds(1), k48kHz));
// Argument and return value exceeding 32 bits.
- EXPECT_EQ(48000000000, AudioTimestampHelper::TimeToFrames(
- base::TimeDelta::FromSeconds(1000000), k48kHz));
+ EXPECT_EQ(48000000000,
+ AudioTimestampHelper::TimeToFrames(base::Seconds(1000000), k48kHz));
}
TEST_F(AudioTimestampHelperTest, Basic) {
@@ -128,7 +128,7 @@ TEST_F(AudioTimestampHelperTest, Basic) {
TEST_F(AudioTimestampHelperTest, GetDuration) {
- helper_.SetBaseTimestamp(base::TimeDelta::FromMicroseconds(100));
+ helper_.SetBaseTimestamp(base::Microseconds(100));
int frame_count = 5;
int64_t expected_durations[] = {113, 113, 114, 113, 113, 114};
diff --git a/chromium/media/base/bit_reader.h b/chromium/media/base/bit_reader.h
index dd980ff1d99..a5e37ab8bfe 100644
--- a/chromium/media/base/bit_reader.h
+++ b/chromium/media/base/bit_reader.h
@@ -20,6 +20,10 @@ class MEDIA_EXPORT BitReader : private BitReaderCore::ByteStreamProvider {
// Initialize the reader to start reading at |data|, |size| being size
// of |data| in bytes.
BitReader(const uint8_t* data, int size);
+
+ BitReader(const BitReader&) = delete;
+ BitReader& operator=(const BitReader&) = delete;
+
~BitReader() override;
template<typename T> bool ReadBits(int num_bits, T* out) {
@@ -61,8 +65,6 @@ class MEDIA_EXPORT BitReader : private BitReaderCore::ByteStreamProvider {
int bytes_left_;
BitReaderCore bit_reader_core_;
-
- DISALLOW_COPY_AND_ASSIGN(BitReader);
};
} // namespace media
diff --git a/chromium/media/base/bit_reader_core.h b/chromium/media/base/bit_reader_core.h
index 7a9f7497ec0..9e39958585c 100644
--- a/chromium/media/base/bit_reader_core.h
+++ b/chromium/media/base/bit_reader_core.h
@@ -30,6 +30,10 @@ class MEDIA_EXPORT BitReaderCore {
// Lifetime of |byte_stream_provider| must be longer than BitReaderCore.
explicit BitReaderCore(ByteStreamProvider* byte_stream_provider);
+
+ BitReaderCore(const BitReaderCore&) = delete;
+ BitReaderCore& operator=(const BitReaderCore&) = delete;
+
~BitReaderCore();
// Read one bit from the stream and return it as a boolean in |*out|.
@@ -117,8 +121,6 @@ class MEDIA_EXPORT BitReaderCore {
// Note: bits are consumed from MSB to LSB.
int nbits_next_;
uint64_t reg_next_;
-
- DISALLOW_COPY_AND_ASSIGN(BitReaderCore);
};
} // namespace media
diff --git a/chromium/media/base/bitstream_buffer.h b/chromium/media/base/bitstream_buffer.h
index d6c2cea5161..19efcd04018 100644
--- a/chromium/media/base/bitstream_buffer.h
+++ b/chromium/media/base/bitstream_buffer.h
@@ -54,6 +54,9 @@ class MEDIA_EXPORT BitstreamBuffer {
BitstreamBuffer(BitstreamBuffer&&);
BitstreamBuffer& operator=(BitstreamBuffer&&);
+ BitstreamBuffer(const BitstreamBuffer&) = delete;
+ BitstreamBuffer& operator=(const BitstreamBuffer&) = delete;
+
~BitstreamBuffer();
// Produce an equivalent DecoderBuffer. This consumes region(), even if
@@ -130,8 +133,6 @@ class MEDIA_EXPORT BitstreamBuffer {
std::vector<SubsampleEntry> subsamples_; // clear/cypher sizes
friend struct IPC::ParamTraits<media::BitstreamBuffer>;
-
- DISALLOW_COPY_AND_ASSIGN(BitstreamBuffer);
};
} // namespace media
diff --git a/chromium/media/base/byte_queue.h b/chromium/media/base/byte_queue.h
index 23270ac7f3d..528f870a258 100644
--- a/chromium/media/base/byte_queue.h
+++ b/chromium/media/base/byte_queue.h
@@ -24,6 +24,10 @@ namespace media {
class MEDIA_EXPORT ByteQueue {
public:
ByteQueue();
+
+ ByteQueue(const ByteQueue&) = delete;
+ ByteQueue& operator=(const ByteQueue&) = delete;
+
~ByteQueue();
// Reset the queue to the empty state.
@@ -56,8 +60,6 @@ class MEDIA_EXPORT ByteQueue {
int used_ = 0;
std::unique_ptr<uint8_t[]> buffer_;
-
- DISALLOW_COPY_AND_ASSIGN(ByteQueue);
};
} // namespace media
diff --git a/chromium/media/base/callback_registry.h b/chromium/media/base/callback_registry.h
index 737eed8dc13..2089bc11a41 100644
--- a/chromium/media/base/callback_registry.h
+++ b/chromium/media/base/callback_registry.h
@@ -24,10 +24,11 @@ namespace media {
class CallbackRegistration {
public:
CallbackRegistration() = default;
- virtual ~CallbackRegistration() = default;
- private:
- DISALLOW_COPY_AND_ASSIGN(CallbackRegistration);
+ CallbackRegistration(const CallbackRegistration&) = delete;
+ CallbackRegistration& operator=(const CallbackRegistration&) = delete;
+
+ virtual ~CallbackRegistration() = default;
};
template <typename Sig>
@@ -45,6 +46,10 @@ class CallbackRegistry<void(Args...)> {
using CallbackType = base::RepeatingCallback<void(Args...)>;
CallbackRegistry() = default;
+
+ CallbackRegistry(const CallbackRegistry&) = delete;
+ CallbackRegistry& operator=(const CallbackRegistry&) = delete;
+
~CallbackRegistry() = default;
std::unique_ptr<CallbackRegistration> Register(CallbackType cb)
@@ -76,13 +81,14 @@ class CallbackRegistry<void(Args...)> {
uint32_t registration_id)
: registry_(registry), registration_id_(registration_id) {}
+ RegistrationImpl(const RegistrationImpl&) = delete;
+ RegistrationImpl& operator=(const RegistrationImpl&) = delete;
+
~RegistrationImpl() override { registry_->Unregister(registration_id_); }
private:
CallbackRegistry<void(Args...)>* registry_ = nullptr;
uint32_t registration_id_ = 0;
-
- DISALLOW_COPY_AND_ASSIGN(RegistrationImpl);
};
void Unregister(uint32_t registration_id) {
@@ -95,8 +101,6 @@ class CallbackRegistry<void(Args...)> {
base::Lock lock_;
uint32_t next_registration_id_ GUARDED_BY(lock_) = 0;
std::map<uint32_t, CallbackType> callbacks_ GUARDED_BY(lock_);
-
- DISALLOW_COPY_AND_ASSIGN(CallbackRegistry);
};
using ClosureRegistry = CallbackRegistry<void()>;
diff --git a/chromium/media/base/cdm_callback_promise.h b/chromium/media/base/cdm_callback_promise.h
index 48d51c97218..6a2fd08c61d 100644
--- a/chromium/media/base/cdm_callback_promise.h
+++ b/chromium/media/base/cdm_callback_promise.h
@@ -26,6 +26,10 @@ class MEDIA_EXPORT CdmCallbackPromise : public CdmPromiseTemplate<T...> {
public:
CdmCallbackPromise(base::OnceCallback<void(const T&...)> resolve_cb,
PromiseRejectedCB reject_cb);
+
+ CdmCallbackPromise(const CdmCallbackPromise&) = delete;
+ CdmCallbackPromise& operator=(const CdmCallbackPromise&) = delete;
+
virtual ~CdmCallbackPromise();
// CdmPromiseTemplate<T> implementation.
@@ -41,8 +45,6 @@ class MEDIA_EXPORT CdmCallbackPromise : public CdmPromiseTemplate<T...> {
base::OnceCallback<void(const T&...)> resolve_cb_;
PromiseRejectedCB reject_cb_;
-
- DISALLOW_COPY_AND_ASSIGN(CdmCallbackPromise);
};
} // namespace media
diff --git a/chromium/media/base/cdm_context.cc b/chromium/media/base/cdm_context.cc
index fc2901585bb..36cd529132c 100644
--- a/chromium/media/base/cdm_context.cc
+++ b/chromium/media/base/cdm_context.cc
@@ -3,7 +3,6 @@
// found in the LICENSE file.
#include "media/base/cdm_context.h"
-#include "build/chromeos_buildflags.h"
#include "media/base/callback_registry.h"
@@ -53,7 +52,7 @@ FuchsiaCdmContext* CdmContext::GetFuchsiaCdmContext() {
}
#endif
-#if BUILDFLAG(IS_CHROMEOS_ASH)
+#if defined(OS_CHROMEOS)
chromeos::ChromeOsCdmContext* CdmContext::GetChromeOsCdmContext() {
return nullptr;
}
diff --git a/chromium/media/base/cdm_context.h b/chromium/media/base/cdm_context.h
index 366e41d1b2c..53f93b53025 100644
--- a/chromium/media/base/cdm_context.h
+++ b/chromium/media/base/cdm_context.h
@@ -10,12 +10,11 @@
#include "base/memory/scoped_refptr.h"
#include "base/unguessable_token.h"
#include "build/build_config.h"
-#include "build/chromeos_buildflags.h"
#include "media/base/media_export.h"
#include "media/media_buildflags.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
-#if BUILDFLAG(IS_CHROMEOS_ASH)
+#if defined(OS_CHROMEOS)
namespace chromeos {
class ChromeOsCdmContext;
}
@@ -62,6 +61,9 @@ class MEDIA_EXPORT CdmContext {
// Callback to notify the occurrence of an Event.
using EventCB = base::RepeatingCallback<void(Event)>;
+ CdmContext(const CdmContext&) = delete;
+ CdmContext& operator=(const CdmContext&) = delete;
+
virtual ~CdmContext();
// Registers a callback which will be called when an event happens in the CDM.
@@ -124,7 +126,7 @@ class MEDIA_EXPORT CdmContext {
virtual FuchsiaCdmContext* GetFuchsiaCdmContext();
#endif
-#if BUILDFLAG(IS_CHROMEOS_ASH)
+#if defined(OS_CHROMEOS)
// Returns a ChromeOsCdmContext interface when the context is backed by the
// ChromeOS CdmFactoryDaemon. Otherwise return nullptr.
virtual chromeos::ChromeOsCdmContext* GetChromeOsCdmContext();
@@ -132,9 +134,6 @@ class MEDIA_EXPORT CdmContext {
protected:
CdmContext();
-
- private:
- DISALLOW_COPY_AND_ASSIGN(CdmContext);
};
// A reference holder to make sure the CdmContext is always valid as long as
diff --git a/chromium/media/base/cdm_factory.h b/chromium/media/base/cdm_factory.h
index 96fcf3a8678..1885f240664 100644
--- a/chromium/media/base/cdm_factory.h
+++ b/chromium/media/base/cdm_factory.h
@@ -28,6 +28,10 @@ struct CdmConfig;
class MEDIA_EXPORT CdmFactory {
public:
CdmFactory();
+
+ CdmFactory(const CdmFactory&) = delete;
+ CdmFactory& operator=(const CdmFactory&) = delete;
+
virtual ~CdmFactory();
// Creates a CDM for |key_system| and returns it through |cdm_created_cb|
@@ -40,9 +44,6 @@ class MEDIA_EXPORT CdmFactory {
const SessionKeysChangeCB& session_keys_change_cb,
const SessionExpirationUpdateCB& session_expiration_update_cb,
CdmCreatedCB cdm_created_cb) = 0;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(CdmFactory);
};
} // namespace media
diff --git a/chromium/media/base/cdm_promise.h b/chromium/media/base/cdm_promise.h
index 4fc35221a85..5920d624b45 100644
--- a/chromium/media/base/cdm_promise.h
+++ b/chromium/media/base/cdm_promise.h
@@ -62,6 +62,10 @@ class MEDIA_EXPORT CdmPromise {
};
CdmPromise() = default;
+
+ CdmPromise(const CdmPromise&) = delete;
+ CdmPromise& operator=(const CdmPromise&) = delete;
+
virtual ~CdmPromise() = default;
// Used to indicate that the operation failed. |exception_code| must be
@@ -75,9 +79,6 @@ class MEDIA_EXPORT CdmPromise {
// Used to determine the template type of CdmPromiseTemplate<T> so that
// saved CdmPromise objects can be cast to the correct templated version.
virtual ResolveParameterType GetResolveParameterType() const = 0;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(CdmPromise);
};
template <typename... T>
@@ -110,15 +111,14 @@ class CdmPromiseTemplate : public CdmPromise {
public:
CdmPromiseTemplate() : is_settled_(false) {}
+ CdmPromiseTemplate(const CdmPromiseTemplate&) = delete;
+ CdmPromiseTemplate& operator=(const CdmPromiseTemplate&) = delete;
+
virtual ~CdmPromiseTemplate() { DCHECK(is_settled_); }
virtual void resolve(const T&... result) = 0;
// CdmPromise implementation.
- virtual void reject(Exception exception_code,
- uint32_t system_code,
- const std::string& error_message) = 0;
-
ResolveParameterType GetResolveParameterType() const final;
protected:
@@ -146,8 +146,6 @@ class CdmPromiseTemplate : public CdmPromise {
private:
// Keep track of whether the promise has been resolved or rejected yet.
bool is_settled_;
-
- DISALLOW_COPY_AND_ASSIGN(CdmPromiseTemplate);
};
// Explicitly defining all variants of GetResolveParameterType().
diff --git a/chromium/media/base/cdm_promise_adapter.h b/chromium/media/base/cdm_promise_adapter.h
index f678df4b340..b301797bb0c 100644
--- a/chromium/media/base/cdm_promise_adapter.h
+++ b/chromium/media/base/cdm_promise_adapter.h
@@ -23,6 +23,10 @@ namespace media {
class MEDIA_EXPORT CdmPromiseAdapter {
public:
CdmPromiseAdapter();
+
+ CdmPromiseAdapter(const CdmPromiseAdapter&) = delete;
+ CdmPromiseAdapter& operator=(const CdmPromiseAdapter&) = delete;
+
~CdmPromiseAdapter();
enum : uint32_t { kInvalidPromiseId = 0 };
@@ -62,7 +66,6 @@ class MEDIA_EXPORT CdmPromiseAdapter {
PromiseMap promises_;
base::ThreadChecker thread_checker_;
- DISALLOW_COPY_AND_ASSIGN(CdmPromiseAdapter);
};
} // namespace media
diff --git a/chromium/media/base/cdm_session_tracker.h b/chromium/media/base/cdm_session_tracker.h
index 504b0e3c4d1..e7bdadad53d 100644
--- a/chromium/media/base/cdm_session_tracker.h
+++ b/chromium/media/base/cdm_session_tracker.h
@@ -19,6 +19,10 @@ namespace media {
class MEDIA_EXPORT CdmSessionTracker {
public:
CdmSessionTracker();
+
+ CdmSessionTracker(const CdmSessionTracker&) = delete;
+ CdmSessionTracker& operator=(const CdmSessionTracker&) = delete;
+
~CdmSessionTracker();
// Adds `session_id` to the list of sessions being tracked.
@@ -37,8 +41,6 @@ class MEDIA_EXPORT CdmSessionTracker {
private:
std::unordered_set<std::string> session_ids_;
-
- DISALLOW_COPY_AND_ASSIGN(CdmSessionTracker);
};
} // namespace media
diff --git a/chromium/media/base/channel_mixer.h b/chromium/media/base/channel_mixer.h
index a7ed6536bb0..20ac9454a44 100644
--- a/chromium/media/base/channel_mixer.h
+++ b/chromium/media/base/channel_mixer.h
@@ -30,6 +30,10 @@ class MEDIA_EXPORT ChannelMixer {
ChannelMixer(ChannelLayout input_layout, ChannelLayout output_layout);
ChannelMixer(const AudioParameters& input, const AudioParameters& output);
+
+ ChannelMixer(const ChannelMixer&) = delete;
+ ChannelMixer& operator=(const ChannelMixer&) = delete;
+
~ChannelMixer();
// Transforms all channels from |input| into |output| channels.
@@ -53,8 +57,6 @@ class MEDIA_EXPORT ChannelMixer {
// Optimization case for when we can simply remap the input channels to output
// channels and don't need to do a multiply-accumulate loop over |matrix_|.
bool remapping_;
-
- DISALLOW_COPY_AND_ASSIGN(ChannelMixer);
};
} // namespace media
diff --git a/chromium/media/base/channel_mixing_matrix.h b/chromium/media/base/channel_mixing_matrix.h
index 64fcdb90228..cca95a73a2a 100644
--- a/chromium/media/base/channel_mixing_matrix.h
+++ b/chromium/media/base/channel_mixing_matrix.h
@@ -20,6 +20,9 @@ class MEDIA_EXPORT ChannelMixingMatrix {
ChannelLayout output_layout,
int output_channels);
+ ChannelMixingMatrix(const ChannelMixingMatrix&) = delete;
+ ChannelMixingMatrix& operator=(const ChannelMixingMatrix&) = delete;
+
~ChannelMixingMatrix();
// Create the transformation matrix of input channels to output channels.
@@ -55,8 +58,6 @@ class MEDIA_EXPORT ChannelMixingMatrix {
// remove the channel from |unaccounted_inputs_|.
void Mix(Channels input_ch, Channels output_ch, float scale);
void MixWithoutAccounting(Channels input_ch, Channels output_ch, float scale);
-
- DISALLOW_COPY_AND_ASSIGN(ChannelMixingMatrix);
};
} // namespace media
diff --git a/chromium/media/base/data_buffer_unittest.cc b/chromium/media/base/data_buffer_unittest.cc
index 5b9e5ac42bf..e4f53040b00 100644
--- a/chromium/media/base/data_buffer_unittest.cc
+++ b/chromium/media/base/data_buffer_unittest.cc
@@ -69,8 +69,8 @@ TEST(DataBufferTest, CreateEOSBuffer) {
TEST(DataBufferTest, Timestamp) {
const base::TimeDelta kZero;
- const base::TimeDelta kTimestampA = base::TimeDelta::FromMicroseconds(1337);
- const base::TimeDelta kTimestampB = base::TimeDelta::FromMicroseconds(1234);
+ const base::TimeDelta kTimestampA = base::Microseconds(1337);
+ const base::TimeDelta kTimestampB = base::Microseconds(1234);
scoped_refptr<DataBuffer> buffer = new DataBuffer(0);
EXPECT_TRUE(buffer->timestamp() == kZero);
@@ -84,8 +84,8 @@ TEST(DataBufferTest, Timestamp) {
TEST(DataBufferTest, Duration) {
const base::TimeDelta kZero;
- const base::TimeDelta kDurationA = base::TimeDelta::FromMicroseconds(1337);
- const base::TimeDelta kDurationB = base::TimeDelta::FromMicroseconds(1234);
+ const base::TimeDelta kDurationA = base::Microseconds(1337);
+ const base::TimeDelta kDurationB = base::Microseconds(1234);
scoped_refptr<DataBuffer> buffer = new DataBuffer(0);
EXPECT_TRUE(buffer->duration() == kZero);
diff --git a/chromium/media/base/data_source.h b/chromium/media/base/data_source.h
index 6ccfebf1eab..9a63c1302a9 100644
--- a/chromium/media/base/data_source.h
+++ b/chromium/media/base/data_source.h
@@ -21,6 +21,10 @@ class MEDIA_EXPORT DataSource {
enum { kReadError = -1, kAborted = -2 };
DataSource();
+
+ DataSource(const DataSource&) = delete;
+ DataSource& operator=(const DataSource&) = delete;
+
virtual ~DataSource();
// Reads |size| bytes from |position| into |data|. And when the read is done
@@ -57,9 +61,6 @@ class MEDIA_EXPORT DataSource {
// By default this just returns GetSize().
virtual int64_t GetMemoryUsage();
-
- private:
- DISALLOW_COPY_AND_ASSIGN(DataSource);
};
} // namespace media
diff --git a/chromium/media/base/decode_status.h b/chromium/media/base/decode_status.h
index d17d8573f71..0f05be295f4 100644
--- a/chromium/media/base/decode_status.h
+++ b/chromium/media/base/decode_status.h
@@ -9,12 +9,11 @@
#include "media/base/decoder_buffer.h"
#include "media/base/media_export.h"
+#include "media/base/status.h"
#include "media/base/status_codes.h"
namespace media {
-class Status;
-
// TODO(crbug.com/1129662): This is temporary, to allow DecodeStatus::OK to
// work, while we replace DecodeStatus with actual status codes.
using DecodeStatus = StatusCode;
@@ -37,6 +36,10 @@ class MEDIA_EXPORT ScopedDecodeTrace {
ScopedDecodeTrace(const char* trace_name,
bool is_key_frame,
base::TimeDelta timestamp);
+
+ ScopedDecodeTrace(const ScopedDecodeTrace&) = delete;
+ ScopedDecodeTrace& operator=(const ScopedDecodeTrace&) = delete;
+
~ScopedDecodeTrace();
// Completes the Decode() trace with the given status.
@@ -45,8 +48,6 @@ class MEDIA_EXPORT ScopedDecodeTrace {
private:
const char* trace_name_;
bool closed_ = false;
-
- DISALLOW_COPY_AND_ASSIGN(ScopedDecodeTrace);
};
} // namespace media
diff --git a/chromium/media/base/decoder_buffer_queue.h b/chromium/media/base/decoder_buffer_queue.h
index 2263234d50c..780d71f6342 100644
--- a/chromium/media/base/decoder_buffer_queue.h
+++ b/chromium/media/base/decoder_buffer_queue.h
@@ -27,6 +27,10 @@ class DecoderBuffer;
class MEDIA_EXPORT DecoderBufferQueue {
public:
DecoderBufferQueue();
+
+ DecoderBufferQueue(const DecoderBufferQueue&) = delete;
+ DecoderBufferQueue& operator=(const DecoderBufferQueue&) = delete;
+
~DecoderBufferQueue();
// Push |buffer| to the end of the queue. If |buffer| is queued out of order
@@ -69,8 +73,6 @@ class MEDIA_EXPORT DecoderBufferQueue {
// Total size in bytes of buffers in the queue.
size_t data_size_;
-
- DISALLOW_COPY_AND_ASSIGN(DecoderBufferQueue);
};
} // namespace media
diff --git a/chromium/media/base/decoder_buffer_queue_unittest.cc b/chromium/media/base/decoder_buffer_queue_unittest.cc
index be2a4b2b3a3..ce233a15dc7 100644
--- a/chromium/media/base/decoder_buffer_queue_unittest.cc
+++ b/chromium/media/base/decoder_buffer_queue_unittest.cc
@@ -12,7 +12,7 @@ namespace media {
static base::TimeDelta ToTimeDelta(int seconds) {
if (seconds < 0)
return kNoTimestamp;
- return base::TimeDelta::FromSeconds(seconds);
+ return base::Seconds(seconds);
}
// Helper to create buffers with specified timestamp in seconds.
diff --git a/chromium/media/base/decoder_factory.h b/chromium/media/base/decoder_factory.h
index fee2f69ff28..7013aae4fae 100644
--- a/chromium/media/base/decoder_factory.h
+++ b/chromium/media/base/decoder_factory.h
@@ -33,6 +33,10 @@ class VideoDecoder;
class MEDIA_EXPORT DecoderFactory {
public:
DecoderFactory();
+
+ DecoderFactory(const DecoderFactory&) = delete;
+ DecoderFactory& operator=(const DecoderFactory&) = delete;
+
virtual ~DecoderFactory();
// Creates audio decoders and append them to the end of |audio_decoders|.
@@ -58,9 +62,6 @@ class MEDIA_EXPORT DecoderFactory {
RequestOverlayInfoCB request_overlay_info_cb,
const gfx::ColorSpace& target_color_space,
std::vector<std::unique_ptr<VideoDecoder>>* video_decoders);
-
- private:
- DISALLOW_COPY_AND_ASSIGN(DecoderFactory);
};
} // namespace media
diff --git a/chromium/media/base/decryptor.h b/chromium/media/base/decryptor.h
index d88aac96da2..bbda9cdf4db 100644
--- a/chromium/media/base/decryptor.h
+++ b/chromium/media/base/decryptor.h
@@ -42,6 +42,10 @@ class MEDIA_EXPORT Decryptor {
enum StreamType { kAudio, kVideo, kStreamTypeMax = kVideo };
Decryptor();
+
+ Decryptor(const Decryptor&) = delete;
+ Decryptor& operator=(const Decryptor&) = delete;
+
virtual ~Decryptor();
// Indicates completion of a decryption operation.
@@ -148,9 +152,6 @@ class MEDIA_EXPORT Decryptor {
// Returns whether or not the decryptor implementation supports decrypt-only.
virtual bool CanAlwaysDecrypt();
-
- private:
- DISALLOW_COPY_AND_ASSIGN(Decryptor);
};
} // namespace media
diff --git a/chromium/media/base/demuxer.h b/chromium/media/base/demuxer.h
index e048fca2d9c..27d36ba4add 100644
--- a/chromium/media/base/demuxer.h
+++ b/chromium/media/base/demuxer.h
@@ -80,6 +80,10 @@ class MEDIA_EXPORT Demuxer : public MediaResource {
};
Demuxer();
+
+ Demuxer(const Demuxer&) = delete;
+ Demuxer& operator=(const Demuxer&) = delete;
+
~Demuxer() override;
// Returns the name of the demuxer for logging purpose.
@@ -165,9 +169,6 @@ class MEDIA_EXPORT Demuxer : public MediaResource {
const std::vector<MediaTrack::Id>& track_ids,
base::TimeDelta curr_time,
TrackChangeCB change_completed_cb) = 0;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(Demuxer);
};
} // namespace media
diff --git a/chromium/media/base/demuxer_memory_limit_cast.cc b/chromium/media/base/demuxer_memory_limit_cast.cc
index a4c2775c686..3020f48727e 100644
--- a/chromium/media/base/demuxer_memory_limit_cast.cc
+++ b/chromium/media/base/demuxer_memory_limit_cast.cc
@@ -17,10 +17,10 @@ size_t GetDemuxerStreamAudioMemoryLimit(
DCHECK(audio_config->IsValidConfig());
switch (audio_config->codec()) {
- case kCodecEAC3:
- case kCodecAC3:
+ case AudioCodec::kEAC3:
+ case AudioCodec::kAC3:
return internal::kDemuxerStreamAudioMemoryLimitMedium;
- case kCodecAAC:
+ case AudioCodec::kAAC:
if (ChannelLayoutToChannelCount(audio_config->channel_layout()) >= 5) {
return internal::kDemuxerStreamAudioMemoryLimitMedium;
}
@@ -42,9 +42,9 @@ size_t GetDemuxerStreamVideoMemoryLimit(
}
DCHECK(video_config->IsValidConfig());
switch (video_config->codec()) {
- case kCodecVP9:
- case kCodecHEVC:
- case kCodecDolbyVision:
+ case VideoCodec::kVP9:
+ case VideoCodec::kHEVC:
+ case VideoCodec::kDolbyVision:
return internal::kDemuxerStreamVideoMemoryLimitMedium;
default:
return internal::kDemuxerStreamVideoMemoryLimitLow;
diff --git a/chromium/media/base/demuxer_memory_limit_cast_unittest.cc b/chromium/media/base/demuxer_memory_limit_cast_unittest.cc
index 4dbe6d4308b..2f150da71dc 100644
--- a/chromium/media/base/demuxer_memory_limit_cast_unittest.cc
+++ b/chromium/media/base/demuxer_memory_limit_cast_unittest.cc
@@ -21,28 +21,28 @@ TEST(DemuxerMemoryLimitCastTest, GetDemuxerStreamAudioMemoryLimit) {
internal::kDemuxerStreamAudioMemoryLimitLow);
AudioDecoderConfig audio_config_opus(
- AudioCodec::kCodecOpus, SampleFormat::kSampleFormatS16,
+ AudioCodec::kOpus, SampleFormat::kSampleFormatS16,
ChannelLayout::CHANNEL_LAYOUT_STEREO, 5000 /* samples_per_second */,
EmptyExtraData(), EncryptionScheme::kUnencrypted);
EXPECT_EQ(GetDemuxerStreamAudioMemoryLimit(&audio_config_opus),
internal::kDemuxerStreamAudioMemoryLimitLow);
AudioDecoderConfig audio_config_ac3(
- AudioCodec::kCodecAC3, SampleFormat::kSampleFormatS16,
+ AudioCodec::kAC3, SampleFormat::kSampleFormatS16,
ChannelLayout::CHANNEL_LAYOUT_STEREO, 5000 /* samples_per_second */,
EmptyExtraData(), EncryptionScheme::kUnencrypted);
EXPECT_EQ(GetDemuxerStreamAudioMemoryLimit(&audio_config_ac3),
internal::kDemuxerStreamAudioMemoryLimitMedium);
AudioDecoderConfig audio_config_aac_1(
- AudioCodec::kCodecAAC, SampleFormat::kSampleFormatS16,
+ AudioCodec::kAAC, SampleFormat::kSampleFormatS16,
ChannelLayout::CHANNEL_LAYOUT_5_0, 5000 /* samples_per_second */,
EmptyExtraData(), EncryptionScheme::kUnencrypted);
EXPECT_EQ(GetDemuxerStreamAudioMemoryLimit(&audio_config_aac_1),
internal::kDemuxerStreamAudioMemoryLimitMedium);
AudioDecoderConfig audio_config_aac_2(
- AudioCodec::kCodecAAC, SampleFormat::kSampleFormatS16,
+ AudioCodec::kAAC, SampleFormat::kSampleFormatS16,
ChannelLayout::CHANNEL_LAYOUT_STEREO, 5000 /* samples_per_second */,
EmptyExtraData(), EncryptionScheme::kUnencrypted);
EXPECT_EQ(GetDemuxerStreamAudioMemoryLimit(&audio_config_aac_2),
@@ -61,7 +61,7 @@ TEST(DemuxerMemoryLimitCastTest, GetDemuxerStreamVideoMemoryLimit) {
internal::kDemuxerStreamVideoMemoryLimitLow);
VideoDecoderConfig video_config(
- kCodecVP8, VIDEO_CODEC_PROFILE_UNKNOWN,
+ VideoCodec::kVP8, VIDEO_CODEC_PROFILE_UNKNOWN,
VideoDecoderConfig::AlphaMode::kIsOpaque, VideoColorSpace(),
kNoTransformation, kCodedSize, kVisibleRect, kNaturalSize,
EmptyExtraData(), EncryptionScheme::kUnencrypted);
@@ -75,7 +75,7 @@ TEST(DemuxerMemoryLimitCastTest, GetDemuxerStreamVideoMemoryLimit) {
Demuxer::DemuxerTypes::kMediaUrlDemuxer, &video_config),
internal::kDemuxerStreamVideoMemoryLimitLow);
- video_config.Initialize(kCodecVP9, VIDEO_CODEC_PROFILE_UNKNOWN,
+ video_config.Initialize(VideoCodec::kVP9, VIDEO_CODEC_PROFILE_UNKNOWN,
VideoDecoderConfig::AlphaMode::kIsOpaque,
VideoColorSpace(), kNoTransformation, kCodedSize,
kVisibleRect, kNaturalSize, EmptyExtraData(),
diff --git a/chromium/media/base/encryption_scheme.cc b/chromium/media/base/encryption_scheme.cc
index 0fd36097378..12728f71c89 100644
--- a/chromium/media/base/encryption_scheme.cc
+++ b/chromium/media/base/encryption_scheme.cc
@@ -9,17 +9,21 @@
namespace media {
-std::ostream& operator<<(std::ostream& os, EncryptionScheme scheme) {
- switch (scheme) {
+std::string GetEncryptionSchemeName(EncryptionScheme encryption_scheme) {
+ switch (encryption_scheme) {
case EncryptionScheme::kUnencrypted:
- return os << "Unencrypted";
+ return "Unencrypted";
case EncryptionScheme::kCenc:
- return os << "CENC";
+ return "CENC";
case EncryptionScheme::kCbcs:
- return os << "CBCS";
+ return "CBCS";
default:
- return os << "Unknown";
+ return "Unknown";
}
}
+std::ostream& operator<<(std::ostream& os, EncryptionScheme encryption_scheme) {
+ return os << GetEncryptionSchemeName(encryption_scheme);
+}
+
} // namespace media
diff --git a/chromium/media/base/encryption_scheme.h b/chromium/media/base/encryption_scheme.h
index 00bd931ea17..24a7141f9e0 100644
--- a/chromium/media/base/encryption_scheme.h
+++ b/chromium/media/base/encryption_scheme.h
@@ -6,6 +6,7 @@
#define MEDIA_BASE_ENCRYPTION_SCHEME_H_
#include <iosfwd>
+#include <string>
#include "media/base/media_export.h"
@@ -21,6 +22,10 @@ enum class EncryptionScheme {
};
// For logging use only.
+MEDIA_EXPORT std::string GetEncryptionSchemeName(
+ EncryptionScheme encryption_scheme);
+
+// For logging use only.
MEDIA_EXPORT std::ostream& operator<<(std::ostream& os,
EncryptionScheme encryption_scheme);
diff --git a/chromium/media/base/fake_audio_render_callback.h b/chromium/media/base/fake_audio_render_callback.h
index c62be387809..bc7383c132b 100644
--- a/chromium/media/base/fake_audio_render_callback.h
+++ b/chromium/media/base/fake_audio_render_callback.h
@@ -25,6 +25,10 @@ class FakeAudioRenderCallback
// where x = [|number_of_frames| * m, |number_of_frames| * (m + 1)] and m =
// the number of Render() calls fulfilled thus far.
FakeAudioRenderCallback(double step, int sample_rate);
+
+ FakeAudioRenderCallback(const FakeAudioRenderCallback&) = delete;
+ FakeAudioRenderCallback& operator=(const FakeAudioRenderCallback&) = delete;
+
~FakeAudioRenderCallback() override;
// Renders a sine wave into the provided audio data buffer. If |half_fill_|
@@ -63,8 +67,6 @@ class FakeAudioRenderCallback
int last_channel_count_;
double volume_;
int sample_rate_;
-
- DISALLOW_COPY_AND_ASSIGN(FakeAudioRenderCallback);
};
} // namespace media
diff --git a/chromium/media/base/fake_audio_worker.h b/chromium/media/base/fake_audio_worker.h
index 13ba742c89f..1729c669827 100644
--- a/chromium/media/base/fake_audio_worker.h
+++ b/chromium/media/base/fake_audio_worker.h
@@ -36,6 +36,10 @@ class MEDIA_EXPORT FakeAudioWorker {
FakeAudioWorker(
const scoped_refptr<base::SingleThreadTaskRunner>& worker_task_runner,
const AudioParameters& params);
+
+ FakeAudioWorker(const FakeAudioWorker&) = delete;
+ FakeAudioWorker& operator=(const FakeAudioWorker&) = delete;
+
~FakeAudioWorker();
// Start executing |worker_cb| at a regular intervals. Stop() must be called
@@ -57,8 +61,6 @@ class MEDIA_EXPORT FakeAudioWorker {
// after the call to Stop() (on the main thread) returns.
class Worker;
const scoped_refptr<Worker> worker_;
-
- DISALLOW_COPY_AND_ASSIGN(FakeAudioWorker);
};
} // namespace media
diff --git a/chromium/media/base/fake_audio_worker_unittest.cc b/chromium/media/base/fake_audio_worker_unittest.cc
index e9977e58334..e2e6e2d90dd 100644
--- a/chromium/media/base/fake_audio_worker_unittest.cc
+++ b/chromium/media/base/fake_audio_worker_unittest.cc
@@ -35,11 +35,14 @@ class FakeAudioWorkerTest : public testing::Test {
FakeAudioWorkerTest()
: params_(AudioParameters::AUDIO_FAKE, CHANNEL_LAYOUT_STEREO, 44100, 128),
fake_worker_(task_environment_.GetMainThreadTaskRunner(), params_) {
- time_between_callbacks_ = base::TimeDelta::FromMicroseconds(
+ time_between_callbacks_ = base::Microseconds(
params_.frames_per_buffer() * base::Time::kMicrosecondsPerSecond /
static_cast<float>(params_.sample_rate()));
}
+ FakeAudioWorkerTest(const FakeAudioWorkerTest&) = delete;
+ FakeAudioWorkerTest& operator=(const FakeAudioWorkerTest&) = delete;
+
~FakeAudioWorkerTest() override = default;
void CalledByFakeWorker(base::TimeTicks ideal_time, base::TimeTicks now) {
@@ -93,9 +96,6 @@ class FakeAudioWorkerTest : public testing::Test {
FakeAudioWorker fake_worker_;
base::TimeDelta time_between_callbacks_;
std::vector<base::TimeTicks> callbacks_;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(FakeAudioWorkerTest);
};
TEST_F(FakeAudioWorkerTest, FakeBasicCallback) {
@@ -181,13 +181,17 @@ class FakeAudioWorkerMockTaskTest : public testing::Test {
fake_worker_(task_runner_, params_) {
DCHECK(!global_clock_);
global_clock_ = task_runner_->GetMockTickClock();
- time_between_callbacks_ = base::TimeDelta::FromMicroseconds(
+ time_between_callbacks_ = base::Microseconds(
params_.frames_per_buffer() * base::Time::kMicrosecondsPerSecond /
static_cast<float>(params_.sample_rate()));
clock_overrides_ = std::make_unique<base::subtle::ScopedTimeClockOverrides>(
nullptr, TimeTicksOverride, nullptr);
}
+ FakeAudioWorkerMockTaskTest(const FakeAudioWorkerMockTaskTest&) = delete;
+ FakeAudioWorkerMockTaskTest& operator=(const FakeAudioWorkerMockTaskTest&) =
+ delete;
+
~FakeAudioWorkerMockTaskTest() override { global_clock_ = nullptr; }
void CalledByFakeWorker(base::TimeTicks ideal_time, base::TimeTicks now) {
@@ -225,9 +229,6 @@ class FakeAudioWorkerMockTaskTest : public testing::Test {
DCHECK(global_clock_);
return global_clock_->NowTicks();
}
-
- private:
- DISALLOW_COPY_AND_ASSIGN(FakeAudioWorkerMockTaskTest);
};
const base::TickClock* FakeAudioWorkerMockTaskTest::global_clock_ = nullptr;
diff --git a/chromium/media/base/fake_demuxer_stream.cc b/chromium/media/base/fake_demuxer_stream.cc
index 76865ead473..3577c27cc89 100644
--- a/chromium/media/base/fake_demuxer_stream.cc
+++ b/chromium/media/base/fake_demuxer_stream.cc
@@ -75,8 +75,8 @@ void FakeDemuxerStream::Initialize() {
num_configs_left_ = num_configs_;
num_buffers_left_in_current_config_ = num_buffers_in_one_config_;
num_buffers_returned_ = 0;
- current_timestamp_ = base::TimeDelta::FromMilliseconds(kStartTimestampMs);
- duration_ = base::TimeDelta::FromMilliseconds(kDurationMs);
+ current_timestamp_ = base::Milliseconds(kStartTimestampMs);
+ duration_ = base::Milliseconds(kDurationMs);
next_size_ = start_coded_size_;
next_read_num_ = 0;
}
@@ -172,7 +172,7 @@ void FakeDemuxerStream::SeekToEndOfStream() {
void FakeDemuxerStream::UpdateVideoDecoderConfig() {
const gfx::Rect kVisibleRect(next_size_.width(), next_size_.height());
video_decoder_config_.Initialize(
- kCodecVP8, VIDEO_CODEC_PROFILE_UNKNOWN,
+ VideoCodec::kVP8, VIDEO_CODEC_PROFILE_UNKNOWN,
VideoDecoderConfig::AlphaMode::kIsOpaque, VideoColorSpace(),
kNoTransformation, next_size_, kVisibleRect, next_size_, EmptyExtraData(),
is_encrypted_ ? EncryptionScheme::kCenc : EncryptionScheme::kUnencrypted);
diff --git a/chromium/media/base/fake_demuxer_stream.h b/chromium/media/base/fake_demuxer_stream.h
index 0a0a241d22d..959ab3b3589 100644
--- a/chromium/media/base/fake_demuxer_stream.h
+++ b/chromium/media/base/fake_demuxer_stream.h
@@ -39,6 +39,10 @@ class FakeDemuxerStream : public DemuxerStream {
bool is_encrypted,
gfx::Size start_coded_size,
gfx::Vector2dF coded_size_delta);
+
+ FakeDemuxerStream(const FakeDemuxerStream&) = delete;
+ FakeDemuxerStream& operator=(const FakeDemuxerStream&) = delete;
+
~FakeDemuxerStream() override;
// DemuxerStream implementation.
@@ -116,8 +120,6 @@ class FakeDemuxerStream : public DemuxerStream {
// Zero-based number indicating which read operation should be held. -1 means
// no read shall be held.
int read_to_hold_;
-
- DISALLOW_COPY_AND_ASSIGN(FakeDemuxerStream);
};
class FakeMediaResource : public MediaResource {
@@ -126,6 +128,10 @@ class FakeMediaResource : public MediaResource {
FakeMediaResource(int num_video_configs,
int num_video_buffers_in_one_config,
bool is_video_encrypted);
+
+ FakeMediaResource(const FakeMediaResource&) = delete;
+ FakeMediaResource& operator=(const FakeMediaResource&) = delete;
+
~FakeMediaResource() override;
// MediaResource implementation.
@@ -133,8 +139,6 @@ class FakeMediaResource : public MediaResource {
private:
FakeDemuxerStream fake_video_stream_;
-
- DISALLOW_COPY_AND_ASSIGN(FakeMediaResource);
};
} // namespace media
diff --git a/chromium/media/base/fake_demuxer_stream_unittest.cc b/chromium/media/base/fake_demuxer_stream_unittest.cc
index 5108d788f30..17b2194da2f 100644
--- a/chromium/media/base/fake_demuxer_stream_unittest.cc
+++ b/chromium/media/base/fake_demuxer_stream_unittest.cc
@@ -30,6 +30,10 @@ class FakeDemuxerStreamTest : public testing::Test {
: status_(DemuxerStream::kAborted),
read_pending_(false),
num_buffers_received_(0) {}
+
+ FakeDemuxerStreamTest(const FakeDemuxerStreamTest&) = delete;
+ FakeDemuxerStreamTest& operator=(const FakeDemuxerStreamTest&) = delete;
+
~FakeDemuxerStreamTest() override = default;
void BufferReady(DemuxerStream::Status status,
@@ -188,9 +192,6 @@ class FakeDemuxerStreamTest : public testing::Test {
scoped_refptr<DecoderBuffer> buffer_;
bool read_pending_;
int num_buffers_received_;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(FakeDemuxerStreamTest);
};
TEST_F(FakeDemuxerStreamTest, Read_OneConfig) {
diff --git a/chromium/media/base/fake_single_thread_task_runner.cc b/chromium/media/base/fake_single_thread_task_runner.cc
index f2dcd5f09d5..c050d5ba6d5 100644
--- a/chromium/media/base/fake_single_thread_task_runner.cc
+++ b/chromium/media/base/fake_single_thread_task_runner.cc
@@ -36,8 +36,8 @@ bool FakeSingleThreadTaskRunner::PostDelayedTask(
// scheduling delayed tasks to be run via base::MessageLoop in a
// multi-threaded application.
if (!tasks_.empty()) {
- const auto after_it = tasks_.lower_bound(
- TaskKey(run_time + base::TimeDelta::FromMicroseconds(1), 0));
+ const auto after_it =
+ tasks_.lower_bound(TaskKey(run_time + base::Microseconds(1), 0));
if (after_it != tasks_.begin()) {
auto it = after_it;
--it;
diff --git a/chromium/media/base/fake_text_track_stream.h b/chromium/media/base/fake_text_track_stream.h
index 83b087e2b92..35839a0a0df 100644
--- a/chromium/media/base/fake_text_track_stream.h
+++ b/chromium/media/base/fake_text_track_stream.h
@@ -22,6 +22,10 @@ namespace media {
class FakeTextTrackStream : public DemuxerStream {
public:
FakeTextTrackStream();
+
+ FakeTextTrackStream(const FakeTextTrackStream&) = delete;
+ FakeTextTrackStream& operator=(const FakeTextTrackStream&) = delete;
+
~FakeTextTrackStream() override;
// DemuxerStream implementation.
@@ -48,8 +52,6 @@ class FakeTextTrackStream : public DemuxerStream {
scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
ReadCB read_cb_;
bool stopping_;
-
- DISALLOW_COPY_AND_ASSIGN(FakeTextTrackStream);
};
} // namespace media
diff --git a/chromium/media/base/feedback_signal_accumulator_unittest.cc b/chromium/media/base/feedback_signal_accumulator_unittest.cc
index 2a28fe7d308..d6c11a91673 100644
--- a/chromium/media/base/feedback_signal_accumulator_unittest.cc
+++ b/chromium/media/base/feedback_signal_accumulator_unittest.cc
@@ -11,9 +11,9 @@ namespace media {
class FeedbackSignalAccumulatorTest : public ::testing::Test {
public:
FeedbackSignalAccumulatorTest()
- : half_life_(base::TimeDelta::FromSeconds(1)),
+ : half_life_(base::Seconds(1)),
acc_(half_life_),
- t_(base::TimeTicks() + base::TimeDelta::FromSeconds(120)) {
+ t_(base::TimeTicks() + base::Seconds(120)) {
acc_.Reset(0.0, t_);
}
@@ -45,14 +45,12 @@ TEST_F(FeedbackSignalAccumulatorTest, DoesNotUpdateIfBeforeResetTime) {
ASSERT_EQ(0.0, acc_.current());
ASSERT_EQ(t_, acc_.update_time());
- const base::TimeTicks one_usec_before =
- t_ - base::TimeDelta::FromMicroseconds(1);
+ const base::TimeTicks one_usec_before = t_ - base::Microseconds(1);
ASSERT_FALSE(acc_.Update(1.0, one_usec_before));
ASSERT_EQ(0.0, acc_.current());
ASSERT_EQ(t_, acc_.update_time());
- const base::TimeTicks one_usec_after =
- t_ + base::TimeDelta::FromMicroseconds(1);
+ const base::TimeTicks one_usec_after = t_ + base::Microseconds(1);
ASSERT_TRUE(acc_.Update(1.0, one_usec_after));
ASSERT_LT(0.0, acc_.current());
ASSERT_EQ(one_usec_after, acc_.update_time());
diff --git a/chromium/media/base/frame_rate_estimator_unittest.cc b/chromium/media/base/frame_rate_estimator_unittest.cc
index 4701c3bd03a..2ba25e6ab5d 100644
--- a/chromium/media/base/frame_rate_estimator_unittest.cc
+++ b/chromium/media/base/frame_rate_estimator_unittest.cc
@@ -26,9 +26,7 @@ class FrameRateEstimatorTest : public testing::TestWithParam<FpsPair> {
int low_fps() const { return std::get<0>(GetParam()); }
int high_fps() const { return std::get<1>(GetParam()); }
- base::TimeDelta duration(int fps) {
- return base::TimeDelta::FromSecondsD(1.0 / fps);
- }
+ base::TimeDelta duration(int fps) { return base::Seconds(1.0 / fps); }
FrameRateEstimator estimator_;
};
diff --git a/chromium/media/base/ipc/media_param_traits_macros.h b/chromium/media/base/ipc/media_param_traits_macros.h
index 0d06c006ec0..0343a90c3bc 100644
--- a/chromium/media/base/ipc/media_param_traits_macros.h
+++ b/chromium/media/base/ipc/media_param_traits_macros.h
@@ -53,7 +53,7 @@
IPC_ENUM_TRAITS_MAX_VALUE(blink::WebFullscreenVideoStatus,
blink::WebFullscreenVideoStatus::kMaxValue)
-IPC_ENUM_TRAITS_MAX_VALUE(media::AudioCodec, media::AudioCodec::kAudioCodecMax)
+IPC_ENUM_TRAITS_MAX_VALUE(media::AudioCodec, media::AudioCodec::kMaxValue)
IPC_ENUM_TRAITS_MAX_VALUE(media::AudioCodecProfile,
media::AudioCodecProfile::kMaxValue)
@@ -117,7 +117,7 @@ IPC_ENUM_TRAITS_MAX_VALUE(media::PipelineStatus,
IPC_ENUM_TRAITS_MAX_VALUE(media::SampleFormat, media::kSampleFormatMax)
-IPC_ENUM_TRAITS_MAX_VALUE(media::VideoCodec, media::kVideoCodecMax)
+IPC_ENUM_TRAITS_MAX_VALUE(media::VideoCodec, media::VideoCodec::kMaxValue)
IPC_ENUM_TRAITS_MAX_VALUE(media::WaitingReason, media::WaitingReason::kMaxValue)
diff --git a/chromium/media/base/key_systems.cc b/chromium/media/base/key_systems.cc
index 9bfc335fb03..9205d7a8923 100644
--- a/chromium/media/base/key_systems.cc
+++ b/chromium/media/base/key_systems.cc
@@ -63,19 +63,19 @@ static const MimeTypeToCodecs kMimeTypeToCodecsMap[] = {
EmeCodec ToAudioEmeCodec(AudioCodec codec) {
switch (codec) {
- case kCodecAAC:
+ case AudioCodec::kAAC:
return EME_CODEC_AAC;
- case kCodecVorbis:
+ case AudioCodec::kVorbis:
return EME_CODEC_VORBIS;
- case kCodecFLAC:
+ case AudioCodec::kFLAC:
return EME_CODEC_FLAC;
- case kCodecOpus:
+ case AudioCodec::kOpus:
return EME_CODEC_OPUS;
- case kCodecEAC3:
+ case AudioCodec::kEAC3:
return EME_CODEC_EAC3;
- case kCodecAC3:
+ case AudioCodec::kAC3:
return EME_CODEC_AC3;
- case kCodecMpegHAudio:
+ case AudioCodec::kMpegHAudio:
return EME_CODEC_MPEG_H_AUDIO;
default:
DVLOG(1) << "Unsupported AudioCodec " << codec;
@@ -85,11 +85,11 @@ EmeCodec ToAudioEmeCodec(AudioCodec codec) {
EmeCodec ToVideoEmeCodec(VideoCodec codec, VideoCodecProfile profile) {
switch (codec) {
- case kCodecH264:
+ case VideoCodec::kH264:
return EME_CODEC_AVC1;
- case kCodecVP8:
+ case VideoCodec::kVP8:
return EME_CODEC_VP8;
- case kCodecVP9:
+ case VideoCodec::kVP9:
// ParseVideoCodecString() returns VIDEO_CODEC_PROFILE_UNKNOWN for "vp9"
// and "vp9.0". Since these codecs are essentially the same as profile 0,
// return EME_CODEC_VP9_PROFILE0.
@@ -102,14 +102,14 @@ EmeCodec ToVideoEmeCodec(VideoCodec codec, VideoCodecProfile profile) {
// Profile 1 and 3 not supported by EME. See https://crbug.com/898298.
return EME_CODEC_NONE;
}
- case kCodecHEVC:
+ case VideoCodec::kHEVC:
// Only handle Main and Main10 profiles for HEVC.
if (profile == HEVCPROFILE_MAIN)
return EME_CODEC_HEVC_PROFILE_MAIN;
if (profile == HEVCPROFILE_MAIN10)
return EME_CODEC_HEVC_PROFILE_MAIN10;
return EME_CODEC_NONE;
- case kCodecDolbyVision:
+ case VideoCodec::kDolbyVision:
// Only profiles 0, 4, 5, 7, 8, 9 are valid. Profile 0 and 9 are encoded
// based on AVC while profile 4, 5, 7 and 8 are based on HEVC.
if (profile == DOLBYVISION_PROFILE0 || profile == DOLBYVISION_PROFILE9) {
@@ -122,7 +122,7 @@ EmeCodec ToVideoEmeCodec(VideoCodec codec, VideoCodecProfile profile) {
} else {
return EME_CODEC_NONE;
}
- case kCodecAV1:
+ case VideoCodec::kAV1:
return EME_CODEC_AV1;
default:
DVLOG(1) << "Unsupported VideoCodec " << codec;
@@ -381,7 +381,7 @@ EmeCodec KeySystemsImpl::GetEmeCodecForString(
return iter->second;
if (media_type == EmeMediaType::AUDIO) {
- AudioCodec audio_codec = kUnknownAudioCodec;
+ AudioCodec audio_codec = AudioCodec::kUnknown;
ParseAudioCodecString(container_mime_type, codec_string, &is_ambiguous,
&audio_codec);
DVLOG(3) << "Audio codec = " << audio_codec;
@@ -396,7 +396,7 @@ EmeCodec KeySystemsImpl::GetEmeCodecForString(
// exceptions where we need to know the profile. For example, for VP9, there
// are older CDMs only supporting profile 0, hence EmeCodec differentiate
// between VP9 profile 0 and higher profiles.
- VideoCodec video_codec = kUnknownVideoCodec;
+ VideoCodec video_codec = VideoCodec::kUnknown;
VideoCodecProfile profile = VIDEO_CODEC_PROFILE_UNKNOWN;
uint8_t level = 0;
VideoColorSpace color_space;
diff --git a/chromium/media/base/key_systems_unittest.cc b/chromium/media/base/key_systems_unittest.cc
index 4a21bb67c4b..1d696f28a76 100644
--- a/chromium/media/base/key_systems_unittest.cc
+++ b/chromium/media/base/key_systems_unittest.cc
@@ -14,6 +14,7 @@
#include "base/check.h"
#include "base/notreached.h"
+#include "build/build_config.h"
#include "media/base/audio_parameters.h"
#include "media/base/decrypt_config.h"
#include "media/base/eme_constants.h"
diff --git a/chromium/media/base/loopback_audio_converter.h b/chromium/media/base/loopback_audio_converter.h
index 21815f0ac0d..c691f90ded6 100644
--- a/chromium/media/base/loopback_audio_converter.h
+++ b/chromium/media/base/loopback_audio_converter.h
@@ -22,6 +22,9 @@ class LoopbackAudioConverter : public AudioConverter::InputCallback {
const AudioParameters& output_params,
bool disable_fifo);
+ LoopbackAudioConverter(const LoopbackAudioConverter&) = delete;
+ LoopbackAudioConverter& operator=(const LoopbackAudioConverter&) = delete;
+
~LoopbackAudioConverter() override;
void AddInput(AudioConverter::InputCallback* input) {
@@ -38,8 +41,6 @@ class LoopbackAudioConverter : public AudioConverter::InputCallback {
double ProvideInput(AudioBus* audio_bus, uint32_t frames_delayed) override;
AudioConverter audio_converter_;
-
- DISALLOW_COPY_AND_ASSIGN(LoopbackAudioConverter);
};
} // namespace media
diff --git a/chromium/media/base/mac/video_frame_mac_unittests.cc b/chromium/media/base/mac/video_frame_mac_unittests.cc
index f0b6de5857f..1122f447615 100644
--- a/chromium/media/base/mac/video_frame_mac_unittests.cc
+++ b/chromium/media/base/mac/video_frame_mac_unittests.cc
@@ -21,7 +21,7 @@ namespace {
const int kWidth = 64;
const int kHeight = 48;
const int kVisibleRectOffset = 8;
-const base::TimeDelta kTimestamp = base::TimeDelta::FromMicroseconds(1337);
+const base::TimeDelta kTimestamp = base::Microseconds(1337);
struct FormatPair {
VideoPixelFormat chrome;
diff --git a/chromium/media/base/media_content_type.cc b/chromium/media/base/media_content_type.cc
index 3fc666b1f47..2d3ca0b83bf 100644
--- a/chromium/media/base/media_content_type.cc
+++ b/chromium/media/base/media_content_type.cc
@@ -14,7 +14,7 @@ MediaContentType DurationToMediaContentType(base::TimeDelta duration) {
// A zero duration indicates that the duration is unknown. "Persistent" type
// should be used in this case.
return (duration.is_zero() ||
- duration > base::TimeDelta::FromSeconds(kMinimumContentDurationSecs))
+ duration > base::Seconds(kMinimumContentDurationSecs))
? MediaContentType::Persistent
: MediaContentType::Transient;
}
diff --git a/chromium/media/base/media_drm_storage.h b/chromium/media/base/media_drm_storage.h
index d691f232b60..ea71d19d265 100644
--- a/chromium/media/base/media_drm_storage.h
+++ b/chromium/media/base/media_drm_storage.h
@@ -47,6 +47,10 @@ class MEDIA_EXPORT MediaDrmStorage
};
MediaDrmStorage();
+
+ MediaDrmStorage(const MediaDrmStorage&) = delete;
+ MediaDrmStorage& operator=(const MediaDrmStorage&) = delete;
+
virtual ~MediaDrmStorage();
// Callback to return whether the operation succeeded.
@@ -94,9 +98,6 @@ class MEDIA_EXPORT MediaDrmStorage
// to the storage backend.
virtual void RemovePersistentSession(const std::string& session_id,
ResultCB result_cb) = 0;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MediaDrmStorage);
};
using CreateStorageCB =
diff --git a/chromium/media/base/media_log.h b/chromium/media/base/media_log.h
index 46b52ae5587..4cf55ebd2d1 100644
--- a/chromium/media/base/media_log.h
+++ b/chromium/media/base/media_log.h
@@ -13,6 +13,7 @@
#include <string>
#include <utility>
+#include "base/gtest_prod_util.h"
#include "base/logging.h"
#include "base/macros.h"
#include "base/memory/ref_counted.h"
@@ -53,6 +54,9 @@ class MEDIA_EXPORT MediaLog {
static constexpr size_t kLogLimit = 512;
#endif
+ MediaLog(const MediaLog&) = delete;
+ MediaLog& operator=(const MediaLog&) = delete;
+
// Constructor is protected, see below.
virtual ~MediaLog();
@@ -192,8 +196,6 @@ class MEDIA_EXPORT MediaLog {
// The underlying media log.
scoped_refptr<ParentLogRecord> parent_log_record_;
-
- DISALLOW_COPY_AND_ASSIGN(MediaLog);
};
// Helper class to make it easier to use MediaLog like DVLOG().
diff --git a/chromium/media/base/media_permission.h b/chromium/media/base/media_permission.h
index 4226086ba47..0d0b65c4706 100644
--- a/chromium/media/base/media_permission.h
+++ b/chromium/media/base/media_permission.h
@@ -23,6 +23,10 @@ class MEDIA_EXPORT MediaPermission {
};
MediaPermission();
+
+ MediaPermission(const MediaPermission&) = delete;
+ MediaPermission& operator=(const MediaPermission&) = delete;
+
virtual ~MediaPermission();
// Checks whether |type| is permitted without triggering user interaction
@@ -40,9 +44,6 @@ class MEDIA_EXPORT MediaPermission {
// the use of Clear Key key systems, which is always allowed as required by
// the spec.
virtual bool IsEncryptedMediaEnabled() = 0;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MediaPermission);
};
} // namespace media
diff --git a/chromium/media/base/media_resource.h b/chromium/media/base/media_resource.h
index 567df727f9a..300b1e6aee2 100644
--- a/chromium/media/base/media_resource.h
+++ b/chromium/media/base/media_resource.h
@@ -30,6 +30,10 @@ class MEDIA_EXPORT MediaResource {
};
MediaResource();
+
+ MediaResource(const MediaResource&) = delete;
+ MediaResource& operator=(const MediaResource&) = delete;
+
virtual ~MediaResource();
virtual MediaResource::Type GetType() const;
@@ -62,9 +66,6 @@ class MEDIA_EXPORT MediaResource {
// This method could be refactored if WMPI was aware of the concrete type of
// Demuxer* it is dealing with.
virtual void ForwardDurationChangeToDemuxerHost(base::TimeDelta duration);
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MediaResource);
};
} // namespace media
diff --git a/chromium/media/base/media_serializers.h b/chromium/media/base/media_serializers.h
index e6c26ab66cf..b44da27a5e0 100644
--- a/chromium/media/base/media_serializers.h
+++ b/chromium/media/base/media_serializers.h
@@ -61,6 +61,16 @@ struct MediaSerializer<std::vector<VecType>> {
}
};
+// Serialize unique pointers
+template <typename T>
+struct MediaSerializer<std::unique_ptr<T>> {
+ static base::Value Serialize(const std::unique_ptr<T>& ptr) {
+ if (!ptr)
+ return base::Value("nullptr");
+ return MediaSerializer<T>::Serialize(*ptr);
+ }
+};
+
// serialize optional types
template <typename OptType>
struct MediaSerializer<absl::optional<OptType>> {
@@ -89,7 +99,18 @@ struct MediaSerializer<double> {
template <>
struct MediaSerializer<int64_t> {
static inline base::Value Serialize(int64_t value) {
- return MediaSerializer<double>::Serialize(static_cast<double>(value));
+ std::stringstream stream;
+ stream << "0x" << std::hex << value;
+ return MediaSerializer<std::string>::Serialize(stream.str());
+ }
+};
+
+template <>
+struct MediaSerializer<uint32_t> {
+ static inline base::Value Serialize(uint32_t value) {
+ std::stringstream stream;
+ stream << "0x" << std::hex << value;
+ return MediaSerializer<std::string>::Serialize(stream.str());
}
};
@@ -419,18 +440,30 @@ struct MediaSerializer<StatusCode> {
};
// Class (complex)
-template <>
-struct MediaSerializer<Status> {
- static base::Value Serialize(const Status& status) {
+template <typename T>
+struct MediaSerializer<TypedStatus<T>> {
+ static base::Value Serialize(const TypedStatus<T>& status) {
+ // TODO: replace this with some kind of static "description"
+ // of the default type, instead of "Ok".
if (status.is_ok())
return base::Value("Ok");
+ return MediaSerialize(status.data_);
+ }
+};
+// Class (complex)
+template <>
+struct MediaSerializer<StatusData> {
+ static base::Value Serialize(const StatusData& status) {
base::Value result(base::Value::Type::DICTIONARY);
- FIELD_SERIALIZE("status_code", status.code());
- FIELD_SERIALIZE("status_message", status.message());
- FIELD_SERIALIZE("stack", status.data_->frames);
- FIELD_SERIALIZE("data", status.data_->data);
- FIELD_SERIALIZE("causes", status.data_->causes);
+ // TODO: replace code with a stringified version, since
+ // this representation will only go to medialog anyway.
+ FIELD_SERIALIZE("code", status.code);
+ FIELD_SERIALIZE("group", status.group);
+ FIELD_SERIALIZE("message", status.message);
+ FIELD_SERIALIZE("stack", status.frames);
+ FIELD_SERIALIZE("data", status.data);
+ FIELD_SERIALIZE("causes", status.causes);
return result;
}
};
diff --git a/chromium/media/base/media_serializers_unittest.cc b/chromium/media/base/media_serializers_unittest.cc
index 466155569b8..53407ded0f0 100644
--- a/chromium/media/base/media_serializers_unittest.cc
+++ b/chromium/media/base/media_serializers_unittest.cc
@@ -30,7 +30,7 @@ TEST(MediaSerializersTest, BaseTypes) {
const char* g = "bar";
ASSERT_EQ(ToString(MediaSerialize(a)), "1");
- ASSERT_EQ(ToString(MediaSerialize(b)), "2.0");
+ ASSERT_EQ(ToString(MediaSerialize(b)), "0x2");
ASSERT_EQ(ToString(MediaSerialize(c)), "false");
ASSERT_EQ(ToString(MediaSerialize(d)), "100.0");
ASSERT_EQ(ToString(MediaSerialize(e)), "4523.0");
diff --git a/chromium/media/base/media_switches.cc b/chromium/media/base/media_switches.cc
index 9b32170f896..5f43904c668 100644
--- a/chromium/media/base/media_switches.cc
+++ b/chromium/media/base/media_switches.cc
@@ -218,6 +218,8 @@ MEDIA_EXPORT extern const char kLacrosEnablePlatformHevc[] =
"lacros-enable-platform-hevc";
MEDIA_EXPORT extern const char kLacrosUseChromeosProtectedMedia[] =
"lacros-use-chromeos-protected-media";
+MEDIA_EXPORT extern const char kLacrosUseChromeosProtectedAv1[] =
+ "lacros-use-chromeos-protected-av1";
#endif // defined(OS_CHROMEOS)
namespace autoplay {
@@ -257,6 +259,10 @@ const base::Feature kOverlayFullscreenVideo{"overlay-fullscreen-video",
const base::Feature kEnableMediaInternals{"enable-media-internals",
base::FEATURE_ENABLED_BY_DEFAULT};
+// Enables user control over muting tab audio from the tab strip.
+const base::Feature kEnableTabMuting{"enable-tab-muting",
+ base::FEATURE_DISABLED_BY_DEFAULT};
+
// Enable Picture-in-Picture.
const base::Feature kPictureInPicture {
"PictureInPicture",
@@ -283,6 +289,12 @@ const base::Feature kResumeBackgroundVideo {
#endif
};
+// Experimental: Try to avoid destroying the media player when transferring a
+// media element to a new document. This is a work in progress, and may cause
+// security and/or stability issues.
+const base::Feature kReuseMediaPlayer{"ReuseMediaPlayer",
+ base::FEATURE_DISABLED_BY_DEFAULT};
+
// When enabled, MediaCapabilities will check with GPU Video Accelerator
// Factories to determine isPowerEfficient = true/false.
const base::Feature kMediaCapabilitiesQueryGpuFactories{
@@ -387,23 +399,8 @@ const base::Feature kD3D11VideoDecoderVP9Profile2{
const base::Feature kD3D11VideoDecoderAV1{"D3D11VideoDecoderEnableAV1",
base::FEATURE_ENABLED_BY_DEFAULT};
-// Tell D3D11VideoDecoder not to switch the D3D11 device to multi-threaded mode.
-// This is to help us track down IGD crashes.
-const base::Feature kD3D11VideoDecoderSkipMultithreaded{
- "D3D11VideoDecoderSkipMultithreaded", base::FEATURE_DISABLED_BY_DEFAULT};
-
-// If enabled, D3D11VideoDecoder will always copy instead of bind textures.
-const base::Feature kD3D11VideoDecoderAlwaysCopy{
- "D3D11VideoDecoderAlwaysCopy", base::FEATURE_DISABLED_BY_DEFAULT};
-
-// If enabled, D3D11VideoDecoder may (but is not required to) choose to mark
-// VideoFrames as overlayable.
-const base::Feature kD3D11VideoDecoderAllowOverlay{
- "D3D11VideoDecoderAllowOverlay", base::FEATURE_ENABLED_BY_DEFAULT};
-
-// If enabled, D3D11VideoDecoder will enable HDR support even if the OS doesn't.
-const base::Feature kD3D11VideoDecoderForceEnableHDR{
- "D3D11VideoDecoderForceEnableHDR", base::FEATURE_DISABLED_BY_DEFAULT};
+const base::Feature kD3D11VideoDecoderUseSharedHandle{
+ "D3D11VideoDecoderUseSharedHandle", base::FEATURE_DISABLED_BY_DEFAULT};
// Falls back to other decoders after audio/video decode error happens. The
// implementation may choose different strategies on when to fallback. See
@@ -454,11 +451,6 @@ constexpr base::FeatureParam<kCrosGlobalMediaControlsPinOptions>
kCrosGlobalMediaControlsPinOptions::kHeuristic,
&kCrosGlobalMediaControlsParamOptions);
-// Allow global media controls notifications to be dragged out into overlay
-// notifications. It is no-op if kGlobalMediaControls is not enabled.
-const base::Feature kGlobalMediaControlsOverlayControls{
- "GlobalMediaControlsOverlayControls", base::FEATURE_DISABLED_BY_DEFAULT};
-
// Show picture-in-picture button in Global Media Controls.
const base::Feature kGlobalMediaControlsPictureInPicture {
"GlobalMediaControlsPictureInPicture",
@@ -543,6 +535,9 @@ const base::Feature kVaapiVP9Encoder{"VaapiVP9Encoder",
base::FEATURE_ENABLED_BY_DEFAULT};
#if defined(ARCH_CPU_X86_FAMILY) && BUILDFLAG(IS_CHROMEOS_ASH)
+// Enable H264 temporal layer encoding with HW encoder on ChromeOS.
+const base::Feature kVaapiH264TemporalLayerHWEncoding{
+ "VaapiH264TemporalLayerEncoding", base::FEATURE_ENABLED_BY_DEFAULT};
// Enable VP9 k-SVC decoding with HW decoder for webrtc use case on ChromeOS.
const base::Feature kVaapiVp9kSVCHWDecoding{"VaapiVp9kSVCHWDecoding",
base::FEATURE_ENABLED_BY_DEFAULT};
@@ -924,8 +919,9 @@ bool IsVideoCaptureAcceleratedJpegDecodingEnabled() {
}
#if BUILDFLAG(IS_CHROMEOS_ASH)
return true;
-#endif
+#else
return false;
+#endif
}
bool IsLiveCaptionFeatureEnabled() {
diff --git a/chromium/media/base/media_switches.h b/chromium/media/base/media_switches.h
index 4e79508bc27..e09620e4625 100644
--- a/chromium/media/base/media_switches.h
+++ b/chromium/media/base/media_switches.h
@@ -95,6 +95,7 @@ MEDIA_EXPORT extern const char kEnableClearHevcForTesting[];
MEDIA_EXPORT extern const char kLacrosEnablePlatformEncryptedHevc[];
MEDIA_EXPORT extern const char kLacrosEnablePlatformHevc[];
MEDIA_EXPORT extern const char kLacrosUseChromeosProtectedMedia[];
+MEDIA_EXPORT extern const char kLacrosUseChromeosProtectedAv1[];
#endif // defined(OS_CHROMEOS)
namespace autoplay {
@@ -129,11 +130,9 @@ MEDIA_EXPORT extern const base::Feature kD3D11VideoDecoder;
MEDIA_EXPORT extern const base::Feature kD3D11VideoDecoderIgnoreWorkarounds;
MEDIA_EXPORT extern const base::Feature kD3D11VideoDecoderVP9Profile2;
MEDIA_EXPORT extern const base::Feature kD3D11VideoDecoderAV1;
-MEDIA_EXPORT extern const base::Feature kD3D11VideoDecoderSkipMultithreaded;
-MEDIA_EXPORT extern const base::Feature kD3D11VideoDecoderAlwaysCopy;
-MEDIA_EXPORT extern const base::Feature kD3D11VideoDecoderAllowOverlay;
-MEDIA_EXPORT extern const base::Feature kD3D11VideoDecoderForceEnableHDR;
+MEDIA_EXPORT extern const base::Feature kD3D11VideoDecoderUseSharedHandle;
MEDIA_EXPORT extern const base::Feature kEnableMediaInternals;
+MEDIA_EXPORT extern const base::Feature kEnableTabMuting;
MEDIA_EXPORT extern const base::Feature kExposeSwDecodersToWebRTC;
MEDIA_EXPORT extern const base::Feature kExternalClearKeyForTesting;
MEDIA_EXPORT extern const base::Feature kFFmpegDecodeOpaqueVP8;
@@ -144,7 +143,6 @@ MEDIA_EXPORT extern const base::Feature kGlobalMediaControls;
MEDIA_EXPORT extern const base::Feature kGlobalMediaControlsAutoDismiss;
MEDIA_EXPORT extern const base::Feature kGlobalMediaControlsForCast;
MEDIA_EXPORT extern const base::Feature kGlobalMediaControlsForChromeOS;
-MEDIA_EXPORT extern const base::Feature kGlobalMediaControlsOverlayControls;
MEDIA_EXPORT extern const base::Feature kGlobalMediaControlsPictureInPicture;
MEDIA_EXPORT extern const base::Feature kGlobalMediaControlsSeamlessTransfer;
MEDIA_EXPORT extern const base::Feature kGlobalMediaControlsModernUI;
@@ -182,6 +180,7 @@ MEDIA_EXPORT extern const base::Feature kPreloadMetadataSuspend;
MEDIA_EXPORT extern const base::Feature kRecordMediaEngagementScores;
MEDIA_EXPORT extern const base::Feature kRecordWebAudioEngagement;
MEDIA_EXPORT extern const base::Feature kResumeBackgroundVideo;
+MEDIA_EXPORT extern const base::Feature kReuseMediaPlayer;
MEDIA_EXPORT extern const base::Feature kRevokeMediaSourceObjectURLOnAttach;
MEDIA_EXPORT extern const base::Feature kSpeakerChangeDetection;
MEDIA_EXPORT extern const base::Feature kSpecCompliantCanPlayThrough;
@@ -205,6 +204,7 @@ MEDIA_EXPORT extern const base::Feature kVaapiVideoMinResolutionForPerformance;
MEDIA_EXPORT extern const base::Feature kVaapiVP8Encoder;
MEDIA_EXPORT extern const base::Feature kVaapiVP9Encoder;
#if defined(ARCH_CPU_X86_FAMILY) && BUILDFLAG(IS_CHROMEOS_ASH)
+MEDIA_EXPORT extern const base::Feature kVaapiH264TemporalLayerHWEncoding;
MEDIA_EXPORT extern const base::Feature kVaapiVp9kSVCHWDecoding;
MEDIA_EXPORT extern const base::Feature kVaapiVp9kSVCHWEncoding;
#endif // defined(ARCH_CPU_X86_FAMILY) && BUILDFLAG(IS_CHROMEOS_ASH)
diff --git a/chromium/media/base/media_tracks.h b/chromium/media/base/media_tracks.h
index 36fbd2bef71..0df1b05bfd7 100644
--- a/chromium/media/base/media_tracks.h
+++ b/chromium/media/base/media_tracks.h
@@ -23,6 +23,10 @@ class MEDIA_EXPORT MediaTracks {
using MediaTracksCollection = std::vector<std::unique_ptr<MediaTrack>>;
MediaTracks();
+
+ MediaTracks(const MediaTracks&) = delete;
+ MediaTracks& operator=(const MediaTracks&) = delete;
+
~MediaTracks();
// Adds a new audio track. The |bytestreamTrackId| must uniquely identify the
@@ -51,8 +55,6 @@ class MEDIA_EXPORT MediaTracks {
MediaTracksCollection tracks_;
std::map<StreamParser::TrackId, AudioDecoderConfig> audio_configs_;
std::map<StreamParser::TrackId, VideoDecoderConfig> video_configs_;
-
- DISALLOW_COPY_AND_ASSIGN(MediaTracks);
};
} // namespace media
diff --git a/chromium/media/base/media_types.cc b/chromium/media/base/media_types.cc
index ceaddc7f7b6..a33fb235c3f 100644
--- a/chromium/media/base/media_types.cc
+++ b/chromium/media/base/media_types.cc
@@ -28,26 +28,26 @@ VideoType VideoType::FromDecoderConfig(const VideoDecoderConfig& config) {
switch (config.codec()) {
// These have no notion of level.
- case kUnknownVideoCodec:
- case kCodecTheora:
- case kCodecVP8:
+ case VideoCodec::kUnknown:
+ case VideoCodec::kTheora:
+ case VideoCodec::kVP8:
// These use non-numeric levels, aren't part of our mime code, and
// are ancient with very limited support.
- case kCodecVC1:
- case kCodecMPEG2:
- case kCodecMPEG4:
+ case VideoCodec::kVC1:
+ case VideoCodec::kMPEG2:
+ case VideoCodec::kMPEG4:
break;
- case kCodecH264:
- case kCodecVP9:
- case kCodecHEVC:
+ case VideoCodec::kH264:
+ case VideoCodec::kVP9:
+ case VideoCodec::kHEVC:
// 10 is the level_idc for level 1.0.
level = 10;
break;
- case kCodecDolbyVision:
+ case VideoCodec::kDolbyVision:
// Dolby doesn't do decimals, so 1 is just 1.
level = 1;
break;
- case kCodecAV1:
+ case VideoCodec::kAV1:
// Strangely, AV1 starts at 2.0.
level = 20;
break;
diff --git a/chromium/media/base/media_url_demuxer.h b/chromium/media/base/media_url_demuxer.h
index 756ae44ac35..a2ae1b2e4c2 100644
--- a/chromium/media/base/media_url_demuxer.h
+++ b/chromium/media/base/media_url_demuxer.h
@@ -43,6 +43,10 @@ class MEDIA_EXPORT MediaUrlDemuxer : public Demuxer {
const url::Origin& top_frame_origin,
bool allow_credentials,
bool is_hls);
+
+ MediaUrlDemuxer(const MediaUrlDemuxer&) = delete;
+ MediaUrlDemuxer& operator=(const MediaUrlDemuxer&) = delete;
+
~MediaUrlDemuxer() override;
// MediaResource interface.
@@ -76,8 +80,6 @@ class MEDIA_EXPORT MediaUrlDemuxer : public Demuxer {
DemuxerHost* host_;
scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
-
- DISALLOW_COPY_AND_ASSIGN(MediaUrlDemuxer);
};
} // namespace media
diff --git a/chromium/media/base/media_util.h b/chromium/media/base/media_util.h
index fac5af522da..0dac6c60587 100644
--- a/chromium/media/base/media_util.h
+++ b/chromium/media/base/media_util.h
@@ -26,13 +26,14 @@ MEDIA_EXPORT void ReportPepperVideoDecoderOutputPictureCountSW(int height);
class MEDIA_EXPORT NullMediaLog : public media::MediaLog {
public:
NullMediaLog() = default;
+
+ NullMediaLog(const NullMediaLog&) = delete;
+ NullMediaLog& operator=(const NullMediaLog&) = delete;
+
~NullMediaLog() override = default;
void AddLogRecordLocked(
std::unique_ptr<media::MediaLogRecord> event) override {}
-
- private:
- DISALLOW_COPY_AND_ASSIGN(NullMediaLog);
};
} // namespace media
diff --git a/chromium/media/base/memory_dump_provider_proxy.h b/chromium/media/base/memory_dump_provider_proxy.h
index 0bdda75b7c5..d815e15e51f 100644
--- a/chromium/media/base/memory_dump_provider_proxy.h
+++ b/chromium/media/base/memory_dump_provider_proxy.h
@@ -29,6 +29,9 @@ class MEDIA_EXPORT MemoryDumpProviderProxy final
scoped_refptr<base::SingleThreadTaskRunner> task_runner,
MemoryDumpCB dump_cb);
+ MemoryDumpProviderProxy(const MemoryDumpProviderProxy&) = delete;
+ MemoryDumpProviderProxy& operator=(const MemoryDumpProviderProxy&) = delete;
+
~MemoryDumpProviderProxy() override;
bool OnMemoryDump(const base::trace_event::MemoryDumpArgs& args,
@@ -36,8 +39,6 @@ class MEDIA_EXPORT MemoryDumpProviderProxy final
private:
MemoryDumpCB dump_cb_;
-
- DISALLOW_COPY_AND_ASSIGN(MemoryDumpProviderProxy);
};
} // namespace media
diff --git a/chromium/media/base/mime_util_internal.cc b/chromium/media/base/mime_util_internal.cc
index ccfe8e9a653..2a0ee050032 100644
--- a/chromium/media/base/mime_util_internal.cc
+++ b/chromium/media/base/mime_util_internal.cc
@@ -168,51 +168,51 @@ MimeUtil::~MimeUtil() = default;
AudioCodec MimeUtilToAudioCodec(MimeUtil::Codec codec) {
switch (codec) {
case MimeUtil::PCM:
- return kCodecPCM;
+ return AudioCodec::kPCM;
case MimeUtil::MP3:
- return kCodecMP3;
+ return AudioCodec::kMP3;
case MimeUtil::AC3:
- return kCodecAC3;
+ return AudioCodec::kAC3;
case MimeUtil::EAC3:
- return kCodecEAC3;
+ return AudioCodec::kEAC3;
case MimeUtil::MPEG2_AAC:
case MimeUtil::MPEG4_AAC:
case MimeUtil::MPEG4_XHE_AAC:
- return kCodecAAC;
+ return AudioCodec::kAAC;
case MimeUtil::MPEG_H_AUDIO:
- return kCodecMpegHAudio;
+ return AudioCodec::kMpegHAudio;
case MimeUtil::VORBIS:
- return kCodecVorbis;
+ return AudioCodec::kVorbis;
case MimeUtil::OPUS:
- return kCodecOpus;
+ return AudioCodec::kOpus;
case MimeUtil::FLAC:
- return kCodecFLAC;
+ return AudioCodec::kFLAC;
default:
break;
}
- return kUnknownAudioCodec;
+ return AudioCodec::kUnknown;
}
VideoCodec MimeUtilToVideoCodec(MimeUtil::Codec codec) {
switch (codec) {
case MimeUtil::AV1:
- return kCodecAV1;
+ return VideoCodec::kAV1;
case MimeUtil::H264:
- return kCodecH264;
+ return VideoCodec::kH264;
case MimeUtil::HEVC:
- return kCodecHEVC;
+ return VideoCodec::kHEVC;
case MimeUtil::VP8:
- return kCodecVP8;
+ return VideoCodec::kVP8;
case MimeUtil::VP9:
- return kCodecVP9;
+ return VideoCodec::kVP9;
case MimeUtil::THEORA:
- return kCodecTheora;
+ return VideoCodec::kTheora;
case MimeUtil::DOLBY_VISION:
- return kCodecDolbyVision;
+ return VideoCodec::kDolbyVision;
default:
break;
}
- return kUnknownVideoCodec;
+ return VideoCodec::kUnknown;
}
SupportsType MimeUtil::AreSupportedCodecs(
@@ -470,7 +470,7 @@ bool MimeUtil::ParseVideoCodecString(const std::string& mime_type,
*out_level = parsed_results[0].video_level;
*out_color_space = parsed_results[0].video_color_space;
- if (*out_codec == kUnknownVideoCodec) {
+ if (*out_codec == VideoCodec::kUnknown) {
DVLOG(3) << __func__ << " Codec string " << codec_id
<< " is not a VIDEO codec.";
return false;
@@ -504,7 +504,7 @@ bool MimeUtil::ParseAudioCodecString(const std::string& mime_type,
*out_is_ambiguous = parsed_results[0].is_ambiguous;
*out_codec = MimeUtilToAudioCodec(parsed_results[0].codec);
- if (*out_codec == kUnknownAudioCodec) {
+ if (*out_codec == AudioCodec::kUnknown) {
DVLOG(3) << __func__ << " Codec string " << codec_id
<< " is not an AUDIO codec.";
return false;
@@ -774,7 +774,7 @@ bool MimeUtil::ParseCodecHelper(const std::string& mime_type_lower_case,
out_result->codec = itr->second;
// Even "simple" video codecs should have an associated profile.
- if (MimeUtilToVideoCodec(out_result->codec) != kUnknownVideoCodec) {
+ if (MimeUtilToVideoCodec(out_result->codec) != VideoCodec::kUnknown) {
switch (out_result->codec) {
case Codec::VP8:
out_result->video_profile = VP8PROFILE_ANY;
@@ -875,12 +875,12 @@ SupportsType MimeUtil::IsCodecSupported(const std::string& mime_type_lower_case,
DCHECK_NE(codec, INVALID_CODEC);
VideoCodec video_codec = MimeUtilToVideoCodec(codec);
- if (video_codec != kUnknownVideoCodec &&
+ if (video_codec != VideoCodec::kUnknown &&
// Theora and VP8 do not have profiles/levels.
- video_codec != kCodecTheora && video_codec != kCodecVP8 &&
+ video_codec != VideoCodec::kTheora && video_codec != VideoCodec::kVP8 &&
// TODO(dalecurtis): AV1 has levels, but they aren't supported yet;
// http://crbug.com/784993
- video_codec != kCodecAV1) {
+ video_codec != VideoCodec::kAV1) {
DCHECK_NE(video_profile, VIDEO_CODEC_PROFILE_UNKNOWN);
DCHECK_GT(video_level, 0);
}
@@ -911,7 +911,7 @@ SupportsType MimeUtil::IsCodecSupported(const std::string& mime_type_lower_case,
}
AudioCodec audio_codec = MimeUtilToAudioCodec(codec);
- if (audio_codec != kUnknownAudioCodec) {
+ if (audio_codec != AudioCodec::kUnknown) {
AudioCodecProfile audio_profile = AudioCodecProfile::kUnknown;
if (codec == MPEG4_XHE_AAC)
audio_profile = AudioCodecProfile::kXHE_AAC;
@@ -920,7 +920,7 @@ SupportsType MimeUtil::IsCodecSupported(const std::string& mime_type_lower_case,
return IsNotSupported;
}
- if (video_codec != kUnknownVideoCodec) {
+ if (video_codec != VideoCodec::kUnknown) {
if (!IsSupportedVideoType(
{video_codec, video_profile, video_level, color_space})) {
return IsNotSupported;
diff --git a/chromium/media/base/mime_util_internal.h b/chromium/media/base/mime_util_internal.h
index 614d357c5b0..f0cf1a848ff 100644
--- a/chromium/media/base/mime_util_internal.h
+++ b/chromium/media/base/mime_util_internal.h
@@ -11,6 +11,7 @@
#include "base/containers/flat_map.h"
#include "base/containers/flat_set.h"
#include "base/macros.h"
+#include "build/build_config.h"
#include "media/base/media_export.h"
#include "media/base/mime_util.h"
#include "media/base/video_codecs.h"
@@ -25,6 +26,10 @@ namespace internal {
class MEDIA_EXPORT MimeUtil {
public:
MimeUtil();
+
+ MimeUtil(const MimeUtil&) = delete;
+ MimeUtil& operator=(const MimeUtil&) = delete;
+
~MimeUtil();
enum Codec {
@@ -196,8 +201,6 @@ class MEDIA_EXPORT MimeUtil {
// A map of mime_types and hash map of the supported codecs for the mime_type.
MediaFormatMappings media_format_map_;
-
- DISALLOW_COPY_AND_ASSIGN(MimeUtil);
};
} // namespace internal
diff --git a/chromium/media/base/mime_util_unittest.cc b/chromium/media/base/mime_util_unittest.cc
index 5826cdf29ab..4dcafd03f61 100644
--- a/chromium/media/base/mime_util_unittest.cc
+++ b/chromium/media/base/mime_util_unittest.cc
@@ -247,7 +247,7 @@ TEST(MimeUtilTest, ParseVideoCodecString) {
&out_colorspace));
if (kUsePropCodecs) {
EXPECT_FALSE(out_is_ambiguous);
- EXPECT_EQ(kCodecH264, out_codec);
+ EXPECT_EQ(VideoCodec::kH264, out_codec);
EXPECT_EQ(H264PROFILE_BASELINE, out_profile);
EXPECT_EQ(30, out_level);
EXPECT_EQ(VideoColorSpace::REC709(), out_colorspace);
@@ -258,7 +258,7 @@ TEST(MimeUtilTest, ParseVideoCodecString) {
&out_is_ambiguous, &out_codec, &out_profile,
&out_level, &out_colorspace));
EXPECT_FALSE(out_is_ambiguous);
- EXPECT_EQ(kCodecVP9, out_codec);
+ EXPECT_EQ(VideoCodec::kVP9, out_codec);
EXPECT_EQ(VP9PROFILE_PROFILE0, out_profile);
EXPECT_EQ(10, out_level);
EXPECT_EQ(VideoColorSpace::REC709(), out_colorspace);
@@ -268,7 +268,7 @@ TEST(MimeUtilTest, ParseVideoCodecString) {
&out_is_ambiguous, &out_codec, &out_profile,
&out_level, &out_colorspace));
EXPECT_FALSE(out_is_ambiguous);
- EXPECT_EQ(kCodecVP9, out_codec);
+ EXPECT_EQ(VideoCodec::kVP9, out_codec);
EXPECT_EQ(VP9PROFILE_PROFILE2, out_profile);
EXPECT_EQ(10, out_level);
EXPECT_EQ(VideoColorSpace::REC601(), out_colorspace);
@@ -280,7 +280,7 @@ TEST(MimeUtilTest, ParseVideoCodecString) {
&out_profile, &out_level, &out_colorspace));
if (kUsePropCodecs) {
EXPECT_TRUE(out_is_ambiguous);
- EXPECT_EQ(kCodecH264, out_codec);
+ EXPECT_EQ(VideoCodec::kH264, out_codec);
EXPECT_EQ(VIDEO_CODEC_PROFILE_UNKNOWN, out_profile);
EXPECT_EQ(0, out_level);
EXPECT_EQ(VideoColorSpace::REC709(), out_colorspace);
@@ -316,7 +316,7 @@ TEST(MimeUtilTest, ParseVideoCodecString_NoMimeType) {
&out_codec, &out_profile, &out_level,
&out_colorspace));
EXPECT_FALSE(out_is_ambiguous);
- EXPECT_EQ(kCodecH264, out_codec);
+ EXPECT_EQ(VideoCodec::kH264, out_codec);
EXPECT_EQ(H264PROFILE_BASELINE, out_profile);
EXPECT_EQ(30, out_level);
EXPECT_EQ(VideoColorSpace::REC709(), out_colorspace);
@@ -326,7 +326,7 @@ TEST(MimeUtilTest, ParseVideoCodecString_NoMimeType) {
&out_codec, &out_profile, &out_level,
&out_colorspace));
EXPECT_FALSE(out_is_ambiguous);
- EXPECT_EQ(kCodecVP9, out_codec);
+ EXPECT_EQ(VideoCodec::kVP9, out_codec);
EXPECT_EQ(VP9PROFILE_PROFILE0, out_profile);
EXPECT_EQ(10, out_level);
EXPECT_EQ(VideoColorSpace::REC709(), out_colorspace);
@@ -335,7 +335,7 @@ TEST(MimeUtilTest, ParseVideoCodecString_NoMimeType) {
&out_is_ambiguous, &out_codec, &out_profile,
&out_level, &out_colorspace));
EXPECT_FALSE(out_is_ambiguous);
- EXPECT_EQ(kCodecVP9, out_codec);
+ EXPECT_EQ(VideoCodec::kVP9, out_codec);
EXPECT_EQ(VP9PROFILE_PROFILE2, out_profile);
EXPECT_EQ(10, out_level);
EXPECT_EQ(VideoColorSpace::REC601(), out_colorspace);
@@ -344,7 +344,7 @@ TEST(MimeUtilTest, ParseVideoCodecString_NoMimeType) {
EXPECT_TRUE(ParseVideoCodecString("", "avc3", &out_is_ambiguous, &out_codec,
&out_profile, &out_level, &out_colorspace));
EXPECT_TRUE(out_is_ambiguous);
- EXPECT_EQ(kCodecH264, out_codec);
+ EXPECT_EQ(VideoCodec::kH264, out_codec);
EXPECT_EQ(VIDEO_CODEC_PROFILE_UNKNOWN, out_profile);
EXPECT_EQ(0, out_level);
EXPECT_EQ(VideoColorSpace::REC709(), out_colorspace);
@@ -368,7 +368,7 @@ TEST(MimeUtilTest, ParseAudioCodecString) {
EXPECT_TRUE(ParseAudioCodecString("audio/webm", "opus", &out_is_ambiguous,
&out_codec));
EXPECT_FALSE(out_is_ambiguous);
- EXPECT_EQ(kCodecOpus, out_codec);
+ EXPECT_EQ(AudioCodec::kOpus, out_codec);
// Valid AAC string when proprietary codecs are supported.
EXPECT_EQ(kUsePropCodecs,
@@ -376,14 +376,14 @@ TEST(MimeUtilTest, ParseAudioCodecString) {
&out_codec));
if (kUsePropCodecs) {
EXPECT_FALSE(out_is_ambiguous);
- EXPECT_EQ(kCodecAAC, out_codec);
+ EXPECT_EQ(AudioCodec::kAAC, out_codec);
}
// Valid FLAC string with MP4. Neither decoding nor demuxing is proprietary.
EXPECT_TRUE(ParseAudioCodecString("audio/mp4", "flac", &out_is_ambiguous,
&out_codec));
EXPECT_FALSE(out_is_ambiguous);
- EXPECT_EQ(kCodecFLAC, out_codec);
+ EXPECT_EQ(AudioCodec::kFLAC, out_codec);
// Ambiguous AAC string.
// TODO(chcunningha): This can probably be allowed. I think we treat all
@@ -393,20 +393,20 @@ TEST(MimeUtilTest, ParseAudioCodecString) {
&out_codec));
if (kUsePropCodecs) {
EXPECT_TRUE(out_is_ambiguous);
- EXPECT_EQ(kCodecAAC, out_codec);
+ EXPECT_EQ(AudioCodec::kAAC, out_codec);
}
// Valid empty codec string. Codec unambiguously implied by mime type.
EXPECT_TRUE(
ParseAudioCodecString("audio/flac", "", &out_is_ambiguous, &out_codec));
EXPECT_FALSE(out_is_ambiguous);
- EXPECT_EQ(kCodecFLAC, out_codec);
+ EXPECT_EQ(AudioCodec::kFLAC, out_codec);
// Valid audio codec should still be allowed with video mime type.
EXPECT_TRUE(ParseAudioCodecString("video/webm", "opus", &out_is_ambiguous,
&out_codec));
EXPECT_FALSE(out_is_ambiguous);
- EXPECT_EQ(kCodecOpus, out_codec);
+ EXPECT_EQ(AudioCodec::kOpus, out_codec);
// Video codec is not valid for audio API.
EXPECT_FALSE(ParseAudioCodecString("audio/webm", "vp09.00.10.08",
@@ -427,18 +427,18 @@ TEST(MimeUtilTest, ParseAudioCodecString_NoMimeType) {
// Valid Opus string.
EXPECT_TRUE(ParseAudioCodecString("", "opus", &out_is_ambiguous, &out_codec));
EXPECT_FALSE(out_is_ambiguous);
- EXPECT_EQ(kCodecOpus, out_codec);
+ EXPECT_EQ(AudioCodec::kOpus, out_codec);
// Valid AAC string when proprietary codecs are supported.
EXPECT_TRUE(
ParseAudioCodecString("", "mp4a.40.2", &out_is_ambiguous, &out_codec));
EXPECT_FALSE(out_is_ambiguous);
- EXPECT_EQ(kCodecAAC, out_codec);
+ EXPECT_EQ(AudioCodec::kAAC, out_codec);
// Valid FLAC string. Neither decoding nor demuxing is proprietary.
EXPECT_TRUE(ParseAudioCodecString("", "flac", &out_is_ambiguous, &out_codec));
EXPECT_FALSE(out_is_ambiguous);
- EXPECT_EQ(kCodecFLAC, out_codec);
+ EXPECT_EQ(AudioCodec::kFLAC, out_codec);
// Ambiguous AAC string.
// TODO(chcunningha): This can probably be allowed. I think we treat all
@@ -447,7 +447,7 @@ TEST(MimeUtilTest, ParseAudioCodecString_NoMimeType) {
ParseAudioCodecString("", "mp4a.40", &out_is_ambiguous, &out_codec));
if (kUsePropCodecs) {
EXPECT_TRUE(out_is_ambiguous);
- EXPECT_EQ(kCodecAAC, out_codec);
+ EXPECT_EQ(AudioCodec::kAAC, out_codec);
}
// Video codec is not valid for audio API.
@@ -468,26 +468,26 @@ TEST(MimeUtilTest, ParseAudioCodecString_Mp3) {
EXPECT_TRUE(ParseAudioCodecString("audio/mpeg", "mp3", &out_is_ambiguous,
&out_codec));
EXPECT_FALSE(out_is_ambiguous);
- EXPECT_EQ(kCodecMP3, out_codec);
+ EXPECT_EQ(AudioCodec::kMP3, out_codec);
EXPECT_TRUE(
ParseAudioCodecString("audio/mpeg", "", &out_is_ambiguous, &out_codec));
EXPECT_FALSE(out_is_ambiguous);
- EXPECT_EQ(kCodecMP3, out_codec);
+ EXPECT_EQ(AudioCodec::kMP3, out_codec);
EXPECT_TRUE(ParseAudioCodecString("", "mp3", &out_is_ambiguous, &out_codec));
EXPECT_FALSE(out_is_ambiguous);
- EXPECT_EQ(kCodecMP3, out_codec);
+ EXPECT_EQ(AudioCodec::kMP3, out_codec);
EXPECT_TRUE(
ParseAudioCodecString("", "mp4a.69", &out_is_ambiguous, &out_codec));
EXPECT_FALSE(out_is_ambiguous);
- EXPECT_EQ(kCodecMP3, out_codec);
+ EXPECT_EQ(AudioCodec::kMP3, out_codec);
EXPECT_TRUE(
ParseAudioCodecString("", "mp4a.6B", &out_is_ambiguous, &out_codec));
EXPECT_FALSE(out_is_ambiguous);
- EXPECT_EQ(kCodecMP3, out_codec);
+ EXPECT_EQ(AudioCodec::kMP3, out_codec);
}
// These codecs really only have one profile. Ensure that |out_profile| is
@@ -504,7 +504,7 @@ TEST(MimeUtilTest, ParseVideoCodecString_SimpleCodecsHaveProfiles) {
&out_codec, &out_profile, &out_level,
&out_colorspace));
EXPECT_FALSE(out_is_ambiguous);
- EXPECT_EQ(kCodecVP8, out_codec);
+ EXPECT_EQ(VideoCodec::kVP8, out_codec);
EXPECT_EQ(VP8PROFILE_ANY, out_profile);
EXPECT_EQ(0, out_level);
EXPECT_EQ(VideoColorSpace::REC709(), out_colorspace);
@@ -520,7 +520,7 @@ TEST(MimeUtilTest, ParseVideoCodecString_SimpleCodecsHaveProfiles) {
&out_codec, &out_profile, &out_level,
&out_colorspace));
EXPECT_FALSE(out_is_ambiguous);
- EXPECT_EQ(kCodecTheora, out_codec);
+ EXPECT_EQ(VideoCodec::kTheora, out_codec);
EXPECT_EQ(THEORAPROFILE_ANY, out_profile);
EXPECT_EQ(0, out_level);
EXPECT_EQ(VideoColorSpace::REC709(), out_colorspace);
diff --git a/chromium/media/base/mock_demuxer_host.h b/chromium/media/base/mock_demuxer_host.h
index 8cd4894c1fe..818d1f50759 100644
--- a/chromium/media/base/mock_demuxer_host.h
+++ b/chromium/media/base/mock_demuxer_host.h
@@ -15,15 +15,16 @@ namespace media {
class MockDemuxerHost : public DemuxerHost {
public:
MockDemuxerHost();
+
+ MockDemuxerHost(const MockDemuxerHost&) = delete;
+ MockDemuxerHost& operator=(const MockDemuxerHost&) = delete;
+
~MockDemuxerHost() override;
MOCK_METHOD1(OnBufferedTimeRangesChanged,
void(const Ranges<base::TimeDelta>&));
MOCK_METHOD1(SetDuration, void(base::TimeDelta duration));
MOCK_METHOD1(OnDemuxerError, void(PipelineStatus error));
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockDemuxerHost);
};
} // namespace media
diff --git a/chromium/media/base/mock_filters.h b/chromium/media/base/mock_filters.h
index 08e089afc8f..f5db5e83556 100644
--- a/chromium/media/base/mock_filters.h
+++ b/chromium/media/base/mock_filters.h
@@ -14,6 +14,7 @@
#include "base/callback.h"
#include "base/macros.h"
#include "build/build_config.h"
+#include "build/chromeos_buildflags.h"
#include "media/base/audio_decoder.h"
#include "media/base/audio_decoder_config.h"
#include "media/base/audio_encoder.h"
@@ -79,6 +80,10 @@ class MockPipelineClient : public Pipeline::Client {
class MockPipeline : public Pipeline {
public:
MockPipeline();
+
+ MockPipeline(const MockPipeline&) = delete;
+ MockPipeline& operator=(const MockPipeline&) = delete;
+
~MockPipeline() override;
void Start(StartType start_type,
@@ -132,9 +137,6 @@ class MockPipeline : public Pipeline {
}
MOCK_METHOD2(OnSetCdm,
void(CdmContext* cdm_context, CdmAttachedCB& cdm_attached_cb));
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockPipeline);
};
class MockMediaResource : public MediaResource {
@@ -152,6 +154,10 @@ class MockMediaResource : public MediaResource {
class MockDemuxer : public Demuxer {
public:
MockDemuxer();
+
+ MockDemuxer(const MockDemuxer&) = delete;
+ MockDemuxer& operator=(const MockDemuxer&) = delete;
+
~MockDemuxer() override;
// Demuxer implementation.
@@ -184,14 +190,15 @@ class MockDemuxer : public Demuxer {
void(const std::vector<MediaTrack::Id>&,
base::TimeDelta,
TrackChangeCB));
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockDemuxer);
};
class MockDemuxerStream : public DemuxerStream {
public:
explicit MockDemuxerStream(DemuxerStream::Type type);
+
+ MockDemuxerStream(const MockDemuxerStream&) = delete;
+ MockDemuxerStream& operator=(const MockDemuxerStream&) = delete;
+
~MockDemuxerStream() override;
// DemuxerStream implementation.
@@ -213,8 +220,6 @@ class MockDemuxerStream : public DemuxerStream {
Liveness liveness_;
AudioDecoderConfig audio_decoder_config_;
VideoDecoderConfig video_decoder_config_;
-
- DISALLOW_COPY_AND_ASSIGN(MockDemuxerStream);
};
class MockVideoDecoder : public VideoDecoder {
@@ -227,6 +232,10 @@ class MockVideoDecoder : public VideoDecoder {
MockVideoDecoder(bool is_platform_decoder,
bool supports_decryption,
int decoder_id);
+
+ MockVideoDecoder(const MockVideoDecoder&) = delete;
+ MockVideoDecoder& operator=(const MockVideoDecoder&) = delete;
+
~MockVideoDecoder() override;
// Decoder implementation
@@ -271,12 +280,15 @@ class MockVideoDecoder : public VideoDecoder {
const bool is_platform_decoder_;
const bool supports_decryption_;
const int decoder_id_ = 0;
- DISALLOW_COPY_AND_ASSIGN(MockVideoDecoder);
};
class MockAudioEncoder : public AudioEncoder {
public:
MockAudioEncoder();
+
+ MockAudioEncoder(const MockAudioEncoder&) = delete;
+ MockAudioEncoder& operator=(const MockAudioEncoder&) = delete;
+
~MockAudioEncoder() override;
// AudioEncoder implementation.
@@ -298,14 +310,15 @@ class MockAudioEncoder : public AudioEncoder {
// A function for mocking destructor calls
MOCK_METHOD(void, OnDestruct, ());
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockAudioEncoder);
};
class MockVideoEncoder : public VideoEncoder {
public:
MockVideoEncoder();
+
+ MockVideoEncoder(const MockVideoEncoder&) = delete;
+ MockVideoEncoder& operator=(const MockVideoEncoder&) = delete;
+
~MockVideoEncoder() override;
// VideoEncoder implementation.
@@ -335,9 +348,6 @@ class MockVideoEncoder : public VideoEncoder {
// A function for mocking destructor calls
MOCK_METHOD(void, Dtor, ());
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockVideoEncoder);
};
class MockAudioDecoder : public AudioDecoder {
@@ -347,6 +357,10 @@ class MockAudioDecoder : public AudioDecoder {
explicit MockAudioDecoder(bool is_platform_decoder,
bool supports_decryption,
int decoder_id);
+
+ MockAudioDecoder(const MockAudioDecoder&) = delete;
+ MockAudioDecoder& operator=(const MockAudioDecoder&) = delete;
+
~MockAudioDecoder() override;
// Decoder implementation
@@ -382,7 +396,6 @@ class MockAudioDecoder : public AudioDecoder {
const bool is_platform_decoder_;
const bool supports_decryption_;
const int decoder_id_ = 0;
- DISALLOW_COPY_AND_ASSIGN(MockAudioDecoder);
};
class MockRendererClient : public RendererClient {
@@ -410,6 +423,10 @@ class MockRendererClient : public RendererClient {
class MockVideoRenderer : public VideoRenderer {
public:
MockVideoRenderer();
+
+ MockVideoRenderer(const MockVideoRenderer&) = delete;
+ MockVideoRenderer& operator=(const MockVideoRenderer&) = delete;
+
~MockVideoRenderer() override;
// VideoRenderer implementation.
@@ -432,14 +449,15 @@ class MockVideoRenderer : public VideoRenderer {
MOCK_METHOD0(OnTimeStopped, void());
MOCK_METHOD1(SetLatencyHint,
void(absl::optional<base::TimeDelta> latency_hint));
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockVideoRenderer);
};
class MockAudioRenderer : public AudioRenderer {
public:
MockAudioRenderer();
+
+ MockAudioRenderer(const MockAudioRenderer&) = delete;
+ MockAudioRenderer& operator=(const MockAudioRenderer&) = delete;
+
~MockAudioRenderer() override;
// AudioRenderer implementation.
@@ -462,14 +480,15 @@ class MockAudioRenderer : public AudioRenderer {
void(absl::optional<base::TimeDelta> latency_hint));
MOCK_METHOD1(SetPreservesPitch, void(bool));
MOCK_METHOD1(SetAutoplayInitiated, void(bool));
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockAudioRenderer);
};
class MockRenderer : public Renderer {
public:
MockRenderer();
+
+ MockRenderer(const MockRenderer&) = delete;
+ MockRenderer& operator=(const MockRenderer&) = delete;
+
~MockRenderer() override;
// Renderer implementation.
@@ -502,14 +521,15 @@ class MockRenderer : public Renderer {
void(std::vector<DemuxerStream*>, base::OnceClosure));
MOCK_METHOD2(OnSelectedAudioTracksChanged,
void(std::vector<DemuxerStream*>, base::OnceClosure));
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockRenderer);
};
class MockRendererFactory : public RendererFactory {
public:
MockRendererFactory();
+
+ MockRendererFactory(const MockRendererFactory&) = delete;
+ MockRendererFactory& operator=(const MockRendererFactory&) = delete;
+
~MockRendererFactory() override;
// Renderer implementation.
@@ -521,14 +541,15 @@ class MockRendererFactory : public RendererFactory {
VideoRendererSink*,
RequestOverlayInfoCB,
const gfx::ColorSpace&));
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockRendererFactory);
};
class MockTimeSource : public TimeSource {
public:
MockTimeSource();
+
+ MockTimeSource(const MockTimeSource&) = delete;
+ MockTimeSource& operator=(const MockTimeSource&) = delete;
+
~MockTimeSource() override;
// TimeSource implementation.
@@ -540,14 +561,15 @@ class MockTimeSource : public TimeSource {
MOCK_METHOD2(GetWallClockTimes,
bool(const std::vector<base::TimeDelta>&,
std::vector<base::TimeTicks>*));
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockTimeSource);
};
class MockTextTrack : public TextTrack {
public:
MockTextTrack();
+
+ MockTextTrack(const MockTextTrack&) = delete;
+ MockTextTrack& operator=(const MockTextTrack&) = delete;
+
~MockTextTrack() override;
MOCK_METHOD5(addWebVTTCue,
@@ -556,9 +578,6 @@ class MockTextTrack : public TextTrack {
const std::string& id,
const std::string& content,
const std::string& settings));
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockTextTrack);
};
// Mock CDM callbacks.
@@ -600,6 +619,10 @@ class MockCdmClient {
class MockDecryptor : public Decryptor {
public:
MockDecryptor();
+
+ MockDecryptor(const MockDecryptor&) = delete;
+ MockDecryptor& operator=(const MockDecryptor&) = delete;
+
~MockDecryptor() override;
MOCK_METHOD3(Decrypt,
@@ -620,14 +643,15 @@ class MockDecryptor : public Decryptor {
MOCK_METHOD1(ResetDecoder, void(StreamType stream_type));
MOCK_METHOD1(DeinitializeDecoder, void(StreamType stream_type));
MOCK_METHOD0(CanAlwaysDecrypt, bool());
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockDecryptor);
};
class MockCdmContext : public CdmContext {
public:
MockCdmContext();
+
+ MockCdmContext(const MockCdmContext&) = delete;
+ MockCdmContext& operator=(const MockCdmContext&) = delete;
+
~MockCdmContext() override;
MOCK_METHOD1(RegisterEventCB,
@@ -648,8 +672,6 @@ class MockCdmContext : public CdmContext {
private:
absl::optional<base::UnguessableToken> cdm_id_;
-
- DISALLOW_COPY_AND_ASSIGN(MockCdmContext);
};
class MockCdmPromise : public SimpleCdmPromise {
@@ -657,14 +679,15 @@ class MockCdmPromise : public SimpleCdmPromise {
// |expect_success| is true if resolve() should be called, false if reject()
// is expected.
explicit MockCdmPromise(bool expect_success);
+
+ MockCdmPromise(const MockCdmPromise&) = delete;
+ MockCdmPromise& operator=(const MockCdmPromise&) = delete;
+
~MockCdmPromise() override;
MOCK_METHOD0(resolve, void());
MOCK_METHOD3(reject,
void(CdmPromise::Exception, uint32_t, const std::string&));
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockCdmPromise);
};
class MockCdmSessionPromise : public NewSessionCdmPromise {
@@ -673,14 +696,15 @@ class MockCdmSessionPromise : public NewSessionCdmPromise {
// is expected. |new_session_id| is updated with the new session's ID on
// resolve().
MockCdmSessionPromise(bool expect_success, std::string* new_session_id);
+
+ MockCdmSessionPromise(const MockCdmSessionPromise&) = delete;
+ MockCdmSessionPromise& operator=(const MockCdmSessionPromise&) = delete;
+
~MockCdmSessionPromise() override;
MOCK_METHOD1(resolve, void(const std::string&));
MOCK_METHOD3(reject,
void(CdmPromise::Exception, uint32_t, const std::string&));
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockCdmSessionPromise);
};
class MockCdmKeyStatusPromise : public KeyStatusCdmPromise {
@@ -689,14 +713,15 @@ class MockCdmKeyStatusPromise : public KeyStatusCdmPromise {
// is expected. |key_status| is updated with the key status on resolve().
MockCdmKeyStatusPromise(bool expect_success,
CdmKeyInformation::KeyStatus* key_status);
+
+ MockCdmKeyStatusPromise(const MockCdmKeyStatusPromise&) = delete;
+ MockCdmKeyStatusPromise& operator=(const MockCdmKeyStatusPromise&) = delete;
+
~MockCdmKeyStatusPromise() override;
MOCK_METHOD1(resolve, void(const CdmKeyInformation::KeyStatus&));
MOCK_METHOD3(reject,
void(CdmPromise::Exception, uint32_t, const std::string&));
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockCdmKeyStatusPromise);
};
class MockCdm : public ContentDecryptionModule {
@@ -770,6 +795,10 @@ class MockCdm : public ContentDecryptionModule {
class MockCdmFactory : public CdmFactory {
public:
explicit MockCdmFactory(scoped_refptr<MockCdm> cdm);
+
+ MockCdmFactory(const MockCdmFactory&) = delete;
+ MockCdmFactory& operator=(const MockCdmFactory&) = delete;
+
~MockCdmFactory() override;
// CdmFactory implementation.
@@ -793,13 +822,15 @@ class MockCdmFactory : public CdmFactory {
// Callback to be used before Create() successfully calls |cdm_created_cb|.
base::RepeatingClosure before_creation_cb_;
-
- DISALLOW_COPY_AND_ASSIGN(MockCdmFactory);
};
class MockStreamParser : public StreamParser {
public:
MockStreamParser();
+
+ MockStreamParser(const MockStreamParser&) = delete;
+ MockStreamParser& operator=(const MockStreamParser&) = delete;
+
~MockStreamParser() override;
// StreamParser interface
@@ -816,14 +847,15 @@ class MockStreamParser : public StreamParser {
MOCK_METHOD0(Flush, void());
MOCK_CONST_METHOD0(GetGenerateTimestampsFlag, bool());
MOCK_METHOD2(Parse, bool(const uint8_t*, int));
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockStreamParser);
};
class MockMediaClient : public media::MediaClient {
public:
MockMediaClient();
+
+ MockMediaClient(const MockMediaClient&) = delete;
+ MockMediaClient& operator=(const MockMediaClient&) = delete;
+
~MockMediaClient() override;
// MediaClient implementation.
@@ -837,9 +869,6 @@ class MockMediaClient : public media::MediaClient {
MOCK_METHOD1(GetAudioRendererAlgorithmParameters,
absl::optional<::media::AudioRendererAlgorithmParameters>(
media::AudioParameters audio_parameters));
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockMediaClient);
};
} // namespace media
diff --git a/chromium/media/base/mock_media_log.h b/chromium/media/base/mock_media_log.h
index b568f7e1080..87d416975f3 100644
--- a/chromium/media/base/mock_media_log.h
+++ b/chromium/media/base/mock_media_log.h
@@ -81,6 +81,10 @@ MATCHER_P(MatchesPropertyAnyValue, message, "") {
class MockMediaLog : public MediaLog {
public:
MockMediaLog();
+
+ MockMediaLog(const MockMediaLog&) = delete;
+ MockMediaLog& operator=(const MockMediaLog&) = delete;
+
~MockMediaLog() override;
MOCK_METHOD1(DoAddLogRecordLogString, void(const std::string& event));
@@ -105,8 +109,6 @@ class MockMediaLog : public MediaLog {
private:
std::unique_ptr<MediaLogRecord> most_recent_event_;
-
- DISALLOW_COPY_AND_ASSIGN(MockMediaLog);
};
} // namespace media
diff --git a/chromium/media/base/moving_average.cc b/chromium/media/base/moving_average.cc
index 124e0b51046..0779ab6ee3a 100644
--- a/chromium/media/base/moving_average.cc
+++ b/chromium/media/base/moving_average.cc
@@ -45,7 +45,7 @@ base::TimeDelta MovingAverage::Deviation() const {
}
deviation_secs /= size;
- return base::TimeDelta::FromSecondsD(std::sqrt(deviation_secs));
+ return base::Seconds(std::sqrt(deviation_secs));
}
void MovingAverage::Reset() {
diff --git a/chromium/media/base/moving_average.h b/chromium/media/base/moving_average.h
index d1a966e632f..a931edf6173 100644
--- a/chromium/media/base/moving_average.h
+++ b/chromium/media/base/moving_average.h
@@ -23,6 +23,10 @@ class MEDIA_EXPORT MovingAverage {
public:
// Creates a MovingAverage instance with space for |depth| samples.
explicit MovingAverage(size_t depth);
+
+ MovingAverage(const MovingAverage&) = delete;
+ MovingAverage& operator=(const MovingAverage&) = delete;
+
~MovingAverage();
// Adds a new sample to the average; replaces the oldest sample if |depth_|
@@ -59,8 +63,6 @@ class MEDIA_EXPORT MovingAverage {
// Maximum value ever seen.
base::TimeDelta max_ = kNoTimestamp;
-
- DISALLOW_COPY_AND_ASSIGN(MovingAverage);
};
} // namespace media
diff --git a/chromium/media/base/moving_average_unittest.cc b/chromium/media/base/moving_average_unittest.cc
index a195985297d..f3d06d89db1 100644
--- a/chromium/media/base/moving_average_unittest.cc
+++ b/chromium/media/base/moving_average_unittest.cc
@@ -11,25 +11,23 @@ namespace media {
TEST(MovingAverageTest, AverageAndDeviation) {
const int kSamples = 5;
MovingAverage moving_average(kSamples);
- moving_average.AddSample(base::TimeDelta::FromSeconds(1));
- EXPECT_EQ(base::TimeDelta::FromSeconds(1), moving_average.Average());
+ moving_average.AddSample(base::Seconds(1));
+ EXPECT_EQ(base::Seconds(1), moving_average.Average());
EXPECT_EQ(base::TimeDelta(), moving_average.Deviation());
for (int i = 0; i < kSamples - 1; ++i)
- moving_average.AddSample(base::TimeDelta::FromSeconds(1));
- EXPECT_EQ(base::TimeDelta::FromSeconds(1), moving_average.Average());
+ moving_average.AddSample(base::Seconds(1));
+ EXPECT_EQ(base::Seconds(1), moving_average.Average());
EXPECT_EQ(base::TimeDelta(), moving_average.Deviation());
base::TimeDelta expect_deviation[] = {
- base::TimeDelta::FromMicroseconds(200000),
- base::TimeDelta::FromMicroseconds(244948),
- base::TimeDelta::FromMicroseconds(244948),
- base::TimeDelta::FromMicroseconds(200000),
- base::TimeDelta::FromMilliseconds(0),
+ base::Microseconds(200000), base::Microseconds(244948),
+ base::Microseconds(244948), base::Microseconds(200000),
+ base::Milliseconds(0),
};
for (int i = 0; i < kSamples; ++i) {
- moving_average.AddSample(base::TimeDelta::FromMilliseconds(500));
- EXPECT_EQ(base::TimeDelta::FromMilliseconds(1000 - (i + 1) * 100),
+ moving_average.AddSample(base::Milliseconds(500));
+ EXPECT_EQ(base::Milliseconds(1000 - (i + 1) * 100),
moving_average.Average());
EXPECT_EQ(expect_deviation[i], moving_average.Deviation());
}
@@ -37,8 +35,8 @@ TEST(MovingAverageTest, AverageAndDeviation) {
TEST(MovingAverageTest, Reset) {
MovingAverage moving_average(2);
- moving_average.AddSample(base::TimeDelta::FromSeconds(1));
- EXPECT_EQ(base::TimeDelta::FromSeconds(1), moving_average.Average());
+ moving_average.AddSample(base::Seconds(1));
+ EXPECT_EQ(base::Seconds(1), moving_average.Average());
moving_average.Reset();
moving_average.AddSample(base::TimeDelta());
EXPECT_EQ(base::TimeDelta(), moving_average.Average());
@@ -47,9 +45,9 @@ TEST(MovingAverageTest, Reset) {
TEST(MovingAverageTest, MinAndMax) {
MovingAverage moving_average(5);
- base::TimeDelta min = base::TimeDelta::FromSeconds(1);
- base::TimeDelta med = base::TimeDelta::FromSeconds(50);
- base::TimeDelta max = base::TimeDelta::FromSeconds(100);
+ base::TimeDelta min = base::Seconds(1);
+ base::TimeDelta med = base::Seconds(50);
+ base::TimeDelta max = base::Seconds(100);
moving_average.AddSample(min);
moving_average.AddSample(med);
moving_average.AddSample(med);
diff --git a/chromium/media/base/multi_channel_resampler.h b/chromium/media/base/multi_channel_resampler.h
index b455adb4163..fbef7e724f4 100644
--- a/chromium/media/base/multi_channel_resampler.h
+++ b/chromium/media/base/multi_channel_resampler.h
@@ -36,6 +36,10 @@ class MEDIA_EXPORT MultiChannelResampler {
double io_sample_rate_ratio,
size_t request_frames,
const ReadCB read_cb);
+
+ MultiChannelResampler(const MultiChannelResampler&) = delete;
+ MultiChannelResampler& operator=(const MultiChannelResampler&) = delete;
+
virtual ~MultiChannelResampler();
// Resamples |frames| of data from |read_cb_| into AudioBus.
@@ -84,8 +88,6 @@ class MEDIA_EXPORT MultiChannelResampler {
// The number of output frames that have successfully been processed during
// the current Resample() call.
int output_frames_ready_;
-
- DISALLOW_COPY_AND_ASSIGN(MultiChannelResampler);
};
} // namespace media
diff --git a/chromium/media/base/multi_channel_resampler_unittest.cc b/chromium/media/base/multi_channel_resampler_unittest.cc
index 1741286ad4f..a9de77492af 100644
--- a/chromium/media/base/multi_channel_resampler_unittest.cc
+++ b/chromium/media/base/multi_channel_resampler_unittest.cc
@@ -41,6 +41,11 @@ class MultiChannelResamplerTest
MultiChannelResamplerTest()
: last_frame_delay_(-1) {
}
+
+ MultiChannelResamplerTest(const MultiChannelResamplerTest&) = delete;
+ MultiChannelResamplerTest& operator=(const MultiChannelResamplerTest&) =
+ delete;
+
virtual ~MultiChannelResamplerTest() = default;
void InitializeAudioData(int channels, int frames) {
@@ -121,8 +126,6 @@ class MultiChannelResamplerTest
bool fill_junk_values_;
std::unique_ptr<AudioBus> audio_bus_;
int last_frame_delay_;
-
- DISALLOW_COPY_AND_ASSIGN(MultiChannelResamplerTest);
};
TEST_P(MultiChannelResamplerTest, HighLatency) {
diff --git a/chromium/media/base/null_video_sink.h b/chromium/media/base/null_video_sink.h
index 988799c4881..3eb4e32358e 100644
--- a/chromium/media/base/null_video_sink.h
+++ b/chromium/media/base/null_video_sink.h
@@ -30,6 +30,10 @@ class MEDIA_EXPORT NullVideoSink : public VideoRendererSink {
base::TimeDelta interval,
const NewFrameCB& new_frame_cb,
const scoped_refptr<base::SingleThreadTaskRunner>& task_runner);
+
+ NullVideoSink(const NullVideoSink&) = delete;
+ NullVideoSink& operator=(const NullVideoSink&) = delete;
+
~NullVideoSink() override;
// VideoRendererSink implementation.
@@ -86,8 +90,6 @@ class MEDIA_EXPORT NullVideoSink : public VideoRendererSink {
// Value passed to RenderCallback::Render().
bool background_render_;
-
- DISALLOW_COPY_AND_ASSIGN(NullVideoSink);
};
} // namespace media
diff --git a/chromium/media/base/null_video_sink_unittest.cc b/chromium/media/base/null_video_sink_unittest.cc
index 4fb456bc062..9b529249ff7 100644
--- a/chromium/media/base/null_video_sink_unittest.cc
+++ b/chromium/media/base/null_video_sink_unittest.cc
@@ -30,8 +30,12 @@ class NullVideoSinkTest : public testing::Test,
public:
NullVideoSinkTest() {
// Never use null TimeTicks since they have special connotations.
- tick_clock_.Advance(base::TimeDelta::FromMicroseconds(12345));
+ tick_clock_.Advance(base::Microseconds(12345));
}
+
+ NullVideoSinkTest(const NullVideoSinkTest&) = delete;
+ NullVideoSinkTest& operator=(const NullVideoSinkTest&) = delete;
+
~NullVideoSinkTest() override = default;
std::unique_ptr<NullVideoSink> ConstructSink(bool clockless,
@@ -67,12 +71,10 @@ class NullVideoSinkTest : public testing::Test,
protected:
base::test::SingleThreadTaskEnvironment task_environment_;
base::SimpleTestTickClock tick_clock_;
-
- DISALLOW_COPY_AND_ASSIGN(NullVideoSinkTest);
};
TEST_F(NullVideoSinkTest, BasicFunctionality) {
- const base::TimeDelta kInterval = base::TimeDelta::FromMilliseconds(25);
+ const base::TimeDelta kInterval = base::Milliseconds(25);
std::unique_ptr<NullVideoSink> sink = ConstructSink(false, kInterval);
scoped_refptr<VideoFrame> test_frame = CreateFrame(base::TimeDelta());
@@ -125,7 +127,7 @@ TEST_F(NullVideoSinkTest, BasicFunctionality) {
TEST_F(NullVideoSinkTest, ClocklessFunctionality) {
// Construct the sink with a huge interval, it should still complete quickly.
- const base::TimeDelta interval = base::TimeDelta::FromSeconds(10);
+ const base::TimeDelta interval = base::Seconds(10);
std::unique_ptr<NullVideoSink> sink = ConstructSink(true, interval);
scoped_refptr<VideoFrame> test_frame = CreateFrame(base::TimeDelta());
diff --git a/chromium/media/base/offloading_video_encoder.cc b/chromium/media/base/offloading_video_encoder.cc
index 473edb9e727..2b8e0ccaa77 100644
--- a/chromium/media/base/offloading_video_encoder.cc
+++ b/chromium/media/base/offloading_video_encoder.cc
@@ -30,7 +30,8 @@ OffloadingVideoEncoder::OffloadingVideoEncoder(
std::unique_ptr<VideoEncoder> wrapped_encoder)
: OffloadingVideoEncoder(std::move(wrapped_encoder),
base::ThreadPool::CreateSequencedTaskRunner(
- {base::TaskPriority::USER_BLOCKING}),
+ {base::TaskPriority::USER_BLOCKING,
+ base::WithBaseSyncPrimitives()}),
base::SequencedTaskRunnerHandle::Get()) {}
void OffloadingVideoEncoder::Initialize(VideoCodecProfile profile,
diff --git a/chromium/media/base/pipeline_impl.cc b/chromium/media/base/pipeline_impl.cc
index f2ccd2e40f6..3b10cc2117e 100644
--- a/chromium/media/base/pipeline_impl.cc
+++ b/chromium/media/base/pipeline_impl.cc
@@ -59,6 +59,10 @@ class PipelineImpl::RendererWrapper final : public DemuxerHost,
RendererWrapper(scoped_refptr<base::SingleThreadTaskRunner> media_task_runner,
scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
MediaLog* media_log);
+
+ RendererWrapper(const RendererWrapper&) = delete;
+ RendererWrapper& operator=(const RendererWrapper&) = delete;
+
~RendererWrapper() final;
void Start(StartType start_type,
@@ -233,7 +237,6 @@ class PipelineImpl::RendererWrapper final : public DemuxerHost,
PipelineStatusCB error_cb_;
base::WeakPtrFactory<RendererWrapper> weak_factory_{this};
- DISALLOW_COPY_AND_ASSIGN(RendererWrapper);
};
PipelineImpl::RendererWrapper::RendererWrapper(
@@ -892,12 +895,10 @@ void PipelineImpl::RendererWrapper::OnPipelineError(PipelineStatus error) {
if (status_ != PIPELINE_OK)
return;
- // Don't report pipeline error events to the media log here. The embedder
- // will log this when Client::OnError is called. If the pipeline is already
- // stopped or stopping we also don't want to log any event. In case we are
- // suspending or suspended, the error may be recoverable, so don't propagate
- // it now, instead let the subsequent seek during resume propagate it if
- // it's unrecoverable.
+ // If the pipeline is already stopping or stopped we don't need to report an
+ // error. Similarly if the pipeline is suspending or suspended, the error may
+ // be recoverable, so don't propagate it now, instead let the subsequent seek
+ // during resume propagate it if it's unrecoverable.
if (state_ == kStopping || state_ == kStopped || state_ == kSuspending ||
state_ == kSuspended) {
return;
@@ -980,6 +981,7 @@ void PipelineImpl::RendererWrapper::CompleteSeek(base::TimeDelta seek_time,
}
void PipelineImpl::RendererWrapper::CompleteSuspend(PipelineStatus status) {
+ DVLOG(1) << __func__ << ": status=" << status;
DCHECK(media_task_runner_->BelongsToCurrentThread());
DCHECK_EQ(kSuspending, state_);
@@ -1667,8 +1669,9 @@ void PipelineImpl::OnSeekDone(bool is_suspended) {
seek_time_ = kNoTimestamp;
is_suspended_ = is_suspended;
- DCHECK(seek_cb_);
- std::move(seek_cb_).Run(PIPELINE_OK);
+ // `seek_cb_` could have been reset in OnError().
+ if (seek_cb_)
+ std::move(seek_cb_).Run(PIPELINE_OK);
}
void PipelineImpl::OnSuspendDone() {
@@ -1677,8 +1680,10 @@ void PipelineImpl::OnSuspendDone() {
DCHECK(IsRunning());
is_suspended_ = true;
- DCHECK(suspend_cb_);
- std::move(suspend_cb_).Run(PIPELINE_OK);
+
+ // `suspend_cb_` could have been reset in OnError().
+ if (suspend_cb_)
+ std::move(suspend_cb_).Run(PIPELINE_OK);
}
} // namespace media
diff --git a/chromium/media/base/pipeline_impl.h b/chromium/media/base/pipeline_impl.h
index 2dcd76334f1..a933e2f12c6 100644
--- a/chromium/media/base/pipeline_impl.h
+++ b/chromium/media/base/pipeline_impl.h
@@ -86,6 +86,10 @@ class MEDIA_EXPORT PipelineImpl : public Pipeline {
scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
CreateRendererCB create_renderer_cb,
MediaLog* media_log);
+
+ PipelineImpl(const PipelineImpl&) = delete;
+ PipelineImpl& operator=(const PipelineImpl&) = delete;
+
~PipelineImpl() override;
// Pipeline implementation.
@@ -215,8 +219,6 @@ class MEDIA_EXPORT PipelineImpl : public Pipeline {
base::ThreadChecker thread_checker_;
base::WeakPtrFactory<PipelineImpl> weak_factory_{this};
-
- DISALLOW_COPY_AND_ASSIGN(PipelineImpl);
};
} // namespace media
diff --git a/chromium/media/base/pipeline_impl_unittest.cc b/chromium/media/base/pipeline_impl_unittest.cc
index d5f071b9b65..c5fc84fd668 100644
--- a/chromium/media/base/pipeline_impl_unittest.cc
+++ b/chromium/media/base/pipeline_impl_unittest.cc
@@ -90,6 +90,10 @@ class PipelineImplTest : public ::testing::Test {
class CallbackHelper : public MockPipelineClient {
public:
CallbackHelper() = default;
+
+ CallbackHelper(const CallbackHelper&) = delete;
+ CallbackHelper& operator=(const CallbackHelper&) = delete;
+
virtual ~CallbackHelper() = default;
MOCK_METHOD1(OnStart, void(PipelineStatus));
@@ -97,9 +101,6 @@ class PipelineImplTest : public ::testing::Test {
MOCK_METHOD1(OnSuspend, void(PipelineStatus));
MOCK_METHOD1(OnResume, void(PipelineStatus));
MOCK_METHOD1(OnCdmAttached, void(bool));
-
- private:
- DISALLOW_COPY_AND_ASSIGN(CallbackHelper);
};
PipelineImplTest()
@@ -131,6 +132,9 @@ class PipelineImplTest : public ::testing::Test {
EXPECT_CALL(*renderer_, SetPreservesPitch(true)).Times(AnyNumber());
}
+ PipelineImplTest(const PipelineImplTest&) = delete;
+ PipelineImplTest& operator=(const PipelineImplTest&) = delete;
+
~PipelineImplTest() override {
if (pipeline_->IsRunning()) {
ExpectDemuxerStop();
@@ -157,7 +161,7 @@ class PipelineImplTest : public ::testing::Test {
void SetDemuxerExpectations() {
// Initialize with a default non-zero duration.
- SetDemuxerExpectations(base::TimeDelta::FromSeconds(10));
+ SetDemuxerExpectations(base::Seconds(10));
}
std::unique_ptr<StrictMock<MockDemuxerStream>> CreateStream(
@@ -366,9 +370,6 @@ class PipelineImplTest : public ::testing::Test {
VideoDecoderConfig video_decoder_config_;
PipelineMetadata metadata_;
base::TimeDelta start_time_;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(PipelineImplTest);
};
// Test that playback controls methods can be set even before the pipeline is
@@ -437,7 +438,7 @@ TEST_F(PipelineImplTest, StartThenStopImmediately) {
TEST_F(PipelineImplTest, StartSuspendedAndResumeAudioOnly) {
CreateAudioStream();
- SetDemuxerExpectations(base::TimeDelta::FromSeconds(3000));
+ SetDemuxerExpectations(base::Seconds(3000));
StartPipelineAndExpect(PIPELINE_OK,
Pipeline::StartType::kSuspendAfterMetadataForAudioOnly,
@@ -445,14 +446,14 @@ TEST_F(PipelineImplTest, StartSuspendedAndResumeAudioOnly) {
ASSERT_TRUE(pipeline_->IsSuspended());
ResetRenderer();
- base::TimeDelta expected = base::TimeDelta::FromSeconds(2000);
+ base::TimeDelta expected = base::Seconds(2000);
ExpectResume(expected);
DoResume(expected);
}
TEST_F(PipelineImplTest, StartSuspendedAndResumeAudioVideo) {
CreateAudioAndVideoStream();
- SetDemuxerExpectations(base::TimeDelta::FromSeconds(3000));
+ SetDemuxerExpectations(base::Seconds(3000));
StartPipelineAndExpect(PIPELINE_OK,
Pipeline::StartType::kSuspendAfterMetadata,
@@ -460,14 +461,14 @@ TEST_F(PipelineImplTest, StartSuspendedAndResumeAudioVideo) {
ASSERT_TRUE(pipeline_->IsSuspended());
ResetRenderer();
- base::TimeDelta expected = base::TimeDelta::FromSeconds(2000);
+ base::TimeDelta expected = base::Seconds(2000);
ExpectResume(expected);
DoResume(expected);
}
TEST_F(PipelineImplTest, StartSuspendedFailsOnVideoWithAudioOnlyExpectation) {
CreateAudioAndVideoStream();
- SetDemuxerExpectations(base::TimeDelta::FromSeconds(3000));
+ SetDemuxerExpectations(base::Seconds(3000));
// StartType kSuspendAfterMetadataForAudioOnly only applies to AudioOnly.
// Since this playback has video, renderer will be initialized and the
@@ -558,20 +559,20 @@ TEST_F(PipelineImplTest, EncryptedStream_SetCdmAfterStart) {
TEST_F(PipelineImplTest, Seek) {
CreateAudioAndVideoStream();
- SetDemuxerExpectations(base::TimeDelta::FromSeconds(3000));
+ SetDemuxerExpectations(base::Seconds(3000));
// Initialize then seek!
StartPipelineAndExpect(PIPELINE_OK);
// Every filter should receive a call to Seek().
- base::TimeDelta expected = base::TimeDelta::FromSeconds(2000);
+ base::TimeDelta expected = base::Seconds(2000);
ExpectSeek(expected, false);
DoSeek(expected);
}
TEST_F(PipelineImplTest, SeekAfterError) {
CreateAudioStream();
- SetDemuxerExpectations(base::TimeDelta::FromSeconds(3000));
+ SetDemuxerExpectations(base::Seconds(3000));
// Initialize then seek!
StartPipelineAndExpect(PIPELINE_OK);
@@ -584,14 +585,14 @@ TEST_F(PipelineImplTest, SeekAfterError) {
EXPECT_CALL(callbacks_, OnSeek(PIPELINE_ERROR_INVALID_STATE));
pipeline_->Seek(
- base::TimeDelta::FromMilliseconds(100),
+ base::Milliseconds(100),
base::BindOnce(&CallbackHelper::OnSeek, base::Unretained(&callbacks_)));
base::RunLoop().RunUntilIdle();
}
TEST_F(PipelineImplTest, SuspendResume) {
CreateAudioAndVideoStream();
- SetDemuxerExpectations(base::TimeDelta::FromSeconds(3000));
+ SetDemuxerExpectations(base::Seconds(3000));
StartPipelineAndExpect(PIPELINE_OK);
@@ -617,7 +618,7 @@ TEST_F(PipelineImplTest, SuspendResume) {
EXPECT_EQ(0, pipeline_->GetStatistics().audio_memory_usage);
EXPECT_EQ(0, pipeline_->GetStatistics().video_memory_usage);
- base::TimeDelta expected = base::TimeDelta::FromSeconds(2000);
+ base::TimeDelta expected = base::Seconds(2000);
ExpectResume(expected);
EXPECT_CALL(*renderer_, SetPreservesPitch(false)).Times(1);
@@ -679,7 +680,7 @@ TEST_F(PipelineImplTest, SetPreservesPitch) {
TEST_F(PipelineImplTest, Properties) {
CreateVideoStream();
- const auto kDuration = base::TimeDelta::FromSeconds(100);
+ const auto kDuration = base::Seconds(100);
SetDemuxerExpectations(kDuration);
StartPipelineAndExpect(PIPELINE_OK);
@@ -690,7 +691,7 @@ TEST_F(PipelineImplTest, Properties) {
TEST_F(PipelineImplTest, GetBufferedTimeRanges) {
CreateVideoStream();
- const auto kDuration = base::TimeDelta::FromSeconds(100);
+ const auto kDuration = base::Seconds(100);
SetDemuxerExpectations(kDuration);
StartPipelineAndExpect(PIPELINE_OK);
@@ -714,7 +715,7 @@ TEST_F(PipelineImplTest, BufferedTimeRangesCanChangeAfterStop) {
base::RunLoop().RunUntilIdle();
pipeline_->Stop();
- RunBufferedTimeRangesTest(base::TimeDelta::FromSeconds(5));
+ RunBufferedTimeRangesTest(base::Seconds(5));
}
TEST_F(PipelineImplTest, OnStatisticsUpdate) {
@@ -769,7 +770,7 @@ TEST_F(PipelineImplTest, EndedCallback) {
base::RunLoop().RunUntilIdle();
}
-TEST_F(PipelineImplTest, ErrorDuringSeek) {
+TEST_F(PipelineImplTest, DemuxerErrorDuringSeek) {
CreateAudioStream();
SetDemuxerExpectations();
StartPipelineAndExpect(PIPELINE_OK);
@@ -779,7 +780,7 @@ TEST_F(PipelineImplTest, ErrorDuringSeek) {
pipeline_->SetPlaybackRate(playback_rate);
base::RunLoop().RunUntilIdle();
- base::TimeDelta seek_time = base::TimeDelta::FromSeconds(5);
+ base::TimeDelta seek_time = base::Seconds(5);
EXPECT_CALL(*renderer_, OnFlush(_)).WillOnce(RunOnceClosure<0>());
@@ -795,6 +796,48 @@ TEST_F(PipelineImplTest, ErrorDuringSeek) {
base::RunLoop().RunUntilIdle();
}
+TEST_F(PipelineImplTest, PipelineErrorDuringSeek) {
+ CreateAudioStream();
+ SetDemuxerExpectations();
+ StartPipelineAndExpect(PIPELINE_OK);
+
+ base::TimeDelta seek_time = base::Seconds(5);
+
+ // Set expectations for seek.
+ EXPECT_CALL(*renderer_, OnFlush(_)).WillOnce(RunOnceClosure<0>());
+ EXPECT_CALL(*renderer_, SetPlaybackRate(_));
+ EXPECT_CALL(*renderer_, StartPlayingFrom(seek_time));
+ EXPECT_CALL(*demuxer_, AbortPendingReads());
+ EXPECT_CALL(*demuxer_, OnSeek(seek_time, _))
+ .WillOnce(RunOnceCallback<1>(PIPELINE_OK));
+ EXPECT_CALL(callbacks_, OnSeek(PIPELINE_ERROR_DECODE));
+
+ // Triggers pipeline error during pending seek.
+ pipeline_->Seek(seek_time, base::BindOnce(&CallbackHelper::OnSeek,
+ base::Unretained(&callbacks_)));
+ renderer_client_->OnError(PIPELINE_ERROR_DECODE);
+ base::RunLoop().RunUntilIdle();
+}
+
+TEST_F(PipelineImplTest, PipelineErrorDuringSuspend) {
+ CreateAudioAndVideoStream();
+ SetDemuxerExpectations(base::Seconds(3000));
+ StartPipelineAndExpect(PIPELINE_OK);
+
+ // Set expectations for suspend.
+ EXPECT_CALL(*demuxer_, AbortPendingReads());
+ EXPECT_CALL(*renderer_, SetPlaybackRate(0));
+ EXPECT_CALL(callbacks_, OnSuspend(PIPELINE_ERROR_DECODE));
+
+ // Triggers pipeline error during pending suspend. The order matters for
+ // reproducing crbug.com/1250636. Otherwise OnError() is ignored if already in
+ // kSuspending state.
+ renderer_client_->OnError(PIPELINE_ERROR_DECODE);
+ pipeline_->Suspend(base::BindOnce(&CallbackHelper::OnSuspend,
+ base::Unretained(&callbacks_)));
+ base::RunLoop().RunUntilIdle();
+}
+
TEST_F(PipelineImplTest, DestroyAfterStop) {
CreateAudioStream();
SetDemuxerExpectations();
@@ -819,13 +862,13 @@ TEST_F(PipelineImplTest, Underflow) {
base::RunLoop().RunUntilIdle();
// Seek while underflowed.
- base::TimeDelta expected = base::TimeDelta::FromSeconds(5);
+ base::TimeDelta expected = base::Seconds(5);
ExpectSeek(expected, true);
DoSeek(expected);
}
TEST_F(PipelineImplTest, PositiveStartTime) {
- start_time_ = base::TimeDelta::FromSeconds(1);
+ start_time_ = base::Seconds(1);
EXPECT_CALL(*demuxer_, GetStartTime()).WillRepeatedly(Return(start_time_));
CreateAudioStream();
SetDemuxerExpectations();
@@ -841,14 +884,14 @@ TEST_F(PipelineImplTest, GetMediaTime) {
StartPipelineAndExpect(PIPELINE_OK);
// Pipeline should report the same media time returned by the renderer.
- base::TimeDelta kMediaTime = base::TimeDelta::FromSeconds(2);
+ base::TimeDelta kMediaTime = base::Seconds(2);
EXPECT_CALL(*renderer_, GetMediaTime()).WillRepeatedly(Return(kMediaTime));
EXPECT_EQ(kMediaTime, pipeline_->GetMediaTime());
// Media time should not go backwards even if the renderer returns an
// errorneous value. PipelineImpl should clamp it to last reported value.
EXPECT_CALL(*renderer_, GetMediaTime())
- .WillRepeatedly(Return(base::TimeDelta::FromSeconds(1)));
+ .WillRepeatedly(Return(base::Seconds(1)));
EXPECT_EQ(kMediaTime, pipeline_->GetMediaTime());
}
@@ -862,13 +905,13 @@ TEST_F(PipelineImplTest, GetMediaTimeAfterSeek) {
StartPipelineAndExpect(PIPELINE_OK);
// Pipeline should report the same media time returned by the renderer.
- base::TimeDelta kMediaTime = base::TimeDelta::FromSeconds(2);
+ base::TimeDelta kMediaTime = base::Seconds(2);
EXPECT_CALL(*renderer_, GetMediaTime()).WillRepeatedly(Return(kMediaTime));
EXPECT_EQ(kMediaTime, pipeline_->GetMediaTime());
// Seek backward 1 second. Do not run RunLoop to ensure renderer is not yet
// notified of the seek (via media thread).
- base::TimeDelta kSeekTime = kMediaTime - base::TimeDelta::FromSeconds(1);
+ base::TimeDelta kSeekTime = kMediaTime - base::Seconds(1);
ExpectSeek(kSeekTime, false);
pipeline_->Seek(kSeekTime, base::BindOnce(&CallbackHelper::OnSeek,
base::Unretained(&callbacks_)));
@@ -939,6 +982,10 @@ class PipelineTeardownTest : public PipelineImplTest {
};
PipelineTeardownTest() = default;
+
+ PipelineTeardownTest(const PipelineTeardownTest&) = delete;
+ PipelineTeardownTest& operator=(const PipelineTeardownTest&) = delete;
+
~PipelineTeardownTest() override = default;
void RunTest(TeardownState state, StopOrError stop_or_error) {
@@ -999,7 +1046,7 @@ class PipelineTeardownTest : public PipelineImplTest {
CreateAudioStream();
CreateVideoStream();
- SetDemuxerExpectations(base::TimeDelta::FromSeconds(3000));
+ SetDemuxerExpectations(base::Seconds(3000));
EXPECT_CALL(*renderer_, SetVolume(1.0f));
if (state == kInitRenderer) {
@@ -1044,7 +1091,7 @@ class PipelineTeardownTest : public PipelineImplTest {
EXPECT_CALL(*demuxer_, Stop());
pipeline_->Seek(
- base::TimeDelta::FromSeconds(10),
+ base::Seconds(10),
base::BindOnce(&CallbackHelper::OnSeek, base::Unretained(&callbacks_)));
base::RunLoop().RunUntilIdle();
}
@@ -1155,8 +1202,6 @@ class PipelineTeardownTest : public PipelineImplTest {
base::RunLoop().RunUntilIdle();
}
-
- DISALLOW_COPY_AND_ASSIGN(PipelineTeardownTest);
};
#define INSTANTIATE_TEARDOWN_TEST(stop_or_error, state) \
diff --git a/chromium/media/base/reentrancy_checker.h b/chromium/media/base/reentrancy_checker.h
index 574a70b2e53..dbe08ac54c6 100644
--- a/chromium/media/base/reentrancy_checker.h
+++ b/chromium/media/base/reentrancy_checker.h
@@ -50,13 +50,15 @@ namespace media {
class SCOPED_LOCKABLE MEDIA_EXPORT NonReentrantScope {
public:
explicit NonReentrantScope(base::Lock& lock) EXCLUSIVE_LOCK_FUNCTION(lock);
+
+ NonReentrantScope(const NonReentrantScope&) = delete;
+ NonReentrantScope& operator=(const NonReentrantScope&) = delete;
+
~NonReentrantScope() UNLOCK_FUNCTION();
private:
base::Lock& lock_;
bool is_lock_holder_ = false;
-
- DISALLOW_COPY_AND_ASSIGN(NonReentrantScope);
};
} // namespace media
diff --git a/chromium/media/base/renderer.h b/chromium/media/base/renderer.h
index 09d775f0c99..809657cd991 100644
--- a/chromium/media/base/renderer.h
+++ b/chromium/media/base/renderer.h
@@ -25,6 +25,9 @@ class MEDIA_EXPORT Renderer {
public:
Renderer();
+ Renderer(const Renderer&) = delete;
+ Renderer& operator=(const Renderer&) = delete;
+
// Stops rendering and fires any pending callbacks.
virtual ~Renderer();
@@ -88,9 +91,6 @@ class MEDIA_EXPORT Renderer {
virtual void OnEnabledAudioTracksChanged(
const std::vector<DemuxerStream*>& enabled_tracks,
base::OnceClosure change_completed_cb);
-
- private:
- DISALLOW_COPY_AND_ASSIGN(Renderer);
};
} // namespace media
diff --git a/chromium/media/base/renderer_factory.h b/chromium/media/base/renderer_factory.h
index 1001d7e0ff0..20d4a955eab 100644
--- a/chromium/media/base/renderer_factory.h
+++ b/chromium/media/base/renderer_factory.h
@@ -29,6 +29,10 @@ class VideoRendererSink;
class MEDIA_EXPORT RendererFactory {
public:
RendererFactory();
+
+ RendererFactory(const RendererFactory&) = delete;
+ RendererFactory& operator=(const RendererFactory&) = delete;
+
virtual ~RendererFactory();
// Creates and returns a Renderer. All methods of the created Renderer except
@@ -48,9 +52,6 @@ class MEDIA_EXPORT RendererFactory {
// created by this factory.
// NOTE: Returns Type::STREAM by default.
virtual MediaResource::Type GetRequiredMediaResourceType();
-
- private:
- DISALLOW_COPY_AND_ASSIGN(RendererFactory);
};
} // namespace media
diff --git a/chromium/media/base/renderer_factory_selector.h b/chromium/media/base/renderer_factory_selector.h
index abe0c9335aa..bfef2293c2e 100644
--- a/chromium/media/base/renderer_factory_selector.h
+++ b/chromium/media/base/renderer_factory_selector.h
@@ -61,6 +61,10 @@ class MEDIA_EXPORT RendererFactorySelector {
using ConditionalFactoryCB = base::RepeatingCallback<bool()>;
RendererFactorySelector();
+
+ RendererFactorySelector(const RendererFactorySelector&) = delete;
+ RendererFactorySelector& operator=(const RendererFactorySelector&) = delete;
+
~RendererFactorySelector();
// See file level comments above.
@@ -107,8 +111,6 @@ class MEDIA_EXPORT RendererFactorySelector {
RequestRemotePlayStateChangeCB remote_play_state_change_cb_request_;
std::map<RendererType, std::unique_ptr<RendererFactory>> factories_;
-
- DISALLOW_COPY_AND_ASSIGN(RendererFactorySelector);
};
} // namespace media
diff --git a/chromium/media/base/scoped_async_trace.h b/chromium/media/base/scoped_async_trace.h
index e448689410f..a8502a7d56d 100644
--- a/chromium/media/base/scoped_async_trace.h
+++ b/chromium/media/base/scoped_async_trace.h
@@ -25,6 +25,9 @@ class MEDIA_EXPORT ScopedAsyncTrace {
// other words, use literal strings only. See trace_event_common.h .
static std::unique_ptr<ScopedAsyncTrace> CreateIfEnabled(const char* name);
+ ScopedAsyncTrace(const ScopedAsyncTrace&) = delete;
+ ScopedAsyncTrace& operator=(const ScopedAsyncTrace&) = delete;
+
~ScopedAsyncTrace();
// TODO(liberato): Add StepInto / StepPast.
@@ -33,8 +36,6 @@ class MEDIA_EXPORT ScopedAsyncTrace {
explicit ScopedAsyncTrace(const char* name);
const char* name_ = nullptr;
-
- DISALLOW_COPY_AND_ASSIGN(ScopedAsyncTrace);
};
} // namespace media
diff --git a/chromium/media/base/scopedfd_helper.h b/chromium/media/base/scopedfd_helper.h
index 5cc8086c499..7767244f47b 100644
--- a/chromium/media/base/scopedfd_helper.h
+++ b/chromium/media/base/scopedfd_helper.h
@@ -6,6 +6,7 @@
#define MEDIA_BASE_SCOPEDFD_HELPER_H_
#include "base/files/scoped_file.h"
+#include "build/build_config.h"
#include "media/base/media_export.h"
namespace media {
diff --git a/chromium/media/base/seekable_buffer.cc b/chromium/media/base/seekable_buffer.cc
index 9e8faf6f1e6..a3766bcc003 100644
--- a/chromium/media/base/seekable_buffer.cc
+++ b/chromium/media/base/seekable_buffer.cc
@@ -269,8 +269,7 @@ void SeekableBuffer::UpdateCurrentTime(BufferQueue::iterator buffer,
int64_t time_offset = ((*buffer)->duration().InMicroseconds() * offset) /
(*buffer)->data_size();
- current_time_ = (*buffer)->timestamp() +
- base::TimeDelta::FromMicroseconds(time_offset);
+ current_time_ = (*buffer)->timestamp() + base::Microseconds(time_offset);
}
}
diff --git a/chromium/media/base/seekable_buffer.h b/chromium/media/base/seekable_buffer.h
index 74a491bea3d..b31e62483ca 100644
--- a/chromium/media/base/seekable_buffer.h
+++ b/chromium/media/base/seekable_buffer.h
@@ -52,6 +52,9 @@ class MEDIA_EXPORT SeekableBuffer {
// The values are in bytes.
SeekableBuffer(int backward_capacity, int forward_capacity);
+ SeekableBuffer(const SeekableBuffer&) = delete;
+ SeekableBuffer& operator=(const SeekableBuffer&) = delete;
+
~SeekableBuffer();
// Clears the buffer queue.
@@ -180,8 +183,6 @@ class MEDIA_EXPORT SeekableBuffer {
// Keeps track of the most recent time we've seen in case the |buffers_| is
// empty when our owner asks what time it is.
base::TimeDelta current_time_;
-
- DISALLOW_COPY_AND_ASSIGN(SeekableBuffer);
};
} // namespace media
diff --git a/chromium/media/base/seekable_buffer_unittest.cc b/chromium/media/base/seekable_buffer_unittest.cc
index 37468740cc9..d1df6a3ca9b 100644
--- a/chromium/media/base/seekable_buffer_unittest.cc
+++ b/chromium/media/base/seekable_buffer_unittest.cc
@@ -338,10 +338,8 @@ TEST_F(SeekableBufferTest, GetTime) {
scoped_refptr<DataBuffer> buffer = DataBuffer::CopyFrom(data_, kWriteSize);
for (size_t i = 0; i < base::size(tests); ++i) {
- buffer->set_timestamp(base::TimeDelta::FromMicroseconds(
- tests[i].first_time_useconds));
- buffer->set_duration(base::TimeDelta::FromMicroseconds(
- tests[i].duration_useconds));
+ buffer->set_timestamp(base::Microseconds(tests[i].first_time_useconds));
+ buffer->set_duration(base::Microseconds(tests[i].duration_useconds));
buffer_.Append(buffer.get());
EXPECT_TRUE(buffer_.Seek(tests[i].consume_bytes));
diff --git a/chromium/media/base/serial_runner_unittest.cc b/chromium/media/base/serial_runner_unittest.cc
index 4d7b4435b6a..ae2cb83a885 100644
--- a/chromium/media/base/serial_runner_unittest.cc
+++ b/chromium/media/base/serial_runner_unittest.cc
@@ -21,6 +21,10 @@ class SerialRunnerTest : public ::testing::Test {
public:
SerialRunnerTest()
: inside_start_(false), done_called_(false), done_status_(PIPELINE_OK) {}
+
+ SerialRunnerTest(const SerialRunnerTest&) = delete;
+ SerialRunnerTest& operator=(const SerialRunnerTest&) = delete;
+
~SerialRunnerTest() override = default;
void RunSerialRunner() {
@@ -140,8 +144,6 @@ class SerialRunnerTest : public ::testing::Test {
// Tracks whether the final done callback was called + resulting status.
bool done_called_;
PipelineStatus done_status_;
-
- DISALLOW_COPY_AND_ASSIGN(SerialRunnerTest);
};
TEST_F(SerialRunnerTest, Empty) {
diff --git a/chromium/media/base/silent_sink_suspender.cc b/chromium/media/base/silent_sink_suspender.cc
index 42de9b7cd83..fbbf0269ca4 100644
--- a/chromium/media/base/silent_sink_suspender.cc
+++ b/chromium/media/base/silent_sink_suspender.cc
@@ -118,6 +118,10 @@ void SilentSinkSuspender::OnRenderError() {
void SilentSinkSuspender::OnPaused() {
DCHECK(task_runner_->BelongsToCurrentThread());
+ // This is a no-op if the sink isn't running, but must be executed without the
+ // |transition_lock_| being held to avoid possible deadlock.
+ fake_sink_.Stop();
+
base::AutoLock al(transition_lock_);
// Nothing to do if we haven't touched the sink.
@@ -128,12 +132,7 @@ void SilentSinkSuspender::OnPaused() {
// If we've moved over to the fake sink, we just need to stop it and cancel
// any pending transitions.
- if (is_using_fake_sink_) {
- is_using_fake_sink_ = false;
- fake_sink_.Stop();
- }
-
- // Cancel any pending transitions.
+ is_using_fake_sink_ = false;
is_transition_pending_ = false;
first_silence_time_ = base::TimeTicks();
sink_transition_callback_.Reset(base::BindRepeating(
diff --git a/chromium/media/base/silent_sink_suspender.h b/chromium/media/base/silent_sink_suspender.h
index 40fc611c402..3662f27fe56 100644
--- a/chromium/media/base/silent_sink_suspender.h
+++ b/chromium/media/base/silent_sink_suspender.h
@@ -43,6 +43,10 @@ class MEDIA_EXPORT SilentSinkSuspender
const AudioParameters& params,
scoped_refptr<AudioRendererSink> sink,
scoped_refptr<base::SingleThreadTaskRunner> worker);
+
+ SilentSinkSuspender(const SilentSinkSuspender&) = delete;
+ SilentSinkSuspender& operator=(const SilentSinkSuspender&) = delete;
+
~SilentSinkSuspender() override;
// AudioRendererSink::RenderCallback implementation.
@@ -125,8 +129,6 @@ class MEDIA_EXPORT SilentSinkSuspender
// Time when transition to |fake_sink_| starts.
base::TimeTicks fake_sink_transition_time_;
-
- DISALLOW_COPY_AND_ASSIGN(SilentSinkSuspender);
};
} // namespace media
diff --git a/chromium/media/base/silent_sink_suspender_unittest.cc b/chromium/media/base/silent_sink_suspender_unittest.cc
index 5ac51cc74a2..e9a69e3b318 100644
--- a/chromium/media/base/silent_sink_suspender_unittest.cc
+++ b/chromium/media/base/silent_sink_suspender_unittest.cc
@@ -19,19 +19,20 @@ namespace media {
class SilentSinkSuspenderTest : public testing::Test {
public:
SilentSinkSuspenderTest()
- : params_(AudioParameters::AUDIO_FAKE,
- CHANNEL_LAYOUT_MONO,
- 44100,
- 128),
+ : params_(AudioParameters::AUDIO_FAKE, CHANNEL_LAYOUT_MONO, 44100, 128),
mock_sink_(new testing::StrictMock<MockAudioRendererSink>()),
fake_callback_(0.1, params_.sample_rate()),
temp_bus_(AudioBus::Create(params_)),
// Set a negative timeout so any silence will suspend immediately.
suspender_(&fake_callback_,
- base::TimeDelta::FromSeconds(-1),
+ base::Seconds(-1),
params_,
mock_sink_,
test_loop_.task_runner()) {}
+
+ SilentSinkSuspenderTest(const SilentSinkSuspenderTest&) = delete;
+ SilentSinkSuspenderTest& operator=(const SilentSinkSuspenderTest&) = delete;
+
~SilentSinkSuspenderTest() override = default;
protected:
@@ -41,14 +42,11 @@ class SilentSinkSuspenderTest : public testing::Test {
FakeAudioRenderCallback fake_callback_;
std::unique_ptr<AudioBus> temp_bus_;
SilentSinkSuspender suspender_;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(SilentSinkSuspenderTest);
};
TEST_F(SilentSinkSuspenderTest, BasicPassthough) {
temp_bus_->Zero();
- auto delay = base::TimeDelta::FromMilliseconds(20);
+ auto delay = base::Milliseconds(20);
EXPECT_EQ(temp_bus_->frames(),
suspender_.Render(delay, base::TimeTicks(), 0, temp_bus_.get()));
diff --git a/chromium/media/base/simple_watch_timer.cc b/chromium/media/base/simple_watch_timer.cc
index 83668dfd7a2..16869b35283 100644
--- a/chromium/media/base/simple_watch_timer.cc
+++ b/chromium/media/base/simple_watch_timer.cc
@@ -11,8 +11,7 @@ namespace media {
namespace {
-constexpr base::TimeDelta kQueryInterval =
- base::TimeDelta::FromMilliseconds(750);
+constexpr base::TimeDelta kQueryInterval = base::Milliseconds(750);
} // namespace
diff --git a/chromium/media/base/simple_watch_timer.h b/chromium/media/base/simple_watch_timer.h
index 777fc9b5ed2..e837c1a7904 100644
--- a/chromium/media/base/simple_watch_timer.h
+++ b/chromium/media/base/simple_watch_timer.h
@@ -33,6 +33,10 @@ class MEDIA_EXPORT SimpleWatchTimer {
using GetCurrentTimeCB = base::RepeatingCallback<base::TimeDelta()>;
SimpleWatchTimer(TickCB tick_cb, GetCurrentTimeCB get_current_time_cb);
+
+ SimpleWatchTimer(const SimpleWatchTimer&) = delete;
+ SimpleWatchTimer& operator=(const SimpleWatchTimer&) = delete;
+
~SimpleWatchTimer();
void Start();
@@ -47,8 +51,6 @@ class MEDIA_EXPORT SimpleWatchTimer {
int unreported_ms_ = 0;
base::TimeDelta last_current_time_;
base::RepeatingTimer timer_;
-
- DISALLOW_COPY_AND_ASSIGN(SimpleWatchTimer);
};
} // namespace media
diff --git a/chromium/media/base/sinc_resampler.h b/chromium/media/base/sinc_resampler.h
index b0e76d4118e..8cbae16a742 100644
--- a/chromium/media/base/sinc_resampler.h
+++ b/chromium/media/base/sinc_resampler.h
@@ -50,6 +50,10 @@ class MEDIA_EXPORT SincResampler {
SincResampler(double io_sample_rate_ratio,
int request_frames,
const ReadCB read_cb);
+
+ SincResampler(const SincResampler&) = delete;
+ SincResampler& operator=(const SincResampler&) = delete;
+
~SincResampler();
// Resample |frames| of data from |read_cb_| into |destination|.
@@ -170,8 +174,6 @@ class MEDIA_EXPORT SincResampler {
float* const r2_;
float* r3_;
float* r4_;
-
- DISALLOW_COPY_AND_ASSIGN(SincResampler);
};
} // namespace media
diff --git a/chromium/media/base/sinc_resampler_unittest.cc b/chromium/media/base/sinc_resampler_unittest.cc
index 79d393869ed..f8226a7c140 100644
--- a/chromium/media/base/sinc_resampler_unittest.cc
+++ b/chromium/media/base/sinc_resampler_unittest.cc
@@ -201,6 +201,10 @@ class SinusoidalLinearChirpSource {
k_ = (max_frequency_ - kMinFrequency) / duration;
}
+ SinusoidalLinearChirpSource(const SinusoidalLinearChirpSource&) = delete;
+ SinusoidalLinearChirpSource& operator=(const SinusoidalLinearChirpSource&) =
+ delete;
+
virtual ~SinusoidalLinearChirpSource() = default;
void ProvideInput(int frames, float* destination) {
@@ -234,8 +238,6 @@ class SinusoidalLinearChirpSource {
double max_frequency_;
double k_;
int current_index_;
-
- DISALLOW_COPY_AND_ASSIGN(SinusoidalLinearChirpSource);
};
typedef std::tuple<int, int, double, double> SincResamplerTestData;
diff --git a/chromium/media/base/status.cc b/chromium/media/base/status.cc
index 8bfa2f999b2..75bbde250b5 100644
--- a/chromium/media/base/status.cc
+++ b/chromium/media/base/status.cc
@@ -10,70 +10,52 @@
namespace media {
-Status::Status() = default;
+namespace internal {
-Status::Status(StatusCode code,
- base::StringPiece message,
- const base::Location& location) {
- // Note that |message| is dropped in this case.
- if (code == StatusCode::kOk) {
- DCHECK(message.empty());
- return;
- }
- data_ = std::make_unique<StatusInternal>(code, std::string(message));
- AddFrame(location);
-}
+StatusData::StatusData() = default;
-// Copy Constructor
-Status::Status(const Status& copy) {
+StatusData::StatusData(const StatusData& copy) {
*this = copy;
}
-Status& Status::operator=(const Status& copy) {
- if (copy.is_ok()) {
- data_.reset();
- return *this;
- }
-
- data_ = std::make_unique<StatusInternal>(copy.code(), copy.message());
- for (const base::Value& frame : copy.data_->frames)
- data_->frames.push_back(frame.Clone());
- for (const Status& err : copy.data_->causes)
- data_->causes.push_back(err);
- data_->data = copy.data_->data.Clone();
- return *this;
-}
-
-// Allow move.
-Status::Status(Status&&) = default;
-Status& Status::operator=(Status&&) = default;
-
-Status::~Status() = default;
-
-Status::StatusInternal::StatusInternal(StatusCode code, std::string message)
- : code(code),
+StatusData::StatusData(StatusGroupType group,
+ StatusCodeType code,
+ std::string message)
+ : group(group),
+ code(code),
message(std::move(message)),
data(base::Value(base::Value::Type::DICTIONARY)) {}
-Status::StatusInternal::~StatusInternal() = default;
-
-Status&& Status::AddHere(const base::Location& location) && {
- DCHECK(data_);
- AddFrame(location);
- return std::move(*this);
+std::unique_ptr<StatusData> StatusData::copy() const {
+ auto result = std::make_unique<StatusData>(group, code, message);
+ for (const auto& frame : frames)
+ result->frames.push_back(frame.Clone());
+ for (const auto& cause : causes)
+ result->causes.push_back(cause);
+ result->data = data.Clone();
+ return result;
}
-Status&& Status::AddCause(Status&& cause) && {
- DCHECK(data_ && cause.data_);
- data_->causes.push_back(std::move(cause));
- return std::move(*this);
+StatusData::~StatusData() = default;
+
+StatusData& StatusData::operator=(const StatusData& copy) {
+ group = copy.group;
+ code = copy.code;
+ message = copy.message;
+ for (const auto& frame : copy.frames)
+ frames.push_back(frame.Clone());
+ for (const auto& cause : copy.causes)
+ causes.push_back(cause);
+ data = copy.data.Clone();
+ return *this;
}
-void Status::AddFrame(const base::Location& location) {
- DCHECK(data_);
- data_->frames.push_back(MediaSerialize(location));
+void StatusData::AddLocation(const base::Location& location) {
+ frames.push_back(MediaSerialize(location));
}
+} // namespace internal
+
Status OkStatus() {
return Status(StatusCode::kOk);
}
diff --git a/chromium/media/base/status.h b/chromium/media/base/status.h
index d8e74805bb9..ced9c6e51e3 100644
--- a/chromium/media/base/status.h
+++ b/chromium/media/base/status.h
@@ -7,6 +7,7 @@
#include <memory>
#include <string>
+#include <type_traits>
#include <utility>
#include <vector>
@@ -25,243 +26,291 @@ struct StructTraits;
namespace media {
-namespace mojom {
-class StatusDataView;
-}
+// See media/base/status.md for details and instructions for
+// using TypedStatus<T>.
+
+// This is the type that enum classes used for specializing |TypedStatus| must
+// extend from.
+using StatusCodeType = uint16_t;
+
+// This is the type that TypedStatusTraits::Group should be.
+using StatusGroupType = base::StringPiece;
+
+namespace internal {
+
+struct MEDIA_EXPORT StatusData {
+ StatusData();
+ StatusData(const StatusData&);
+ StatusData(StatusGroupType group, StatusCodeType code, std::string message);
+ ~StatusData();
+ StatusData& operator=(const StatusData&);
+
+ std::unique_ptr<StatusData> copy() const;
+ void AddLocation(const base::Location&);
+
+ // Enum group ID.
+ std::string group;
+
+ // Entry within enum, cast to base type.
+ StatusCodeType code;
+
+ // The current error message (Can be used for
+ // https://developer.mozilla.org/en-US/docs/Web/API/Status)
+ std::string message;
+
+ // Stack frames
+ std::vector<base::Value> frames;
+
+ // Causes
+ std::vector<StatusData> causes;
+
+ // Data attached to the error
+ base::Value data;
+};
+
+} // namespace internal
+
+// See media/base/status.md for details and instructions for using TypedStatus.
+template <typename T>
+class MEDIA_EXPORT TypedStatus {
+ static_assert(std::is_enum<typename T::Codes>::value,
+ "TypedStatus must only be specialized with enum types.");
-// Status is meant to be a relatively small (sizeof(void*) bytes) object
-// that can be returned as a status value from functions or passed to callbacks
-// that want a report of status. Status allows attaching of arbitrary named
-// data, other Status' as causes, and stack frames, which can all be logged
-// and reported throughout the media stack. The status code and message are
-// immutable and can be used to give a stable numeric ID for any error
-// generated by media code.
-// There is also an OK state which can't hold any data and is only for
-// successful returns.
-class MEDIA_EXPORT Status {
public:
- // This will create a kOk status, but please don't use it. Use either
- // Status(StatusCode::kOk) or OkStatus(). This is here because the mojo
- // bindings assume that it is.
- // TODO(crbug.com/1106492): Remove this.
- Status();
+ using Traits = T;
+ using Codes = typename T::Codes;
+
+ // default constructor to please the Mojo Gods.
+ TypedStatus() = default;
- // Constructor to create a new Status from a numeric code & message.
+ // Constructor to create a new TypedStatus from a numeric code & message.
// These are immutable; if you'd like to change them, then you likely should
- // create a new Status. Either {StatusCode::kOk} or OkStatus() may be used to
- // create a success status.
+ // create a new TypedStatus.
// NOTE: This should never be given a location parameter when called - It is
// defaulted in order to grab the caller location.
- Status(StatusCode code,
- base::StringPiece message = "",
- const base::Location& location = base::Location::Current());
-
- // Copy Constructor & assignment. (Mojo uses both of these)
- Status(const Status&);
- Status& operator=(const Status&);
+ TypedStatus(Codes code,
+ base::StringPiece message = "",
+ const base::Location& location = base::Location::Current()) {
+ // Note that |message| would be dropped when code is the default value,
+ // so DCHECK that it is not set.
+ if (code == Traits::DefaultEnumValue()) {
+ DCHECK(!!message.empty());
+ return;
+ }
+ data_ = std::make_unique<internal::StatusData>(
+ Traits::Group(), static_cast<StatusCodeType>(code),
+ std::string(message));
+ data_->AddLocation(location);
+ }
- // Allows move.
- Status(Status&&);
- Status& operator=(Status&&);
+ TypedStatus(const TypedStatus<T>& copy) { *this = copy; }
- // Needs an out of line destructor...
- ~Status();
+ TypedStatus<T>& operator=(const TypedStatus<T>& copy) {
+ if (!copy.data_) {
+ data_.reset();
+ return *this;
+ }
+ data_ = copy.data_->copy();
+ return *this;
+ }
+ // DEPRECATED: check code() == ok value.
bool is_ok() const { return !data_; }
- // Getters for internal fields
+ Codes code() const {
+ if (!data_)
+ return *Traits::DefaultEnumValue();
+ return static_cast<Codes>(data_->code);
+ }
+
+ const std::string group() const {
+ return data_ ? data_->group : Traits::Group();
+ }
+
const std::string& message() const {
DCHECK(data_);
return data_->message;
}
- StatusCode code() const { return data_ ? data_->code : StatusCode::kOk; }
-
- // Adds the current location to Status as it’s passed upwards.
+ // Adds the current location to StatusBase as it’s passed upwards.
// This does not need to be called at every location that touches it, but
// should be called for those locations where the path is ambiguous or
// critical. This can be especially helpful across IPC boundaries. This will
// fail on an OK status.
// NOTE: This should never be given a parameter when called - It is defaulted
// in order to grab the caller location.
- Status&& AddHere(
- const base::Location& location = base::Location::Current()) &&;
-
- // Add |cause| as the error that triggered this one. For example,
- // DecoderStream might return kDecoderSelectionFailed with one or more causes
- // that are the specific errors from the decoders that it tried.
- Status&& AddCause(Status&& cause) &&;
- void AddCause(Status&& cause) &;
+ TypedStatus<T>&& AddHere(
+ const base::Location& location = base::Location::Current()) && {
+ DCHECK(data_);
+ // We can't call MediaSerialize directly, because we can't include the
+ // default serializers header, since it includes this header.
+ data_->AddLocation(location);
+ return std::move(*this);
+ }
// Allows us to append any datatype which can be converted to
// an int/bool/string/base::Value. Any existing data associated with |key|
// will be overwritten by |value|. This will fail on an OK status.
- template <typename T>
- Status&& WithData(const char* key, const T& value) && {
+ template <typename D>
+ TypedStatus<T>&& WithData(const char* key, const D& value) && {
DCHECK(data_);
data_->data.SetKey(key, MediaSerialize(value));
return std::move(*this);
}
- template <typename T>
- void WithData(const char* key, const T& value) & {
+ template <typename D>
+ void WithData(const char* key, const D& value) & {
DCHECK(data_);
data_->data.SetKey(key, MediaSerialize(value));
}
- private:
- // Private helper to add the current stack frame to the error trace.
- void AddFrame(const base::Location& location);
+ // Add |cause| as the error that triggered this one.
+ template <typename AnyTraitsType>
+ TypedStatus<T>&& AddCause(TypedStatus<AnyTraitsType>&& cause) && {
+ DCHECK(data_ && cause.data_);
+ data_->causes.push_back(*cause.data_);
+ return std::move(*this);
+ }
- // Keep the internal data in a unique ptr to minimize size of OK errors.
- struct MEDIA_EXPORT StatusInternal {
- StatusInternal(StatusCode code, std::string message);
- ~StatusInternal();
+ // Add |cause| as the error that triggered this one.
+ template <typename AnyTraitsType>
+ void AddCause(TypedStatus<AnyTraitsType>&& cause) & {
+ DCHECK(data_ && cause.data_);
+ data_->causes.push_back(*cause.data_);
+ }
- // The current error code
- StatusCode code = StatusCode::kOk;
+ inline bool operator==(T code) const { return code == this->code(); }
- // The current error message (Can be used for
- // https://developer.mozilla.org/en-US/docs/Web/API/Status)
- std::string message;
+ inline bool operator!=(T code) const { return code != this->code(); }
- // Stack frames
- std::vector<base::Value> frames;
+ inline bool operator==(const TypedStatus<T>& other) const {
+ return other.code() == code();
+ }
- // Causes
- std::vector<Status> causes;
+ inline bool operator!=(const TypedStatus<T>& other) const {
+ return other.code() != code();
+ }
- // Data attached to the error
- base::Value data;
+ template <typename OtherType>
+ class Or {
+ public:
+ ~Or() = default;
+
+ // Implicit constructors allow returning |OtherType| or |TypedStatus|
+ // directly.
+ Or(TypedStatus<T>&& error) : error_(std::move(error)) {
+ // |T| must either not have a default code, or not be default
+ DCHECK(!Traits::DefaultEnumValue() ||
+ *Traits::DefaultEnumValue() != code());
+ }
+ Or(const TypedStatus<T>& error) : error_(error) {
+ DCHECK(!Traits::DefaultEnumValue() ||
+ *Traits::DefaultEnumValue() != code());
+ }
+
+ Or(OtherType&& value) : value_(std::move(value)) {}
+ Or(const OtherType& value) : value_(value) {}
+ Or(typename T::Codes code,
+ const base::Location& location = base::Location::Current())
+ : error_(TypedStatus<T>(code, "", location)) {
+ DCHECK(!Traits::DefaultEnumValue() ||
+ *Traits::DefaultEnumValue() != code);
+ }
+
+ // Move- and copy- construction and assignment are okay.
+ Or(const Or&) = default;
+ Or(Or&&) = default;
+ Or& operator=(Or&) = default;
+ Or& operator=(Or&&) = default;
+
+ bool has_value() const { return value_.has_value(); }
+ bool has_error() const { return error_.has_value(); }
+
+ inline bool operator==(typename T::Codes code) const {
+ return code == this->code();
+ }
+
+ inline bool operator!=(typename T::Codes code) const {
+ return code != this->code();
+ }
+
+ // Return the error, if we have one.
+ // Callers should ensure that this |has_error()|.
+ TypedStatus<T> error() && {
+ CHECK(error_);
+ auto error = std::move(*error_);
+ error_.reset();
+ return error;
+ }
+
+ // Return the value, if we have one.
+ // Callers should ensure that this |has_value()|.
+ OtherType value() && {
+ CHECK(value_);
+ auto value = std::move(std::get<0>(*value_));
+ value_.reset();
+ return value;
+ }
+
+ typename T::Codes code() const {
+ DCHECK(error_ || value_);
+ // It is invalid to call |code()| on an |Or| with a value that
+ // is specialized in a TypedStatus with no DefaultEnumValue.
+ DCHECK(error_ || Traits::DefaultEnumValue());
+ return error_ ? error_->code() : *Traits::DefaultEnumValue();
+ }
+
+ private:
+ absl::optional<TypedStatus<T>> error_;
+
+ // We wrap |OtherType| in a container so that windows COM wrappers work.
+ // They override operator& and similar, and won't compile in a
+ // absl::optional.
+ absl::optional<std::tuple<OtherType>> value_;
};
- // Allow self-serialization
- friend struct internal::MediaSerializer<Status>;
-
- // Allow mojo-serialization
- friend struct mojo::StructTraits<media::mojom::StatusDataView, Status>;
+ private:
+ std::unique_ptr<internal::StatusData> data_;
- // A null internals is an implicit OK.
- std::unique_ptr<StatusInternal> data_;
-};
+ template <typename StatusEnum, typename DataView>
+ friend struct mojo::StructTraits;
-// Convenience function to return |kOk|.
-// OK won't have a message, trace, or data associated with them, and DCHECK
-// if they are added.
-MEDIA_EXPORT Status OkStatus();
+ // Allow media-serialization
+ friend struct internal::MediaSerializer<TypedStatus<T>>;
-// TODO(liberato): Add more helper functions for common error returns.
-
-// Helper class to allow returning a `T` or a Status.
-//
-// It is not okay to send a StatusOr with a status code of `kOk`. `kOk` is
-// reserved for cases where there is a `T` rather than a Status.
-//
-// Typical usage:
-//
-// StatusOr<std::unique_ptr<MyObject>> FactoryFn() {
-// if (success)
-// return std::make_unique<MyObject>();
-// return Status(StatusCodes::kSomethingBadHappened);
-// }
-//
-// auto result = FactoryFn();
-// if (result.has_error()) return std::move(result).error();
-// my_object_ = std::move(result).value();
-//
-// Can also be combined into a single switch using `code()`:
-//
-// switch (result.code()) {
-// case StatusCode::kOk:
-// // `kOk` is special; it means the StatusOr has a `T`.
-// // Do something with result.value()
-// break;
-// // Maybe switch on specific non-kOk codes for special processing.
-// default: // Send unknown errors upwards.
-// return std::move(result).error();
-// }
-//
-// Also useful if one would like to get an enum class return value, unless an
-// error occurs:
-//
-// enum class ResultType { kNeedMoreInput, kOutputIsReady, kFormatChanged };
-//
-// StatusOr<ResultType> Foo() { ... }
-//
-// auto result = Foo();
-// if (result.has_error()) return std::move(result).error();
-// switch (std::move(result).value()) {
-// case ResultType::kNeedMoreInput:
-// ...
-// }
-template <typename T>
-class StatusOr {
- public:
- // All of these may be implicit, so that one may just return Status or
- // the value in question.
- /* not explicit */ StatusOr(Status&& error) : error_(std::move(error)) {
- DCHECK_NE(code(), StatusCode::kOk);
- }
- /* not explicit */ StatusOr(const Status& error) : error_(error) {
- DCHECK_NE(code(), StatusCode::kOk);
- }
- StatusOr(StatusCode code,
- const base::Location& location = base::Location::Current())
- : error_(Status(code, "", location)) {
- DCHECK_NE(code, StatusCode::kOk);
+ void SetInternalData(std::unique_ptr<internal::StatusData> data) {
+ data_ = std::move(data);
}
+};
- StatusOr(T&& value) : value_(std::move(value)) {}
- StatusOr(const T& value) : value_(value) {}
-
- ~StatusOr() = default;
-
- // Move- and copy- construction and assignment are okay.
- StatusOr(const StatusOr&) = default;
- StatusOr(StatusOr&&) = default;
- StatusOr& operator=(StatusOr&) = default;
- StatusOr& operator=(StatusOr&&) = default;
-
- // Do we have a value?
- bool has_value() const { return value_.has_value(); }
-
- // Do we have an error?
- bool has_error() const { return error_.has_value(); }
-
- // Return the error, if we have one. Up to the caller to make sure that we
- // have one via |has_error()|.
- // NOTE: once this is called, the StatusOr is defunct and should not be used.
- Status error() && {
- CHECK(error_);
- auto error = std::move(*error_);
- error_.reset();
- return error;
- }
+template <typename T>
+inline bool operator==(typename T::Codes code, const TypedStatus<T>& status) {
+ return status == code;
+}
- // Return the value. It's up to the caller to verify that we have a value
- // before calling this. Also, this only works once, after which we will have
- // an error. Use like this: std::move(status_or).value();
- // NOTE: once this is called, the StatusOr is defunct and should not be used.
- T value() && {
- CHECK(value_);
- auto value = std::move(std::get<0>(*value_));
- value_.reset();
- return value;
- }
+template <typename T>
+inline bool operator!=(typename T::Codes code, const TypedStatus<T>& status) {
+ return status != code;
+}
- // Returns the error code we have, if any, or `kOk`.
- StatusCode code() const {
- CHECK(error_ || value_);
- return error_ ? error_->code() : StatusCode::kOk;
+// Define TypedStatus<StatusCode> as Status in the media namespace for
+// backwards compatibility. Also define StatusOr as Status::Or for the
+// same reason.
+struct GeneralStatusTraits {
+ using Codes = StatusCode;
+ static constexpr StatusGroupType Group() { return "GeneralStatusCode"; }
+ static constexpr absl::optional<StatusCode> DefaultEnumValue() {
+ return StatusCode::kOk;
}
-
- private:
- // Optional error.
- absl::optional<Status> error_;
- // We wrap |T| in a container so that windows COM wrappers work. They
- // override operator& and similar, and won't compile in a absl::optional.
- absl::optional<std::tuple<T>> value_;
};
+using Status = TypedStatus<GeneralStatusTraits>;
+template <typename T>
+using StatusOr = Status::Or<T>;
+
+// Convenience function to return |kOk|.
+// OK won't have a message, trace, or data associated with them, and DCHECK
+// if they are added.
+MEDIA_EXPORT Status OkStatus();
} // namespace media
diff --git a/chromium/media/base/status.md b/chromium/media/base/status.md
new file mode 100644
index 00000000000..86babf35b0a
--- /dev/null
+++ b/chromium/media/base/status.md
@@ -0,0 +1,178 @@
+# TypedStatus<T>
+
+The purpose of TypedStatus is to provide a thin wrapper around return-value
+enums that support causality tracking, data attachment, and general assistance
+with debugging, without adding slowdowns due to returning large structs,
+pointers, or more complicated types.
+
+TypedStatus<T> should be specialized with a traits struct that defines:
+
+ Codes - enum (usually enum class) that would be the return type, if we weren't
+ using TypedStatus.
+ static constexpr StatusGroupType Group() { return "NameOfStatus"; }
+ static constexpr absl::optional<Codes> DefaultEnumValue() {
+ return Codes::kCodeThatShouldBeSuperOptimizedEGSuccess;
+ // Can return nullopt to optimize none of them. No idea why you'd do that.
+ }
+
+Typically one would:
+
+ struct MyStatusTraits { ... };
+ using MyStatus = TypedStatus<MyStatusTraits>;
+
+## Using an existing `TypedStatus<T>`
+
+The current canonical TypedStatus is called `Status` for historical reasons,
+though that will soon change.
+
+All TypedStatus specializations have the following common API:
+
+```c++
+// The underlying code value.
+T::Codes code() const;
+
+// The underlying message.
+std::string& message() const;
+
+// Adds the current file & line number to the trace.
+TypedStatus<T>&& AddHere() &&;
+
+// Adds some named data to the status, such as a platform
+// specific error value, ie: HRESULT. This data is for human consumption only
+// in a developer setting, and can't be extracted from the TypedStatus
+// normally. The code value should be sufficiently informative between sender
+// and reciever of the TypedStatus.
+template<typename D>
+TypedStatus<T>&& WithData(const char *key, const D& value) &&;
+template<typename D>
+void WithData(const char *key, const D& value) &;
+
+// Adds a "causal" status to this one.
+// The type `R` will not be retained, and similarly with the data methods,
+// `cause` will only be used for human consumption, and cannot be extracted
+// under normal circumstances.
+template<typename R>
+TypedStatus<T>&& AddCause(TypedStatus<R>&& cause) &&;
+template<typename R>
+void AddCause(TypedStatus<R>&& cause) &;
+```
+
+
+## Quick usage guide
+
+If you have an existing enum, and would like to wrap it:
+```c++
+enum class MyExampleEnum : StatusCodeType {
+ kDefaultValue = 1,
+ kThisIsAnExample = 2,
+ kDontArgueInTheCommentSection = 3,
+};
+```
+
+Define an |TypedStatusTraits|, picking a name for the group of codes:
+(copying the desciptive comments is not suggested)
+
+```c++
+struct MyExampleStatusTraits {
+ // If you do not have an existing enum, you can `enum class Codes { ... };`
+ // here, instead of `using`.
+ using Codes = MyExampleEnum;
+ static constexpr StatusGroupType Group() { return "MyExampleStatus"; }
+ static constexpr absl::optional<Codes> { return Codes::kDefaultValue; }
+}
+```
+
+Bind your typename:
+```c++
+using MyExampleStatus = media::TypedStatus<MyExampleStatusTraits>;
+```
+
+Use your new type:
+```c++
+MyExampleStatus Foo() {
+ return MyExampleStatus::Codes::kThisIsAnExample;
+}
+
+int main() {
+ auto result = Foo();
+ switch(result.code()) {
+ case MyExampleStatus::Codes::...:
+ break;
+ ...
+ }
+}
+```
+
+For the common case where you'd like to return some constructed thing OR
+an error type, we've also created `TypedStatus<T>::Or<D>`.
+
+The `TypedStatus<T>::Or<D>` type can be constructed implicitly with either
+a `TypedStatus<T>`, a `T`, or a `D`.
+
+This type has methods:
+```c++
+bool has_value() const;
+bool has_error() const;
+
+// Return the error, if we have one.
+// Callers should ensure that this `has_error()`.
+TypedStatus<T> error() &&;
+
+// Return the value, if we have one.
+// Callers should ensure that this `has_value()`.
+OtherType value() &&;
+
+// It is invalid to call `code()` on an `Or<D>` type when
+// has_value() is true and TypedStatusTraits<T>::DefaultEnumValue is nullopt.
+T::Codes code();
+```
+
+Example usage:
+```c++
+MyExampleStatus::Or<std::unique_ptr<VideoDecoder>> CreateAndInitializeDecoder() {
+ std::unique_ptr<VideoDecoder> decoder = decoder_factory_->GiveMeYourBestDecoder();
+ auto init_status = decoder->Initialize(init_args_);
+ // If the decoder initialized successfully, then just return it.
+ if (init_status == InitStatusCodes::kOk)
+ return std::move(decoder);
+ // Otherwise, return a MediaExampleStatus caused by the init status.
+ return MyExampleStatus(MyExampleEnum::kDontArgueInTheCommentSection).AddCause(
+ std::move(init_status));
+}
+
+int main() {
+ auto result = CreateAndInitializeDecoder();
+ if (result.has_value())
+ decoder_loop_->SetDecoder(std::move(result).value());
+ else
+ logger_->SendError(std::move(result).error());
+}
+
+```
+
+
+## Additional setup for mojo
+
+If you want to send a specialization of TypedStatus over mojo,
+add the following to media_types.mojom:
+
+```
+struct MyExampleEnum {
+ StatusBase? internal;
+};
+```
+
+And add the following to media/mojo/mojom/BUILD.gn near the `StatusData` type
+binding.
+
+```
+{
+ mojom = "media.mojom.MyExampleEnum",
+ cpp = "::media::MyExampleEnum"
+},
+```
+
+
+
+## Design decisions
+See go/typedstatus for design decisions.
diff --git a/chromium/media/base/status_codes.h b/chromium/media/base/status_codes.h
index b14beb9abdb..c2d60df383e 100644
--- a/chromium/media/base/status_codes.h
+++ b/chromium/media/base/status_codes.h
@@ -13,181 +13,184 @@
namespace media {
-using StatusCodeType = int32_t;
+using StatusCodeType = uint16_t;
// TODO(tmathmeyer, liberato, xhwang) These numbers are not yet finalized:
// DO NOT use them for reporting statistics, and DO NOT report them to any
// user-facing feature, including media log.
// Codes are grouped with a bitmask:
-// 0xFFFFFFFF
-// └─┬┘├┘└┴ enumeration within the group
-// │ └─ group code
-// └─ reserved for now
+// 0xFFFF
+// ├┘└┴ enumeration within the group
+// └─ group code
// 256 groups is more than anyone will ever need on a computer.
enum class StatusCode : StatusCodeType {
kOk = 0,
// General errors: 0x00
- kAborted = 0x00000001,
- kInvalidArgument = 0x00000002,
- kKeyFrameRequired = 0x00000003,
+ kAborted = 0x0001,
+ kInvalidArgument = 0x0002,
+ kKeyFrameRequired = 0x0003,
// Decoder Errors: 0x01
- kDecoderInitializeNeverCompleted = 0x00000101,
- kDecoderFailedDecode = 0x00000102,
- kDecoderUnsupportedProfile = 0x00000103,
- kDecoderUnsupportedCodec = 0x00000104,
- kDecoderUnsupportedConfig = 0x00000105,
- kEncryptedContentUnsupported = 0x00000106,
- kClearContentUnsupported = 0x00000107,
- kDecoderMissingCdmForEncryptedContent = 0x00000108,
- kDecoderInitializationFailed = 0x00000109, // Prefer this one.
+ kDecoderInitializeNeverCompleted = 0x0101,
+ kDecoderFailedDecode = 0x0102,
+ kDecoderUnsupportedProfile = 0x0103,
+ kDecoderUnsupportedCodec = 0x0104,
+ kDecoderUnsupportedConfig = 0x0105,
+ kEncryptedContentUnsupported = 0x0106,
+ kClearContentUnsupported = 0x0107,
+ kDecoderMissingCdmForEncryptedContent = 0x0108,
+ kDecoderInitializationFailed = 0x0109, // Prefer this one.
kDecoderFailedInitialization = kDecoderInitializationFailed, // Do not use.
- kDecoderCantChangeCodec = 0x0000010A,
- kDecoderCreationFailed = 0x0000010B, // Prefer this one.
+ kDecoderCantChangeCodec = 0x010A,
+ kDecoderCreationFailed = 0x010B, // Prefer this one.
kDecoderFailedCreation = kDecoderCreationFailed, // Do not use.
- kInitializationUnspecifiedFailure = 0x0000010C,
- kDecoderVideoFrameConstructionFailed = 0x0000010D,
- kMakeContextCurrentFailed = 0x0000010E,
+ kInitializationUnspecifiedFailure = 0x010C,
+ kDecoderVideoFrameConstructionFailed = 0x010D,
+ kMakeContextCurrentFailed = 0x010E,
// This is a temporary error for use only by existing code during the
// DecodeStatus => Status conversion.
- kDecodeErrorDoNotUse = 0x0000010F,
+ kDecodeErrorDoNotUse = 0x010F,
// Windows Errors: 0x02
- kWindowsWrappedHresult = 0x00000201,
- kWindowsApiNotAvailible = 0x00000202,
- kWindowsD3D11Error = 0x00000203,
+ kWindowsWrappedHresult = 0x0201,
+ kWindowsApiNotAvailible = 0x0202,
+ kWindowsD3D11Error = 0x0203,
// D3D11VideoDecoder Errors: 0x03
- kPostTextureFailed = 0x00000301,
- kPostAcquireStreamFailed = 0x00000302,
- kCreateEglStreamFailed = 0x00000303,
- kCreateEglStreamConsumerFailed = 0x00000304,
- kCreateEglStreamProducerFailed = 0x00000305,
- kCreateTextureSelectorFailed = 0x00000306,
- kQueryID3D11MultithreadFailed = 0x00000307,
- kGetDecoderConfigCountFailed = 0x00000308,
- kGetDecoderConfigFailed = 0x00000309,
- kProcessTextureFailed = 0x0000030A,
- kUnsupportedTextureFormatForBind = 0x0000030B,
- kCreateDecoderOutputViewFailed = 0x0000030C,
- kAllocateTextureForCopyingWrapperFailed = 0x0000030D,
- kCreateDecoderOutputTextureFailed = 0x0000030E,
- kCreateVideoProcessorInputViewFailed = 0x0000030F,
- kVideoProcessorBltFailed = 0x00000310,
- kCreateVideoProcessorOutputViewFailed = 0x00000311,
- kCreateVideoProcessorEnumeratorFailed = 0x00000312,
- kCreateVideoProcessorFailed = 0x00000313,
- kQueryVideoContextFailed = 0x00000314,
- kAcceleratorFlushFailed = 0x00000315,
- kTryAgainNotSupported = 0x00000316,
- kCryptoConfigFailed = 0x00000317,
- kDecoderBeginFrameFailed = 0x00000318,
- kReleaseDecoderBufferFailed = 0x00000319,
- kGetPicParamBufferFailed = 0x00000320,
- kReleasePicParamBufferFailed = 0x00000321,
- kGetBitstreamBufferFailed = 0x00000322,
- kReleaseBitstreamBufferFailed = 0x00000323,
- kGetSliceControlBufferFailed = 0x00000324,
- kReleaseSliceControlBufferFailed = 0x00000325,
- kDecoderEndFrameFailed = 0x00000326,
- kSubmitDecoderBuffersFailed = 0x00000327,
- kGetQuantBufferFailed = 0x00000328,
- kReleaseQuantBufferFailed = 0x00000329,
- kBitstreamBufferSliceTooBig = 0x00000330,
- kCreateSharedImageFailed = 0x00000331,
+ kPostTextureFailed = 0x0301,
+ kPostAcquireStreamFailed = 0x0302,
+ kCreateEglStreamFailed = 0x0303,
+ kCreateEglStreamConsumerFailed = 0x0304,
+ kCreateEglStreamProducerFailed = 0x0305,
+ kCreateTextureSelectorFailed = 0x0306,
+ kQueryID3D11MultithreadFailed = 0x0307,
+ kGetDecoderConfigCountFailed = 0x0308,
+ kGetDecoderConfigFailed = 0x0309,
+ kProcessTextureFailed = 0x030A,
+ kUnsupportedTextureFormatForBind = 0x030B,
+ kCreateDecoderOutputViewFailed = 0x030C,
+ kAllocateTextureForCopyingWrapperFailed = 0x030D,
+ kCreateDecoderOutputTextureFailed = 0x030E,
+ kCreateVideoProcessorInputViewFailed = 0x030F,
+ kVideoProcessorBltFailed = 0x0310,
+ kCreateVideoProcessorOutputViewFailed = 0x0311,
+ kCreateVideoProcessorEnumeratorFailed = 0x0312,
+ kCreateVideoProcessorFailed = 0x0313,
+ kQueryVideoContextFailed = 0x0314,
+ kAcceleratorFlushFailed = 0x0315,
+ kTryAgainNotSupported = 0x0316,
+ kCryptoConfigFailed = 0x0317,
+ kDecoderBeginFrameFailed = 0x0318,
+ kReleaseDecoderBufferFailed = 0x0319,
+ kGetPicParamBufferFailed = 0x0320,
+ kReleasePicParamBufferFailed = 0x0321,
+ kGetBitstreamBufferFailed = 0x0322,
+ kReleaseBitstreamBufferFailed = 0x0323,
+ kGetSliceControlBufferFailed = 0x0324,
+ kReleaseSliceControlBufferFailed = 0x0325,
+ kDecoderEndFrameFailed = 0x0326,
+ kSubmitDecoderBuffersFailed = 0x0327,
+ kGetQuantBufferFailed = 0x0328,
+ kReleaseQuantBufferFailed = 0x0329,
+ kBitstreamBufferSliceTooBig = 0x0330,
+ kCreateSharedImageFailed = 0x0331,
+ kGetKeyedMutexFailed = 0x0332,
+ kAcquireKeyedMutexFailed = 0x0333,
+ kReleaseKeyedMutexFailed = 0x0334,
+ kCreateSharedHandleFailed = 0x0335,
// MojoDecoder Errors: 0x04
- kMojoDecoderNoWrappedDecoder = 0x00000401,
- kMojoDecoderStoppedBeforeInitDone = 0x00000402,
- kMojoDecoderUnsupported = 0x00000403,
- kMojoDecoderNoConnection = 0x00000404,
- kMojoDecoderDeletedWithoutInitialization = 0x00000405,
+ kMojoDecoderNoWrappedDecoder = 0x0401,
+ kMojoDecoderStoppedBeforeInitDone = 0x0402,
+ kMojoDecoderUnsupported = 0x0403,
+ kMojoDecoderNoConnection = 0x0404,
+ kMojoDecoderDeletedWithoutInitialization = 0x0405,
// Chromeos Errors: 0x05
- kChromeOSVideoDecoderNoDecoders = 0x00000501,
- kV4l2NoDevice = 0x00000502,
- kV4l2FailedToStopStreamQueue = 0x00000503,
- kV4l2NoDecoder = 0x00000504,
- kV4l2FailedFileCapabilitiesCheck = 0x00000505,
- kV4l2FailedResourceAllocation = 0x00000506,
- kV4l2BadFormat = 0x00000507,
- kV4L2FailedToStartStreamQueue = 0x00000508,
- kVaapiReinitializedDuringDecode = 0x00000509,
- kVaapiFailedAcceleratorCreation = 0x00000510,
+ kChromeOSVideoDecoderNoDecoders = 0x0501,
+ kV4l2NoDevice = 0x0502,
+ kV4l2FailedToStopStreamQueue = 0x0503,
+ kV4l2NoDecoder = 0x0504,
+ kV4l2FailedFileCapabilitiesCheck = 0x0505,
+ kV4l2FailedResourceAllocation = 0x0506,
+ kV4l2BadFormat = 0x0507,
+ kV4L2FailedToStartStreamQueue = 0x0508,
+ kVaapiReinitializedDuringDecode = 0x0509,
+ kVaapiFailedAcceleratorCreation = 0x0510,
// Encoder Error: 0x06
- kEncoderInitializeNeverCompleted = 0x00000601,
- kEncoderInitializeTwice = 0x00000602,
- kEncoderFailedEncode = 0x00000603,
- kEncoderUnsupportedProfile = 0x00000604,
- kEncoderUnsupportedCodec = 0x00000605,
- kEncoderUnsupportedConfig = 0x00000606,
- kEncoderInitializationError = 0x00000607,
- kEncoderFailedFlush = 0x00000608,
+ kEncoderInitializeNeverCompleted = 0x0601,
+ kEncoderInitializeTwice = 0x0602,
+ kEncoderFailedEncode = 0x0603,
+ kEncoderUnsupportedProfile = 0x0604,
+ kEncoderUnsupportedCodec = 0x0605,
+ kEncoderUnsupportedConfig = 0x0606,
+ kEncoderInitializationError = 0x0607,
+ kEncoderFailedFlush = 0x0608,
// VaapiVideoDecoder: 0x07
- kVaapiBadContext = 0x00000701,
- kVaapiNoBuffer = 0x00000702,
- kVaapiNoBufferHandle = 0x00000703,
- kVaapiNoPixmap = 0x00000704,
- kVaapiNoImage = 0x00000705,
- kVaapiNoSurface = 0x00000706,
- kVaapiFailedToInitializeImage = 0x00000707,
- kVaapiFailedToBindTexture = 0x00000708,
- kVaapiFailedToBindImage = 0x00000709,
- kVaapiUnsupportedFormat = 0x0000070A,
- kVaapiFailedToExportImage = 0x0000070B,
- kVaapiBadImageSize = 0x0000070C,
- kVaapiNoTexture = 0x0000070D,
+ kVaapiBadContext = 0x0701,
+ kVaapiNoBuffer = 0x0702,
+ kVaapiNoBufferHandle = 0x0703,
+ kVaapiNoPixmap = 0x0704,
+ kVaapiNoImage = 0x0705,
+ kVaapiNoSurface = 0x0706,
+ kVaapiFailedToInitializeImage = 0x0707,
+ kVaapiFailedToBindTexture = 0x0708,
+ kVaapiFailedToBindImage = 0x0709,
+ kVaapiUnsupportedFormat = 0x070A,
+ kVaapiFailedToExportImage = 0x070B,
+ kVaapiBadImageSize = 0x070C,
+ kVaapiNoTexture = 0x070D,
// Format Errors: 0x08
- kH264ParsingError = 0x00000801,
- kH264BufferTooSmall = 0x00000802,
+ kH264ParsingError = 0x0801,
+ kH264BufferTooSmall = 0x0802,
// Pipeline Errors: 0x09
- // Deprecated: kPipelineErrorUrlNotFound = 0x00000901,
- kPipelineErrorNetwork = 0x00000902,
- kPipelineErrorDecode = 0x00000903,
- // Deprecated: kPipelineErrorDecrypt = 0x00000904,
- kPipelineErrorAbort = 0x00000905,
- kPipelineErrorInitializationFailed = 0x00000906,
- // Unused: 0x00000907
- kPipelineErrorCouldNotRender = 0x00000908,
- kPipelineErrorRead = 0x00000909,
- // Deprecated: kPipelineErrorOperationPending = 0x0000090a,
- kPipelineErrorInvalidState = 0x0000090b,
+ // Deprecated: kPipelineErrorUrlNotFound = 0x0901,
+ kPipelineErrorNetwork = 0x0902,
+ kPipelineErrorDecode = 0x0903,
+ // Deprecated: kPipelineErrorDecrypt = 0x0904,
+ kPipelineErrorAbort = 0x0905,
+ kPipelineErrorInitializationFailed = 0x0906,
+ // Unused: 0x0907
+ kPipelineErrorCouldNotRender = 0x0908,
+ kPipelineErrorRead = 0x0909,
+ // Deprecated: kPipelineErrorOperationPending = 0x090a,
+ kPipelineErrorInvalidState = 0x090b,
// Demuxer related errors.
- kPipelineErrorDemuxerErrorCouldNotOpen = 0x0000090c,
- kPipelineErrorDemuxerErrorCouldNotParse = 0x0000090d,
- kPipelineErrorDemuxerErrorNoSupportedStreams = 0x0000090e,
+ kPipelineErrorDemuxerErrorCouldNotOpen = 0x090c,
+ kPipelineErrorDemuxerErrorCouldNotParse = 0x090d,
+ kPipelineErrorDemuxerErrorNoSupportedStreams = 0x090e,
// Decoder related errors.
- kPipelineErrorDecoderErrorNotSupported = 0x0000090f,
+ kPipelineErrorDecoderErrorNotSupported = 0x090f,
// ChunkDemuxer related errors.
- kPipelineErrorChuckDemuxerErrorAppendFailed = 0x00000910,
- kPipelineErrorChunkDemuxerErrorEosStatusDecodeError = 0x00000911,
- kPipelineErrorChunkDemuxerErrorEosStatusNetworkError = 0x00000912,
+ kPipelineErrorChuckDemuxerErrorAppendFailed = 0x0910,
+ kPipelineErrorChunkDemuxerErrorEosStatusDecodeError = 0x0911,
+ kPipelineErrorChunkDemuxerErrorEosStatusNetworkError = 0x0912,
// Audio rendering errors.
- kPipelineErrorAudioRendererError = 0x00000913,
- // Deprecated: kPipelineErrorAudioRendererErrorSpliceFailed = 0x00000914,
- kPipelineErrorExternalRendererFailed = 0x00000915,
+ kPipelineErrorAudioRendererError = 0x0913,
+ // Deprecated: kPipelineErrorAudioRendererErrorSpliceFailed = 0x0914,
+ kPipelineErrorExternalRendererFailed = 0x0915,
// Android only. Used as a signal to fallback MediaPlayerRenderer, and thus
// not exactly an 'error' per say.
- kPipelineErrorDemuxerErrorDetectedHLS = 0x00000916,
+ kPipelineErrorDemuxerErrorDetectedHLS = 0x0916,
// Used when hardware context is reset (e.g. OS sleep/resume), where we should
// recreate the Renderer instead of fail the playback. See
// https://crbug.com/1208618
- kPipelineErrorHardwareContextReset = 0x00000917,
+ kPipelineErrorHardwareContextReset = 0x0917,
// Frame operation errors: 0x0A
- kUnsupportedFrameFormatError = 0x00000A01,
+ kUnsupportedFrameFormatError = 0x0A01,
// DecoderStream errors: 0x0B
- kDecoderStreamInErrorState = 0x00000B00,
- kDecoderStreamReinitFailed = 0x00000B01,
+ kDecoderStreamInErrorState = 0x0B00,
+ kDecoderStreamReinitFailed = 0x0B01,
// This is a temporary error for use while the demuxer doesn't return a
// proper status.
- kDecoderStreamDemuxerError = 0x00000B02,
+ kDecoderStreamDemuxerError = 0x0B02,
// DecodeStatus temporary codes. These names were chosen to match the
// DecodeStatus enum, so that un-converted code can DecodeStatus::OK/etc.
@@ -203,7 +206,7 @@ enum class StatusCode : StatusCodeType {
DECODE_ERROR = kDecodeErrorDoNotUse,
// Special codes
- kGenericErrorPleaseRemove = 0x79999999,
+ kGenericErrorPleaseRemove = 0x7999,
kCodeOnlyForTesting = std::numeric_limits<StatusCodeType>::max(),
kMaxValue = kCodeOnlyForTesting,
};
diff --git a/chromium/media/base/status_unittest.cc b/chromium/media/base/status_unittest.cc
index 2da38b2ca90..3df6fec9cbd 100644
--- a/chromium/media/base/status_unittest.cc
+++ b/chromium/media/base/status_unittest.cc
@@ -82,10 +82,8 @@ TEST_F(StatusTest, StaticOKMethodGivesCorrectSerialization) {
TEST_F(StatusTest, SingleLayerError) {
Status failed = FailEasily();
base::Value actual = MediaSerialize(failed);
- ASSERT_EQ(actual.DictSize(), 5ul);
- ASSERT_EQ(actual.FindIntPath("status_code"),
- static_cast<int32_t>(StatusCode::kCodeOnlyForTesting));
- ASSERT_EQ(*actual.FindStringPath("status_message"), "Message");
+ ASSERT_EQ(actual.DictSize(), 6ul);
+ ASSERT_EQ(*actual.FindStringPath("message"), "Message");
ASSERT_EQ(actual.FindListPath("stack")->GetList().size(), 1ul);
ASSERT_EQ(actual.FindListPath("causes")->GetList().size(), 0ul);
ASSERT_EQ(actual.FindDictPath("data")->DictSize(), 0ul);
@@ -102,10 +100,8 @@ TEST_F(StatusTest, SingleLayerError) {
TEST_F(StatusTest, MultipleErrorLayer) {
Status failed = FailRecursively(3);
base::Value actual = MediaSerialize(failed);
- ASSERT_EQ(actual.DictSize(), 5ul);
- ASSERT_EQ(actual.FindIntPath("status_code").value_or(-1),
- static_cast<int32_t>(StatusCode::kCodeOnlyForTesting));
- ASSERT_EQ(*actual.FindStringPath("status_message"), "Message");
+ ASSERT_EQ(actual.DictSize(), 6ul);
+ ASSERT_EQ(*actual.FindStringPath("message"), "Message");
ASSERT_EQ(actual.FindListPath("stack")->GetList().size(), 4ul);
ASSERT_EQ(actual.FindListPath("causes")->GetList().size(), 0ul);
ASSERT_EQ(actual.FindDictPath("data")->DictSize(), 0ul);
@@ -117,10 +113,8 @@ TEST_F(StatusTest, MultipleErrorLayer) {
TEST_F(StatusTest, CanHaveData) {
Status failed = FailWithData("example", "data");
base::Value actual = MediaSerialize(failed);
- ASSERT_EQ(actual.DictSize(), 5ul);
- ASSERT_EQ(actual.FindIntPath("status_code").value_or(-1),
- static_cast<int32_t>(StatusCode::kCodeOnlyForTesting));
- ASSERT_EQ(*actual.FindStringPath("status_message"), "Message");
+ ASSERT_EQ(actual.DictSize(), 6ul);
+ ASSERT_EQ(*actual.FindStringPath("message"), "Message");
ASSERT_EQ(actual.FindListPath("stack")->GetList().size(), 1ul);
ASSERT_EQ(actual.FindListPath("causes")->GetList().size(), 0ul);
ASSERT_EQ(actual.FindDictPath("data")->DictSize(), 1ul);
@@ -134,10 +128,8 @@ TEST_F(StatusTest, CanHaveData) {
TEST_F(StatusTest, CanUseCustomSerializer) {
Status failed = FailWithData("example", UselessThingToBeSerialized("F"));
base::Value actual = MediaSerialize(failed);
- ASSERT_EQ(actual.DictSize(), 5ul);
- ASSERT_EQ(actual.FindIntPath("status_code"),
- static_cast<int32_t>(StatusCode::kCodeOnlyForTesting));
- ASSERT_EQ(*actual.FindStringPath("status_message"), "Message");
+ ASSERT_EQ(actual.DictSize(), 6ul);
+ ASSERT_EQ(*actual.FindStringPath("message"), "Message");
ASSERT_EQ(actual.FindListPath("stack")->GetList().size(), 1ul);
ASSERT_EQ(actual.FindListPath("causes")->GetList().size(), 0ul);
ASSERT_EQ(actual.FindDictPath("data")->DictSize(), 1ul);
@@ -151,42 +143,57 @@ TEST_F(StatusTest, CanUseCustomSerializer) {
TEST_F(StatusTest, CausedByHasVector) {
Status causal = FailWithCause();
base::Value actual = MediaSerialize(causal);
- ASSERT_EQ(actual.DictSize(), 5ul);
- ASSERT_EQ(actual.FindIntPath("status_code").value_or(-1),
- static_cast<int32_t>(StatusCode::kCodeOnlyForTesting));
- ASSERT_EQ(*actual.FindStringPath("status_message"), "Message");
+ ASSERT_EQ(actual.DictSize(), 6ul);
+ ASSERT_EQ(*actual.FindStringPath("message"), "Message");
ASSERT_EQ(actual.FindListPath("stack")->GetList().size(), 1ul);
ASSERT_EQ(actual.FindListPath("causes")->GetList().size(), 1ul);
ASSERT_EQ(actual.FindDictPath("data")->DictSize(), 0ul);
base::Value& nested = actual.FindListPath("causes")->GetList()[0];
- ASSERT_EQ(nested.DictSize(), 5ul);
- ASSERT_EQ(nested.FindIntPath("status_code").value_or(-1),
- static_cast<int32_t>(StatusCode::kCodeOnlyForTesting));
- ASSERT_EQ(*nested.FindStringPath("status_message"), "Message");
+ ASSERT_EQ(nested.DictSize(), 6ul);
+ ASSERT_EQ(*nested.FindStringPath("message"), "Message");
ASSERT_EQ(nested.FindListPath("stack")->GetList().size(), 1ul);
ASSERT_EQ(nested.FindListPath("causes")->GetList().size(), 0ul);
ASSERT_EQ(nested.FindDictPath("data")->DictSize(), 0ul);
}
+TEST_F(StatusTest, CausedByCanAssignCopy) {
+ Status causal = FailWithCause();
+ Status copy_causal = causal;
+ base::Value causal_serialized = MediaSerialize(causal);
+ base::Value copy_causal_serialized = MediaSerialize(copy_causal);
+
+ base::Value& original =
+ causal_serialized.FindListPath("causes")->GetList()[0];
+ ASSERT_EQ(original.DictSize(), 6ul);
+ ASSERT_EQ(*original.FindStringPath("message"), "Message");
+ ASSERT_EQ(original.FindListPath("stack")->GetList().size(), 1ul);
+ ASSERT_EQ(original.FindListPath("causes")->GetList().size(), 0ul);
+ ASSERT_EQ(original.FindDictPath("data")->DictSize(), 0ul);
+
+ base::Value& copied =
+ copy_causal_serialized.FindListPath("causes")->GetList()[0];
+ ASSERT_EQ(copied.DictSize(), 6ul);
+ ASSERT_EQ(*copied.FindStringPath("message"), "Message");
+ ASSERT_EQ(copied.FindListPath("stack")->GetList().size(), 1ul);
+ ASSERT_EQ(copied.FindListPath("causes")->GetList().size(), 0ul);
+ ASSERT_EQ(copied.FindDictPath("data")->DictSize(), 0ul);
+}
+
TEST_F(StatusTest, CanCopyEasily) {
Status failed = FailEasily();
Status withData = DoSomethingGiveItBack(failed);
base::Value actual = MediaSerialize(failed);
- ASSERT_EQ(actual.DictSize(), 5ul);
- ASSERT_EQ(actual.FindIntPath("status_code"),
- static_cast<int32_t>(StatusCode::kCodeOnlyForTesting));
- ASSERT_EQ(*actual.FindStringPath("status_message"), "Message");
+ ASSERT_EQ(actual.DictSize(), 6ul);
+ ASSERT_EQ(*actual.FindStringPath("message"), "Message");
ASSERT_EQ(actual.FindListPath("stack")->GetList().size(), 1ul);
ASSERT_EQ(actual.FindListPath("causes")->GetList().size(), 0ul);
ASSERT_EQ(actual.FindDictPath("data")->DictSize(), 0ul);
actual = MediaSerialize(withData);
- ASSERT_EQ(actual.DictSize(), 5ul);
- ASSERT_EQ(actual.FindIntPath("status_code"),
- static_cast<int32_t>(StatusCode::kCodeOnlyForTesting));
- ASSERT_EQ(*actual.FindStringPath("status_message"), "Message");
+ ASSERT_EQ(actual.DictSize(), 6ul);
+ ASSERT_EQ(*actual.FindStringPath("message"), "Message");
ASSERT_EQ(actual.FindListPath("stack")->GetList().size(), 1ul);
ASSERT_EQ(actual.FindListPath("causes")->GetList().size(), 0ul);
ASSERT_EQ(actual.FindDictPath("data")->DictSize(), 1ul);
@@ -243,9 +250,51 @@ TEST_F(StatusTest, StatusOrCodeIsOkWithValue) {
EXPECT_EQ(status_or.code(), StatusCode::kOk);
}
-TEST_F(StatusTest, StatusOrCodeIsNotOkWithoutValue) {
- StatusOr<int> status_or(StatusCode::kCodeOnlyForTesting);
- EXPECT_EQ(status_or.code(), StatusCode::kCodeOnlyForTesting);
+enum class NoDefaultType : StatusCodeType { kFoo = 0, kBar = 1, kBaz = 2 };
+
+struct NoDefaultTypeTraits {
+ using Codes = NoDefaultType;
+ static constexpr StatusGroupType Group() {
+ return "GroupWithNoDefaultTypeForTests";
+ }
+ static constexpr absl::optional<NoDefaultType> DefaultEnumValue() {
+ return absl::nullopt;
+ }
+};
+
+TEST_F(StatusTest, TypedStatusWithNoDefault) {
+ using NDStatus = TypedStatus<NoDefaultTypeTraits>;
+
+ NDStatus foo = NoDefaultType::kFoo;
+ EXPECT_EQ(foo.code(), NoDefaultType::kFoo);
+
+ NDStatus bar = NoDefaultType::kBar;
+ EXPECT_EQ(bar.code(), NoDefaultType::kBar);
+
+ NDStatus::Or<std::string> err = NoDefaultType::kBaz;
+ NDStatus::Or<std::string> ok = std::string("kBaz");
+
+ EXPECT_TRUE(err.has_error());
+ EXPECT_EQ(err.code(), NoDefaultType::kBaz);
+ EXPECT_FALSE(ok.has_error());
+
+ base::Value actual = MediaSerialize(bar);
+ EXPECT_EQ(*actual.FindIntPath("code"), 1);
+}
+
+TEST_F(StatusTest, StatusOrEqOp) {
+ // Test the case of a non-default (non-ok) status
+ StatusOr<std::string> failed = FailEasily();
+ ASSERT_TRUE(failed == StatusCode::kCodeOnlyForTesting);
+ ASSERT_FALSE(failed == StatusCode::kOk);
+ ASSERT_TRUE(failed != StatusCode::kOk);
+ ASSERT_FALSE(failed != StatusCode::kCodeOnlyForTesting);
+
+ StatusOr<std::string> success = std::string("Kirkland > Seattle");
+ ASSERT_TRUE(success != StatusCode::kCodeOnlyForTesting);
+ ASSERT_FALSE(success != StatusCode::kOk);
+ ASSERT_TRUE(success == StatusCode::kOk);
+ ASSERT_FALSE(success == StatusCode::kCodeOnlyForTesting);
}
} // namespace media
diff --git a/chromium/media/base/stream_parser.h b/chromium/media/base/stream_parser.h
index a7de9bc69c2..a07421ae71e 100644
--- a/chromium/media/base/stream_parser.h
+++ b/chromium/media/base/stream_parser.h
@@ -109,6 +109,10 @@ class MEDIA_EXPORT StreamParser {
EncryptedMediaInitDataCB;
StreamParser();
+
+ StreamParser(const StreamParser&) = delete;
+ StreamParser& operator=(const StreamParser&) = delete;
+
virtual ~StreamParser();
// Initializes the parser with necessary callbacks. Must be called before any
@@ -145,9 +149,6 @@ class MEDIA_EXPORT StreamParser {
// implement ProcessChunks().
virtual bool Parse(const uint8_t* buf, int size) = 0;
virtual bool ProcessChunks(std::unique_ptr<BufferQueue> buffer_queue);
-
- private:
- DISALLOW_COPY_AND_ASSIGN(StreamParser);
};
// Appends to |merged_buffers| the provided buffers in decode-timestamp order.
diff --git a/chromium/media/base/stream_parser_buffer.h b/chromium/media/base/stream_parser_buffer.h
index 55b2fbeb139..0999d8e32b0 100644
--- a/chromium/media/base/stream_parser_buffer.h
+++ b/chromium/media/base/stream_parser_buffer.h
@@ -66,15 +66,15 @@ class DecodeTimestamp {
int64_t IntDiv(base::TimeDelta rhs) const { return ts_.IntDiv(rhs); }
static DecodeTimestamp FromSecondsD(double seconds) {
- return DecodeTimestamp(base::TimeDelta::FromSecondsD(seconds));
+ return DecodeTimestamp(base::Seconds(seconds));
}
static DecodeTimestamp FromMilliseconds(int64_t milliseconds) {
- return DecodeTimestamp(base::TimeDelta::FromMilliseconds(milliseconds));
+ return DecodeTimestamp(base::Milliseconds(milliseconds));
}
static DecodeTimestamp FromMicroseconds(int64_t microseconds) {
- return DecodeTimestamp(base::TimeDelta::FromMicroseconds(microseconds));
+ return DecodeTimestamp(base::Microseconds(microseconds));
}
// This method is used to explicitly call out when presentation timestamps
diff --git a/chromium/media/base/supported_types.cc b/chromium/media/base/supported_types.cc
index 07564623070..9c4e2eac5ea 100644
--- a/chromium/media/base/supported_types.cc
+++ b/chromium/media/base/supported_types.cc
@@ -206,26 +206,26 @@ bool IsVp9ProfileSupported(VideoCodecProfile profile) {
bool IsAudioCodecProprietary(AudioCodec codec) {
switch (codec) {
- case kCodecAAC:
- case kCodecAC3:
- case kCodecEAC3:
- case kCodecAMR_NB:
- case kCodecAMR_WB:
- case kCodecGSM_MS:
- case kCodecALAC:
- case kCodecMpegHAudio:
+ case AudioCodec::kAAC:
+ case AudioCodec::kAC3:
+ case AudioCodec::kEAC3:
+ case AudioCodec::kAMR_NB:
+ case AudioCodec::kAMR_WB:
+ case AudioCodec::kGSM_MS:
+ case AudioCodec::kALAC:
+ case AudioCodec::kMpegHAudio:
return true;
- case kCodecFLAC:
- case kCodecMP3:
- case kCodecOpus:
- case kCodecVorbis:
- case kCodecPCM:
- case kCodecPCM_MULAW:
- case kCodecPCM_S16BE:
- case kCodecPCM_S24BE:
- case kCodecPCM_ALAW:
- case kUnknownAudioCodec:
+ case AudioCodec::kFLAC:
+ case AudioCodec::kMP3:
+ case AudioCodec::kOpus:
+ case AudioCodec::kVorbis:
+ case AudioCodec::kPCM:
+ case AudioCodec::kPCM_MULAW:
+ case AudioCodec::kPCM_S16BE:
+ case AudioCodec::kPCM_S24BE:
+ case AudioCodec::kPCM_ALAW:
+ case AudioCodec::kUnknown:
return false;
}
@@ -243,7 +243,7 @@ bool IsDefaultSupportedAudioType(const AudioType& type) {
#endif
switch (type.codec) {
- case kCodecAAC:
+ case AudioCodec::kAAC:
if (type.profile != AudioCodecProfile::kXHE_AAC)
return true;
#if defined(OS_ANDROID)
@@ -253,31 +253,31 @@ bool IsDefaultSupportedAudioType(const AudioType& type) {
return false;
#endif
- case kCodecFLAC:
- case kCodecMP3:
- case kCodecOpus:
- case kCodecPCM:
- case kCodecPCM_MULAW:
- case kCodecPCM_S16BE:
- case kCodecPCM_S24BE:
- case kCodecPCM_ALAW:
- case kCodecVorbis:
+ case AudioCodec::kFLAC:
+ case AudioCodec::kMP3:
+ case AudioCodec::kOpus:
+ case AudioCodec::kPCM:
+ case AudioCodec::kPCM_MULAW:
+ case AudioCodec::kPCM_S16BE:
+ case AudioCodec::kPCM_S24BE:
+ case AudioCodec::kPCM_ALAW:
+ case AudioCodec::kVorbis:
return true;
- case kCodecAMR_NB:
- case kCodecAMR_WB:
- case kCodecGSM_MS:
+ case AudioCodec::kAMR_NB:
+ case AudioCodec::kAMR_WB:
+ case AudioCodec::kGSM_MS:
#if BUILDFLAG(IS_CHROMEOS_ASH)
return true;
#else
return false;
#endif
- case kCodecEAC3:
- case kCodecALAC:
- case kCodecAC3:
- case kCodecMpegHAudio:
- case kUnknownAudioCodec:
+ case AudioCodec::kEAC3:
+ case AudioCodec::kALAC:
+ case AudioCodec::kAC3:
+ case AudioCodec::kMpegHAudio:
+ case AudioCodec::kUnknown:
return false;
}
@@ -287,18 +287,18 @@ bool IsDefaultSupportedAudioType(const AudioType& type) {
bool IsVideoCodecProprietary(VideoCodec codec) {
switch (codec) {
- case kCodecVC1:
- case kCodecH264:
- case kCodecMPEG2:
- case kCodecMPEG4:
- case kCodecHEVC:
- case kCodecDolbyVision:
+ case VideoCodec::kVC1:
+ case VideoCodec::kH264:
+ case VideoCodec::kMPEG2:
+ case VideoCodec::kMPEG4:
+ case VideoCodec::kHEVC:
+ case VideoCodec::kDolbyVision:
return true;
- case kUnknownVideoCodec:
- case kCodecTheora:
- case kCodecVP8:
- case kCodecVP9:
- case kCodecAV1:
+ case VideoCodec::kUnknown:
+ case VideoCodec::kTheora:
+ case VideoCodec::kVP8:
+ case VideoCodec::kVP9:
+ case VideoCodec::kAV1:
return false;
}
@@ -318,7 +318,7 @@ bool IsDefaultSupportedVideoType(const VideoType& type) {
#endif
switch (type.codec) {
- case kCodecAV1:
+ case VideoCodec::kAV1:
// If the AV1 decoder is enabled, or if we're on Q or later, yes.
#if BUILDFLAG(ENABLE_AV1_DECODER)
return IsColorSpaceSupported(type.color_space);
@@ -333,29 +333,29 @@ bool IsDefaultSupportedVideoType(const VideoType& type) {
return false;
#endif
- case kCodecVP9:
+ case VideoCodec::kVP9:
// Color management required for HDR to not look terrible.
return IsColorSpaceSupported(type.color_space) &&
IsVp9ProfileSupported(type.profile);
- case kCodecH264:
- case kCodecVP8:
- case kCodecTheora:
+ case VideoCodec::kH264:
+ case VideoCodec::kVP8:
+ case VideoCodec::kTheora:
return true;
- case kCodecHEVC:
+ case VideoCodec::kHEVC:
#if BUILDFLAG(ENABLE_PLATFORM_ENCRYPTED_HEVC)
return IsColorSpaceSupported(type.color_space) &&
IsHevcProfileSupported(type.profile);
#else
return false;
#endif // BUILDFLAG(ENABLE_PLATFORM_ENCRYPTED_HEVC)
- case kUnknownVideoCodec:
- case kCodecVC1:
- case kCodecMPEG2:
- case kCodecDolbyVision:
+ case VideoCodec::kUnknown:
+ case VideoCodec::kVC1:
+ case VideoCodec::kMPEG2:
+ case VideoCodec::kDolbyVision:
return false;
- case kCodecMPEG4:
+ case VideoCodec::kMPEG4:
#if BUILDFLAG(IS_CHROMEOS_ASH)
return true;
#else
diff --git a/chromium/media/base/supported_types_unittest.cc b/chromium/media/base/supported_types_unittest.cc
index eddc5b3ccc1..93f3c2a4fbd 100644
--- a/chromium/media/base/supported_types_unittest.cc
+++ b/chromium/media/base/supported_types_unittest.cc
@@ -35,30 +35,35 @@ TEST(SupportedTypesTest, IsSupportedVideoTypeBasics) {
// Expect support for baseline configuration of known codecs.
EXPECT_TRUE(IsSupportedVideoType(
- {kCodecVP8, VP8PROFILE_ANY, kUnspecifiedLevel, kColorSpace}));
+ {VideoCodec::kVP8, VP8PROFILE_ANY, kUnspecifiedLevel, kColorSpace}));
EXPECT_TRUE(IsSupportedVideoType(
- {kCodecVP9, VP9PROFILE_PROFILE0, kUnspecifiedLevel, kColorSpace}));
- EXPECT_TRUE(IsSupportedVideoType({kCodecTheora, VIDEO_CODEC_PROFILE_UNKNOWN,
- kUnspecifiedLevel, kColorSpace}));
+ {VideoCodec::kVP9, VP9PROFILE_PROFILE0, kUnspecifiedLevel, kColorSpace}));
+ EXPECT_TRUE(
+ IsSupportedVideoType({VideoCodec::kTheora, VIDEO_CODEC_PROFILE_UNKNOWN,
+ kUnspecifiedLevel, kColorSpace}));
// Expect non-support for the following.
EXPECT_FALSE(
- IsSupportedVideoType({kUnknownVideoCodec, VIDEO_CODEC_PROFILE_UNKNOWN,
+ IsSupportedVideoType({VideoCodec::kUnknown, VIDEO_CODEC_PROFILE_UNKNOWN,
+ kUnspecifiedLevel, kColorSpace}));
+ EXPECT_FALSE(
+ IsSupportedVideoType({VideoCodec::kVC1, VIDEO_CODEC_PROFILE_UNKNOWN,
+ kUnspecifiedLevel, kColorSpace}));
+ EXPECT_FALSE(
+ IsSupportedVideoType({VideoCodec::kMPEG2, VIDEO_CODEC_PROFILE_UNKNOWN,
+ kUnspecifiedLevel, kColorSpace}));
+ EXPECT_FALSE(
+ IsSupportedVideoType({VideoCodec::kHEVC, VIDEO_CODEC_PROFILE_UNKNOWN,
kUnspecifiedLevel, kColorSpace}));
- EXPECT_FALSE(IsSupportedVideoType({kCodecVC1, VIDEO_CODEC_PROFILE_UNKNOWN,
- kUnspecifiedLevel, kColorSpace}));
- EXPECT_FALSE(IsSupportedVideoType({kCodecMPEG2, VIDEO_CODEC_PROFILE_UNKNOWN,
- kUnspecifiedLevel, kColorSpace}));
- EXPECT_FALSE(IsSupportedVideoType({kCodecHEVC, VIDEO_CODEC_PROFILE_UNKNOWN,
- kUnspecifiedLevel, kColorSpace}));
// Expect conditional support for the following.
+ EXPECT_EQ(kPropCodecsEnabled,
+ IsSupportedVideoType(
+ {VideoCodec::kH264, H264PROFILE_BASELINE, 1, kColorSpace}));
EXPECT_EQ(
- kPropCodecsEnabled,
- IsSupportedVideoType({kCodecH264, H264PROFILE_BASELINE, 1, kColorSpace}));
- EXPECT_EQ(kMpeg4Supported,
- IsSupportedVideoType({kCodecMPEG4, VIDEO_CODEC_PROFILE_UNKNOWN,
- kUnspecifiedLevel, kColorSpace}));
+ kMpeg4Supported,
+ IsSupportedVideoType({VideoCodec::kMPEG4, VIDEO_CODEC_PROFILE_UNKNOWN,
+ kUnspecifiedLevel, kColorSpace}));
}
TEST(SupportedTypesTest, IsSupportedVideoType_VP9TransferFunctions) {
@@ -91,8 +96,9 @@ TEST(SupportedTypesTest, IsSupportedVideoType_VP9TransferFunctions) {
kSupportedTransfers.end();
if (found)
num_found++;
- EXPECT_EQ(found, IsSupportedVideoType(
- {kCodecVP9, VP9PROFILE_PROFILE0, 1, color_space}));
+ EXPECT_EQ(found,
+ IsSupportedVideoType(
+ {VideoCodec::kVP9, VP9PROFILE_PROFILE0, 1, color_space}));
}
EXPECT_EQ(kSupportedTransfers.size(), num_found);
}
@@ -121,8 +127,9 @@ TEST(SupportedTypesTest, IsSupportedVideoType_VP9Primaries) {
kSupportedPrimaries.end();
if (found)
num_found++;
- EXPECT_EQ(found, IsSupportedVideoType(
- {kCodecVP9, VP9PROFILE_PROFILE0, 1, color_space}));
+ EXPECT_EQ(found,
+ IsSupportedVideoType(
+ {VideoCodec::kVP9, VP9PROFILE_PROFILE0, 1, color_space}));
}
EXPECT_EQ(kSupportedPrimaries.size(), num_found);
}
@@ -151,8 +158,9 @@ TEST(SupportedTypesTest, IsSupportedVideoType_VP9Matrix) {
kSupportedMatrix.find(color_space.matrix) != kSupportedMatrix.end();
if (found)
num_found++;
- EXPECT_EQ(found, IsSupportedVideoType(
- {kCodecVP9, VP9PROFILE_PROFILE0, 1, color_space}));
+ EXPECT_EQ(found,
+ IsSupportedVideoType(
+ {VideoCodec::kVP9, VP9PROFILE_PROFILE0, 1, color_space}));
}
EXPECT_EQ(kSupportedMatrix.size(), num_found);
}
@@ -165,9 +173,9 @@ TEST(SupportedTypesTest, IsSupportedVideoType_VP9Profiles) {
const int kUnspecifiedLevel = 0;
EXPECT_TRUE(IsSupportedVideoType(
- {kCodecVP9, VP9PROFILE_PROFILE0, kUnspecifiedLevel, kColorSpace}));
+ {VideoCodec::kVP9, VP9PROFILE_PROFILE0, kUnspecifiedLevel, kColorSpace}));
EXPECT_TRUE(IsSupportedVideoType(
- {kCodecVP9, VP9PROFILE_PROFILE1, kUnspecifiedLevel, kColorSpace}));
+ {VideoCodec::kVP9, VP9PROFILE_PROFILE1, kUnspecifiedLevel, kColorSpace}));
// VP9 Profile2 are supported on x86, ChromeOS on ARM and Mac/Win on ARM64.
// See third_party/libvpx/BUILD.gn.
@@ -175,7 +183,7 @@ TEST(SupportedTypesTest, IsSupportedVideoType_VP9Profiles) {
(defined(ARCH_CPU_ARM_FAMILY) && BUILDFLAG(IS_CHROMEOS_ASH)) || \
(defined(ARCH_CPU_ARM64) && (defined(OS_MAC) || defined(OS_WIN)))
EXPECT_TRUE(IsSupportedVideoType(
- {kCodecVP9, VP9PROFILE_PROFILE2, kUnspecifiedLevel, kColorSpace}));
+ {VideoCodec::kVP9, VP9PROFILE_PROFILE2, kUnspecifiedLevel, kColorSpace}));
#endif
}
@@ -184,43 +192,53 @@ TEST(SupportedTypesTest, IsSupportedAudioTypeWithSpatialRenderingBasics) {
// Dolby Atmos = E-AC3 (Dolby Digital Plus) + spatialRendering. Currently not
// supported.
EXPECT_FALSE(IsSupportedAudioType(
- {kCodecEAC3, AudioCodecProfile::kUnknown, is_spatial_rendering}));
+ {AudioCodec::kEAC3, AudioCodecProfile::kUnknown, is_spatial_rendering}));
// Expect non-support for codecs with which there is no spatial audio format.
EXPECT_FALSE(IsSupportedAudioType(
- {kCodecAAC, AudioCodecProfile::kUnknown, is_spatial_rendering}));
- EXPECT_FALSE(IsSupportedAudioType(
- {kCodecMP3, AudioCodecProfile::kUnknown, is_spatial_rendering}));
- EXPECT_FALSE(IsSupportedAudioType(
- {kCodecPCM, AudioCodecProfile::kUnknown, is_spatial_rendering}));
- EXPECT_FALSE(IsSupportedAudioType(
- {kCodecVorbis, AudioCodecProfile::kUnknown, is_spatial_rendering}));
- EXPECT_FALSE(IsSupportedAudioType(
- {kCodecFLAC, AudioCodecProfile::kUnknown, is_spatial_rendering}));
- EXPECT_FALSE(IsSupportedAudioType(
- {kCodecAMR_NB, AudioCodecProfile::kUnknown, is_spatial_rendering}));
- EXPECT_FALSE(IsSupportedAudioType(
- {kCodecAMR_WB, AudioCodecProfile::kUnknown, is_spatial_rendering}));
- EXPECT_FALSE(IsSupportedAudioType(
- {kCodecPCM_MULAW, AudioCodecProfile::kUnknown, is_spatial_rendering}));
+ {AudioCodec::kAAC, AudioCodecProfile::kUnknown, is_spatial_rendering}));
EXPECT_FALSE(IsSupportedAudioType(
- {kCodecGSM_MS, AudioCodecProfile::kUnknown, is_spatial_rendering}));
+ {AudioCodec::kMP3, AudioCodecProfile::kUnknown, is_spatial_rendering}));
EXPECT_FALSE(IsSupportedAudioType(
- {kCodecPCM_S16BE, AudioCodecProfile::kUnknown, is_spatial_rendering}));
- EXPECT_FALSE(IsSupportedAudioType(
- {kCodecPCM_S24BE, AudioCodecProfile::kUnknown, is_spatial_rendering}));
- EXPECT_FALSE(IsSupportedAudioType(
- {kCodecOpus, AudioCodecProfile::kUnknown, is_spatial_rendering}));
- EXPECT_FALSE(IsSupportedAudioType(
- {kCodecPCM_ALAW, AudioCodecProfile::kUnknown, is_spatial_rendering}));
+ {AudioCodec::kPCM, AudioCodecProfile::kUnknown, is_spatial_rendering}));
+ EXPECT_FALSE(
+ IsSupportedAudioType({AudioCodec::kVorbis, AudioCodecProfile::kUnknown,
+ is_spatial_rendering}));
EXPECT_FALSE(IsSupportedAudioType(
- {kCodecALAC, AudioCodecProfile::kUnknown, is_spatial_rendering}));
+ {AudioCodec::kFLAC, AudioCodecProfile::kUnknown, is_spatial_rendering}));
+ EXPECT_FALSE(
+ IsSupportedAudioType({AudioCodec::kAMR_NB, AudioCodecProfile::kUnknown,
+ is_spatial_rendering}));
+ EXPECT_FALSE(
+ IsSupportedAudioType({AudioCodec::kAMR_WB, AudioCodecProfile::kUnknown,
+ is_spatial_rendering}));
+ EXPECT_FALSE(
+ IsSupportedAudioType({AudioCodec::kPCM_MULAW, AudioCodecProfile::kUnknown,
+ is_spatial_rendering}));
+ EXPECT_FALSE(
+ IsSupportedAudioType({AudioCodec::kGSM_MS, AudioCodecProfile::kUnknown,
+ is_spatial_rendering}));
+ EXPECT_FALSE(
+ IsSupportedAudioType({AudioCodec::kPCM_S16BE, AudioCodecProfile::kUnknown,
+ is_spatial_rendering}));
+ EXPECT_FALSE(
+ IsSupportedAudioType({AudioCodec::kPCM_S24BE, AudioCodecProfile::kUnknown,
+ is_spatial_rendering}));
EXPECT_FALSE(IsSupportedAudioType(
- {kCodecAC3, AudioCodecProfile::kUnknown, is_spatial_rendering}));
+ {AudioCodec::kOpus, AudioCodecProfile::kUnknown, is_spatial_rendering}));
+ EXPECT_FALSE(
+ IsSupportedAudioType({AudioCodec::kPCM_ALAW, AudioCodecProfile::kUnknown,
+ is_spatial_rendering}));
EXPECT_FALSE(IsSupportedAudioType(
- {kCodecMpegHAudio, AudioCodecProfile::kUnknown, is_spatial_rendering}));
+ {AudioCodec::kALAC, AudioCodecProfile::kUnknown, is_spatial_rendering}));
EXPECT_FALSE(IsSupportedAudioType(
- {kUnknownAudioCodec, AudioCodecProfile::kUnknown, is_spatial_rendering}));
+ {AudioCodec::kAC3, AudioCodecProfile::kUnknown, is_spatial_rendering}));
+ EXPECT_FALSE(IsSupportedAudioType({AudioCodec::kMpegHAudio,
+ AudioCodecProfile::kUnknown,
+ is_spatial_rendering}));
+ EXPECT_FALSE(
+ IsSupportedAudioType({AudioCodec::kUnknown, AudioCodecProfile::kUnknown,
+ is_spatial_rendering}));
}
TEST(SupportedTypesTest, XHE_AACSupportedOnAndroidOnly) {
@@ -231,11 +249,12 @@ TEST(SupportedTypesTest, XHE_AACSupportedOnAndroidOnly) {
base::android::BuildInfo::GetInstance()->sdk_int() >=
base::android::SDK_VERSION_P;
- EXPECT_EQ(is_supported, IsSupportedAudioType(
- {kCodecAAC, AudioCodecProfile::kXHE_AAC, false}));
+ EXPECT_EQ(is_supported,
+ IsSupportedAudioType(
+ {AudioCodec::kAAC, AudioCodecProfile::kXHE_AAC, false}));
#else
- EXPECT_FALSE(
- IsSupportedAudioType({kCodecAAC, AudioCodecProfile::kXHE_AAC, false}));
+ EXPECT_FALSE(IsSupportedAudioType(
+ {AudioCodec::kAAC, AudioCodecProfile::kXHE_AAC, false}));
#endif
}
@@ -248,42 +267,45 @@ TEST(SupportedTypesTest, IsSupportedVideoTypeWithHdrMetadataBasics) {
// Expect support for baseline configuration of known codecs.
EXPECT_TRUE(IsSupportedVideoType(
- {kCodecVP8, VP8PROFILE_ANY, kUnspecifiedLevel, color_space}));
+ {VideoCodec::kVP8, VP8PROFILE_ANY, kUnspecifiedLevel, color_space}));
EXPECT_TRUE(IsSupportedVideoType(
- {kCodecVP9, VP9PROFILE_PROFILE0, kUnspecifiedLevel, color_space}));
- EXPECT_TRUE(IsSupportedVideoType({kCodecTheora, VIDEO_CODEC_PROFILE_UNKNOWN,
- kUnspecifiedLevel, color_space}));
+ {VideoCodec::kVP9, VP9PROFILE_PROFILE0, kUnspecifiedLevel, color_space}));
+ EXPECT_TRUE(
+ IsSupportedVideoType({VideoCodec::kTheora, VIDEO_CODEC_PROFILE_UNKNOWN,
+ kUnspecifiedLevel, color_space}));
// All combinations of combinations of color gamuts and transfer functions
// should be supported.
color_space.primaries = VideoColorSpace::PrimaryID::SMPTEST431_2;
color_space.transfer = VideoColorSpace::TransferID::SMPTEST2084;
EXPECT_TRUE(IsSupportedVideoType(
- {kCodecVP8, VP8PROFILE_ANY, kUnspecifiedLevel, color_space}));
+ {VideoCodec::kVP8, VP8PROFILE_ANY, kUnspecifiedLevel, color_space}));
EXPECT_TRUE(IsSupportedVideoType(
- {kCodecVP9, VP9PROFILE_PROFILE0, kUnspecifiedLevel, color_space}));
- EXPECT_TRUE(IsSupportedVideoType({kCodecTheora, VIDEO_CODEC_PROFILE_UNKNOWN,
- kUnspecifiedLevel, color_space}));
+ {VideoCodec::kVP9, VP9PROFILE_PROFILE0, kUnspecifiedLevel, color_space}));
+ EXPECT_TRUE(
+ IsSupportedVideoType({VideoCodec::kTheora, VIDEO_CODEC_PROFILE_UNKNOWN,
+ kUnspecifiedLevel, color_space}));
color_space.primaries = VideoColorSpace::PrimaryID::BT2020;
color_space.transfer = VideoColorSpace::TransferID::ARIB_STD_B67;
EXPECT_TRUE(IsSupportedVideoType(
- {kCodecVP8, VP8PROFILE_ANY, kUnspecifiedLevel, color_space}));
+ {VideoCodec::kVP8, VP8PROFILE_ANY, kUnspecifiedLevel, color_space}));
EXPECT_TRUE(IsSupportedVideoType(
- {kCodecVP9, VP9PROFILE_PROFILE0, kUnspecifiedLevel, color_space}));
- EXPECT_TRUE(IsSupportedVideoType({kCodecTheora, VIDEO_CODEC_PROFILE_UNKNOWN,
- kUnspecifiedLevel, color_space}));
+ {VideoCodec::kVP9, VP9PROFILE_PROFILE0, kUnspecifiedLevel, color_space}));
+ EXPECT_TRUE(
+ IsSupportedVideoType({VideoCodec::kTheora, VIDEO_CODEC_PROFILE_UNKNOWN,
+ kUnspecifiedLevel, color_space}));
// No HDR metadata types are supported.
EXPECT_FALSE(
- IsSupportedVideoType({kCodecVP8, VP8PROFILE_ANY, kUnspecifiedLevel,
+ IsSupportedVideoType({VideoCodec::kVP8, VP8PROFILE_ANY, kUnspecifiedLevel,
color_space, gfx::HdrMetadataType::kSmpteSt2086}));
- EXPECT_FALSE(IsSupportedVideoType({kCodecVP8, VP8PROFILE_ANY,
+ EXPECT_FALSE(IsSupportedVideoType({VideoCodec::kVP8, VP8PROFILE_ANY,
kUnspecifiedLevel, color_space,
gfx::HdrMetadataType::kSmpteSt2094_10}));
- EXPECT_FALSE(IsSupportedVideoType({kCodecVP8, VP8PROFILE_ANY,
+ EXPECT_FALSE(IsSupportedVideoType({VideoCodec::kVP8, VP8PROFILE_ANY,
kUnspecifiedLevel, color_space,
gfx::HdrMetadataType::kSmpteSt2094_40}));
}
diff --git a/chromium/media/base/supported_video_decoder_config_unittest.cc b/chromium/media/base/supported_video_decoder_config_unittest.cc
index dd3dabdbe3d..14f0ad9146f 100644
--- a/chromium/media/base/supported_video_decoder_config_unittest.cc
+++ b/chromium/media/base/supported_video_decoder_config_unittest.cc
@@ -13,7 +13,7 @@ class SupportedVideoDecoderConfigTest : public ::testing::Test {
public:
SupportedVideoDecoderConfigTest()
: decoder_config_(
- TestVideoConfig::NormalCodecProfile(kCodecH264,
+ TestVideoConfig::NormalCodecProfile(VideoCodec::kH264,
H264PROFILE_EXTENDED)) {
supported_config_.profile_min = H264PROFILE_MIN;
supported_config_.profile_max = H264PROFILE_MAX;
diff --git a/chromium/media/base/svc_scalability_mode.cc b/chromium/media/base/svc_scalability_mode.cc
new file mode 100644
index 00000000000..13eca157f43
--- /dev/null
+++ b/chromium/media/base/svc_scalability_mode.cc
@@ -0,0 +1,79 @@
+// Copyright 2021 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/svc_scalability_mode.h"
+
+#include "base/notreached.h"
+
+namespace media {
+
+const char* GetScalabilityModeName(SVCScalabilityMode scalability_mode) {
+ switch (scalability_mode) {
+ case SVCScalabilityMode::kL1T2:
+ return "L1T2";
+ case SVCScalabilityMode::kL1T3:
+ return "L1T3";
+ case SVCScalabilityMode::kL2T1:
+ return "L2T1";
+ case SVCScalabilityMode::kL2T2:
+ return "L2T2";
+ case SVCScalabilityMode::kL2T3:
+ return "L2T3";
+ case SVCScalabilityMode::kL3T1:
+ return "L3T1";
+ case SVCScalabilityMode::kL3T2:
+ return "L3T2";
+ case SVCScalabilityMode::kL3T3:
+ return "L3T3";
+ case SVCScalabilityMode::kL2T1h:
+ return "L2T1h";
+ case SVCScalabilityMode::kL2T2h:
+ return "L2T2h";
+ case SVCScalabilityMode::kL2T3h:
+ return "L2T3h";
+ case SVCScalabilityMode::kS2T1:
+ return "S2T1";
+ case SVCScalabilityMode::kS2T2:
+ return "S2T2";
+ case SVCScalabilityMode::kS2T3:
+ return "S2T3";
+ case SVCScalabilityMode::kS2T1h:
+ return "S2T1h";
+ case SVCScalabilityMode::kS2T2h:
+ return "S2T2h";
+ case SVCScalabilityMode::kS2T3h:
+ return "S2T3h";
+ case SVCScalabilityMode::kS3T1:
+ return "S3T1";
+ case SVCScalabilityMode::kS3T2:
+ return "S3T2";
+ case SVCScalabilityMode::kS3T3:
+ return "S3T3";
+ case SVCScalabilityMode::kS3T1h:
+ return "S3T1h";
+ case SVCScalabilityMode::kS3T2h:
+ return "S3T2h";
+ case SVCScalabilityMode::kS3T3h:
+ return "S3T3h";
+ case SVCScalabilityMode::kL2T2Key:
+ return "L2T2_KEY";
+ case SVCScalabilityMode::kL2T2KeyShift:
+ return "L2T2_KEY_SHIFT";
+ case SVCScalabilityMode::kL2T3Key:
+ return "L2T3_KEY";
+ case SVCScalabilityMode::kL2T3KeyShift:
+ return "L2T3_KEY_SHIFT";
+ case SVCScalabilityMode::kL3T2Key:
+ return "L3T2_KEY";
+ case SVCScalabilityMode::kL3T2KeyShift:
+ return "L3T2_KEY_SHIFT";
+ case SVCScalabilityMode::kL3T3Key:
+ return "L3T3_KEY";
+ case SVCScalabilityMode::kL3T3KeyShift:
+ return "L3T3_KEY_SHIFT";
+ }
+ NOTREACHED();
+ return "";
+}
+} // namespace media
diff --git a/chromium/media/base/svc_scalability_mode.h b/chromium/media/base/svc_scalability_mode.h
new file mode 100644
index 00000000000..65ce610af07
--- /dev/null
+++ b/chromium/media/base/svc_scalability_mode.h
@@ -0,0 +1,54 @@
+// Copyright 2021 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_SVC_SCALABILITY_MODE_H_
+#define MEDIA_BASE_SVC_SCALABILITY_MODE_H_
+
+#include "media/base/media_export.h"
+
+namespace media {
+
+// This enum class is the corresponding implementation with WebRTC-SVC.
+// See https://www.w3.org/TR/webrtc-svc/#scalabilitymodes* for the detail.
+enum class SVCScalabilityMode {
+ kL1T2,
+ kL1T3,
+ kL2T1,
+ kL2T2,
+ kL2T3,
+ kL3T1,
+ kL3T2,
+ kL3T3,
+ kL2T1h,
+ kL2T2h,
+ kL2T3h,
+ kS2T1,
+ kS2T2,
+ kS2T3,
+ kS2T1h,
+ kS2T2h,
+ kS2T3h,
+ kS3T1,
+ kS3T2,
+ kS3T3,
+ kS3T1h,
+ kS3T2h,
+ kS3T3h,
+ kL2T2Key,
+ kL2T2KeyShift,
+ kL2T3Key,
+ kL2T3KeyShift,
+ kL3T2Key,
+ kL3T2KeyShift,
+ kL3T3Key,
+ kL3T3KeyShift,
+};
+
+// Gets the WebRTC-SVC Spec defined scalability mode name.
+MEDIA_EXPORT const char* GetScalabilityModeName(
+ SVCScalabilityMode scalability_mode);
+
+} // namespace media
+
+#endif // MEDIA_BASE_SVC_SCALABILITY_MODE_H_
diff --git a/chromium/media/base/test_data_util.cc b/chromium/media/base/test_data_util.cc
index b3ccf07d9de..4940d4c4adc 100644
--- a/chromium/media/base/test_data_util.cc
+++ b/chromium/media/base/test_data_util.cc
@@ -167,14 +167,14 @@ const uint8_t kKeyId[] = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
// See http://crbug.com/592067
// Common test results.
-const char kFailed[] = "FAILED";
+const char kFailedTitle[] = "FAILED";
// Upper case event name set by Utils.installTitleEventHandler().
-const char kEnded[] = "ENDED";
-const char kErrorEvent[] = "ERROR";
+const char kEndedTitle[] = "ENDED";
+const char kErrorEventTitle[] = "ERROR";
// Lower case event name as set by Utils.failTest().
-const char kError[] = "error";
+const char kErrorTitle[] = "error";
const base::FilePath::CharType kTestDataPath[] =
FILE_PATH_LITERAL("media/test/data");
diff --git a/chromium/media/base/test_data_util.h b/chromium/media/base/test_data_util.h
index ba6a3427ba7..79adec7de2e 100644
--- a/chromium/media/base/test_data_util.h
+++ b/chromium/media/base/test_data_util.h
@@ -18,10 +18,10 @@ namespace media {
class DecoderBuffer;
// Common test results.
-extern const char kFailed[];
-extern const char kEnded[];
-extern const char kErrorEvent[];
-extern const char kError[];
+extern const char kFailedTitle[];
+extern const char kEndedTitle[];
+extern const char kErrorEventTitle[];
+extern const char kErrorTitle[];
// Returns a file path for a file in the media/test/data directory.
base::FilePath GetTestDataFilePath(const std::string& name);
diff --git a/chromium/media/base/test_helpers.cc b/chromium/media/base/test_helpers.cc
index 3f2d50050d6..a046a9181aa 100644
--- a/chromium/media/base/test_helpers.cc
+++ b/chromium/media/base/test_helpers.cc
@@ -146,24 +146,24 @@ static VideoDecoderConfig GetTestConfig(VideoCodec codec,
static VideoCodecProfile MinProfile(VideoCodec codec) {
switch (codec) {
- case kUnknownVideoCodec:
- case kCodecVC1:
- case kCodecMPEG2:
- case kCodecMPEG4:
+ case VideoCodec::kUnknown:
+ case VideoCodec::kVC1:
+ case VideoCodec::kMPEG2:
+ case VideoCodec::kMPEG4:
return VIDEO_CODEC_PROFILE_UNKNOWN;
- case kCodecH264:
+ case VideoCodec::kH264:
return H264PROFILE_MIN;
- case kCodecTheora:
+ case VideoCodec::kTheora:
return THEORAPROFILE_MIN;
- case kCodecVP8:
+ case VideoCodec::kVP8:
return VP8PROFILE_MIN;
- case kCodecVP9:
+ case VideoCodec::kVP9:
return VP9PROFILE_MIN;
- case kCodecHEVC:
+ case VideoCodec::kHEVC:
return HEVCPROFILE_MIN;
- case kCodecDolbyVision:
+ case VideoCodec::kDolbyVision:
return DOLBYVISION_PROFILE0;
- case kCodecAV1:
+ case VideoCodec::kAV1:
return AV1PROFILE_MIN;
}
}
@@ -174,7 +174,7 @@ static const gfx::Size kExtraLargeSize(15360, 8640);
// static
VideoDecoderConfig TestVideoConfig::Invalid() {
- return GetTestConfig(kUnknownVideoCodec, VIDEO_CODEC_PROFILE_UNKNOWN,
+ return GetTestConfig(VideoCodec::kUnknown, VIDEO_CODEC_PROFILE_UNKNOWN,
VideoColorSpace::JPEG(), VIDEO_ROTATION_0, kNormalSize,
false);
}
@@ -195,7 +195,7 @@ VideoDecoderConfig TestVideoConfig::NormalWithColorSpace(
// static
VideoDecoderConfig TestVideoConfig::NormalH264(VideoCodecProfile config) {
- return GetTestConfig(kCodecH264, MinProfile(kCodecH264),
+ return GetTestConfig(VideoCodec::kH264, MinProfile(VideoCodec::kH264),
VideoColorSpace::JPEG(), VIDEO_ROTATION_0, kNormalSize,
false);
}
@@ -217,7 +217,7 @@ VideoDecoderConfig TestVideoConfig::NormalEncrypted(VideoCodec codec,
// static
VideoDecoderConfig TestVideoConfig::NormalRotated(VideoRotation rotation) {
- return GetTestConfig(kCodecVP8, MinProfile(kCodecVP8),
+ return GetTestConfig(VideoCodec::kVP8, MinProfile(VideoCodec::kVP8),
VideoColorSpace::JPEG(), rotation, kNormalSize, false);
}
@@ -274,25 +274,25 @@ gfx::Size TestVideoConfig::ExtraLargeCodedSize() {
}
AudioDecoderConfig TestAudioConfig::Normal() {
- return AudioDecoderConfig(kCodecVorbis, kSampleFormatPlanarF32,
+ return AudioDecoderConfig(AudioCodec::kVorbis, kSampleFormatPlanarF32,
CHANNEL_LAYOUT_STEREO, NormalSampleRateValue(),
EmptyExtraData(), EncryptionScheme::kUnencrypted);
}
AudioDecoderConfig TestAudioConfig::NormalEncrypted() {
- return AudioDecoderConfig(kCodecVorbis, kSampleFormatPlanarF32,
+ return AudioDecoderConfig(AudioCodec::kVorbis, kSampleFormatPlanarF32,
CHANNEL_LAYOUT_STEREO, NormalSampleRateValue(),
EmptyExtraData(), EncryptionScheme::kCenc);
}
AudioDecoderConfig TestAudioConfig::HighSampleRate() {
- return AudioDecoderConfig(kCodecVorbis, kSampleFormatPlanarF32,
+ return AudioDecoderConfig(AudioCodec::kVorbis, kSampleFormatPlanarF32,
CHANNEL_LAYOUT_STEREO, HighSampleRateValue(),
EmptyExtraData(), EncryptionScheme::kUnencrypted);
}
AudioDecoderConfig TestAudioConfig::HighSampleRateEncrypted() {
- return AudioDecoderConfig(kCodecVorbis, kSampleFormatPlanarF32,
+ return AudioDecoderConfig(AudioCodec::kVorbis, kSampleFormatPlanarF32,
CHANNEL_LAYOUT_STEREO, HighSampleRateValue(),
EmptyExtraData(), EncryptionScheme::kCenc);
}
diff --git a/chromium/media/base/test_helpers.h b/chromium/media/base/test_helpers.h
index 81e73c76aca..1d91266d3e3 100644
--- a/chromium/media/base/test_helpers.h
+++ b/chromium/media/base/test_helpers.h
@@ -50,6 +50,10 @@ class WaitableMessageLoopEvent {
public:
WaitableMessageLoopEvent();
explicit WaitableMessageLoopEvent(base::TimeDelta timeout);
+
+ WaitableMessageLoopEvent(const WaitableMessageLoopEvent&) = delete;
+ WaitableMessageLoopEvent& operator=(const WaitableMessageLoopEvent&) = delete;
+
~WaitableMessageLoopEvent();
// Returns a thread-safe closure that will signal |this| when executed.
@@ -79,8 +83,6 @@ class WaitableMessageLoopEvent {
const base::TimeDelta timeout_;
SEQUENCE_CHECKER(sequence_checker_);
-
- DISALLOW_COPY_AND_ASSIGN(WaitableMessageLoopEvent);
};
// Provides pre-canned VideoDecoderConfig. These types are used for tests that
@@ -90,30 +92,32 @@ class TestVideoConfig {
// Returns a configuration that is invalid.
static VideoDecoderConfig Invalid();
- static VideoDecoderConfig Normal(VideoCodec codec = kCodecVP8);
+ static VideoDecoderConfig Normal(VideoCodec codec = VideoCodec::kVP8);
static VideoDecoderConfig NormalWithColorSpace(
VideoCodec codec,
const VideoColorSpace& color_space);
static VideoDecoderConfig NormalH264(VideoCodecProfile = H264PROFILE_MIN);
static VideoDecoderConfig NormalCodecProfile(
- VideoCodec codec = kCodecVP8,
+ VideoCodec codec = VideoCodec::kVP8,
VideoCodecProfile profile = VP8PROFILE_MIN);
- static VideoDecoderConfig NormalEncrypted(VideoCodec codec = kCodecVP8,
+ static VideoDecoderConfig NormalEncrypted(VideoCodec codec = VideoCodec::kVP8,
VideoCodecProfile = VP8PROFILE_MIN);
static VideoDecoderConfig NormalRotated(VideoRotation rotation);
// Returns a configuration that is larger in dimensions than Normal().
- static VideoDecoderConfig Large(VideoCodec codec = kCodecVP8);
- static VideoDecoderConfig LargeEncrypted(VideoCodec codec = kCodecVP8);
+ static VideoDecoderConfig Large(VideoCodec codec = VideoCodec::kVP8);
+ static VideoDecoderConfig LargeEncrypted(VideoCodec codec = VideoCodec::kVP8);
// Returns a configuration that is larger in dimensions that Large().
- static VideoDecoderConfig ExtraLarge(VideoCodec codec = kCodecVP8);
- static VideoDecoderConfig ExtraLargeEncrypted(VideoCodec codec = kCodecVP8);
+ static VideoDecoderConfig ExtraLarge(VideoCodec codec = VideoCodec::kVP8);
+ static VideoDecoderConfig ExtraLargeEncrypted(
+ VideoCodec codec = VideoCodec::kVP8);
static VideoDecoderConfig Custom(gfx::Size size,
- VideoCodec codec = kCodecVP8);
- static VideoDecoderConfig CustomEncrypted(gfx::Size size,
- VideoCodec codec = kCodecVP8);
+ VideoCodec codec = VideoCodec::kVP8);
+ static VideoDecoderConfig CustomEncrypted(
+ gfx::Size size,
+ VideoCodec codec = VideoCodec::kVP8);
// Returns coded size for Normal and Large config.
static gfx::Size NormalCodedSize();
diff --git a/chromium/media/base/text_ranges.h b/chromium/media/base/text_ranges.h
index 2b75822c9fd..e65553e1aee 100644
--- a/chromium/media/base/text_ranges.h
+++ b/chromium/media/base/text_ranges.h
@@ -20,6 +20,10 @@ namespace media {
class MEDIA_EXPORT TextRanges {
public:
TextRanges();
+
+ TextRanges(const TextRanges&) = delete;
+ TextRanges& operator=(const TextRanges&) = delete;
+
~TextRanges();
// Reset the current range pointer, such that we bind to a new range
@@ -88,8 +92,6 @@ class MEDIA_EXPORT TextRanges {
// The time range to which we bind following a Reset().
RangeMap::iterator curr_range_itr_;
-
- DISALLOW_COPY_AND_ASSIGN(TextRanges);
};
} // namespace media
diff --git a/chromium/media/base/text_ranges_unittest.cc b/chromium/media/base/text_ranges_unittest.cc
index 69cf2e3f9c4..979ec2dd9b3 100644
--- a/chromium/media/base/text_ranges_unittest.cc
+++ b/chromium/media/base/text_ranges_unittest.cc
@@ -13,9 +13,7 @@ namespace media {
class TextRangesTest : public ::testing::Test {
protected:
- bool AddCue(int seconds) {
- return ranges_.AddCue(base::TimeDelta::FromSeconds(seconds));
- }
+ bool AddCue(int seconds) { return ranges_.AddCue(base::Seconds(seconds)); }
void Reset() {
ranges_.Reset();
diff --git a/chromium/media/base/text_renderer_unittest.cc b/chromium/media/base/text_renderer_unittest.cc
index b00a269c0ea..2e25c2ac4b2 100644
--- a/chromium/media/base/text_renderer_unittest.cc
+++ b/chromium/media/base/text_renderer_unittest.cc
@@ -31,6 +31,10 @@ class FakeTextTrack : public TextTrack {
public:
FakeTextTrack(base::OnceClosure destroy_cb, const TextTrackConfig& config)
: destroy_cb_(std::move(destroy_cb)), config_(config) {}
+
+ FakeTextTrack(const FakeTextTrack&) = delete;
+ FakeTextTrack& operator=(const FakeTextTrack&) = delete;
+
~FakeTextTrack() override { std::move(destroy_cb_).Run(); }
MOCK_METHOD5(addWebVTTCue,
@@ -42,9 +46,6 @@ class FakeTextTrack : public TextTrack {
base::OnceClosure destroy_cb_;
const TextTrackConfig config_;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(FakeTextTrack);
};
class TextRendererTest : public testing::Test {
@@ -145,7 +146,7 @@ class TextRendererTest : public testing::Test {
FakeTextTrackStream* const text_stream = text_track_streams_[idx].get();
const base::TimeDelta start;
- const base::TimeDelta duration = base::TimeDelta::FromSeconds(42);
+ const base::TimeDelta duration = base::Seconds(42);
const std::string id = "id";
const std::string content = "subtitle";
const std::string settings;
diff --git a/chromium/media/base/time_delta_interpolator.cc b/chromium/media/base/time_delta_interpolator.cc
index 33e06a6f0be..a6eb4bfad72 100644
--- a/chromium/media/base/time_delta_interpolator.cc
+++ b/chromium/media/base/time_delta_interpolator.cc
@@ -69,8 +69,7 @@ base::TimeDelta TimeDeltaInterpolator::GetInterpolatedTime() {
int64_t now_us = (tick_clock_->NowTicks() - reference_).InMicroseconds();
now_us = static_cast<int64_t>(now_us * playback_rate_);
- base::TimeDelta interpolated_time =
- lower_bound_ + base::TimeDelta::FromMicroseconds(now_us);
+ base::TimeDelta interpolated_time = lower_bound_ + base::Microseconds(now_us);
if (upper_bound_ == kNoTimestamp)
return interpolated_time;
diff --git a/chromium/media/base/time_delta_interpolator.h b/chromium/media/base/time_delta_interpolator.h
index 9a02eada2e5..1134272b75d 100644
--- a/chromium/media/base/time_delta_interpolator.h
+++ b/chromium/media/base/time_delta_interpolator.h
@@ -25,6 +25,10 @@ class MEDIA_EXPORT TimeDeltaInterpolator {
//
// |tick_clock| is used for sampling wall clock time for interpolating.
explicit TimeDeltaInterpolator(const base::TickClock* tick_clock);
+
+ TimeDeltaInterpolator(const TimeDeltaInterpolator&) = delete;
+ TimeDeltaInterpolator& operator=(const TimeDeltaInterpolator&) = delete;
+
~TimeDeltaInterpolator();
bool interpolating() { return interpolating_; }
@@ -76,8 +80,6 @@ class MEDIA_EXPORT TimeDeltaInterpolator {
base::TimeTicks reference_;
double playback_rate_;
-
- DISALLOW_COPY_AND_ASSIGN(TimeDeltaInterpolator);
};
} // namespace media
diff --git a/chromium/media/base/time_delta_interpolator_unittest.cc b/chromium/media/base/time_delta_interpolator_unittest.cc
index 540768ee45b..ed8b35c5291 100644
--- a/chromium/media/base/time_delta_interpolator_unittest.cc
+++ b/chromium/media/base/time_delta_interpolator_unittest.cc
@@ -24,13 +24,13 @@ class TimeDeltaInterpolatorTest : public ::testing::Test {
};
TEST_F(TimeDeltaInterpolatorTest, Created) {
- const base::TimeDelta kExpected = base::TimeDelta::FromSeconds(0);
+ const base::TimeDelta kExpected = base::Seconds(0);
EXPECT_EQ(kExpected, interpolator_.GetInterpolatedTime());
}
TEST_F(TimeDeltaInterpolatorTest, StartInterpolating_NormalSpeed) {
const base::TimeDelta kZero;
- const base::TimeDelta kTimeToAdvance = base::TimeDelta::FromSeconds(2);
+ const base::TimeDelta kTimeToAdvance = base::Seconds(2);
EXPECT_EQ(kZero, interpolator_.StartInterpolating());
AdvanceSystemTime(kTimeToAdvance);
@@ -39,7 +39,7 @@ TEST_F(TimeDeltaInterpolatorTest, StartInterpolating_NormalSpeed) {
TEST_F(TimeDeltaInterpolatorTest, StartInterpolating_DoubleSpeed) {
const base::TimeDelta kZero;
- const base::TimeDelta kTimeToAdvance = base::TimeDelta::FromSeconds(5);
+ const base::TimeDelta kTimeToAdvance = base::Seconds(5);
interpolator_.SetPlaybackRate(2.0);
EXPECT_EQ(kZero, interpolator_.StartInterpolating());
@@ -49,7 +49,7 @@ TEST_F(TimeDeltaInterpolatorTest, StartInterpolating_DoubleSpeed) {
TEST_F(TimeDeltaInterpolatorTest, StartInterpolating_HalfSpeed) {
const base::TimeDelta kZero;
- const base::TimeDelta kTimeToAdvance = base::TimeDelta::FromSeconds(4);
+ const base::TimeDelta kTimeToAdvance = base::Seconds(4);
interpolator_.SetPlaybackRate(0.5);
EXPECT_EQ(kZero, interpolator_.StartInterpolating());
@@ -61,9 +61,9 @@ TEST_F(TimeDeltaInterpolatorTest, StartInterpolating_ZeroSpeed) {
// We'll play for 2 seconds at normal speed, 4 seconds at zero speed, and 8
// seconds at normal speed.
const base::TimeDelta kZero;
- const base::TimeDelta kPlayDuration1 = base::TimeDelta::FromSeconds(2);
- const base::TimeDelta kPlayDuration2 = base::TimeDelta::FromSeconds(4);
- const base::TimeDelta kPlayDuration3 = base::TimeDelta::FromSeconds(8);
+ const base::TimeDelta kPlayDuration1 = base::Seconds(2);
+ const base::TimeDelta kPlayDuration2 = base::Seconds(4);
+ const base::TimeDelta kPlayDuration3 = base::Seconds(8);
const base::TimeDelta kExpected = kPlayDuration1 + kPlayDuration3;
EXPECT_EQ(kZero, interpolator_.StartInterpolating());
@@ -81,9 +81,9 @@ TEST_F(TimeDeltaInterpolatorTest, StartInterpolating_MultiSpeed) {
// We'll play for 2 seconds at half speed, 4 seconds at normal speed, and 8
// seconds at double speed.
const base::TimeDelta kZero;
- const base::TimeDelta kPlayDuration1 = base::TimeDelta::FromSeconds(2);
- const base::TimeDelta kPlayDuration2 = base::TimeDelta::FromSeconds(4);
- const base::TimeDelta kPlayDuration3 = base::TimeDelta::FromSeconds(8);
+ const base::TimeDelta kPlayDuration1 = base::Seconds(2);
+ const base::TimeDelta kPlayDuration2 = base::Seconds(4);
+ const base::TimeDelta kPlayDuration3 = base::Seconds(8);
const base::TimeDelta kExpected =
kPlayDuration1 / 2 + kPlayDuration2 + 2 * kPlayDuration3;
@@ -101,8 +101,8 @@ TEST_F(TimeDeltaInterpolatorTest, StartInterpolating_MultiSpeed) {
TEST_F(TimeDeltaInterpolatorTest, StopInterpolating) {
const base::TimeDelta kZero;
- const base::TimeDelta kPlayDuration = base::TimeDelta::FromSeconds(4);
- const base::TimeDelta kPauseDuration = base::TimeDelta::FromSeconds(20);
+ const base::TimeDelta kPlayDuration = base::Seconds(4);
+ const base::TimeDelta kPauseDuration = base::Seconds(20);
const base::TimeDelta kExpectedFirstPause = kPlayDuration;
const base::TimeDelta kExpectedSecondPause = 2 * kPlayDuration;
@@ -124,9 +124,9 @@ TEST_F(TimeDeltaInterpolatorTest, StopInterpolating) {
}
TEST_F(TimeDeltaInterpolatorTest, SetBounds_Stopped) {
- const base::TimeDelta kFirstTime = base::TimeDelta::FromSeconds(4);
- const base::TimeDelta kSecondTime = base::TimeDelta::FromSeconds(16);
- const base::TimeDelta kArbitraryMaxTime = base::TimeDelta::FromSeconds(100);
+ const base::TimeDelta kFirstTime = base::Seconds(4);
+ const base::TimeDelta kSecondTime = base::Seconds(16);
+ const base::TimeDelta kArbitraryMaxTime = base::Seconds(100);
interpolator_.SetBounds(kFirstTime, kArbitraryMaxTime,
test_tick_clock_.NowTicks());
@@ -140,9 +140,9 @@ TEST_F(TimeDeltaInterpolatorTest, SetBounds_Started) {
// We'll play for 4 seconds, then set the time to 12, then play for 4 more
// seconds.
const base::TimeDelta kZero;
- const base::TimeDelta kPlayDuration = base::TimeDelta::FromSeconds(4);
- const base::TimeDelta kUpdatedTime = base::TimeDelta::FromSeconds(12);
- const base::TimeDelta kArbitraryMaxTime = base::TimeDelta::FromSeconds(100);
+ const base::TimeDelta kPlayDuration = base::Seconds(4);
+ const base::TimeDelta kUpdatedTime = base::Seconds(12);
+ const base::TimeDelta kArbitraryMaxTime = base::Seconds(100);
const base::TimeDelta kExpected = kUpdatedTime + kPlayDuration;
EXPECT_EQ(kZero, interpolator_.StartInterpolating());
@@ -156,8 +156,8 @@ TEST_F(TimeDeltaInterpolatorTest, SetBounds_Started) {
TEST_F(TimeDeltaInterpolatorTest, SetUpperBound) {
const base::TimeDelta kZero;
- const base::TimeDelta kTimeInterval = base::TimeDelta::FromSeconds(4);
- const base::TimeDelta kMaxTime = base::TimeDelta::FromSeconds(6);
+ const base::TimeDelta kTimeInterval = base::Seconds(4);
+ const base::TimeDelta kMaxTime = base::Seconds(6);
EXPECT_EQ(kZero, interpolator_.StartInterpolating());
interpolator_.SetUpperBound(kMaxTime);
@@ -173,10 +173,10 @@ TEST_F(TimeDeltaInterpolatorTest, SetUpperBound) {
TEST_F(TimeDeltaInterpolatorTest, SetUpperBound_MultipleTimes) {
const base::TimeDelta kZero;
- const base::TimeDelta kTimeInterval = base::TimeDelta::FromSeconds(4);
- const base::TimeDelta kMaxTime0 = base::TimeDelta::FromSeconds(120);
- const base::TimeDelta kMaxTime1 = base::TimeDelta::FromSeconds(6);
- const base::TimeDelta kMaxTime2 = base::TimeDelta::FromSeconds(12);
+ const base::TimeDelta kTimeInterval = base::Seconds(4);
+ const base::TimeDelta kMaxTime0 = base::Seconds(120);
+ const base::TimeDelta kMaxTime1 = base::Seconds(6);
+ const base::TimeDelta kMaxTime2 = base::Seconds(12);
EXPECT_EQ(kZero, interpolator_.StartInterpolating());
interpolator_.SetUpperBound(kMaxTime0);
diff --git a/chromium/media/base/tuneable.cc b/chromium/media/base/tuneable.cc
index d82e68ef45a..0b71e94d563 100644
--- a/chromium/media/base/tuneable.cc
+++ b/chromium/media/base/tuneable.cc
@@ -43,9 +43,9 @@ base::TimeDelta GetParam<base::TimeDelta>(const char* name,
base::TimeDelta minimum_value,
base::TimeDelta default_value,
base::TimeDelta maximum_value) {
- return base::TimeDelta::FromMilliseconds(GetParam<int>(
- name, minimum_value.InMilliseconds(), default_value.InMilliseconds(),
- maximum_value.InMilliseconds()));
+ return base::Milliseconds(GetParam<int>(name, minimum_value.InMilliseconds(),
+ default_value.InMilliseconds(),
+ maximum_value.InMilliseconds()));
}
} // namespace
diff --git a/chromium/media/base/tuneable_unittest.cc b/chromium/media/base/tuneable_unittest.cc
index 1ea34fa93ed..813c9040890 100644
--- a/chromium/media/base/tuneable_unittest.cc
+++ b/chromium/media/base/tuneable_unittest.cc
@@ -105,9 +105,9 @@ TEST_F(TuneableTest, IntTuneableFromParams) {
TEST_F(TuneableTest, OtherSpecializationsCompile) {
// Since it's all templated, just be happy if it compiles and does something
// somewhat sane.
- constexpr base::TimeDelta min_value = base::TimeDelta::FromSeconds(0);
- constexpr base::TimeDelta default_value = base::TimeDelta::FromSeconds(5);
- constexpr base::TimeDelta max_value = base::TimeDelta::FromSeconds(10);
+ constexpr base::TimeDelta min_value = base::Seconds(0);
+ constexpr base::TimeDelta default_value = base::Seconds(5);
+ constexpr base::TimeDelta max_value = base::Seconds(10);
Tuneable<base::TimeDelta> time_delta_tuneable("whatever", min_value,
default_value, max_value);
// Since the tuneable is not provided in the finch parameters, it should
@@ -122,11 +122,11 @@ TEST_F(TuneableTest, TimeDeltaIsSpecifiedInMilliseconds) {
// Since the finch params are constructed with the assumption that the value
// will be interpreted as milliseconds, make sure that the Tuneable actually
// does interpret it that way.
- constexpr base::TimeDelta min_value = base::TimeDelta::FromSeconds(0);
- constexpr base::TimeDelta max_value = base::TimeDelta::FromSeconds(100);
+ constexpr base::TimeDelta min_value = base::Seconds(0);
+ constexpr base::TimeDelta max_value = base::Seconds(100);
Tuneable<base::TimeDelta> t(kTuneableTimeDeltaFiveSeconds, min_value,
min_value, max_value);
- EXPECT_EQ(t.value(), base::TimeDelta::FromSeconds(5));
+ EXPECT_EQ(t.value(), base::Seconds(5));
}
} // namespace media
diff --git a/chromium/media/base/unaligned_shared_memory.h b/chromium/media/base/unaligned_shared_memory.h
index 71bf064d652..f4fe2c976de 100644
--- a/chromium/media/base/unaligned_shared_memory.h
+++ b/chromium/media/base/unaligned_shared_memory.h
@@ -28,6 +28,9 @@ class MEDIA_EXPORT UnalignedSharedMemory {
size_t size,
bool read_only);
+ UnalignedSharedMemory(const UnalignedSharedMemory&) = delete;
+ UnalignedSharedMemory& operator=(const UnalignedSharedMemory&) = delete;
+
~UnalignedSharedMemory();
// Map the shared memory region. Note that the passed |size| parameter should
@@ -52,8 +55,6 @@ class MEDIA_EXPORT UnalignedSharedMemory {
// Pointer to the unaligned data in the shared memory mapping.
uint8_t* mapping_ptr_ = nullptr;
-
- DISALLOW_COPY_AND_ASSIGN(UnalignedSharedMemory);
};
// Wrapper over base::WritableSharedMemoryMapping that is mapped at unaligned
@@ -68,6 +69,9 @@ class MEDIA_EXPORT WritableUnalignedMapping {
size_t size,
off_t offset);
+ WritableUnalignedMapping(const WritableUnalignedMapping&) = delete;
+ WritableUnalignedMapping& operator=(const WritableUnalignedMapping&) = delete;
+
~WritableUnalignedMapping();
size_t size() const { return size_; }
@@ -86,8 +90,6 @@ class MEDIA_EXPORT WritableUnalignedMapping {
// mapped and requested offset; strictly less than
// base::SysInfo::VMAllocationGranularity().
size_t misalignment_;
-
- DISALLOW_COPY_AND_ASSIGN(WritableUnalignedMapping);
};
// Wrapper over base::ReadOnlySharedMemoryMapping that is mapped at unaligned
@@ -102,6 +104,9 @@ class MEDIA_EXPORT ReadOnlyUnalignedMapping {
size_t size,
off_t offset);
+ ReadOnlyUnalignedMapping(const ReadOnlyUnalignedMapping&) = delete;
+ ReadOnlyUnalignedMapping& operator=(const ReadOnlyUnalignedMapping&) = delete;
+
~ReadOnlyUnalignedMapping();
size_t size() const { return size_; }
@@ -120,8 +125,6 @@ class MEDIA_EXPORT ReadOnlyUnalignedMapping {
// mapped and requested offset; strictly less than
// base::SysInfo::VMAllocationGranularity().
size_t misalignment_;
-
- DISALLOW_COPY_AND_ASSIGN(ReadOnlyUnalignedMapping);
};
} // namespace media
diff --git a/chromium/media/base/use_after_free_checker.h b/chromium/media/base/use_after_free_checker.h
index aefcaae2b59..1ffde9b5f37 100644
--- a/chromium/media/base/use_after_free_checker.h
+++ b/chromium/media/base/use_after_free_checker.h
@@ -5,6 +5,7 @@
#ifndef MEDIA_BASE_USE_AFTER_FREE_CHECKER_H_
#define MEDIA_BASE_USE_AFTER_FREE_CHECKER_H_
+#include "base/debug/crash_logging.h"
#include "base/debug/dump_without_crashing.h"
#include "base/location.h"
#include "media/base/media_export.h"
diff --git a/chromium/media/base/user_input_monitor.h b/chromium/media/base/user_input_monitor.h
index 7b774949d71..aebbb8b67e5 100644
--- a/chromium/media/base/user_input_monitor.h
+++ b/chromium/media/base/user_input_monitor.h
@@ -33,6 +33,10 @@ WriteKeyPressMonitorCount(const base::WritableSharedMemoryMapping& shmem,
class MEDIA_EXPORT UserInputMonitor {
public:
UserInputMonitor();
+
+ UserInputMonitor(const UserInputMonitor&) = delete;
+ UserInputMonitor& operator=(const UserInputMonitor&) = delete;
+
virtual ~UserInputMonitor();
// Creates a platform-specific instance of UserInputMonitorBase.
@@ -52,15 +56,16 @@ class MEDIA_EXPORT UserInputMonitor {
// number of keypresses happened within that time period, but should not make
// any assumption on the initial value.
virtual uint32_t GetKeyPressCount() const = 0;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(UserInputMonitor);
};
// Monitors and notifies about keyboard events.
class MEDIA_EXPORT UserInputMonitorBase : public UserInputMonitor {
public:
UserInputMonitorBase();
+
+ UserInputMonitorBase(const UserInputMonitorBase&) = delete;
+ UserInputMonitorBase& operator=(const UserInputMonitorBase&) = delete;
+
~UserInputMonitorBase() override;
// A caller must call EnableKeyPressMonitoring(WithMapping) and
@@ -84,8 +89,6 @@ class MEDIA_EXPORT UserInputMonitorBase : public UserInputMonitor {
base::ReadOnlySharedMemoryRegion key_press_count_region_;
SEQUENCE_CHECKER(owning_sequence_);
-
- DISALLOW_COPY_AND_ASSIGN(UserInputMonitorBase);
};
} // namespace media
diff --git a/chromium/media/base/user_input_monitor_linux.cc b/chromium/media/base/user_input_monitor_linux.cc
index 58b7d3033fe..ba089a7ebcc 100644
--- a/chromium/media/base/user_input_monitor_linux.cc
+++ b/chromium/media/base/user_input_monitor_linux.cc
@@ -103,6 +103,10 @@ class UserInputMonitorLinux : public UserInputMonitorBase {
public:
explicit UserInputMonitorLinux(
const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner);
+
+ UserInputMonitorLinux(const UserInputMonitorLinux&) = delete;
+ UserInputMonitorLinux& operator=(const UserInputMonitorLinux&) = delete;
+
~UserInputMonitorLinux() override;
// Public UserInputMonitor overrides.
@@ -117,8 +121,6 @@ class UserInputMonitorLinux : public UserInputMonitorBase {
scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_;
UserInputMonitorAdapter* core_;
-
- DISALLOW_COPY_AND_ASSIGN(UserInputMonitorLinux);
};
UserInputMonitorAdapter* CreateUserInputMonitor(
diff --git a/chromium/media/base/user_input_monitor_mac.cc b/chromium/media/base/user_input_monitor_mac.cc
index eac1a4fbd2d..92d3c01d549 100644
--- a/chromium/media/base/user_input_monitor_mac.cc
+++ b/chromium/media/base/user_input_monitor_mac.cc
@@ -18,11 +18,15 @@ namespace {
// Update key press count in shared memory twice as frequent as
// AudioInputController::AudioCallback::OnData() callback for WebRTC.
constexpr base::TimeDelta kUpdateKeyPressCountIntervalMs =
- base::TimeDelta::FromMilliseconds(5);
+ base::Milliseconds(5);
class UserInputMonitorMac : public UserInputMonitorBase {
public:
UserInputMonitorMac();
+
+ UserInputMonitorMac(const UserInputMonitorMac&) = delete;
+ UserInputMonitorMac& operator=(const UserInputMonitorMac&) = delete;
+
~UserInputMonitorMac() override;
uint32_t GetKeyPressCount() const override;
@@ -40,8 +44,6 @@ class UserInputMonitorMac : public UserInputMonitorBase {
// Timer for updating key press count in |key_press_count_mapping_|.
base::RepeatingTimer key_press_count_timer_;
-
- DISALLOW_COPY_AND_ASSIGN(UserInputMonitorMac);
};
UserInputMonitorMac::UserInputMonitorMac() {}
diff --git a/chromium/media/base/user_input_monitor_win.cc b/chromium/media/base/user_input_monitor_win.cc
index 327b28bb711..5b779fe8fce 100644
--- a/chromium/media/base/user_input_monitor_win.cc
+++ b/chromium/media/base/user_input_monitor_win.cc
@@ -52,6 +52,10 @@ class UserInputMonitorWinCore
explicit UserInputMonitorWinCore(
scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner);
+
+ UserInputMonitorWinCore(const UserInputMonitorWinCore&) = delete;
+ UserInputMonitorWinCore& operator=(const UserInputMonitorWinCore&) = delete;
+
~UserInputMonitorWinCore() override;
// DestructionObserver overrides.
@@ -90,14 +94,16 @@ class UserInputMonitorWinCore
bool pause_monitoring_ = false;
bool start_monitoring_after_hook_removed_ = false;
-
- DISALLOW_COPY_AND_ASSIGN(UserInputMonitorWinCore);
};
class UserInputMonitorWin : public UserInputMonitorBase {
public:
explicit UserInputMonitorWin(
const scoped_refptr<base::SingleThreadTaskRunner>& ui_task_runner);
+
+ UserInputMonitorWin(const UserInputMonitorWin&) = delete;
+ UserInputMonitorWin& operator=(const UserInputMonitorWin&) = delete;
+
~UserInputMonitorWin() override;
// Public UserInputMonitor overrides.
@@ -112,8 +118,6 @@ class UserInputMonitorWin : public UserInputMonitorBase {
scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_;
UserInputMonitorWinCore* core_;
-
- DISALLOW_COPY_AND_ASSIGN(UserInputMonitorWin);
};
UserInputMonitorWinCore::UserInputMonitorWinCore(
diff --git a/chromium/media/base/video_codecs.cc b/chromium/media/base/video_codecs.cc
index 6c58bbabd66..8d2b7e3beca 100644
--- a/chromium/media/base/video_codecs.cc
+++ b/chromium/media/base/video_codecs.cc
@@ -17,27 +17,27 @@ namespace media {
// The names come from src/third_party/ffmpeg/libavcodec/codec_desc.c
std::string GetCodecName(VideoCodec codec) {
switch (codec) {
- case kUnknownVideoCodec:
+ case VideoCodec::kUnknown:
return "unknown";
- case kCodecH264:
+ case VideoCodec::kH264:
return "h264";
- case kCodecHEVC:
+ case VideoCodec::kHEVC:
return "hevc";
- case kCodecDolbyVision:
+ case VideoCodec::kDolbyVision:
return "dolbyvision";
- case kCodecVC1:
+ case VideoCodec::kVC1:
return "vc1";
- case kCodecMPEG2:
+ case VideoCodec::kMPEG2:
return "mpeg2video";
- case kCodecMPEG4:
+ case VideoCodec::kMPEG4:
return "mpeg4";
- case kCodecTheora:
+ case VideoCodec::kTheora:
return "theora";
- case kCodecVP8:
+ case VideoCodec::kVP8:
return "vp8";
- case kCodecVP9:
+ case VideoCodec::kVP9:
return "vp9";
- case kCodecAV1:
+ case VideoCodec::kAV1:
return "av1";
}
NOTREACHED();
@@ -867,7 +867,7 @@ bool ParseDolbyVisionCodecId(const std::string& codec_id,
#endif
VideoCodec StringToVideoCodec(const std::string& codec_id) {
- VideoCodec codec = kUnknownVideoCodec;
+ VideoCodec codec = VideoCodec::kUnknown;
VideoCodecProfile profile = VIDEO_CODEC_PROFILE_UNKNOWN;
uint8_t level = 0;
VideoColorSpace color_space;
@@ -883,61 +883,61 @@ void ParseCodec(const std::string& codec_id,
std::vector<std::string> elem = base::SplitString(
codec_id, ".", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
if (elem.empty()) {
- codec = kUnknownVideoCodec;
+ codec = VideoCodec::kUnknown;
return;
}
if (codec_id == "vp8" || codec_id == "vp8.0") {
- codec = kCodecVP8;
+ codec = VideoCodec::kVP8;
return;
}
if (ParseNewStyleVp9CodecID(codec_id, &profile, &level, &color_space) ||
ParseLegacyVp9CodecID(codec_id, &profile, &level)) {
- codec = kCodecVP9;
+ codec = VideoCodec::kVP9;
return;
}
#if BUILDFLAG(ENABLE_AV1_DECODER)
if (ParseAv1CodecId(codec_id, &profile, &level, &color_space)) {
- codec = kCodecAV1;
+ codec = VideoCodec::kAV1;
return;
}
#endif
if (codec_id == "theora") {
- codec = kCodecTheora;
+ codec = VideoCodec::kTheora;
return;
}
if (ParseAVCCodecId(codec_id, &profile, &level)) {
- codec = kCodecH264;
+ codec = VideoCodec::kH264;
return;
}
#if BUILDFLAG(ENABLE_MSE_MPEG2TS_STREAM_PARSER)
if (ParseAVCCodecId(TranslateLegacyAvc1CodecIds(codec_id), &profile,
&level)) {
- codec = kCodecH264;
+ codec = VideoCodec::kH264;
return;
}
#endif
#if BUILDFLAG(ENABLE_PLATFORM_HEVC)
if (ParseHEVCCodecId(codec_id, &profile, &level)) {
- codec = kCodecHEVC;
+ codec = VideoCodec::kHEVC;
return;
}
#endif
#if BUILDFLAG(ENABLE_PLATFORM_DOLBY_VISION)
if (ParseDolbyVisionCodecId(codec_id, &profile, &level)) {
- codec = kCodecDolbyVision;
+ codec = VideoCodec::kDolbyVision;
return;
}
#endif
- codec = kUnknownVideoCodec;
+ codec = VideoCodec::kUnknown;
}
VideoCodec VideoCodecProfileToVideoCodec(VideoCodecProfile profile) {
switch (profile) {
case VIDEO_CODEC_PROFILE_UNKNOWN:
- return kUnknownVideoCodec;
+ return VideoCodec::kUnknown;
case H264PROFILE_BASELINE:
case H264PROFILE_MAIN:
case H264PROFILE_EXTENDED:
@@ -949,31 +949,36 @@ VideoCodec VideoCodecProfileToVideoCodec(VideoCodecProfile profile) {
case H264PROFILE_SCALABLEHIGH:
case H264PROFILE_STEREOHIGH:
case H264PROFILE_MULTIVIEWHIGH:
- return kCodecH264;
+ return VideoCodec::kH264;
case HEVCPROFILE_MAIN:
case HEVCPROFILE_MAIN10:
case HEVCPROFILE_MAIN_STILL_PICTURE:
- return kCodecHEVC;
+ return VideoCodec::kHEVC;
case VP8PROFILE_ANY:
- return kCodecVP8;
+ return VideoCodec::kVP8;
case VP9PROFILE_PROFILE0:
case VP9PROFILE_PROFILE1:
case VP9PROFILE_PROFILE2:
case VP9PROFILE_PROFILE3:
- return kCodecVP9;
+ return VideoCodec::kVP9;
case DOLBYVISION_PROFILE0:
case DOLBYVISION_PROFILE4:
case DOLBYVISION_PROFILE5:
case DOLBYVISION_PROFILE7:
case DOLBYVISION_PROFILE8:
case DOLBYVISION_PROFILE9:
- return kCodecDolbyVision;
+ return VideoCodec::kDolbyVision;
case THEORAPROFILE_ANY:
- return kCodecTheora;
+ return VideoCodec::kTheora;
case AV1PROFILE_PROFILE_MAIN:
case AV1PROFILE_PROFILE_HIGH:
case AV1PROFILE_PROFILE_PRO:
- return kCodecAV1;
+ return VideoCodec::kAV1;
}
}
+
+std::ostream& operator<<(std::ostream& os, const VideoCodec& codec) {
+ return os << GetCodecName(codec);
+}
+
} // namespace media
diff --git a/chromium/media/base/video_codecs.h b/chromium/media/base/video_codecs.h
index 0e7dce197d8..12bf6e4508c 100644
--- a/chromium/media/base/video_codecs.h
+++ b/chromium/media/base/video_codecs.h
@@ -16,27 +16,27 @@ namespace media {
class VideoColorSpace;
// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.media
-enum VideoCodec {
+enum class VideoCodec {
// These values are histogrammed over time; do not change their ordinal
// values. When deleting a codec replace it with a dummy value; when adding a
- // codec, do so at the bottom (and update kVideoCodecMax).
- kUnknownVideoCodec = 0,
- kCodecH264,
- kCodecVC1,
- kCodecMPEG2,
- kCodecMPEG4,
- kCodecTheora,
- kCodecVP8,
- kCodecVP9,
- kCodecHEVC,
- kCodecDolbyVision,
- kCodecAV1,
+ // codec, do so at the bottom (and update kMaxValue).
+ kUnknown = 0,
+ kH264,
+ kVC1,
+ kMPEG2,
+ kMPEG4,
+ kTheora,
+ kVP8,
+ kVP9,
+ kHEVC,
+ kDolbyVision,
+ kAV1,
// DO NOT ADD RANDOM VIDEO CODECS!
//
// The only acceptable time to add a new codec is if there is production code
// that uses said codec in the same CL.
- kVideoCodecMax = kCodecAV1, // Must equal the last "real" codec above.
+ kMaxValue = kAV1, // Must equal the last "real" codec above.
};
// Video codec profiles. Keep in sync with mojo::VideoCodecProfile (see
@@ -166,6 +166,9 @@ VideoCodecProfileToVideoCodec(VideoCodecProfile profile);
std::string TranslateLegacyAvc1CodecIds(const std::string& codec_id);
#endif
+MEDIA_EXPORT std::ostream& operator<<(std::ostream& os,
+ const VideoCodec& codec);
+
} // namespace media
#endif // MEDIA_BASE_VIDEO_CODECS_H_
diff --git a/chromium/media/base/video_color_space_unittest.cc b/chromium/media/base/video_color_space_unittest.cc
index b8cf8dd3d07..71986269858 100644
--- a/chromium/media/base/video_color_space_unittest.cc
+++ b/chromium/media/base/video_color_space_unittest.cc
@@ -6,7 +6,7 @@
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gfx/color_space.h"
#include "ui/gfx/color_transform.h"
-#include "ui/gfx/transform.h"
+#include "ui/gfx/geometry/transform.h"
namespace media {
diff --git a/chromium/media/base/video_decoder_config.cc b/chromium/media/base/video_decoder_config.cc
index 40c9707fae4..b28a2239029 100644
--- a/chromium/media/base/video_decoder_config.cc
+++ b/chromium/media/base/video_decoder_config.cc
@@ -69,7 +69,7 @@ void VideoDecoderConfig::Initialize(VideoCodec codec,
}
bool VideoDecoderConfig::IsValidConfig() const {
- return codec_ != kUnknownVideoCodec && IsValidSize(coded_size_) &&
+ return codec_ != VideoCodec::kUnknown && IsValidSize(coded_size_) &&
IsValidSize(natural_size_) &&
gfx::Rect(coded_size_).Contains(visible_rect_);
}
diff --git a/chromium/media/base/video_decoder_config.h b/chromium/media/base/video_decoder_config.h
index 1eb9bf07c46..875de0d3125 100644
--- a/chromium/media/base/video_decoder_config.h
+++ b/chromium/media/base/video_decoder_config.h
@@ -160,7 +160,7 @@ class MEDIA_EXPORT VideoDecoderConfig {
bool is_rtc() const { return is_rtc_; }
private:
- VideoCodec codec_ = kUnknownVideoCodec;
+ VideoCodec codec_ = VideoCodec::kUnknown;
VideoCodecProfile profile_ = VIDEO_CODEC_PROFILE_UNKNOWN;
// Optional video codec level. kNoVideoCodecLevel means the field is not
diff --git a/chromium/media/base/video_decoder_config_unittest.cc b/chromium/media/base/video_decoder_config_unittest.cc
index 22954f2de69..6bfa5b94889 100644
--- a/chromium/media/base/video_decoder_config_unittest.cc
+++ b/chromium/media/base/video_decoder_config_unittest.cc
@@ -14,7 +14,7 @@ static const gfx::Rect kVisibleRect(320, 240);
static const gfx::Size kNaturalSize(320, 240);
TEST(VideoDecoderConfigTest, AlphaModeSetCorrectly) {
- VideoDecoderConfig config(kCodecVP8, VIDEO_CODEC_PROFILE_UNKNOWN,
+ VideoDecoderConfig config(VideoCodec::kVP8, VIDEO_CODEC_PROFILE_UNKNOWN,
VideoDecoderConfig::AlphaMode::kIsOpaque,
VideoColorSpace(), kNoTransformation, kCodedSize,
kVisibleRect, kNaturalSize, EmptyExtraData(),
@@ -22,7 +22,7 @@ TEST(VideoDecoderConfigTest, AlphaModeSetCorrectly) {
EXPECT_TRUE(config.IsValidConfig());
EXPECT_EQ(config.alpha_mode(), VideoDecoderConfig::AlphaMode::kIsOpaque);
- config.Initialize(kCodecVP8, VIDEO_CODEC_PROFILE_UNKNOWN,
+ config.Initialize(VideoCodec::kVP8, VIDEO_CODEC_PROFILE_UNKNOWN,
VideoDecoderConfig::AlphaMode::kHasAlpha, VideoColorSpace(),
kNoTransformation, kCodedSize, kVisibleRect, kNaturalSize,
EmptyExtraData(), EncryptionScheme::kUnencrypted);
@@ -30,10 +30,11 @@ TEST(VideoDecoderConfigTest, AlphaModeSetCorrectly) {
}
TEST(VideoDecoderConfigTest, SetProfile) {
- VideoDecoderConfig config(
- kCodecVP9, VP9PROFILE_PROFILE0, VideoDecoderConfig::AlphaMode::kIsOpaque,
- VideoColorSpace(), kNoTransformation, kCodedSize, kVisibleRect,
- kNaturalSize, EmptyExtraData(), EncryptionScheme::kUnencrypted);
+ VideoDecoderConfig config(VideoCodec::kVP9, VP9PROFILE_PROFILE0,
+ VideoDecoderConfig::AlphaMode::kIsOpaque,
+ VideoColorSpace(), kNoTransformation, kCodedSize,
+ kVisibleRect, kNaturalSize, EmptyExtraData(),
+ EncryptionScheme::kUnencrypted);
config.set_profile(VP9PROFILE_PROFILE2);
EXPECT_EQ(config.profile(), VP9PROFILE_PROFILE2);
}
diff --git a/chromium/media/base/video_encoder.h b/chromium/media/base/video_encoder.h
index d7ca6801fb8..c6ee9c7d3c8 100644
--- a/chromium/media/base/video_encoder.h
+++ b/chromium/media/base/video_encoder.h
@@ -10,6 +10,7 @@
#include "media/base/bitrate.h"
#include "media/base/media_export.h"
#include "media/base/status.h"
+#include "media/base/svc_scalability_mode.h"
#include "media/base/video_codecs.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "ui/gfx/geometry/size.h"
@@ -54,11 +55,10 @@ class MEDIA_EXPORT VideoEncoder {
absl::optional<int> keyframe_interval = 10000;
- // Requested number of SVC temporal layers.
- int temporal_layers = 1;
-
LatencyMode latency_mode = LatencyMode::Realtime;
+ absl::optional<SVCScalabilityMode> scalability_mode;
+
// Only used for H264 encoding.
AvcOptions avc;
};
diff --git a/chromium/media/base/video_frame.cc b/chromium/media/base/video_frame.cc
index 9731ad2ca4a..8e59b5fc863 100644
--- a/chromium/media/base/video_frame.cc
+++ b/chromium/media/base/video_frame.cc
@@ -12,7 +12,6 @@
#include "base/atomic_sequence_num.h"
#include "base/bind.h"
#include "base/bits.h"
-#include "base/callback_helpers.h"
#include "base/cxx17_backports.h"
#include "base/logging.h"
#include "base/process/memory.h"
@@ -388,6 +387,7 @@ scoped_refptr<VideoFrame> VideoFrame::WrapNativeTextures(
// Wrapping native textures should... have textures. https://crbug.com/864145.
DCHECK(frame->HasTextures());
+ DCHECK_GT(frame->NumTextures(), 0u);
return frame;
}
@@ -898,6 +898,18 @@ scoped_refptr<VideoFrame> VideoFrame::WrapVideoFrame(
wrapping_frame->BackWithSharedMemory(frame->shm_region_);
}
+ // Don't let a Matryoshka doll of frames occur. Do this here instead of above
+ // since |frame| may have different metadata than |frame->wrapped_frame_|.
+ //
+ // We must still keep |frame| alive though since it may have destruction
+ // observers which signal that the underlying resource is okay to reuse. E.g.,
+ // VideoFramePool.
+ if (frame->wrapped_frame_) {
+ wrapping_frame->AddDestructionObserver(
+ base::BindOnce([](scoped_refptr<VideoFrame>) {}, frame));
+ frame = frame->wrapped_frame_;
+ }
+
wrapping_frame->wrapped_frame_ = std::move(frame);
return wrapping_frame;
}
@@ -1152,24 +1164,22 @@ bool VideoFrame::IsMappable() const {
}
bool VideoFrame::HasTextures() const {
- // A SharedImage can be turned into a texture, and so it counts as a texture
- // in the context of this call.
return wrapped_frame_ ? wrapped_frame_->HasTextures()
- : (mailbox_holders_[0].mailbox.IsSharedImage() ||
- !mailbox_holders_[0].mailbox.IsZero());
+ : !mailbox_holders_[0].mailbox.IsZero();
}
size_t VideoFrame::NumTextures() const {
+ if (wrapped_frame_)
+ return wrapped_frame_->NumTextures();
+
if (!HasTextures())
return 0;
- const auto& mailbox_holders =
- wrapped_frame_ ? wrapped_frame_->mailbox_holders_ : mailbox_holders_;
size_t i = 0;
for (; i < NumPlanes(format()); ++i) {
- if (mailbox_holders[i].mailbox.IsZero()) {
+ const auto& mailbox = mailbox_holders_[i].mailbox;
+ if (mailbox.IsZero())
return i;
- }
}
return i;
}
@@ -1239,7 +1249,7 @@ const gpu::MailboxHolder& VideoFrame::mailbox_holder(
size_t texture_index) const {
DCHECK(HasTextures());
DCHECK(IsValidPlane(format(), texture_index));
- return wrapped_frame_ ? wrapped_frame_->mailbox_holders_[texture_index]
+ return wrapped_frame_ ? wrapped_frame_->mailbox_holder(texture_index)
: mailbox_holders_[texture_index];
}
@@ -1411,6 +1421,23 @@ gfx::Size VideoFrame::DetermineAlignedSize(VideoPixelFormat format,
return adjusted;
}
+bool VideoFrame::IsValidSize(const gfx::Size& coded_size,
+ const gfx::Rect& visible_rect,
+ const gfx::Size& natural_size) {
+ int coded_size_area = coded_size.GetCheckedArea().ValueOrDefault(INT_MAX);
+ int natural_size_area = natural_size.GetCheckedArea().ValueOrDefault(INT_MAX);
+ static_assert(limits::kMaxCanvas < INT_MAX, "");
+ return !(coded_size_area > limits::kMaxCanvas ||
+ coded_size.width() > limits::kMaxDimension ||
+ coded_size.height() > limits::kMaxDimension ||
+ visible_rect.x() < 0 || visible_rect.y() < 0 ||
+ visible_rect.right() > coded_size.width() ||
+ visible_rect.bottom() > coded_size.height() ||
+ natural_size_area > limits::kMaxCanvas ||
+ natural_size.width() > limits::kMaxDimension ||
+ natural_size.height() > limits::kMaxDimension);
+}
+
// static
bool VideoFrame::IsValidConfigInternal(VideoPixelFormat format,
FrameControlType frame_control_type,
@@ -1418,17 +1445,7 @@ bool VideoFrame::IsValidConfigInternal(VideoPixelFormat format,
const gfx::Rect& visible_rect,
const gfx::Size& natural_size) {
// Check maximum limits for all formats.
- int coded_size_area = coded_size.GetCheckedArea().ValueOrDefault(INT_MAX);
- int natural_size_area = natural_size.GetCheckedArea().ValueOrDefault(INT_MAX);
- static_assert(limits::kMaxCanvas < INT_MAX, "");
- if (coded_size_area > limits::kMaxCanvas ||
- coded_size.width() > limits::kMaxDimension ||
- coded_size.height() > limits::kMaxDimension || visible_rect.x() < 0 ||
- visible_rect.y() < 0 || visible_rect.right() > coded_size.width() ||
- visible_rect.bottom() > coded_size.height() ||
- natural_size_area > limits::kMaxCanvas ||
- natural_size.width() > limits::kMaxDimension ||
- natural_size.height() > limits::kMaxDimension) {
+ if (!IsValidSize(coded_size, visible_rect, natural_size)) {
return false;
}
diff --git a/chromium/media/base/video_frame.h b/chromium/media/base/video_frame.h
index 81c9ac7dc59..21432585b8b 100644
--- a/chromium/media/base/video_frame.h
+++ b/chromium/media/base/video_frame.h
@@ -121,6 +121,13 @@ class MEDIA_EXPORT VideoFrame : public base::RefCountedThreadSafe<VideoFrame> {
VideoFrame(const VideoFrame&) = delete;
VideoFrame& operator=(const VideoFrame&) = delete;
+ // Returns true if size is valid for a VideoFrame. This method returns false
+ // if the size is empty, even though it is possible to create a zero-sized
+ // VideoFrame if the VideoPixelFormat is PIXEL_FORMAT_UNKNOWN.
+ static bool IsValidSize(const gfx::Size& coded_size,
+ const gfx::Rect& visible_rect,
+ const gfx::Size& natural_size);
+
// Returns true if frame configuration is valid.
static bool IsValidConfig(VideoPixelFormat format,
StorageType storage_type,
diff --git a/chromium/media/base/video_frame_metadata.cc b/chromium/media/base/video_frame_metadata.cc
index 944151640dd..96c2c877d53 100644
--- a/chromium/media/base/video_frame_metadata.cc
+++ b/chromium/media/base/video_frame_metadata.cc
@@ -57,6 +57,9 @@ void VideoFrameMetadata::MergeMetadataFrom(
MERGE_FIELD(wallclock_frame_duration, metadata_source);
MERGE_FIELD(maximum_composition_delay_in_frames, metadata_source);
MERGE_FIELD(hw_protected_validation_id, metadata_source);
+#if BUILDFLAG(USE_VAAPI)
+ MERGE_FIELD(hw_va_protected_session_id, metadata_source);
+#endif
}
} // namespace media
diff --git a/chromium/media/base/video_frame_metadata.h b/chromium/media/base/video_frame_metadata.h
index 379b26feed6..b26fb4933a3 100644
--- a/chromium/media/base/video_frame_metadata.h
+++ b/chromium/media/base/video_frame_metadata.h
@@ -10,6 +10,7 @@
#include "build/build_config.h"
#include "media/base/media_export.h"
#include "media/base/video_transformation.h"
+#include "media/gpu/buildflags.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "ui/gfx/geometry/rect.h"
@@ -136,6 +137,18 @@ struct MEDIA_EXPORT VideoFrameMetadata {
// properly displayed or not. Non-zero when valid.
uint32_t hw_protected_validation_id = 0;
+#if BUILDFLAG(USE_VAAPI)
+ // The ID of the VA-API protected session used to decode this frame, if
+ // applicable. The proper type is VAProtectedSessionID. However, in order to
+ // avoid including the VA-API headers in this file, we use the underlying
+ // type. Users of this field are expected to have compile-time assertions to
+ // ensure it's safe to use this as a VAProtectedSessionID.
+ //
+ // Notes on IPC: this field should not be copied to the Mojo version of
+ // VideoFrameMetadata because it should not cross process boundaries.
+ absl::optional<unsigned int> hw_va_protected_session_id;
+#endif
+
// An UnguessableToken that identifies VideoOverlayFactory that created
// this VideoFrame. It's used by Cast to help with video hole punch.
absl::optional<base::UnguessableToken> overlay_plane_id;
diff --git a/chromium/media/base/video_frame_pool.cc b/chromium/media/base/video_frame_pool.cc
index b5db2c3fbab..52d82da5df9 100644
--- a/chromium/media/base/video_frame_pool.cc
+++ b/chromium/media/base/video_frame_pool.cc
@@ -132,7 +132,7 @@ void VideoFramePool::PoolImpl::FrameReleased(scoped_refptr<VideoFrame> frame) {
// After this loop, |stale_index| is the index of the oldest non-stale frame.
// Such an index must exist because |frame| is never stale.
int stale_index = -1;
- constexpr base::TimeDelta kStaleFrameLimit = base::TimeDelta::FromSeconds(10);
+ constexpr base::TimeDelta kStaleFrameLimit = base::Seconds(10);
while (now - frames_[++stale_index].last_use_time > kStaleFrameLimit) {
// Last frame should never be included since we just added it.
DCHECK_LE(static_cast<size_t>(stale_index), frames_.size());
diff --git a/chromium/media/base/video_frame_pool_unittest.cc b/chromium/media/base/video_frame_pool_unittest.cc
index 019111de709..a52ba7eb833 100644
--- a/chromium/media/base/video_frame_pool_unittest.cc
+++ b/chromium/media/base/video_frame_pool_unittest.cc
@@ -20,7 +20,7 @@ class VideoFramePoolTest
VideoFramePoolTest() : pool_(new VideoFramePool()) {
// Seed test clock with some dummy non-zero value to avoid confusion with
// empty base::TimeTicks values.
- test_clock_.Advance(base::TimeDelta::FromSeconds(1234));
+ test_clock_.Advance(base::Seconds(1234));
pool_->SetTickClockForTesting(&test_clock_);
}
@@ -31,12 +31,10 @@ class VideoFramePoolTest
gfx::Size natural_size(coded_size);
scoped_refptr<VideoFrame> frame =
- pool_->CreateFrame(
- format, coded_size, visible_rect, natural_size,
- base::TimeDelta::FromMilliseconds(timestamp_ms));
+ pool_->CreateFrame(format, coded_size, visible_rect, natural_size,
+ base::Milliseconds(timestamp_ms));
EXPECT_EQ(format, frame->format());
- EXPECT_EQ(base::TimeDelta::FromMilliseconds(timestamp_ms),
- frame->timestamp());
+ EXPECT_EQ(base::Milliseconds(timestamp_ms), frame->timestamp());
if (format == PIXEL_FORMAT_ARGB) {
EXPECT_EQ(coded_size, frame->coded_size());
} else {
@@ -140,7 +138,7 @@ TEST_F(VideoFramePoolTest, StaleFramesAreExpired) {
// Advance clock far enough to hit stale timer; ensure only frame_1 has its
// resources released.
- test_clock_.Advance(base::TimeDelta::FromMinutes(1));
+ test_clock_.Advance(base::Minutes(1));
frame_2 = nullptr;
CheckPoolSize(1u);
}
diff --git a/chromium/media/base/video_frame_unittest.cc b/chromium/media/base/video_frame_unittest.cc
index e637fb202ac..7d9fac9b416 100644
--- a/chromium/media/base/video_frame_unittest.cc
+++ b/chromium/media/base/video_frame_unittest.cc
@@ -90,17 +90,17 @@ media::VideoFrameMetadata GetFullVideoFrameMetadata() {
// base::TimeTicks
base::TimeTicks now = base::TimeTicks::Now();
- metadata.receive_time = now + base::TimeDelta::FromMilliseconds(10);
- metadata.capture_begin_time = now + base::TimeDelta::FromMilliseconds(20);
- metadata.capture_end_time = now + base::TimeDelta::FromMilliseconds(30);
- metadata.decode_begin_time = now + base::TimeDelta::FromMilliseconds(40);
- metadata.decode_end_time = now + base::TimeDelta::FromMilliseconds(50);
- metadata.reference_time = now + base::TimeDelta::FromMilliseconds(60);
+ metadata.receive_time = now + base::Milliseconds(10);
+ metadata.capture_begin_time = now + base::Milliseconds(20);
+ metadata.capture_end_time = now + base::Milliseconds(30);
+ metadata.decode_begin_time = now + base::Milliseconds(40);
+ metadata.decode_end_time = now + base::Milliseconds(50);
+ metadata.reference_time = now + base::Milliseconds(60);
// base::TimeDeltas
- metadata.processing_time = base::TimeDelta::FromMilliseconds(500);
- metadata.frame_duration = base::TimeDelta::FromMilliseconds(16);
- metadata.wallclock_frame_duration = base::TimeDelta::FromMilliseconds(17);
+ metadata.processing_time = base::Milliseconds(500);
+ metadata.frame_duration = base::Milliseconds(16);
+ metadata.wallclock_frame_duration = base::Milliseconds(17);
return metadata;
}
@@ -170,8 +170,7 @@ void InitializeYV12Frame(VideoFrame* frame, double white_to_black) {
// Given a |yv12_frame| this method converts the YV12 frame to RGBA and
// makes sure that all the pixels of the RBG frame equal |expect_rgb_color|.
-void ExpectFrameColor(media::VideoFrame* yv12_frame,
- uint32_t expect_rgb_color) {
+void ExpectFrameColor(VideoFrame* yv12_frame, uint32_t expect_rgb_color) {
ASSERT_EQ(PIXEL_FORMAT_YV12, yv12_frame->format());
ASSERT_EQ(yv12_frame->stride(VideoFrame::kUPlane),
yv12_frame->stride(VideoFrame::kVPlane));
@@ -216,7 +215,7 @@ void ExpectFrameExtents(VideoPixelFormat format, const char* expected_hash) {
const unsigned char kFillByte = 0x80;
const int kWidth = 61;
const int kHeight = 31;
- const base::TimeDelta kTimestamp = base::TimeDelta::FromMicroseconds(1337);
+ const base::TimeDelta kTimestamp = base::Microseconds(1337);
gfx::Size size(kWidth, kHeight);
scoped_refptr<VideoFrame> frame = VideoFrame::CreateFrame(
@@ -247,16 +246,16 @@ void ExpectFrameExtents(VideoPixelFormat format, const char* expected_hash) {
TEST(VideoFrame, CreateFrame) {
const int kWidth = 64;
const int kHeight = 48;
- const base::TimeDelta kTimestamp = base::TimeDelta::FromMicroseconds(1337);
+ const base::TimeDelta kTimestamp = base::Microseconds(1337);
// Create a YV12 Video Frame.
gfx::Size size(kWidth, kHeight);
- scoped_refptr<media::VideoFrame> frame = VideoFrame::CreateFrame(
- media::PIXEL_FORMAT_YV12, size, gfx::Rect(size), size, kTimestamp);
+ scoped_refptr<VideoFrame> frame = VideoFrame::CreateFrame(
+ PIXEL_FORMAT_YV12, size, gfx::Rect(size), size, kTimestamp);
ASSERT_TRUE(frame.get());
// Test VideoFrame implementation.
- EXPECT_EQ(media::PIXEL_FORMAT_YV12, frame->format());
+ EXPECT_EQ(PIXEL_FORMAT_YV12, frame->format());
{
SCOPED_TRACE("");
InitializeYV12Frame(frame.get(), 0.0f);
@@ -279,15 +278,15 @@ TEST(VideoFrame, CreateFrame) {
EXPECT_EQ(MD5DigestToBase16(digest), "911991d51438ad2e1a40ed5f6fc7c796");
// Test single planar frame.
- frame = VideoFrame::CreateFrame(media::PIXEL_FORMAT_ARGB, size,
- gfx::Rect(size), size, kTimestamp);
- EXPECT_EQ(media::PIXEL_FORMAT_ARGB, frame->format());
+ frame = VideoFrame::CreateFrame(PIXEL_FORMAT_ARGB, size, gfx::Rect(size),
+ size, kTimestamp);
+ EXPECT_EQ(PIXEL_FORMAT_ARGB, frame->format());
EXPECT_GE(frame->stride(VideoFrame::kARGBPlane), frame->coded_size().width());
// Test double planar frame.
- frame = VideoFrame::CreateFrame(media::PIXEL_FORMAT_NV12, size,
- gfx::Rect(size), size, kTimestamp);
- EXPECT_EQ(media::PIXEL_FORMAT_NV12, frame->format());
+ frame = VideoFrame::CreateFrame(PIXEL_FORMAT_NV12, size, gfx::Rect(size),
+ size, kTimestamp);
+ EXPECT_EQ(PIXEL_FORMAT_NV12, frame->format());
// Test an empty frame.
frame = VideoFrame::CreateEOSFrame();
@@ -302,13 +301,12 @@ TEST(VideoFrame, CreateFrame) {
TEST(VideoFrame, CreateZeroInitializedFrame) {
const int kWidth = 2;
const int kHeight = 2;
- const base::TimeDelta kTimestamp = base::TimeDelta::FromMicroseconds(1337);
+ const base::TimeDelta kTimestamp = base::Microseconds(1337);
// Create a YV12 Video Frame.
gfx::Size size(kWidth, kHeight);
- scoped_refptr<media::VideoFrame> frame =
- VideoFrame::CreateZeroInitializedFrame(media::PIXEL_FORMAT_YV12, size,
- gfx::Rect(size), size, kTimestamp);
+ scoped_refptr<VideoFrame> frame = VideoFrame::CreateZeroInitializedFrame(
+ PIXEL_FORMAT_YV12, size, gfx::Rect(size), size, kTimestamp);
ASSERT_TRUE(frame.get());
EXPECT_TRUE(frame->IsMappable());
@@ -325,7 +323,7 @@ TEST(VideoFrame, CreateBlackFrame) {
const uint8_t kExpectedYRow[] = {0, 0};
const uint8_t kExpectedUVRow[] = {128};
- scoped_refptr<media::VideoFrame> frame =
+ scoped_refptr<VideoFrame> frame =
VideoFrame::CreateBlackFrame(gfx::Size(kWidth, kHeight));
ASSERT_TRUE(frame.get());
EXPECT_TRUE(frame->IsMappable());
@@ -363,43 +361,66 @@ static void FrameNoLongerNeededCallback(bool* triggered) {
TEST(VideoFrame, WrapVideoFrame) {
const int kWidth = 4;
const int kHeight = 4;
- const base::TimeDelta kFrameDuration = base::TimeDelta::FromMicroseconds(42);
+ const base::TimeDelta kFrameDuration = base::Microseconds(42);
- scoped_refptr<media::VideoFrame> frame;
- bool done_callback_was_run = false;
+ scoped_refptr<VideoFrame> frame, frame2;
+ bool base_frame_done_callback_was_run = false;
+ bool wrapped_frame_done_callback_was_run = false;
{
- scoped_refptr<media::VideoFrame> wrapped_frame =
- VideoFrame::CreateBlackFrame(gfx::Size(kWidth, kHeight));
- ASSERT_TRUE(wrapped_frame.get());
+ auto base_frame = VideoFrame::CreateBlackFrame(gfx::Size(kWidth, kHeight));
+ ASSERT_TRUE(base_frame);
- gfx::Rect visible_rect(1, 1, 1, 1);
+ gfx::Rect visible_rect(0, 0, 2, 2);
gfx::Size natural_size = visible_rect.size();
- wrapped_frame->metadata().frame_duration = kFrameDuration;
- frame = media::VideoFrame::WrapVideoFrame(
- wrapped_frame, wrapped_frame->format(), visible_rect, natural_size);
- wrapped_frame->AddDestructionObserver(
- base::BindOnce(&FrameNoLongerNeededCallback, &done_callback_was_run));
- EXPECT_EQ(wrapped_frame->coded_size(), frame->coded_size());
- EXPECT_EQ(wrapped_frame->data(media::VideoFrame::kYPlane),
- frame->data(media::VideoFrame::kYPlane));
- EXPECT_NE(wrapped_frame->visible_rect(), frame->visible_rect());
+ base_frame->metadata().frame_duration = kFrameDuration;
+ frame = VideoFrame::WrapVideoFrame(base_frame, base_frame->format(),
+ visible_rect, natural_size);
+ base_frame->AddDestructionObserver(base::BindOnce(
+ &FrameNoLongerNeededCallback, &base_frame_done_callback_was_run));
+ EXPECT_EQ(base_frame->coded_size(), frame->coded_size());
+ EXPECT_EQ(base_frame->data(VideoFrame::kYPlane),
+ frame->data(VideoFrame::kYPlane));
+ EXPECT_NE(base_frame->visible_rect(), frame->visible_rect());
EXPECT_EQ(visible_rect, frame->visible_rect());
- EXPECT_NE(wrapped_frame->natural_size(), frame->natural_size());
+ EXPECT_NE(base_frame->natural_size(), frame->natural_size());
EXPECT_EQ(natural_size, frame->natural_size());
// Verify metadata was copied to the wrapped frame.
EXPECT_EQ(*frame->metadata().frame_duration, kFrameDuration);
// Verify the metadata copy was a deep copy.
- wrapped_frame->clear_metadata();
- EXPECT_NE(wrapped_frame->metadata().frame_duration.has_value(),
+ base_frame->clear_metadata();
+ EXPECT_NE(base_frame->metadata().frame_duration.has_value(),
frame->metadata().frame_duration.has_value());
+
+ frame->AddDestructionObserver(base::BindOnce(
+ &FrameNoLongerNeededCallback, &wrapped_frame_done_callback_was_run));
+
+ visible_rect = gfx::Rect(0, 0, 1, 1);
+ natural_size = visible_rect.size();
+ frame2 = VideoFrame::WrapVideoFrame(frame, frame->format(), visible_rect,
+ natural_size);
+ EXPECT_EQ(base_frame->coded_size(), frame2->coded_size());
+ EXPECT_EQ(base_frame->data(VideoFrame::kYPlane),
+ frame2->data(VideoFrame::kYPlane));
+ EXPECT_NE(base_frame->visible_rect(), frame2->visible_rect());
+ EXPECT_EQ(visible_rect, frame2->visible_rect());
+ EXPECT_NE(base_frame->natural_size(), frame2->natural_size());
+ EXPECT_EQ(natural_size, frame2->natural_size());
}
- // Verify that |wrapped_frame| outlives |frame|.
- EXPECT_FALSE(done_callback_was_run);
+ // At this point |base_frame| is held by |frame|, |frame2|.
+ EXPECT_FALSE(base_frame_done_callback_was_run);
+ EXPECT_FALSE(wrapped_frame_done_callback_was_run);
+
+ // At this point |base_frame| is held by |frame2|, which also holds |frame|.
frame.reset();
- EXPECT_TRUE(done_callback_was_run);
+ EXPECT_FALSE(base_frame_done_callback_was_run);
+ EXPECT_FALSE(wrapped_frame_done_callback_was_run);
+
+ // Now all |base_frame| references should be released.
+ frame2.reset();
+ EXPECT_TRUE(base_frame_done_callback_was_run);
}
// Create a frame that wraps unowned memory.
@@ -408,15 +429,15 @@ TEST(VideoFrame, WrapExternalData) {
gfx::Size coded_size(256, 256);
gfx::Rect visible_rect(coded_size);
CreateTestY16Frame(coded_size, visible_rect, memory);
- auto timestamp = base::TimeDelta::FromMilliseconds(1);
- auto frame = VideoFrame::WrapExternalData(media::PIXEL_FORMAT_Y16, coded_size,
+ auto timestamp = base::Milliseconds(1);
+ auto frame = VideoFrame::WrapExternalData(PIXEL_FORMAT_Y16, coded_size,
visible_rect, visible_rect.size(),
memory, sizeof(memory), timestamp);
EXPECT_EQ(frame->coded_size(), coded_size);
EXPECT_EQ(frame->visible_rect(), visible_rect);
EXPECT_EQ(frame->timestamp(), timestamp);
- EXPECT_EQ(frame->data(media::VideoFrame::kYPlane)[0], 0xff);
+ EXPECT_EQ(frame->data(VideoFrame::kYPlane)[0], 0xff);
}
// Create a frame that wraps read-only shared memory.
@@ -430,22 +451,22 @@ TEST(VideoFrame, WrapSharedMemory) {
gfx::Size coded_size(256, 256);
gfx::Rect visible_rect(coded_size);
CreateTestY16Frame(coded_size, visible_rect, mapping.memory());
- auto timestamp = base::TimeDelta::FromMilliseconds(1);
+ auto timestamp = base::Milliseconds(1);
auto frame = VideoFrame::WrapExternalData(
- media::PIXEL_FORMAT_Y16, coded_size, visible_rect, visible_rect.size(),
+ PIXEL_FORMAT_Y16, coded_size, visible_rect, visible_rect.size(),
mapping.GetMemoryAsSpan<uint8_t>().data(), kDataSize, timestamp);
frame->BackWithSharedMemory(&region);
EXPECT_EQ(frame->coded_size(), coded_size);
EXPECT_EQ(frame->visible_rect(), visible_rect);
EXPECT_EQ(frame->timestamp(), timestamp);
- EXPECT_EQ(frame->data(media::VideoFrame::kYPlane)[0], 0xff);
+ EXPECT_EQ(frame->data(VideoFrame::kYPlane)[0], 0xff);
}
TEST(VideoFrame, WrapExternalGpuMemoryBuffer) {
gfx::Size coded_size = gfx::Size(256, 256);
gfx::Rect visible_rect(coded_size);
- auto timestamp = base::TimeDelta::FromMilliseconds(1);
+ auto timestamp = base::Milliseconds(1);
#if defined(OS_LINUX) || defined(OS_CHROMEOS)
const uint64_t modifier = 0x001234567890abcdULL;
#else
@@ -455,14 +476,12 @@ TEST(VideoFrame, WrapExternalGpuMemoryBuffer) {
std::make_unique<FakeGpuMemoryBuffer>(
coded_size, gfx::BufferFormat::YUV_420_BIPLANAR, modifier);
gfx::GpuMemoryBuffer* gmb_raw_ptr = gmb.get();
- gpu::MailboxHolder mailbox_holders[media::VideoFrame::kMaxPlanes] = {
+ gpu::MailboxHolder mailbox_holders[VideoFrame::kMaxPlanes] = {
gpu::MailboxHolder(gpu::Mailbox::Generate(), gpu::SyncToken(), 5),
gpu::MailboxHolder(gpu::Mailbox::Generate(), gpu::SyncToken(), 10)};
auto frame = VideoFrame::WrapExternalGpuMemoryBuffer(
visible_rect, coded_size, std::move(gmb), mailbox_holders,
- base::DoNothing::Once<const gpu::SyncToken&,
- std::unique_ptr<gfx::GpuMemoryBuffer>>(),
- timestamp);
+ base::DoNothing(), timestamp);
EXPECT_EQ(frame->layout().format(), PIXEL_FORMAT_NV12);
EXPECT_EQ(frame->layout().coded_size(), coded_size);
@@ -498,7 +517,7 @@ TEST(VideoFrame, WrapExternalDmabufs) {
planes[i].offset = offsets[i];
planes[i].size = sizes[i];
}
- auto timestamp = base::TimeDelta::FromMilliseconds(1);
+ auto timestamp = base::Milliseconds(1);
auto layout =
VideoFrameLayout::CreateWithPlanes(PIXEL_FORMAT_I420, coded_size, planes);
ASSERT_TRUE(layout);
@@ -558,7 +577,7 @@ TEST(VideoFrame, TextureNoLongerNeededCallbackIsCalled) {
gpu::CommandBufferId::FromUnsafeValue(1), 1);
{
- gpu::MailboxHolder holders[media::VideoFrame::kMaxPlanes] = {
+ gpu::MailboxHolder holders[VideoFrame::kMaxPlanes] = {
gpu::MailboxHolder(gpu::Mailbox::Generate(), gpu::SyncToken(), 5)};
scoped_refptr<VideoFrame> frame = VideoFrame::WrapNativeTextures(
PIXEL_FORMAT_ARGB, holders,
@@ -599,7 +618,7 @@ TEST(VideoFrame,
gpu::SyncToken called_sync_token;
{
- gpu::MailboxHolder holders[media::VideoFrame::kMaxPlanes] = {
+ gpu::MailboxHolder holders[VideoFrame::kMaxPlanes] = {
gpu::MailboxHolder(mailbox[VideoFrame::kYPlane], sync_token, target),
gpu::MailboxHolder(mailbox[VideoFrame::kUPlane], sync_token, target),
gpu::MailboxHolder(mailbox[VideoFrame::kVPlane], sync_token, target),
@@ -762,9 +781,8 @@ TEST(VideoFrameMetadata, PartialMergeMetadata) {
VideoFrameMetadata full_metadata = GetFullVideoFrameMetadata();
const gfx::Rect kTempRect{100, 200, 300, 400};
- const base::TimeTicks kTempTicks =
- base::TimeTicks::Now() + base::TimeDelta::FromSeconds(2);
- const base::TimeDelta kTempDelta = base::TimeDelta::FromMilliseconds(31415);
+ const base::TimeTicks kTempTicks = base::TimeTicks::Now() + base::Seconds(2);
+ const base::TimeDelta kTempDelta = base::Milliseconds(31415);
VideoFrameMetadata partial_metadata;
partial_metadata.capture_update_rect = kTempRect;
diff --git a/chromium/media/base/video_thumbnail_decoder_unittest.cc b/chromium/media/base/video_thumbnail_decoder_unittest.cc
index f070c07cce9..5e510bba82b 100644
--- a/chromium/media/base/video_thumbnail_decoder_unittest.cc
+++ b/chromium/media/base/video_thumbnail_decoder_unittest.cc
@@ -39,9 +39,10 @@ class VideoThumbnailDecoderTest : public testing::Test {
auto mock_video_decoder = std::make_unique<MockVideoDecoder>();
mock_video_decoder_ = mock_video_decoder.get();
VideoDecoderConfig valid_config(
- kCodecVP8, VP8PROFILE_ANY, VideoDecoderConfig::AlphaMode::kIsOpaque,
- VideoColorSpace(), kNoTransformation, gfx::Size(1, 1), gfx::Rect(1, 1),
- gfx::Size(1, 1), EmptyExtraData(), EncryptionScheme::kUnencrypted);
+ VideoCodec::kVP8, VP8PROFILE_ANY,
+ VideoDecoderConfig::AlphaMode::kIsOpaque, VideoColorSpace(),
+ kNoTransformation, gfx::Size(1, 1), gfx::Rect(1, 1), gfx::Size(1, 1),
+ EmptyExtraData(), EncryptionScheme::kUnencrypted);
thumbnail_decoder_ = std::make_unique<VideoThumbnailDecoder>(
std::move(mock_video_decoder), valid_config, std::vector<uint8_t>{0u});
diff --git a/chromium/media/base/video_util.cc b/chromium/media/base/video_util.cc
index 8c8d5f4a431..ebd61ffd5a3 100644
--- a/chromium/media/base/video_util.cc
+++ b/chromium/media/base/video_util.cc
@@ -7,6 +7,7 @@
#include <cmath>
#include "base/bind.h"
+#include "base/bits.h"
#include "base/callback_helpers.h"
#include "base/check_op.h"
#include "base/logging.h"
@@ -61,202 +62,159 @@ void FillRegionOutsideVisibleRect(uint8_t* data,
}
}
-std::pair<SkColorType, GrGLenum> GetSkiaAndGlColorTypesForPlane(
- VideoPixelFormat format,
- size_t plane) {
- // TODO(eugene): There is some strange channel switch during RGB readback.
- // When frame's pixel format matches GL and Skia color types we get reversed
- // channels. But why?
+VideoPixelFormat ReadbackFormat(const media::VideoFrame& frame) {
+ switch (frame.format()) {
+ case PIXEL_FORMAT_I420:
+ case PIXEL_FORMAT_I420A:
+ case PIXEL_FORMAT_I422:
+ case PIXEL_FORMAT_I444:
+ case PIXEL_FORMAT_ARGB:
+ case PIXEL_FORMAT_XRGB:
+ case PIXEL_FORMAT_ABGR:
+ case PIXEL_FORMAT_XBGR:
+ return frame.format();
+ case PIXEL_FORMAT_NV12:
+ // |frame| may be backed by a graphics buffer that is NV12, but sampled as
+ // a single RGB texture.
+ return frame.NumTextures() == 1 ? PIXEL_FORMAT_XRGB : PIXEL_FORMAT_NV12;
+ default:
+ // Currently unsupported.
+ return PIXEL_FORMAT_UNKNOWN;
+ }
+}
+
+// TODO(eugene): There is some strange channel switch during RGB readback.
+// When frame's pixel format matches GL and Skia color types we get reversed
+// channels. But why?
+SkColorType SkColorTypeForPlane(VideoPixelFormat format, size_t plane) {
switch (format) {
+ case PIXEL_FORMAT_I420:
+ case PIXEL_FORMAT_I420A:
+ case PIXEL_FORMAT_I422:
+ case PIXEL_FORMAT_I444:
+ // kGray_8_SkColorType would make more sense but doesn't work on Windows.
+ return kAlpha_8_SkColorType;
case PIXEL_FORMAT_NV12:
- if (plane == VideoFrame::kUVPlane)
- return {kR8G8_unorm_SkColorType, GL_RG8_EXT};
- if (plane == VideoFrame::kYPlane)
- return {kAlpha_8_SkColorType, GL_R8_EXT};
- break;
+ return plane == media::VideoFrame::kYPlane ? kAlpha_8_SkColorType
+ : kR8G8_unorm_SkColorType;
case PIXEL_FORMAT_XBGR:
- if (plane == VideoFrame::kARGBPlane)
- return {kRGBA_8888_SkColorType, GL_RGBA8_OES};
- break;
case PIXEL_FORMAT_ABGR:
- if (plane == VideoFrame::kARGBPlane)
- return {kRGBA_8888_SkColorType, GL_RGBA8_OES};
- break;
+ return kRGBA_8888_SkColorType;
case PIXEL_FORMAT_XRGB:
- if (plane == VideoFrame::kARGBPlane)
- return {kBGRA_8888_SkColorType, GL_BGRA8_EXT};
- break;
case PIXEL_FORMAT_ARGB:
- if (plane == VideoFrame::kARGBPlane)
- return {kBGRA_8888_SkColorType, GL_BGRA8_EXT};
- break;
+ return kBGRA_8888_SkColorType;
default:
- break;
+ NOTREACHED();
+ return kUnknown_SkColorType;
}
- NOTREACHED();
- return {kUnknown_SkColorType, 0};
}
-scoped_refptr<VideoFrame> ReadbackTextureBackedFrameToMemorySyncGLES(
- const VideoFrame& txt_frame,
- gpu::raster::RasterInterface* ri,
- GrDirectContext* gr_context,
- VideoFramePool* pool) {
- DCHECK(gr_context);
-
- if (txt_frame.NumTextures() > 2 || txt_frame.NumTextures() < 1) {
- DLOG(ERROR) << "Readback is not possible for this frame: "
- << txt_frame.AsHumanReadableString();
- return nullptr;
- }
-
- VideoPixelFormat result_format = txt_frame.format();
- if (txt_frame.NumTextures() == 1 && result_format == PIXEL_FORMAT_NV12) {
- // Even though |txt_frame| format is NV12 and it is NV12 in GPU memory,
- // the texture is a RGB view that is produced by a shader on the fly.
- // So we currently we currently can only read it back as RGB.
- result_format = PIXEL_FORMAT_ARGB;
+GrGLenum GLFormatForPlane(VideoPixelFormat format, size_t plane) {
+ switch (SkColorTypeForPlane(format, plane)) {
+ case kAlpha_8_SkColorType:
+ return GL_R8_EXT;
+ case kR8G8_unorm_SkColorType:
+ return GL_RG8_EXT;
+ case kRGBA_8888_SkColorType:
+ return GL_RGBA8_OES;
+ case kBGRA_8888_SkColorType:
+ return GL_BGRA8_EXT;
+ default:
+ NOTREACHED();
+ return 0;
}
+}
- scoped_refptr<VideoFrame> result =
- pool
- ? pool->CreateFrame(result_format, txt_frame.coded_size(),
- txt_frame.visible_rect(),
- txt_frame.natural_size(), txt_frame.timestamp())
- : VideoFrame::CreateFrame(
- result_format, txt_frame.coded_size(), txt_frame.visible_rect(),
- txt_frame.natural_size(), txt_frame.timestamp());
- result->set_color_space(txt_frame.ColorSpace());
- result->metadata().MergeMetadataFrom(txt_frame.metadata());
- result->metadata().texture_origin_is_top_left = true;
-
- size_t planes = VideoFrame::NumPlanes(result->format());
- for (size_t plane = 0; plane < planes; plane++) {
- const gpu::MailboxHolder& holder = txt_frame.mailbox_holder(plane);
- if (holder.mailbox.IsZero())
- return nullptr;
- ri->WaitSyncTokenCHROMIUM(holder.sync_token.GetConstData());
-
- int width = result->columns(plane);
- int height = result->rows(plane);
-
- auto texture_id = ri->CreateAndConsumeForGpuRaster(holder.mailbox);
- if (holder.mailbox.IsSharedImage()) {
- ri->BeginSharedImageAccessDirectCHROMIUM(
- texture_id, GL_SHARED_IMAGE_ACCESS_MODE_READ_CHROMIUM);
- }
-
- auto cleanup_fn = [](GLuint texture_id, bool shared,
- gpu::raster::RasterInterface* ri) {
- if (shared)
- ri->EndSharedImageAccessDirectCHROMIUM(texture_id);
- ri->DeleteGpuRasterTexture(texture_id);
- };
- base::ScopedClosureRunner cleanup(base::BindOnce(
- cleanup_fn, texture_id, holder.mailbox.IsSharedImage(), ri));
-
- GrGLenum texture_format;
- SkColorType sk_color_type;
- std::tie(sk_color_type, texture_format) =
- GetSkiaAndGlColorTypesForPlane(result->format(), plane);
- GrGLTextureInfo gl_texture_info;
- gl_texture_info.fID = texture_id;
- gl_texture_info.fTarget = holder.texture_target;
- gl_texture_info.fFormat = texture_format;
-
- GrBackendTexture texture(width, height, GrMipMapped::kNo, gl_texture_info);
- auto image = SkImage::MakeFromTexture(
- gr_context, texture,
- txt_frame.metadata().texture_origin_is_top_left
- ? kTopLeft_GrSurfaceOrigin
- : kBottomLeft_GrSurfaceOrigin,
- sk_color_type, kOpaque_SkAlphaType, /*colorSpace=*/nullptr);
-
- if (!image) {
- DLOG(ERROR) << "Can't create SkImage from texture!"
- << " plane:" << plane;
- return nullptr;
- }
+bool ReadbackTexturePlaneToMemorySyncSkImage(const VideoFrame& src_frame,
+ size_t src_plane,
+ gfx::Rect& src_rect,
+ uint8_t* dest_pixels,
+ size_t dest_stride,
+ gpu::raster::RasterInterface* ri,
+ GrDirectContext* gr_context) {
+ DCHECK(gr_context);
- auto info =
- SkImageInfo::Make(width, height, sk_color_type, kOpaque_SkAlphaType);
- SkPixmap pixmap(info, result->data(plane), result->row_bytes(plane));
- if (!image->readPixels(gr_context, pixmap, 0, 0,
- SkImage::kDisallow_CachingHint)) {
- DLOG(ERROR) << "Plane readback failed."
- << " plane:" << plane << " width: " << width
- << " height: " << height
- << " minRowBytes: " << info.minRowBytes();
- return nullptr;
- }
+ VideoPixelFormat format = ReadbackFormat(src_frame);
+ int width = src_frame.columns(src_plane);
+ int height = src_frame.rows(src_plane);
+ bool has_alpha = !IsOpaque(format) && src_frame.NumTextures() == 1;
+
+ const gpu::MailboxHolder& holder = src_frame.mailbox_holder(src_plane);
+ DCHECK(!holder.mailbox.IsZero());
+ ri->WaitSyncTokenCHROMIUM(holder.sync_token.GetConstData());
+ auto texture_id = ri->CreateAndConsumeForGpuRaster(holder.mailbox);
+ if (holder.mailbox.IsSharedImage()) {
+ ri->BeginSharedImageAccessDirectCHROMIUM(
+ texture_id, GL_SHARED_IMAGE_ACCESS_MODE_READ_CHROMIUM);
}
-
- return result;
-}
-
-scoped_refptr<VideoFrame> ReadbackTextureBackedFrameToMemorySyncOOP(
- const VideoFrame& txt_frame,
- gpu::raster::RasterInterface* ri,
- VideoFramePool* pool) {
- if (txt_frame.NumTextures() > 2 || txt_frame.NumTextures() < 1) {
- DLOG(ERROR) << "Readback is not possible for this frame: "
- << txt_frame.AsHumanReadableString();
- return nullptr;
+ base::ScopedClosureRunner cleanup(base::BindOnce(
+ [](GLuint texture_id, bool shared, gpu::raster::RasterInterface* ri) {
+ if (shared)
+ ri->EndSharedImageAccessDirectCHROMIUM(texture_id);
+ ri->DeleteGpuRasterTexture(texture_id);
+ },
+ texture_id, holder.mailbox.IsSharedImage(), ri));
+
+ GrGLenum texture_format = GLFormatForPlane(format, src_plane);
+ SkColorType sk_color_type = SkColorTypeForPlane(format, src_plane);
+ SkAlphaType sk_alpha_type =
+ has_alpha ? kUnpremul_SkAlphaType : kOpaque_SkAlphaType;
+
+ GrGLTextureInfo gl_texture_info;
+ gl_texture_info.fID = texture_id;
+ gl_texture_info.fTarget = holder.texture_target;
+ gl_texture_info.fFormat = texture_format;
+ GrBackendTexture texture(width, height, GrMipMapped::kNo, gl_texture_info);
+
+ auto image =
+ SkImage::MakeFromTexture(gr_context, texture,
+ src_frame.metadata().texture_origin_is_top_left
+ ? kTopLeft_GrSurfaceOrigin
+ : kBottomLeft_GrSurfaceOrigin,
+ sk_color_type, sk_alpha_type,
+ /*colorSpace=*/nullptr);
+ if (!image) {
+ DLOG(ERROR) << "Can't create SkImage from texture plane " << src_plane;
+ return false;
}
- VideoPixelFormat result_format = txt_frame.format();
- if (txt_frame.NumTextures() == 1 && result_format == PIXEL_FORMAT_NV12) {
- // Even though |txt_frame| format is NV12 and it is NV12 in GPU memory,
- // the texture is a RGB view that is produced by a shader on the fly.
- // So we currently we currently can only read it back as RGB.
- result_format = PIXEL_FORMAT_ARGB;
+ auto dest_info = SkImageInfo::Make(src_rect.width(), src_rect.height(),
+ sk_color_type, sk_alpha_type);
+ SkPixmap dest_pixmap(dest_info, dest_pixels, dest_stride);
+ if (!image->readPixels(gr_context, dest_pixmap, src_rect.x(), src_rect.y(),
+ SkImage::kDisallow_CachingHint)) {
+ DLOG(ERROR) << "Plane readback failed."
+ << " plane:" << src_plane << " width: " << width
+ << " height: " << height;
+ return false;
}
- scoped_refptr<VideoFrame> result =
- pool
- ? pool->CreateFrame(result_format, txt_frame.coded_size(),
- txt_frame.visible_rect(),
- txt_frame.natural_size(), txt_frame.timestamp())
- : VideoFrame::CreateFrame(
- result_format, txt_frame.coded_size(), txt_frame.visible_rect(),
- txt_frame.natural_size(), txt_frame.timestamp());
- result->set_color_space(txt_frame.ColorSpace());
- result->metadata().MergeMetadataFrom(txt_frame.metadata());
-
- size_t planes = VideoFrame::NumPlanes(result->format());
- for (size_t plane = 0; plane < planes; plane++) {
- const gpu::MailboxHolder& holder = txt_frame.mailbox_holder(plane);
- if (holder.mailbox.IsZero()) {
- DLOG(ERROR) << "Can't readback video frame with Zero texture on plane "
- << plane;
- return nullptr;
- }
- ri->WaitSyncTokenCHROMIUM(holder.sync_token.GetConstData());
-
- int width = result->columns(plane);
- int height = result->rows(plane);
-
- GrGLenum texture_format;
- SkColorType sk_color_type;
- std::tie(sk_color_type, texture_format) =
- GetSkiaAndGlColorTypesForPlane(result->format(), plane);
-
- auto info =
- SkImageInfo::Make(width, height, sk_color_type, kOpaque_SkAlphaType);
-
- ri->ReadbackImagePixels(holder.mailbox, info, info.minRowBytes(), 0, 0,
- result->data(plane));
- if (ri->GetError() != GL_NO_ERROR) {
- DLOG(ERROR) << "Plane readback failed."
- << " plane:" << plane << " width: " << width
- << " height: " << height
- << " minRowBytes: " << info.minRowBytes()
- << " error: " << ri->GetError();
- return nullptr;
- }
- }
+ return true;
+}
- return result;
+bool ReadbackTexturePlaneToMemorySyncOOP(const VideoFrame& src_frame,
+ size_t src_plane,
+ gfx::Rect& src_rect,
+ uint8_t* dest_pixels,
+ size_t dest_stride,
+ gpu::raster::RasterInterface* ri) {
+ VideoPixelFormat format = ReadbackFormat(src_frame);
+ bool has_alpha = !IsOpaque(format) && src_frame.NumTextures() == 1;
+
+ const gpu::MailboxHolder& holder = src_frame.mailbox_holder(src_plane);
+ DCHECK(!holder.mailbox.IsZero());
+ ri->WaitSyncTokenCHROMIUM(holder.sync_token.GetConstData());
+
+ SkColorType sk_color_type = SkColorTypeForPlane(format, src_plane);
+ SkAlphaType sk_alpha_type =
+ has_alpha ? kUnpremul_SkAlphaType : kOpaque_SkAlphaType;
+
+ auto info = SkImageInfo::Make(src_rect.width(), src_rect.height(),
+ sk_color_type, sk_alpha_type);
+ ri->ReadbackImagePixels(holder.mailbox, info, dest_stride, src_rect.x(),
+ src_rect.y(), dest_pixels);
+ DCHECK_EQ(ri->GetError(), static_cast<GLenum>(GL_NO_ERROR));
+ return true;
}
} // namespace
@@ -556,6 +514,28 @@ gfx::Size ScaleSizeToEncompassTarget(const gfx::Size& size,
return ScaleSizeToTarget(size, target, false);
}
+gfx::Rect CropSizeForScalingToTarget(const gfx::Size& size,
+ const gfx::Size& target,
+ size_t alignment) {
+ DCHECK_GT(alignment, 0u);
+ if (size.IsEmpty() || target.IsEmpty())
+ return gfx::Rect();
+
+ gfx::Rect crop(ScaleSizeToFitWithinTarget(target, size));
+ crop.set_width(base::checked_cast<int>(base::bits::AlignDown(
+ base::checked_cast<size_t>(crop.width()), alignment)));
+ crop.set_height(base::checked_cast<int>(base::bits::AlignDown(
+ base::checked_cast<size_t>(crop.height()), alignment)));
+ crop.set_x(base::checked_cast<int>(base::bits::AlignDown(
+ base::checked_cast<size_t>((size.width() - crop.width()) / 2),
+ alignment)));
+ crop.set_y(base::checked_cast<int>(base::bits::AlignDown(
+ base::checked_cast<size_t>((size.height() - crop.height()) / 2),
+ alignment)));
+ DCHECK(gfx::Rect(size).Contains(crop));
+ return crop;
+}
+
gfx::Size GetRectSizeFromOrigin(const gfx::Rect& rect) {
return gfx::Size(rect.right(), rect.bottom());
}
@@ -676,11 +656,53 @@ scoped_refptr<VideoFrame> ReadbackTextureBackedFrameToMemorySync(
VideoFramePool* pool) {
DCHECK(ri);
+ VideoPixelFormat format = ReadbackFormat(txt_frame);
+ if (format == PIXEL_FORMAT_UNKNOWN) {
+ DLOG(ERROR) << "Readback is not possible for this frame: "
+ << txt_frame.AsHumanReadableString();
+ return nullptr;
+ }
+
+ scoped_refptr<VideoFrame> result =
+ pool ? pool->CreateFrame(format, txt_frame.coded_size(),
+ txt_frame.visible_rect(),
+ txt_frame.natural_size(), txt_frame.timestamp())
+ : VideoFrame::CreateFrame(
+ format, txt_frame.coded_size(), txt_frame.visible_rect(),
+ txt_frame.natural_size(), txt_frame.timestamp());
+ result->set_color_space(txt_frame.ColorSpace());
+ result->metadata().MergeMetadataFrom(txt_frame.metadata());
+
+ size_t planes = VideoFrame::NumPlanes(format);
+ for (size_t plane = 0; plane < planes; plane++) {
+ gfx::Rect src_rect(0, 0, txt_frame.columns(plane), txt_frame.rows(plane));
+ if (!ReadbackTexturePlaneToMemorySync(
+ txt_frame, plane, src_rect, result->data(plane),
+ result->stride(plane), ri, gr_context)) {
+ return nullptr;
+ }
+ }
+
+ return result;
+}
+
+bool ReadbackTexturePlaneToMemorySync(const VideoFrame& src_frame,
+ size_t src_plane,
+ gfx::Rect& src_rect,
+ uint8_t* dest_pixels,
+ size_t dest_stride,
+ gpu::raster::RasterInterface* ri,
+ GrDirectContext* gr_context) {
+ DCHECK(ri);
+
if (gr_context) {
- return ReadbackTextureBackedFrameToMemorySyncGLES(txt_frame, ri, gr_context,
- pool);
+ return ReadbackTexturePlaneToMemorySyncSkImage(src_frame, src_plane,
+ src_rect, dest_pixels,
+ dest_stride, ri, gr_context);
}
- return ReadbackTextureBackedFrameToMemorySyncOOP(txt_frame, ri, pool);
+
+ return ReadbackTexturePlaneToMemorySyncOOP(src_frame, src_plane, src_rect,
+ dest_pixels, dest_stride, ri);
}
Status ConvertAndScaleFrame(const VideoFrame& src_frame,
@@ -958,8 +980,8 @@ scoped_refptr<VideoFrame> CreateFromSkImage(sk_sp<SkImage> sk_image,
if (!frame)
return nullptr;
- frame->AddDestructionObserver(base::BindOnce(
- base::DoNothing::Once<sk_sp<SkImage>>(), std::move(sk_image)));
+ frame->AddDestructionObserver(
+ base::BindOnce([](sk_sp<SkImage>) {}, std::move(sk_image)));
return frame;
}
diff --git a/chromium/media/base/video_util.h b/chromium/media/base/video_util.h
index c19b5b16b3b..87ecadd658d 100644
--- a/chromium/media/base/video_util.h
+++ b/chromium/media/base/video_util.h
@@ -101,6 +101,16 @@ MEDIA_EXPORT gfx::Size ScaleSizeToFitWithinTarget(const gfx::Size& size,
MEDIA_EXPORT gfx::Size ScaleSizeToEncompassTarget(const gfx::Size& size,
const gfx::Size& target);
+// Calculates the largest sub-rectangle of a rectangle of size |size| with
+// roughly the same aspect ratio as |target| and centered both horizontally
+// and vertically within the rectangle. It's "roughly" the same aspect ratio
+// because its dimensions may be rounded down to be a multiple of |alignment|.
+// The origin of the rectangle is also aligned down to a multiple of
+// |alignment|. Note that |alignment| must be a power of 2.
+MEDIA_EXPORT gfx::Rect CropSizeForScalingToTarget(const gfx::Size& size,
+ const gfx::Size& target,
+ size_t alignment = 1u);
+
// Returns the size of a rectangle whose upper left corner is at the origin (0,
// 0) and whose bottom right corner is the same as that of |rect|. This is
// useful to get the size of a buffer that contains the visible rectangle plus
@@ -143,6 +153,17 @@ MEDIA_EXPORT scoped_refptr<VideoFrame> ReadbackTextureBackedFrameToMemorySync(
GrDirectContext* gr_context,
VideoFramePool* pool = nullptr);
+// Synchronously reads a single plane. |src_rect| is relative to the plane,
+// which may be smaller than |frame| due to subsampling.
+MEDIA_EXPORT bool ReadbackTexturePlaneToMemorySync(
+ const VideoFrame& src_frame,
+ size_t src_plane,
+ gfx::Rect& src_rect,
+ uint8_t* dest_pixels,
+ size_t dest_stride,
+ gpu::raster::RasterInterface* ri,
+ GrDirectContext* gr_context);
+
// Converts a frame with I420A format into I420 by dropping alpha channel.
MEDIA_EXPORT scoped_refptr<VideoFrame> WrapAsI420VideoFrame(
scoped_refptr<VideoFrame> frame);
diff --git a/chromium/media/base/video_util_unittest.cc b/chromium/media/base/video_util_unittest.cc
index dc3273851c6..e82e3caccbd 100644
--- a/chromium/media/base/video_util_unittest.cc
+++ b/chromium/media/base/video_util_unittest.cc
@@ -430,6 +430,44 @@ TEST_F(VideoUtilTest, ScaleSizeToEncompassTarget) {
gfx::Size(0, 0), gfx::Size(2000000000, 2000000000)).IsEmpty());
}
+TEST_F(VideoUtilTest, CropSizeForScalingToTarget) {
+ // Test same aspect ratios.
+ EXPECT_EQ(gfx::Rect(0, 0, 640, 360),
+ CropSizeForScalingToTarget(gfx::Size(640, 360), gfx::Size(16, 9)));
+ EXPECT_EQ(gfx::Rect(0, 0, 320, 240),
+ CropSizeForScalingToTarget(gfx::Size(320, 240), gfx::Size(4, 3)));
+ EXPECT_EQ(
+ gfx::Rect(0, 0, 320, 240),
+ CropSizeForScalingToTarget(gfx::Size(321, 241), gfx::Size(4, 3), 2));
+
+ // Test cropping 4:3 from 16:9.
+ EXPECT_EQ(gfx::Rect(80, 0, 480, 360),
+ CropSizeForScalingToTarget(gfx::Size(640, 360), gfx::Size(4, 3)));
+ EXPECT_EQ(gfx::Rect(53, 0, 320, 240),
+ CropSizeForScalingToTarget(gfx::Size(426, 240), gfx::Size(4, 3)));
+ EXPECT_EQ(
+ gfx::Rect(52, 0, 320, 240),
+ CropSizeForScalingToTarget(gfx::Size(426, 240), gfx::Size(4, 3), 2));
+
+ // Test cropping 16:9 from 4:3.
+ EXPECT_EQ(gfx::Rect(0, 30, 320, 180),
+ CropSizeForScalingToTarget(gfx::Size(320, 240), gfx::Size(16, 9)));
+ EXPECT_EQ(gfx::Rect(0, 9, 96, 54),
+ CropSizeForScalingToTarget(gfx::Size(96, 72), gfx::Size(16, 9)));
+ EXPECT_EQ(gfx::Rect(0, 8, 96, 54),
+ CropSizeForScalingToTarget(gfx::Size(96, 72), gfx::Size(16, 9), 2));
+
+ // Test abnormal inputs.
+ EXPECT_EQ(gfx::Rect(),
+ CropSizeForScalingToTarget(gfx::Size(0, 1), gfx::Size(1, 1)));
+ EXPECT_EQ(gfx::Rect(),
+ CropSizeForScalingToTarget(gfx::Size(1, 0), gfx::Size(1, 1)));
+ EXPECT_EQ(gfx::Rect(),
+ CropSizeForScalingToTarget(gfx::Size(1, 1), gfx::Size(0, 1)));
+ EXPECT_EQ(gfx::Rect(),
+ CropSizeForScalingToTarget(gfx::Size(1, 1), gfx::Size(1, 0)));
+}
+
TEST_F(VideoUtilTest, PadToMatchAspectRatio) {
EXPECT_EQ(gfx::Size(640, 480),
PadToMatchAspectRatio(gfx::Size(640, 480), gfx::Size(640, 480)));
@@ -525,9 +563,8 @@ TEST_F(VideoUtilTest, I420CopyWithPadding) {
TEST_F(VideoUtilTest, WrapAsI420VideoFrame) {
gfx::Size size(640, 480);
- scoped_refptr<VideoFrame> src_frame =
- VideoFrame::CreateFrame(PIXEL_FORMAT_I420A, size, gfx::Rect(size), size,
- base::TimeDelta::FromDays(1));
+ scoped_refptr<VideoFrame> src_frame = VideoFrame::CreateFrame(
+ PIXEL_FORMAT_I420A, size, gfx::Rect(size), size, base::Days(1));
scoped_refptr<VideoFrame> dst_frame = WrapAsI420VideoFrame(src_frame);
EXPECT_EQ(dst_frame->format(), PIXEL_FORMAT_I420);
diff --git a/chromium/media/base/wall_clock_time_source.cc b/chromium/media/base/wall_clock_time_source.cc
index 9ddf51eb1af..cdfcc687993 100644
--- a/chromium/media/base/wall_clock_time_source.cc
+++ b/chromium/media/base/wall_clock_time_source.cc
@@ -94,8 +94,8 @@ base::TimeDelta WallClockTimeSource::CurrentMediaTime_Locked() {
base::TimeTicks now = tick_clock_->NowTicks();
return base_timestamp_ +
- base::TimeDelta::FromMicroseconds(
- (now - reference_time_).InMicroseconds() * playback_rate_);
+ base::Microseconds((now - reference_time_).InMicroseconds() *
+ playback_rate_);
}
} // namespace media
diff --git a/chromium/media/base/wall_clock_time_source.h b/chromium/media/base/wall_clock_time_source.h
index 028c3522138..17d76a4e097 100644
--- a/chromium/media/base/wall_clock_time_source.h
+++ b/chromium/media/base/wall_clock_time_source.h
@@ -18,6 +18,10 @@ namespace media {
class MEDIA_EXPORT WallClockTimeSource : public TimeSource {
public:
WallClockTimeSource();
+
+ WallClockTimeSource(const WallClockTimeSource&) = delete;
+ WallClockTimeSource& operator=(const WallClockTimeSource&) = delete;
+
~WallClockTimeSource() override;
// TimeSource implementation.
@@ -50,8 +54,6 @@ class MEDIA_EXPORT WallClockTimeSource : public TimeSource {
// TODO(scherkus): Remove internal locking from this class after access to
// Renderer::CurrentMediaTime() is single threaded http://crbug.com/370634
base::Lock lock_;
-
- DISALLOW_COPY_AND_ASSIGN(WallClockTimeSource);
};
} // namespace media
diff --git a/chromium/media/base/wall_clock_time_source_unittest.cc b/chromium/media/base/wall_clock_time_source_unittest.cc
index 49b6134c5a7..b643a6a7b2d 100644
--- a/chromium/media/base/wall_clock_time_source_unittest.cc
+++ b/chromium/media/base/wall_clock_time_source_unittest.cc
@@ -17,10 +17,14 @@ class WallClockTimeSourceTest : public testing::Test {
time_source_.SetTickClockForTesting(tick_clock_.get());
AdvanceTimeInSeconds(1);
}
+
+ WallClockTimeSourceTest(const WallClockTimeSourceTest&) = delete;
+ WallClockTimeSourceTest& operator=(const WallClockTimeSourceTest&) = delete;
+
~WallClockTimeSourceTest() override = default;
void AdvanceTimeInSeconds(int seconds) {
- tick_clock_->Advance(base::TimeDelta::FromSeconds(seconds));
+ tick_clock_->Advance(base::Seconds(seconds));
}
int CurrentMediaTimeInSeconds() {
@@ -28,7 +32,7 @@ class WallClockTimeSourceTest : public testing::Test {
}
void SetMediaTimeInSeconds(int seconds) {
- return time_source_.SetMediaTime(base::TimeDelta::FromSeconds(seconds));
+ return time_source_.SetMediaTime(base::Seconds(seconds));
}
base::TimeTicks ConvertMediaTime(base::TimeDelta timestamp,
@@ -42,22 +46,19 @@ class WallClockTimeSourceTest : public testing::Test {
bool IsWallClockNowForMediaTimeInSeconds(int seconds) {
bool is_time_moving = false;
return tick_clock_->NowTicks() ==
- ConvertMediaTime(base::TimeDelta::FromSeconds(seconds),
- &is_time_moving);
+ ConvertMediaTime(base::Seconds(seconds), &is_time_moving);
}
bool IsTimeStopped() {
bool is_time_moving = false;
// Convert any random value, it shouldn't matter for this call.
- ConvertMediaTime(base::TimeDelta::FromSeconds(1), &is_time_moving);
+ ConvertMediaTime(base::Seconds(1), &is_time_moving);
return !is_time_moving;
}
protected:
WallClockTimeSource time_source_;
std::unique_ptr<base::SimpleTestTickClock> tick_clock_;
-
- DISALLOW_COPY_AND_ASSIGN(WallClockTimeSourceTest);
};
TEST_F(WallClockTimeSourceTest, InitialTimeIsZero) {
@@ -130,7 +131,7 @@ TEST_F(WallClockTimeSourceTest, StopTicking) {
}
TEST_F(WallClockTimeSourceTest, ConvertsTimestampsWhenStopped) {
- const base::TimeDelta kOneSecond = base::TimeDelta::FromSeconds(1);
+ const base::TimeDelta kOneSecond = base::Seconds(1);
bool is_time_moving = false;
EXPECT_EQ(base::TimeTicks(),
ConvertMediaTime(base::TimeDelta(), &is_time_moving));
diff --git a/chromium/media/base/win/d3d11_mocks.cc b/chromium/media/base/win/d3d11_mocks.cc
index 41853a4fa24..326fe4bde33 100644
--- a/chromium/media/base/win/d3d11_mocks.cc
+++ b/chromium/media/base/win/d3d11_mocks.cc
@@ -9,6 +9,9 @@ namespace media {
D3D11Texture2DMock::D3D11Texture2DMock() = default;
D3D11Texture2DMock::~D3D11Texture2DMock() = default;
+D3D11MultithreadMock::D3D11MultithreadMock() = default;
+D3D11MultithreadMock::~D3D11MultithreadMock() = default;
+
D3D11BufferMock::D3D11BufferMock() = default;
D3D11BufferMock::~D3D11BufferMock() = default;
diff --git a/chromium/media/base/win/d3d11_mocks.h b/chromium/media/base/win/d3d11_mocks.h
index d2ad6b8b426..91c611913fe 100644
--- a/chromium/media/base/win/d3d11_mocks.h
+++ b/chromium/media/base/win/d3d11_mocks.h
@@ -34,6 +34,19 @@ class D3D11Texture2DMock
MOCK_STDCALL_METHOD1(GetDesc, void(D3D11_TEXTURE2D_DESC*));
};
+class D3D11MultithreadMock
+ : public Microsoft::WRL::RuntimeClass<
+ Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::ClassicCom>,
+ ID3D11Multithread> {
+ public:
+ D3D11MultithreadMock();
+ ~D3D11MultithreadMock() override;
+ MOCK_STDCALL_METHOD0(Enter, void());
+ MOCK_STDCALL_METHOD0(GetMultithreadProtected, BOOL());
+ MOCK_STDCALL_METHOD0(Leave, void());
+ MOCK_STDCALL_METHOD1(SetMultithreadProtected, BOOL(BOOL));
+};
+
class D3D11BufferMock
: public Microsoft::WRL::RuntimeClass<
Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::ClassicCom>,
diff --git a/chromium/media/base/win/dcomp_texture_wrapper.h b/chromium/media/base/win/dcomp_texture_wrapper.h
index abb45dd5ebc..f14b39c46e2 100644
--- a/chromium/media/base/win/dcomp_texture_wrapper.h
+++ b/chromium/media/base/win/dcomp_texture_wrapper.h
@@ -23,26 +23,25 @@ class DCOMPTextureWrapper {
public:
virtual ~DCOMPTextureWrapper() = default;
- // Initializes the DCOMPTexture and returns success/failure in `init_cb`.
- // TODO(xhwang): Pass `DCOMPSurfaceHandleBoundCB` in `SetDCOMPSurface()`.
- using DCOMPSurfaceHandleBoundCB = base::OnceCallback<void(bool)>;
- using CompositionParamsReceivedCB = base::RepeatingCallback<void(gfx::Rect)>;
- using InitCB = base::OnceCallback<void(bool)>;
- virtual void Initialize(const gfx::Size& natural_size,
- DCOMPSurfaceHandleBoundCB dcomp_handle_bound_cb,
- CompositionParamsReceivedCB comp_params_received_cb,
- InitCB init_cb) = 0;
-
- // Called whenever the video's natural size changes.
- virtual void UpdateTextureSize(const gfx::Size& natural_size) = 0;
-
- // Sets the DirectComposition surface identified by `surface_token`.
- virtual void SetDCOMPSurface(const base::UnguessableToken& surface_token) = 0;
+ // Initializes the DCOMPTexture and returns success/failure.
+ using OutputRectChangeCB = base::RepeatingCallback<void(gfx::Rect)>;
+ virtual bool Initialize(const gfx::Size& output_size,
+ OutputRectChangeCB output_rect_change_cb) = 0;
+
+ // Called whenever the video's output size changes.
+ virtual void UpdateTextureSize(const gfx::Size& output_size) = 0;
+
+ // Sets the DirectComposition surface identified by `token`.
+ using SetDCOMPSurfaceHandleCB = base::OnceCallback<void(bool)>;
+ virtual void SetDCOMPSurfaceHandle(
+ const base::UnguessableToken& token,
+ SetDCOMPSurfaceHandleCB set_dcomp_surface_handle_cb) = 0;
// Creates VideoFrame which will be returned in `create_video_frame_cb`.
using CreateVideoFrameCB =
base::OnceCallback<void(scoped_refptr<VideoFrame>)>;
- virtual void CreateVideoFrame(CreateVideoFrameCB create_video_frame_cb) = 0;
+ virtual void CreateVideoFrame(const gfx::Size& natural_size,
+ CreateVideoFrameCB create_video_frame_cb) = 0;
};
} // namespace media
diff --git a/chromium/media/base/win/dxgi_device_manager.cc b/chromium/media/base/win/dxgi_device_manager.cc
index 33226904288..921669b1c8c 100644
--- a/chromium/media/base/win/dxgi_device_manager.cc
+++ b/chromium/media/base/win/dxgi_device_manager.cc
@@ -95,6 +95,8 @@ HRESULT DXGIDeviceManager::ResetDevice() {
kDeviceFlags, nullptr, 0, D3D11_SDK_VERSION,
&d3d_device, nullptr, nullptr);
RETURN_ON_HR_FAILURE(hr, "D3D11 device creation failed", hr);
+ RETURN_ON_HR_FAILURE(
+ hr, media::SetDebugName(d3d_device.Get(), "Media_DXGIDeviceManager"), hr);
// Since FrameServerClient background threads in the video capture process
// call EnqueueSetEvent on Chromium's D3D11 device at the same time that
// Chromium is actively using it in a worker thread, we need to protect access
diff --git a/chromium/media/base/win/mf_helpers.cc b/chromium/media/base/win/mf_helpers.cc
index 37cf1183709..be610b58562 100644
--- a/chromium/media/base/win/mf_helpers.cc
+++ b/chromium/media/base/win/mf_helpers.cc
@@ -10,6 +10,18 @@
namespace media {
+namespace {
+
+// ID3D11DeviceChild, IDXGIObject and ID3D11Device implement SetPrivateData with
+// the exact same parameters.
+template <typename T>
+HRESULT SetDebugNameInternal(T* d3d11_object, const char* debug_string) {
+ return d3d11_object->SetPrivateData(WKPDID_D3DDebugObjectName,
+ strlen(debug_string), debug_string);
+}
+
+} // namespace
+
Microsoft::WRL::ComPtr<IMFSample> CreateEmptySampleWithBuffer(
uint32_t buffer_length,
int align) {
@@ -70,8 +82,15 @@ HRESULT CopyCoTaskMemWideString(LPCWSTR in_string, LPWSTR* out_string) {
HRESULT SetDebugName(ID3D11DeviceChild* d3d11_device_child,
const char* debug_string) {
- return d3d11_device_child->SetPrivateData(WKPDID_D3DDebugObjectName,
- strlen(debug_string), debug_string);
+ return SetDebugNameInternal(d3d11_device_child, debug_string);
+}
+
+HRESULT SetDebugName(ID3D11Device* d3d11_device, const char* debug_string) {
+ return SetDebugNameInternal(d3d11_device, debug_string);
+}
+
+HRESULT SetDebugName(IDXGIObject* dxgi_object, const char* debug_string) {
+ return SetDebugNameInternal(dxgi_object, debug_string);
}
} // namespace media
diff --git a/chromium/media/base/win/mf_helpers.h b/chromium/media/base/win/mf_helpers.h
index 6bebf0310f5..3fd615fdac9 100644
--- a/chromium/media/base/win/mf_helpers.h
+++ b/chromium/media/base/win/mf_helpers.h
@@ -14,6 +14,8 @@
#include "media/base/win/mf_initializer_export.h"
struct ID3D11DeviceChild;
+struct ID3D11Device;
+struct IDXGIObject;
namespace media {
@@ -60,6 +62,10 @@ CreateEmptySampleWithBuffer(uint32_t buffer_length, int align);
class MF_INITIALIZER_EXPORT MediaBufferScopedPointer {
public:
explicit MediaBufferScopedPointer(IMFMediaBuffer* media_buffer);
+
+ MediaBufferScopedPointer(const MediaBufferScopedPointer&) = delete;
+ MediaBufferScopedPointer& operator=(const MediaBufferScopedPointer&) = delete;
+
~MediaBufferScopedPointer();
uint8_t* get() { return buffer_; }
@@ -71,8 +77,6 @@ class MF_INITIALIZER_EXPORT MediaBufferScopedPointer {
uint8_t* buffer_;
DWORD max_length_;
DWORD current_length_;
-
- DISALLOW_COPY_AND_ASSIGN(MediaBufferScopedPointer);
};
// Copies |in_string| to |out_string| that is allocated with CoTaskMemAlloc().
@@ -83,6 +87,11 @@ MF_INITIALIZER_EXPORT HRESULT CopyCoTaskMemWideString(LPCWSTR in_string,
// D3D11 retains the string passed to this function.
MF_INITIALIZER_EXPORT HRESULT
SetDebugName(ID3D11DeviceChild* d3d11_device_child, const char* debug_string);
+MF_INITIALIZER_EXPORT HRESULT SetDebugName(ID3D11Device* d3d11_device,
+ const char* debug_string);
+MF_INITIALIZER_EXPORT HRESULT SetDebugName(IDXGIObject* dxgi_object,
+ const char* debug_string);
+
} // namespace media
#endif // MEDIA_BASE_WIN_MF_HELPERS_H_