Migrate TODOs referencing old crbug IDs to the new issue tracker IDs
The canonical bug format is TODO(crbug.com/<id>). TODOs of the following forms will all be migrated to the new format: - TODO(crbug.com/<old id>) - TODO(https://crbug.com/<old id>) - TODO(crbug/<old id>) - TODO(crbug/monorail/<old id>) - TODO(<old id>) - TODO(issues.chromium.org/<old id>) - TODO(https://issues.chromium.org/<old id>) - TODO(https://issues.chromium.org/u/1/issues/<old id>) - TODO(bugs.chromium.org/<old id>) Bug id mapping is sourced from go/chrome-on-buganizer-prod-issues. See go/crbug-todo-migration for details. #crbug-todo-migration Bug: b/321899722 Change-Id: I050f2f811b9f50e8aa29d2474da33746d17d59fb Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5494188 Owners-Override: Alison Gale <agale@chromium.org> Auto-Submit: Alison Gale <agale@chromium.org> Reviewed-by: Peter Boström <pbos@chromium.org> Commit-Queue: Peter Boström <pbos@chromium.org> Cr-Commit-Position: refs/heads/main@{#1293300}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
2c7aee3593
commit
71bd8f1596
media
audio
base
android
java
src
org
capture
cast
cdm
ffmpeg
filters
chunk_demuxer.ccchunk_demuxer_unittest.ccdemuxer_manager.ccffmpeg_demuxer_unittest.cchls_data_source_provider.hhls_manifest_demuxer_engine.cchls_rendition_impl.ccmanifest_demuxer.ccstream_parser_factory.cc
formats
BUILD.gn
hls
audio_rendition.ccmedia_playlist.ccmedia_playlist_unittest.ccmultivariant_playlist.ccplaylist_common.ccrendition_manager.ccsegment_stream.cctags_unittest.cctypes.cc
mp2t
mp4
mpeg
webcodecs
webm
fuchsia
gpu
android
chromeos
mac
video_toolbox_av1_accelerator.ccvideo_toolbox_decompression_metadata.hvideo_toolbox_decompression_session_manager.mmvideo_toolbox_frame_converter.ccvideo_toolbox_h264_accelerator.ccvideo_toolbox_h265_accelerator.ccvideo_toolbox_video_decoder.ccvideo_toolbox_vp9_accelerator.cc
test
v4l2
vaapi
BUILD.gnvaapi_jpeg_decoder.ccvaapi_jpeg_decoder_unittest.ccvaapi_video_decoder.ccvaapi_video_encode_accelerator.ccvaapi_wrapper.cc
windows
mojo
clients
muxers
remoting
renderers
video
webrtc
mojo
core
embedder
invitation_unittest.ccipcz_driver
message_pipe_unittest.ccmessage_unittest.ccplatform_wrapper_unittest.ccshared_buffer_unittest.ccpublic
cpp
rust
tools
bindings
generators
mojom
net
android
java
src
org
chromium
base
cert
cert_verify_proc_builtin.cccert_verify_proc_builtin.hcert_verify_proc_unittest.cc
internal
nss_cert_database.ccnss_cert_database.hcookies
canonical_cookie.cccanonical_cookie.hcanonical_cookie_unittest.cccookie_inclusion_status.hcookie_monster.ccparsed_cookie.ccparsed_cookie_unittest.cc
disk_cache
dns
BUILD.gndns_alias_utility_unittest.ccdns_client.hdns_config_service_fuchsia.ccdns_hosts.ccdns_reloader.ccdns_response_result_extractor.ccfuzzed_host_resolver_util.cchost_cache.hhost_resolver.hhost_resolver_dns_task.cchost_resolver_dns_task.hhost_resolver_manager.cchost_resolver_manager_job.cchost_resolver_manager_unittest.cchost_resolver_mdns_task.cchttpssvc_metrics.cchttpssvc_metrics.hmock_host_resolver.cc
public
resolve_context.ccresolve_context.hresolve_context_unittest.ccsystem_dns_config_change_notifier.hextras
http
http_cache_transaction.cchttp_network_transaction.cchttp_network_transaction_unittest.cchttp_proxy_connect_job.cchttp_proxy_connect_job_unittest.cchttp_response_headers.cchttp_response_info.hhttp_stream_factory_job.cchttp_stream_factory_unittest.cchttp_transaction.h
log
proxy_resolution
quic
quic_proxy_client_socket_unittest.ccquic_proxy_datagram_client_socket.ccquic_session_pool.ccquic_session_pool_direct_job.ccquic_session_pool_test.cc
reporting
reporting_cache_impl.ccreporting_cache_unittest.ccreporting_endpoint.hreporting_garbage_collector.cc
socket
client_socket_pool.ccclient_socket_pool.hclient_socket_pool_manager.ccconnect_job_factory.hconnect_job_params_factory.ccsocket_bio_adapter.cctransport_client_socket_pool.cctransport_connect_job.cctransport_connect_job_unittest.ccudp_socket_unittest.cc
spdy
bidirectional_stream_spdy_impl.ccspdy_http_utils.hspdy_network_transaction_unittest.ccspdy_session_pool.ccspdy_session_pool_unittest.cc
test
embedded_test_server
tools
cert_verify_tool
root_store_tool
url_request
websockets
pdf
printing
remoting
client
display
codec
host
client_session.ccevaluate_capability.ccipc_screen_controls.cc
linux
mac
resizing_host_observer.ccx11_crtc_resizer.ccx11_desktop_resizer.ccios
protocol
sandbox
policy
win
services
device
image_annotation
media_session
public
cpp
network
cors
cors_url_loader.cccors_url_loader_private_network_access_unittest.ccpreflight_controller.hpreflight_result.h
host_resolver.ccip_protection
network_service_memory_cache.ccnetwork_service_memory_cache.hnetwork_service_memory_cache_unittest.ccproxy_resolving_client_socket_factory.ccproxy_resolving_client_socket_unittest.ccpublic
cpp
mojom
resource_scheduler
restricted_cookie_manager.ccshared_storage
url_loader.ccurl_loader_unittest.ccurl_request_context_builder_mojo.ccweb_bundle
web_transport.ccproxy_resolver_win
resource_coordinator
memory_instrumentation
screen_ai
service_manager
tracing
public
viz
public
cpp
compositing
webnn
skia/ext
sql
storage
browser
blob
blob_storage_constants.hblob_url_registry.ccblob_url_registry.hblob_url_store_impl.ccblob_url_store_impl.h
file_system
dragged_file_util_unittest.ccfile_system_operation_impl_unittest.ccfile_system_url.hlocal_file_util_unittest.ccnative_file_util_unittest.ccobfuscated_file_util_unittest.ccsandbox_file_system_backend_delegate_unittest.ccsandbox_file_system_backend_unittest.cc
quota
common
database
testing
buildbot
filters
fuchsia.browser_tests.filterios.compositor_unittests.filterlinux-lacros.components_unittests.filterlinux-lacros.content_browsertests.filterlinux-lacros.interactive_ui_tests.filterlinux-lacros.interactive_ui_tests.skew.filterlinux-lacros.sync_integration_tests.filterlinux-lacros.unit_tests.filterozone-linux.interactive_ui_tests_wayland.filter
generate_buildbot_json.pytest_suite_exceptions.pylwaterfalls.pylflake_suppressor_common
libfuzzer
merge_scripts
code_coverage
rust_gtest_interop
scripts
unexpected_passes_common
ui
accessibility
ax_language_detection_unittest.ccax_node_position_unittest.ccax_position.hax_role_properties.cc
platform
android
aura
base
clipboard
dragdrop
idle
ime
resource
shortcut_mapping_pref_delegate.htest
ui_base_features.ccui_base_types.hx
compositor
display
events
file_manager
file_manager
background
foreground
integration_tests
file_manager
gfx
animation
animation.ccanimation_android.ccanimation_mac.mmanimation_runner.ccanimation_runner.hanimation_win.cc
color_transform_unittest.cckeyframe
geometry
gpu_memory_buffer.ccgpu_memory_buffer.himage
native_widget_types.hrender_text.ccrender_text.hrender_text_api_fuzzer.ccrender_text_harfbuzz.ccrender_text_unittest.ccskia_color_space_util.hskia_paint_util.ccgl
latency
native_theme
native_theme_android.hnative_theme_aura.ccnative_theme_base.ccnative_theme_base.hnative_theme_fluent.ccnative_theme_ios.h
ozone
platform
drm
common
gpu
flatland
wayland
host
wayland_clipboard.ccwayland_clipboard_unittest.ccwayland_cursor_factory_unittest.ccwayland_data_device_base.hwayland_data_drag_controller.hwayland_exchange_data_provider.ccwayland_input_method_context.ccwayland_pointer.ccwayland_subsurface.ccwayland_touch.ccwayland_window.ccwayland_window_drag_controller.ccwayland_window_drag_controller.hwayland_window_drag_controller_unittest.ccwayland_window_factory.cc
test
x11
platform_window
shell_dialogs
snapshot
views
accessibility
accessibility_paint_checks.ccview_ax_platform_node_delegate_auralinux.ccview_ax_platform_node_delegate_unittest.ccviews_utilities_aura.ccviews_utilities_aura.h
bubble
cocoa
color_chooser
controls
button
focus_ring.cclabel.cclabel_unittest.ccmessage_box_view.ccprefix_selector.ccscroll_view.ccscroll_view.htextfield
tree
corewm
examples
layout
test
vector_icons
view.hwidget
desktop_aura
desktop_native_widget_aura.ccdesktop_native_widget_aura_unittest.ccdesktop_window_tree_host_lacros.ccdesktop_window_tree_host_platform.cc
native_widget_aura.ccroot_view.ccsublevel_manager_unittest.ccwidget.hwin
window
wm
url
@ -226,7 +226,7 @@ bool AUHALStream::Open() {
|
||||
audio_unit_->audio_unit(), device_, kAudioObjectPropertyScopeOutput,
|
||||
params_.sample_rate(), /*is_input=*/false);
|
||||
#else
|
||||
// TODO(crbug.com/1413450): Implement me.
|
||||
// TODO(crbug.com/40255660): Implement me.
|
||||
hardware_latency_ = base::TimeDelta();
|
||||
#endif
|
||||
}
|
||||
|
@ -130,7 +130,7 @@ class MacAudioInputTest : public testing::Test {
|
||||
|
||||
bool InputDevicesAvailable() {
|
||||
#if BUILDFLAG(IS_APPLE) && defined(ARCH_CPU_ARM64)
|
||||
// TODO(crbug.com/1128458): macOS on ARM64 says it has devices, but won't
|
||||
// TODO(crbug.com/40719640): macOS on ARM64 says it has devices, but won't
|
||||
// let any of them be opened or listed.
|
||||
return false;
|
||||
#else
|
||||
|
@ -151,7 +151,7 @@ class AudioInputTest : public testing::TestWithParam<bool> {
|
||||
}
|
||||
return true;
|
||||
#elif BUILDFLAG(IS_MAC) && defined(ARCH_CPU_ARM64)
|
||||
// TODO(crbug.com/1128458): macOS on ARM64 says it has devices, but won't
|
||||
// TODO(crbug.com/40719640): macOS on ARM64 says it has devices, but won't
|
||||
// let any of them be opened or listed.
|
||||
return false;
|
||||
#else
|
||||
@ -273,7 +273,7 @@ TEST_P(AudioInputTest, CreateAndClose) {
|
||||
}
|
||||
|
||||
// Test create, open and close of an AudioInputStream without recording audio.
|
||||
// TODO(crbug.com/1429490): This test is failing on ios-blink-dbg-fyi bot.
|
||||
// TODO(crbug.com/40262701): This test is failing on ios-blink-dbg-fyi bot.
|
||||
#if BUILDFLAG(IS_IOS)
|
||||
#define MAYBE_OpenAndClose DISABLED_OpenAndClose
|
||||
#else
|
||||
@ -290,7 +290,7 @@ TEST_P(AudioInputTest, MAYBE_OpenAndClose) {
|
||||
}
|
||||
|
||||
// Test create, open, stop and close of an AudioInputStream without recording.
|
||||
// TODO(crbug.com/1429490): This test is failing on ios-blink-dbg-fyi bot.
|
||||
// TODO(crbug.com/40262701): This test is failing on ios-blink-dbg-fyi bot.
|
||||
#if BUILDFLAG(IS_IOS)
|
||||
#define MAYBE_OpenStopAndClose DISABLED_OpenStopAndClose
|
||||
#else
|
||||
@ -308,7 +308,7 @@ TEST_P(AudioInputTest, MAYBE_OpenStopAndClose) {
|
||||
|
||||
// Test a normal recording sequence using an AudioInputStream.
|
||||
// Very simple test which starts capturing and verifies that recording starts.
|
||||
// TODO(crbug.com/1429490): This test is failing on ios-blink-dbg-fyi bot.
|
||||
// TODO(crbug.com/40262701): This test is failing on ios-blink-dbg-fyi bot.
|
||||
#if BUILDFLAG(IS_IOS)
|
||||
#define MAYBE_Record DISABLED_Record
|
||||
#else
|
||||
|
@ -218,7 +218,7 @@ class AudioManagerTest : public ::testing::Test {
|
||||
|
||||
bool InputDevicesAvailable() {
|
||||
#if BUILDFLAG(IS_MAC) && defined(ARCH_CPU_ARM64)
|
||||
// TODO(crbug.com/1128458): macOS on ARM64 says it has devices, but won't
|
||||
// TODO(crbug.com/40719640): macOS on ARM64 says it has devices, but won't
|
||||
// let any of them be opened or listed.
|
||||
return false;
|
||||
#else
|
||||
|
@ -77,7 +77,7 @@ void AudioManagerFuchsia::GetAudioOutputDeviceNames(
|
||||
|
||||
AudioParameters AudioManagerFuchsia::GetInputStreamParameters(
|
||||
const std::string& device_id) {
|
||||
// TODO(crbug.com/852834): Fuchsia currently doesn't provide an API to get
|
||||
// TODO(crbug.com/42050621): Fuchsia currently doesn't provide an API to get
|
||||
// device configuration and supported effects. Update this method when that
|
||||
// functionality is implemented.
|
||||
//
|
||||
@ -124,7 +124,7 @@ AudioParameters AudioManagerFuchsia::GetPreferredOutputStreamParameters(
|
||||
return params;
|
||||
}
|
||||
|
||||
// TODO(crbug.com/852834): Fuchsia currently doesn't provide an API to get
|
||||
// TODO(crbug.com/42050621): Fuchsia currently doesn't provide an API to get
|
||||
// device configuration. Update this method when that functionality is
|
||||
// implemented.
|
||||
const int kSampleRate = 48000;
|
||||
@ -157,7 +157,7 @@ AudioOutputStream* AudioManagerFuchsia::MakeLowLatencyOutputStream(
|
||||
|
||||
if (!device_id.empty() &&
|
||||
device_id != AudioDeviceDescription::kDefaultDeviceId) {
|
||||
// TODO(crbug.com/852834): Fuchsia currently doesn't provide an API to
|
||||
// TODO(crbug.com/42050621): Fuchsia currently doesn't provide an API to
|
||||
// specify a device to use.
|
||||
LOG(ERROR) << "Specifying not default output device (" << device_id
|
||||
<< ") is not implemented.";
|
||||
@ -196,7 +196,7 @@ AudioInputStream* AudioManagerFuchsia::MakeInputStream(
|
||||
if (!device_id.empty() &&
|
||||
device_id != AudioDeviceDescription::kDefaultDeviceId &&
|
||||
device_id != AudioDeviceDescription::kLoopbackInputDeviceId) {
|
||||
// TODO(crbug.com/852834): Fuchsia currently doesn't provide an API to
|
||||
// TODO(crbug.com/42050621): Fuchsia currently doesn't provide an API to
|
||||
// specify a device to use.
|
||||
LOG(ERROR) << "Specifying not default input device (" << device_id
|
||||
<< ") is not implemented.";
|
||||
@ -262,8 +262,8 @@ void AudioManagerFuchsia::GetAudioDevices(AudioDeviceNames* device_names,
|
||||
bool is_input) {
|
||||
DCHECK(GetTaskRunner()->BelongsToCurrentThread());
|
||||
|
||||
// TODO(crbug.com/852834): Fuchsia currently doesn't provide an API to specify
|
||||
// a device to use. Until then only return the default device.
|
||||
// TODO(crbug.com/42050621): Fuchsia currently doesn't provide an API to
|
||||
// specify a device to use. Until then only return the default device.
|
||||
device_names->clear();
|
||||
if (HasAudioDevice(is_input)) {
|
||||
*device_names = {AudioDeviceName::CreateDefault()};
|
||||
|
@ -24,7 +24,7 @@ namespace media {
|
||||
// iOS implementation of the AudioManager singleton. This class is internal
|
||||
// to the audio output and only internal users can call methods not exposed by
|
||||
// the AudioManager class.
|
||||
// TODO(crbug.com/1413450): Fill this implementation out.
|
||||
// TODO(crbug.com/40255660): Fill this implementation out.
|
||||
class MEDIA_EXPORT AudioManagerIOS : public AudioManagerApple {
|
||||
public:
|
||||
AudioManagerIOS(std::unique_ptr<AudioThread> audio_thread,
|
||||
|
@ -53,7 +53,7 @@ PulseAudioInputStream::PulseAudioInputStream(
|
||||
CHECK(params_.IsValid());
|
||||
SendLogMessage("%s({device_id=%s}, {params=[%s]})", __func__,
|
||||
source_name.c_str(), params.AsHumanReadableString().c_str());
|
||||
// TODO(crbug.com/1480216): PulseLoopbackAudioStream gives
|
||||
// TODO(crbug.com/40281249): PulseLoopbackAudioStream gives
|
||||
// PulseAudioInputStream a nullptr for `audio_manager`, which is risky.
|
||||
// Refactor such that this is not the case, or separate the
|
||||
// AudioManager-independent logic into a "PulseUnmanagedAudioInputStream".
|
||||
|
@ -39,7 +39,7 @@ std::unique_ptr<PulseLoopbackManager> PulseLoopbackManager::Create(
|
||||
pa_context_set_subscribe_callback(manager->context_, &EventCallback,
|
||||
manager.get());
|
||||
|
||||
// TODO(crbug.com/1480216): Check if subscription was reported as successful
|
||||
// TODO(crbug.com/40281249): Check if subscription was reported as successful
|
||||
// in pulse::ContextSuccessCallback.
|
||||
pa_operation* operation =
|
||||
pa_context_subscribe(manager->context_, PA_SUBSCRIPTION_MASK_SERVER,
|
||||
@ -141,7 +141,7 @@ void PulseLoopbackManager::OnServerChangeEvent() {
|
||||
|
||||
for (PulseLoopbackAudioStream* stream : streams_) {
|
||||
stream->ChangeStreamSource(default_monitor_name_);
|
||||
// TODO(crbug.com/1480216): Support
|
||||
// TODO(crbug.com/40281249): Support
|
||||
// AudioDeviceDescription::kLoopbackWithMuteDeviceId. Store the original
|
||||
// device name, i.e., AudioDeviceDescription::kLoopback*, and check it here
|
||||
// to determine if muting was requested for any of the streams, and mute the
|
||||
|
@ -283,7 +283,7 @@ class WASAPIAudioInputStream::DataDiscontinuityReporter {
|
||||
if (callback_count_ % kCallbacksPerLogPeriod)
|
||||
return;
|
||||
|
||||
// TODO(https://crbug.com/825744): It can be possible to replace
|
||||
// TODO(crbug.com/41378888): It can be possible to replace
|
||||
// "Media.Audio.Capture.Glitches2" with this new (simplified) metric
|
||||
// instead.
|
||||
base::UmaHistogramCounts1000("Media.Audio.Capture.Win.Glitches2",
|
||||
@ -899,7 +899,7 @@ void WASAPIAudioInputStream::PullCaptureDataAndPushToSink() {
|
||||
// current data packet.
|
||||
bool timestamp_error_was_detected = false;
|
||||
if (flags & AUDCLNT_BUFFERFLAGS_TIMESTAMP_ERROR) {
|
||||
// TODO(https://crbug.com/825744): it might be possible to improve error
|
||||
// TODO(crbug.com/41378888): it might be possible to improve error
|
||||
// handling here and avoid using the counter in |capture_time_100ns|.
|
||||
LOG(WARNING) << "WAIS::" << __func__
|
||||
<< " => (WARNING: AUDCLNT_BUFFERFLAGS_TIMESTAMP_ERROR)";
|
||||
|
@ -77,7 +77,7 @@ class AudioDeviceSelectorPostS extends AudioDeviceSelector {
|
||||
@Override
|
||||
public void setCommunicationAudioModeOn(boolean on) {
|
||||
if (on) {
|
||||
// TODO(crbug.com/1317548): Prompt for BLUETOOTH_CONNECT permission at this point if we
|
||||
// TODO(crbug.com/40222537): Prompt for BLUETOOTH_CONNECT permission at this point if we
|
||||
// don't have it.
|
||||
} else {
|
||||
mDeviceStates.clearRequestedDevice();
|
||||
|
@ -172,7 +172,7 @@ class AudioManagerAndroid {
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO(crbug.com/1317548): Should we exit early if we are already in/out of
|
||||
// TODO(crbug.com/40222537): Should we exit early if we are already in/out of
|
||||
// communication mode?
|
||||
if (on) {
|
||||
// Store microphone mute state and speakerphone state so it can
|
||||
|
@ -162,7 +162,7 @@ class MEDIA_EXPORT AudioDecoderConfig {
|
||||
// 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.
|
||||
// TODO(crbug.com/40198159): 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
|
||||
|
@ -78,7 +78,7 @@ struct MEDIA_EXPORT AudioProcessingSettings {
|
||||
}
|
||||
|
||||
// Deprecated.
|
||||
// TODO(crbug.com/1410129): Use `AudioProcessor::NeedsPlayoutReference()`
|
||||
// TODO(crbug.com/40889535): Use `AudioProcessor::NeedsPlayoutReference()`
|
||||
// instead.
|
||||
bool NeedPlayoutReference() const {
|
||||
return echo_cancellation || automatic_gain_control;
|
||||
|
@ -65,7 +65,7 @@ class MEDIA_EXPORT BitstreamBuffer {
|
||||
scoped_refptr<DecoderBuffer> ToDecoderBuffer();
|
||||
scoped_refptr<DecoderBuffer> ToDecoderBuffer(off_t offset, size_t size);
|
||||
|
||||
// TODO(crbug.com/813845): As this is only used by Android, include
|
||||
// TODO(crbug.com/40563697): As this is only used by Android, include
|
||||
// EncryptionScheme and optional EncryptionPattern when updating for Android.
|
||||
void SetDecryptionSettings(const std::string& key_id,
|
||||
const std::string& iv,
|
||||
|
@ -18,7 +18,7 @@ ByteQueue::ByteQueue() {
|
||||
|
||||
// Though ::Push() is allowed to fail memory allocation for `buffer_`, do not
|
||||
// allow memory allocation failure here during ByteQueue construction.
|
||||
// TODO(crbug.com/1266639): Consider refactoring to an Initialize() method
|
||||
// TODO(crbug.com/40204179): Consider refactoring to an Initialize() method
|
||||
// that does this allocation and that can indicate failure, so callers can
|
||||
// more gracefully handle the former OOM case that now fails this CHECK. For
|
||||
// example, some StreamParsers create additional ByteQueues during Parse, so
|
||||
|
@ -13,7 +13,7 @@ namespace media {
|
||||
|
||||
// Interface that groups all the necessary hooks to control media that is being
|
||||
// flung to a cast device, as part of RemotePlayback.
|
||||
// TODO(https://crbug.com/820277): Rename this interface to MediaRouteController
|
||||
// TODO(crbug.com/41375562): Rename this interface to MediaRouteController
|
||||
// and change media_router::MediaRouteController to MojoMediaRouteController.
|
||||
class FlingingController {
|
||||
public:
|
||||
|
@ -57,7 +57,7 @@ class MEDIA_EXPORT KeySystemInfo {
|
||||
// HW secure; if null then there is no HW secure requirement to apply. This
|
||||
// does not imply that `requested_robustness` should be ignored, both rules
|
||||
// must be applied.
|
||||
// TODO(crbug.com/1204284): Refactor this and remove the
|
||||
// TODO(crbug.com/40179944): Refactor this and remove the
|
||||
// `hw_secure_requirement` argument.
|
||||
virtual EmeConfig::Rule GetRobustnessConfigRule(
|
||||
const std::string& key_system,
|
||||
|
@ -68,7 +68,7 @@ class MEDIA_EXPORT KeySystems {
|
||||
// HW secure; if null then there is no HW secure requirement to apply. This
|
||||
// does not imply that `requested_robustness` should be ignored, both rules
|
||||
// must be applied.
|
||||
// TODO(crbug.com/1204284): Refactor this and remove the
|
||||
// TODO(crbug.com/40179944): Refactor this and remove the
|
||||
// `hw_secure_requirement` argument.
|
||||
virtual EmeConfig::Rule GetRobustnessConfigRule(
|
||||
const std::string& key_system,
|
||||
|
@ -12,7 +12,7 @@ namespace media {
|
||||
// Describes the current state of media being controlled via the
|
||||
// FlingingController interface. This is a copy of
|
||||
// media_router.mojom.MediaStatus interface, without the cast specific portions.
|
||||
// TODO(https://crbug.com/820277): Deduplicate media_router::MediaStatus.
|
||||
// TODO(crbug.com/41375562): Deduplicate media_router::MediaStatus.
|
||||
class MediaStatusObserver {
|
||||
public:
|
||||
virtual ~MediaStatusObserver() = default;
|
||||
|
@ -109,7 +109,7 @@ const char kMinVideoDecoderOutputBufferSize[] =
|
||||
|
||||
// Forces AudioManagerFuchsia to assume that the AudioCapturer implements echo
|
||||
// cancellation.
|
||||
// TODO(crbug.com/852834): Remove this once AudioManagerFuchsia is updated to
|
||||
// TODO(crbug.com/42050621): Remove this once AudioManagerFuchsia is updated to
|
||||
// get this information from AudioCapturerFactory.
|
||||
const char kAudioCapturerWithEchoCancellation[] =
|
||||
"audio-capturer-with-echo-cancellation";
|
||||
|
@ -885,7 +885,7 @@ bool MimeUtil::ParseCodecHelper(std::string_view mime_type_lower_case,
|
||||
return true;
|
||||
}
|
||||
|
||||
// TODO(https://crbug.com/1117275): Remove buildflags for parsing functions; we
|
||||
// TODO(crbug.com/40145071): Remove buildflags for parsing functions; we
|
||||
// shouldn't be combining codec support and parsing support.
|
||||
#if BUILDFLAG(ENABLE_PLATFORM_MPEG_H_AUDIO)
|
||||
if (base::StartsWith(codec_id, "mhm1.", base::CompareCase::SENSITIVE) ||
|
||||
|
@ -26,7 +26,7 @@
|
||||
namespace media::internal {
|
||||
|
||||
#if BUILDFLAG(USE_PROPRIETARY_CODECS)
|
||||
// TODO(https://crbug.com/1117275): Remove conditioning of kUsePropCodecs when
|
||||
// TODO(crbug.com/40145071): Remove conditioning of kUsePropCodecs when
|
||||
// testing *parsing* functions.
|
||||
const bool kUsePropCodecs = true;
|
||||
#else
|
||||
|
@ -132,7 +132,7 @@ __attribute__((target("avx2"))) void FMUL_AVX2(const float src[],
|
||||
const int rem = len % 8;
|
||||
const int last_index = len - rem;
|
||||
__m256 m_scale = _mm256_set1_ps(scale);
|
||||
// TODO(crbug.com/1191301): Remove below alignment conditionals when AudioBus
|
||||
// TODO(crbug.com/40756517): Remove below alignment conditionals when AudioBus
|
||||
// |kChannelAlignment| updated to 32.
|
||||
bool aligned_src = (reinterpret_cast<uintptr_t>(src) & 0x1F) == 0;
|
||||
bool aligned_dest = (reinterpret_cast<uintptr_t>(dest) & 0x1F) == 0;
|
||||
@ -184,7 +184,7 @@ __attribute__((target("avx2,fma"))) void FMAC_AVX2(const float src[],
|
||||
const int rem = len % 8;
|
||||
const int last_index = len - rem;
|
||||
__m256 m_scale = _mm256_set1_ps(scale);
|
||||
// TODO(crbug.com/1191301): Remove below alignment conditionals when AudioBus
|
||||
// TODO(crbug.com/40756517): Remove below alignment conditionals when AudioBus
|
||||
// |kChannelAlignment| updated to 32.
|
||||
bool aligned_src = (reinterpret_cast<uintptr_t>(src) & 0x1F) == 0;
|
||||
bool aligned_dest = (reinterpret_cast<uintptr_t>(dest) & 0x1F) == 0;
|
||||
|
@ -32,7 +32,7 @@ class MEDIA_EXPORT VideoAspectRatio {
|
||||
VideoAspectRatio() = default;
|
||||
|
||||
// Create a VideoAspectRatio from a known |natural_size|.
|
||||
// TODO(crbug.com/1214061): Remove.
|
||||
// TODO(crbug.com/40769111): Remove.
|
||||
VideoAspectRatio(const gfx::Rect& visible_rect,
|
||||
const gfx::Size& natural_size);
|
||||
|
||||
|
@ -837,7 +837,7 @@ std::optional<VideoType> ParseVVCCodecId(std::string_view codec_id) {
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
// TODO(crbug.com/1417910): Add VideoCodec::kVVC here when its ready.
|
||||
// TODO(crbug.com/40257449): Add VideoCodec::kVVC here when its ready.
|
||||
VideoType result = {
|
||||
.codec = VideoCodec::kUnknown,
|
||||
.profile = out_profile,
|
||||
|
@ -103,7 +103,7 @@ class MEDIA_EXPORT VideoDecoderConfig {
|
||||
}
|
||||
|
||||
// DEPRECATED: Use aspect_ratio().GetNaturalSize().
|
||||
// TODO(crbug.com/1214061): Remove.
|
||||
// TODO(crbug.com/40769111): Remove.
|
||||
// Final visible width and height of a video frame with aspect ratio taken
|
||||
// into account. Image data in the visible_rect() should be scaled to this
|
||||
// size for display.
|
||||
|
@ -1439,7 +1439,7 @@ const uint8_t* VideoFrame::visible_data(size_t plane) const {
|
||||
}
|
||||
|
||||
uint8_t* VideoFrame::GetWritableVisibleData(size_t plane) {
|
||||
// TODO(crbug.com/1435549): Also CHECK that the storage type isn't
|
||||
// TODO(crbug.com/40265179): Also CHECK that the storage type isn't
|
||||
// STORAGE_UNOWNED_MEMORY once non-compliant usages are fixed.
|
||||
CHECK_NE(storage_type_, STORAGE_SHMEM);
|
||||
return GetVisibleDataInternal(writable_data(plane), plane);
|
||||
|
@ -612,7 +612,7 @@ class MEDIA_EXPORT VideoFrame : public base::RefCountedThreadSafe<VideoFrame> {
|
||||
return data_[plane];
|
||||
}
|
||||
uint8_t* writable_data(size_t plane) {
|
||||
// TODO(crbug.com/1435549): Also CHECK that the storage type isn't
|
||||
// TODO(crbug.com/40265179): Also CHECK that the storage type isn't
|
||||
// STORAGE_UNOWNED_MEMORY once non-compliant usages are fixed.
|
||||
CHECK_NE(storage_type_, STORAGE_SHMEM);
|
||||
CHECK(IsValidPlane(format(), plane));
|
||||
|
@ -120,9 +120,9 @@ std::optional<VideoFrameLayout> VideoFrameLayout::CreateWithPlanes(
|
||||
size_t buffer_addr_align,
|
||||
uint64_t modifier) {
|
||||
// NOTE: Even if format is UNKNOWN, it is valid if coded_sizes is not Empty().
|
||||
// TODO(crbug.com/896135): Return std::nullopt,
|
||||
// TODO(crbug.com/41421131): Return std::nullopt,
|
||||
// if (format != PIXEL_FORMAT_UNKNOWN || !coded_sizes.IsEmpty())
|
||||
// TODO(crbug.com/896135): Return std::nullopt,
|
||||
// TODO(crbug.com/41421131): Return std::nullopt,
|
||||
// if (planes.size() != NumPlanes(format))
|
||||
return VideoFrameLayout(format, coded_size, std::move(planes),
|
||||
false /*is_multi_planar */, buffer_addr_align,
|
||||
@ -136,9 +136,9 @@ std::optional<VideoFrameLayout> VideoFrameLayout::CreateMultiPlanar(
|
||||
size_t buffer_addr_align,
|
||||
uint64_t modifier) {
|
||||
// NOTE: Even if format is UNKNOWN, it is valid if coded_sizes is not Empty().
|
||||
// TODO(crbug.com/896135): Return std::nullopt,
|
||||
// TODO(crbug.com/41421131): Return std::nullopt,
|
||||
// if (format != PIXEL_FORMAT_UNKNOWN || !coded_sizes.IsEmpty())
|
||||
// TODO(crbug.com/896135): Return std::nullopt,
|
||||
// TODO(crbug.com/41421131): Return std::nullopt,
|
||||
// if (planes.size() != NumPlanes(format))
|
||||
return VideoFrameLayout(format, coded_size, std::move(planes),
|
||||
true /*is_multi_planar */, buffer_addr_align,
|
||||
|
@ -543,7 +543,7 @@ test("capture_unittests") {
|
||||
deps += [ "//chromeos/dbus/power" ]
|
||||
}
|
||||
|
||||
# TODO(https://crbug.com/1043007): use is_linux.
|
||||
# TODO(crbug.com/40115082): use is_linux.
|
||||
if (is_chromeos_ash) {
|
||||
deps += [ "//media/gpu/test:local_gpu_memory_buffer_manager" ]
|
||||
}
|
||||
|
@ -66,14 +66,14 @@
|
||||
// We will always get YUYV from the Mac AVFoundation implementations.
|
||||
#define MAYBE_UsingRealWebcam_CaptureMjpeg DISABLED_UsingRealWebcam_CaptureMjpeg
|
||||
|
||||
// TODO(crbug.com/1128470): Re-enable as soon as issues with resource access
|
||||
// TODO(crbug.com/40148984): Re-enable as soon as issues with resource access
|
||||
// are fixed.
|
||||
#define MAYBE_UsingRealWebcam_TakePhoto DISABLED_UsingRealWebcam_TakePhoto
|
||||
// TODO(crbug.com/1128470): Re-enable as soon as issues with resource access
|
||||
// TODO(crbug.com/40148984): Re-enable as soon as issues with resource access
|
||||
// are fixed.
|
||||
#define MAYBE_UsingRealWebcam_GetPhotoState \
|
||||
DISABLED_UsingRealWebcam_GetPhotoState
|
||||
// TODO(crbug.com/1128470): Re-enable as soon as issues with resource access
|
||||
// TODO(crbug.com/40148984): Re-enable as soon as issues with resource access
|
||||
// are fixed.
|
||||
#define MAYBE_UsingRealWebcam_CaptureWithSize \
|
||||
DISABLED_UsingRealWebcam_CaptureWithSize
|
||||
|
@ -9,7 +9,7 @@
|
||||
|
||||
namespace media::cast {
|
||||
|
||||
// TODO(https://crbug.com/1343116): this typedef should be removed and
|
||||
// TODO(crbug.com/40231271): this typedef should be removed and
|
||||
// the openscreen type used directly.
|
||||
using FrameId = openscreen::cast::FrameId;
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
|
||||
namespace media::cast {
|
||||
|
||||
// TODO(https://crbug.com/1343116): this typedef should be removed and
|
||||
// TODO(crbug.com/40231271): this typedef should be removed and
|
||||
// the openscreen type used directly.
|
||||
using RtpTimeDelta = openscreen::cast::RtpTimeDelta;
|
||||
using RtpTimeTicks = openscreen::cast::RtpTimeTicks;
|
||||
|
@ -191,7 +191,7 @@ void ConvertAudioDecoderConfigToProto(
|
||||
// protobuf, because it is due to an internal Chrome bug. Instead, use the
|
||||
// "extra_data" field as receivers should expect.
|
||||
//
|
||||
// TODO(crbug.com/1250841): Remove all references to "aac_extra_data" when it
|
||||
// TODO(crbug.com/40198159): Remove all references to "aac_extra_data" when it
|
||||
// is removed as part of a media/ cleanup.
|
||||
#if DCHECK_IS_ON()
|
||||
if (!audio_config.extra_data().empty() &&
|
||||
@ -230,7 +230,7 @@ bool ConvertProtoToAudioDecoderConfig(
|
||||
base::Microseconds(audio_message.seek_preroll_usec()),
|
||||
audio_message.codec_delay());
|
||||
|
||||
// TODO(crbug.com/1250841): Remove all references to "aac_extra_data" when it
|
||||
// TODO(crbug.com/40198159): Remove all references to "aac_extra_data" when it
|
||||
// is removed as part of a media/ cleanup.
|
||||
if (isAac) {
|
||||
audio_config->set_aac_extra_data(
|
||||
|
@ -38,7 +38,7 @@ source_set("cdm") {
|
||||
visibility = [
|
||||
"//media",
|
||||
|
||||
# TODO(crbug.com/583067): These files should not be in //media/base.
|
||||
# TODO(crbug.com/41237623): These files should not be in //media/base.
|
||||
"//media/base/android",
|
||||
"//media/filters",
|
||||
]
|
||||
|
@ -742,7 +742,7 @@ bool AVStreamToVideoDecoderConfig(const AVStream* stream,
|
||||
smpte_st_2086.luminance_min = av_q2d(mdcv->min_luminance);
|
||||
}
|
||||
|
||||
// TODO(https://crbug.com/1446302): Consider rejecting metadata that
|
||||
// TODO(crbug.com/40268540): Consider rejecting metadata that
|
||||
// does not specify all values.
|
||||
if (mdcv->has_primaries || mdcv->has_luminance) {
|
||||
hdr_metadata.smpte_st_2086 = smpte_st_2086;
|
||||
|
@ -1026,7 +1026,7 @@ bool ChunkDemuxer::AppendToParseBuffer(const std::string& id,
|
||||
// then caller would instead tell app QuotaExceededErr synchronous with
|
||||
// the app's appendBuffer() call, instead of async decode error during
|
||||
// async parse.
|
||||
// TODO(crbug.com/1379160): Instrument this path to see if it can be
|
||||
// TODO(crbug.com/40244241): Instrument this path to see if it can be
|
||||
// changed to just NOTREACHED() << state_.
|
||||
return true;
|
||||
}
|
||||
|
@ -1596,7 +1596,7 @@ TEST_F(ChunkDemuxerTest, AppendToParseBufferBeforeInit) {
|
||||
int info_tracks_size = 0;
|
||||
CreateInitSegment(HAS_AUDIO | HAS_VIDEO, false, false, &info_tracks,
|
||||
&info_tracks_size);
|
||||
// TODO(crbug.com/1379160): If it's found this actually never happens in
|
||||
// TODO(crbug.com/40244241): If it's found this actually never happens in
|
||||
// production, via instrumentation, and the underlying code gets a DCHECK or
|
||||
// CHECK added to fail if called before Init(), this test case will need to be
|
||||
// changed. For now, the demuxer silently allows the append to succeed, but
|
||||
|
@ -316,7 +316,7 @@ std::optional<double> DemuxerManager::GetDemuxerDuration() {
|
||||
// TimeDelta with potentially reduced precision (limited to Microseconds).
|
||||
// ChunkDemuxer returns the full-precision user-specified double. This ensures
|
||||
// users can "get" the exact duration they "set".
|
||||
// TODO(crbug/1377053) Get rid of this static cast.
|
||||
// TODO(crbug.com/40243452) Get rid of this static cast.
|
||||
return static_cast<ChunkDemuxer*>(demuxer_.get())->GetDuration();
|
||||
}
|
||||
|
||||
@ -374,7 +374,7 @@ PipelineStatus DemuxerManager::CreateDemuxer(
|
||||
bool needs_first_frame,
|
||||
DemuxerManager::DemuxerCreatedCB on_demuxer_created,
|
||||
base::flat_map<std::string, std::string> headers) {
|
||||
// TODO(crbug/1377053) return a better error
|
||||
// TODO(crbug.com/40243452) return a better error
|
||||
if (!client_) {
|
||||
return DEMUXER_ERROR_COULD_NOT_OPEN;
|
||||
}
|
||||
@ -510,7 +510,7 @@ bool DemuxerManager::WouldTaintOrigin() const {
|
||||
return true;
|
||||
}
|
||||
case HlsFallbackImplementation::kNone: {
|
||||
// TODO(crbug/1377053): The default |false| value might have to be
|
||||
// TODO(crbug.com/40243452): The default |false| value might have to be
|
||||
// re-considered for MediaPlayerRenderer, but for now, leave behavior the
|
||||
// same as it was.
|
||||
return data_source_info_ ? data_source_info_->WouldTaintOrigin() : false;
|
||||
@ -556,15 +556,15 @@ bool DemuxerManager::PassedDataSourceTimingAllowOriginCheck() const {
|
||||
// info, such as DNS lookup time, are not relevant as the media data is far
|
||||
// removed from the network itself at this point, and so that info cannot be
|
||||
// revealed via the MediaSource or WebMediaPlayer that's using MSE.
|
||||
// TODO(1266991): Ensure that this returns the correct value for HLS media,
|
||||
// based on the TAO checks performed on those resources.
|
||||
// TODO(crbug.com/40057824): Ensure that this returns the correct value for
|
||||
// HLS media, based on the TAO checks performed on those resources.
|
||||
return data_source_ ? data_source_->PassedTimingAllowOriginCheck() : true;
|
||||
}
|
||||
|
||||
bool DemuxerManager::IsLiveContent() const {
|
||||
// Manifest demuxer reports true live content accurately, while all other
|
||||
// demuxers do not. TODO(crbug/1266991): Consider making IsSeekable return
|
||||
// an enum class with vod/semi-live/true-live states.
|
||||
// demuxers do not. TODO(crbug.com/40057824): Consider making IsSeekable
|
||||
// return an enum class with vod/semi-live/true-live states.
|
||||
if (GetDemuxerType() == DemuxerType::kManifestDemuxer) {
|
||||
return !demuxer_->IsSeekable();
|
||||
}
|
||||
@ -687,7 +687,7 @@ void DemuxerManager::OnMemoryPressure(
|
||||
// `this` via this->demuxer_. Note the destruction of `demuxer_` is done
|
||||
// from ~WMPI by first hopping to `media_task_runner_` to prevent race with
|
||||
// this task.
|
||||
// TODO(crbug/1377053) Get rid of this static cast.
|
||||
// TODO(crbug.com/40243452) Get rid of this static cast.
|
||||
media_task_runner_->PostTask(
|
||||
FROM_HERE,
|
||||
base::BindOnce(
|
||||
@ -699,7 +699,7 @@ void DemuxerManager::OnMemoryPressure(
|
||||
void DemuxerManager::OnChunkDemuxerOpened() {
|
||||
CHECK(demuxer_);
|
||||
CHECK(demuxer_->GetDemuxerType() == DemuxerType::kChunkDemuxer);
|
||||
// TODO(crbug/1377053) Get rid of this static cast.
|
||||
// TODO(crbug.com/40243452) Get rid of this static cast.
|
||||
if (client_) {
|
||||
client_->OnChunkDemuxerOpened(static_cast<ChunkDemuxer*>(demuxer_.get()));
|
||||
}
|
||||
|
@ -97,7 +97,7 @@ static void EosOnReadDone(bool* got_eos_buffer,
|
||||
base::OnceClosure quit_closure,
|
||||
DemuxerStream::Status status,
|
||||
DemuxerStream::DecoderBufferVector buffers) {
|
||||
// TODO(crbug.com/1347395): add multi read unit tests in next CL.
|
||||
// TODO(crbug.com/40232931): add multi read unit tests in next CL.
|
||||
DCHECK_EQ(buffers.size(), 1u)
|
||||
<< "FFmpegDemuxerTest only reads a single-buffer.";
|
||||
scoped_refptr<DecoderBuffer> buffer = std::move(buffers[0]);
|
||||
@ -217,7 +217,7 @@ class FFmpegDemuxerTest : public testing::Test {
|
||||
base::OnceClosure quit_closure,
|
||||
DemuxerStream::Status status,
|
||||
DemuxerStream::DecoderBufferVector buffers) {
|
||||
// TODO(crbug.com/1347395): add multi read unit tests in next CL.
|
||||
// TODO(crbug.com/40232931): add multi read unit tests in next CL.
|
||||
DCHECK_LE(buffers.size(), 1u)
|
||||
<< "FFmpegDemuxerTest only reads a single-buffer.";
|
||||
std::string location_str = location.ToString();
|
||||
|
@ -151,7 +151,7 @@ class MEDIA_EXPORT HlsDataSourceStream {
|
||||
// Active buffer data. Reading without clearing will append new data
|
||||
// to the end of the buffer. Clearing will not reset the read-head, but will
|
||||
// empty this buffer.
|
||||
// TODO(crbug/1266991): Consider swapping out the vector with a more
|
||||
// TODO(crbug.com/40057824): Consider swapping out the vector with a more
|
||||
// size-flexible data structure to avoid resizing.
|
||||
std::vector<uint8_t> buffer_;
|
||||
|
||||
|
@ -239,7 +239,7 @@ bool HlsManifestDemuxerEngine::IsSeekable() const {
|
||||
}
|
||||
|
||||
int64_t HlsManifestDemuxerEngine::GetMemoryUsage() const {
|
||||
// TODO(crbug/1266991): Sum the memory of the renditions and data source
|
||||
// TODO(crbug.com/40057824): Sum the memory of the renditions and data source
|
||||
// providers.
|
||||
return 0;
|
||||
}
|
||||
@ -818,9 +818,9 @@ void HlsManifestDemuxerEngine::OnMediaPlaylist(
|
||||
scoped_refptr<hls::MediaPlaylist> playlist) {
|
||||
DCHECK_CALLED_ON_VALID_SEQUENCE(media_sequence_checker_);
|
||||
|
||||
// TODO(crbug/1266991) On stream adaptation, if the codecs are not the same,
|
||||
// we'll have to re-create the chunk demuxer role. For now, just assume the
|
||||
// codecs are the same.
|
||||
// TODO(crbug.com/40057824) On stream adaptation, if the codecs are not the
|
||||
// same, we'll have to re-create the chunk demuxer role. For now, just assume
|
||||
// the codecs are the same.
|
||||
auto maybe_exists = renditions_.find(parse_info.role);
|
||||
if (maybe_exists != renditions_.end()) {
|
||||
maybe_exists->second->UpdatePlaylist(std::move(playlist), parse_info.uri);
|
||||
|
@ -47,7 +47,7 @@ void HlsRenditionImpl::CheckState(
|
||||
}
|
||||
|
||||
if (IsLive() && playback_rate != 1 && playback_rate != 0) {
|
||||
// TODO(crbug.com/1266991): What should be done about non-paused,
|
||||
// TODO(crbug.com/40057824): What should be done about non-paused,
|
||||
// non-real-time playback? Anything above 1 would hit the end and constantly
|
||||
// be in a state of demuxer underflow, and anything slower than 1 would
|
||||
// eventually have so much data buffered that it would OOM.
|
||||
@ -236,7 +236,7 @@ void HlsRenditionImpl::MaybeFetchManifestUpdates(
|
||||
}
|
||||
|
||||
base::TimeDelta HlsRenditionImpl::GetIdealBufferSize() const {
|
||||
// TODO(crbug.com/1266991): This buffer size _could_ be based on network
|
||||
// TODO(crbug.com/40057824): This buffer size _could_ be based on network
|
||||
// speed and video bitrate, but it's actually quite effective to keep it just
|
||||
// at a fixed size, due to the fact that the stream adaptation will always try
|
||||
// to match an appropriate bitrate. 10 seconds was chosen based on a good
|
||||
@ -373,8 +373,8 @@ void HlsRenditionImpl::OnSegmentData(base::OnceClosure cb,
|
||||
|
||||
if (!result.has_value()) {
|
||||
// Drop |cb| here, and let the abort handler pick up the pieces.
|
||||
// TODO(crbug/1266991): If a seek abort interrupts us, we want to not bubble
|
||||
// the error upwards.
|
||||
// TODO(crbug.com/40057824): If a seek abort interrupts us, we want to not
|
||||
// bubble the error upwards.
|
||||
return engine_host_->OnError(
|
||||
{DEMUXER_ERROR_COULD_NOT_PARSE, std::move(result).error()});
|
||||
}
|
||||
|
@ -92,7 +92,7 @@ std::vector<DemuxerStream*> ManifestDemuxer::GetAllStreams() {
|
||||
// can grab the timestamp. Chunk demuxer's streams live forever, so ours
|
||||
// might as well also live forever, even if that leaks a small amount of
|
||||
// memory.
|
||||
// TODO(crbug/1266991): Rearchitect the demuxer stream ownership model to
|
||||
// TODO(crbug.com/40057824): Rearchitect the demuxer stream ownership model to
|
||||
// prevent long-lived streams from potentially leaking memory.
|
||||
std::vector<DemuxerStream*> streams;
|
||||
for (DemuxerStream* chunk_demuxer_stream : chunk_demuxer_->GetAllStreams()) {
|
||||
@ -182,7 +182,7 @@ void ManifestDemuxer::CancelPendingSeek(base::TimeDelta seek_time) {
|
||||
// pending, then canceling the chunk demuxer pending seek should execute
|
||||
// its callback immediately with a success status, and we'd just then be left
|
||||
// waiting for the engine to finish.
|
||||
// TODO(crbug/1266991): Make the engine cancelable as well.
|
||||
// TODO(crbug.com/40057824): Make the engine cancelable as well.
|
||||
if (pending_seek_) {
|
||||
AbortPendingReads();
|
||||
chunk_demuxer_->CancelPendingSeek(seek_time);
|
||||
@ -233,15 +233,16 @@ void ManifestDemuxer::Stop() {
|
||||
|
||||
base::TimeDelta ManifestDemuxer::GetStartTime() const {
|
||||
DCHECK(media_task_runner_->RunsTasksInCurrentSequence());
|
||||
// TODO(crbug/1266991): Support time remapping for streams that start > 0.
|
||||
// TODO(crbug.com/40057824): Support time remapping for streams that start >
|
||||
// 0.
|
||||
return base::TimeDelta();
|
||||
}
|
||||
|
||||
base::Time ManifestDemuxer::GetTimelineOffset() const {
|
||||
DCHECK(media_task_runner_->RunsTasksInCurrentSequence());
|
||||
// TODO(crbug/1266991): Implement this with the value of the
|
||||
// TODO(crbug.com/40057824): Implement this with the value of the
|
||||
// EXT-X-PROGRAM-DATETIME tag.
|
||||
// TODO(crbug/1266991): Moderate that tag with respect to any underlying
|
||||
// TODO(crbug.com/40057824): Moderate that tag with respect to any underlying
|
||||
// streams' nonzero timeline offsets that the wrapped ChunkDemuxer may have?
|
||||
// And should wrapped ChunkDemuxer's enforcement that any specified (non-null)
|
||||
// offset across multiple ChunkDemuxer::OnSourceInitDone() match be relaxed if
|
||||
@ -251,7 +252,7 @@ base::Time ManifestDemuxer::GetTimelineOffset() const {
|
||||
|
||||
int64_t ManifestDemuxer::GetMemoryUsage() const {
|
||||
DCHECK(media_task_runner_->RunsTasksInCurrentSequence());
|
||||
// TODO(crbug/1266991): Consider other potential significant memory usage
|
||||
// TODO(crbug.com/40057824): Consider other potential significant memory usage
|
||||
// here of the player impl.
|
||||
int64_t demuxer_usage = chunk_demuxer_ ? chunk_demuxer_->GetMemoryUsage() : 0;
|
||||
int64_t impl_usage = impl_ ? impl_->GetMemoryUsage() : 0;
|
||||
@ -260,8 +261,9 @@ int64_t ManifestDemuxer::GetMemoryUsage() const {
|
||||
|
||||
std::optional<container_names::MediaContainerName>
|
||||
ManifestDemuxer::GetContainerForMetrics() const {
|
||||
// TODO(crbug/1266991): Consider how this is used. HLS can involve multiple
|
||||
// stream types (mp2t, mp4, etc). Refactor to report something useful.
|
||||
// TODO(crbug.com/40057824): Consider how this is used. HLS can involve
|
||||
// multiple stream types (mp2t, mp4, etc). Refactor to report something
|
||||
// useful.
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
@ -596,7 +598,8 @@ void ManifestDemuxer::OnChunkDemuxerTracksChanged(
|
||||
void ManifestDemuxer::OnEncryptedMediaData(EmeInitDataType type,
|
||||
const std::vector<uint8_t>& data) {
|
||||
DCHECK(media_task_runner_->RunsTasksInCurrentSequence());
|
||||
// TODO(crbug/1266991): This will be required for iOS support in the future.
|
||||
// TODO(crbug.com/40057824): This will be required for iOS support in the
|
||||
// future.
|
||||
NOTIMPLEMENTED();
|
||||
}
|
||||
|
||||
|
@ -736,7 +736,7 @@ std::unique_ptr<StreamParser> StreamParserFactory::Create(
|
||||
std::vector<CodecInfo::HistogramTag> audio_codecs;
|
||||
std::vector<CodecInfo::HistogramTag> video_codecs;
|
||||
|
||||
// TODO(crbug.com/535738): Relax the requirement for specific codecs (allow
|
||||
// TODO(crbug.com/41204005): Relax the requirement for specific codecs (allow
|
||||
// kMaybeSupported here), and relocate the logging to the parser configuration
|
||||
// callback. This creation method is called in AddId(), and also in
|
||||
// CanChangeType() and ChangeType(), so potentially overlogs codecs leading to
|
||||
@ -776,7 +776,7 @@ std::unique_ptr<StreamParser> StreamParserFactory::Create(
|
||||
std::unique_ptr<AudioDecoderConfig> audio_config) {
|
||||
DCHECK(audio_config);
|
||||
|
||||
// TODO(crbug.com/1144908): Histogram-log the codec used for buffering
|
||||
// TODO(crbug.com/40155657): Histogram-log the codec used for buffering
|
||||
// WebCodecs in MSE?
|
||||
|
||||
return std::make_unique<media::WebCodecsEncodedChunkStreamParser>(
|
||||
@ -788,7 +788,7 @@ std::unique_ptr<StreamParser> StreamParserFactory::Create(
|
||||
std::unique_ptr<VideoDecoderConfig> video_config) {
|
||||
DCHECK(video_config);
|
||||
|
||||
// TODO(crbug.com/1144908): Histogram-log the codec used for buffering
|
||||
// TODO(crbug.com/40155657): Histogram-log the codec used for buffering
|
||||
// WebCodecs in MSE?
|
||||
|
||||
return std::make_unique<media::WebCodecsEncodedChunkStreamParser>(
|
||||
|
@ -201,7 +201,7 @@ source_set("formats") {
|
||||
]
|
||||
}
|
||||
|
||||
# TODO(https://crbug.com/1266991): These should be gated behind `enable_hls_demuxer`, once that's enabled by default.
|
||||
# TODO(crbug.com/40057824): These should be gated behind `enable_hls_demuxer`, once that's enabled by default.
|
||||
sources += [
|
||||
"hls/audio_rendition.cc",
|
||||
"hls/audio_rendition.h",
|
||||
@ -361,7 +361,7 @@ source_set("unit_tests") {
|
||||
}
|
||||
}
|
||||
|
||||
# TODO(https://crbug.com/1266991): This should be gated behind `enable_hls_demuxer`, once that's enabled by default.
|
||||
# TODO(crbug.com/40057824): This should be gated behind `enable_hls_demuxer`, once that's enabled by default.
|
||||
sources += [
|
||||
"hls/common_playlist_unittest.cc",
|
||||
"hls/items_unittest.cc",
|
||||
@ -382,7 +382,7 @@ source_set("unit_tests") {
|
||||
]
|
||||
}
|
||||
|
||||
# TODO(https://crbug.com/1266991): This should be gated behind `enable_hls_demuxer`, once that's enabled by default.
|
||||
# TODO(crbug.com/40057824): This should be gated behind `enable_hls_demuxer`, once that's enabled by default.
|
||||
fuzzer_test("hls_items_fuzzer") {
|
||||
sources = [ "hls/items_fuzzer.cc" ]
|
||||
deps = [
|
||||
@ -391,7 +391,7 @@ fuzzer_test("hls_items_fuzzer") {
|
||||
]
|
||||
}
|
||||
|
||||
# TODO(https://crbug.com/1266991): This should be gated behind `enable_hls_demuxer`, once that's enabled by default.
|
||||
# TODO(crbug.com/40057824): This should be gated behind `enable_hls_demuxer`, once that's enabled by default.
|
||||
fuzzer_test("hls_attribute_list_fuzzer") {
|
||||
sources = [ "hls/attribute_list_fuzzer.cc" ]
|
||||
deps = [
|
||||
@ -400,7 +400,7 @@ fuzzer_test("hls_attribute_list_fuzzer") {
|
||||
]
|
||||
}
|
||||
|
||||
# TODO(https://crbug.com/1266991): This should be gated behind `enable_hls_demuxer`, once that's enabled by default.
|
||||
# TODO(crbug.com/40057824): This should be gated behind `enable_hls_demuxer`, once that's enabled by default.
|
||||
fuzzer_test("hls_media_playlist_fuzzer") {
|
||||
sources = [ "hls/media_playlist_fuzzer.cc" ]
|
||||
deps = [
|
||||
@ -410,7 +410,7 @@ fuzzer_test("hls_media_playlist_fuzzer") {
|
||||
]
|
||||
}
|
||||
|
||||
# TODO(https://crbug.com/1266991): This should be gated behind `enable_hls_demuxer`, once that's enabled by default.
|
||||
# TODO(crbug.com/40057824): This should be gated behind `enable_hls_demuxer`, once that's enabled by default.
|
||||
fuzzer_test("hls_multivariant_playlist_fuzzer") {
|
||||
sources = [ "hls/multivariant_playlist_fuzzer.cc" ]
|
||||
deps = [
|
||||
|
@ -92,7 +92,7 @@ ParseStatus::Or<absl::monostate> AudioRenditionGroup::AddRendition(
|
||||
if (!default_rendition_) {
|
||||
default_rendition_ = &rendition;
|
||||
} else {
|
||||
// TODO(https://crbug.com/1266991): According to the spec there "MUST" be
|
||||
// TODO(crbug.com/40057824): According to the spec there "MUST" be
|
||||
// no more than a single rendition per-group with DEFAULT=YES, but some of
|
||||
// Apple's own presentations break this rule. Ex:
|
||||
// https://events-delivery.apple.com/0205eyyhwbbqexozkwmgccegwnjyrktg/m3u8/vod_index-dpyfrsVksFWjneFiptbXnAMYBtGYbXeZ.m3u8
|
||||
|
@ -160,7 +160,7 @@ ParseStatus::Or<scoped_refptr<MediaPlaylist>> MediaPlaylist::Parse(
|
||||
break;
|
||||
}
|
||||
case MediaPlaylistTagName::kXByteRange: {
|
||||
// TODO(https://crbug.com/1328528): Investigate supporting aspects of
|
||||
// TODO(crbug.com/40226468): Investigate supporting aspects of
|
||||
// this tag not described by the spec
|
||||
auto error = ParseUniqueTag(*tag, byterange_tag);
|
||||
if (error.has_value()) {
|
||||
@ -169,7 +169,7 @@ ParseStatus::Or<scoped_refptr<MediaPlaylist>> MediaPlaylist::Parse(
|
||||
break;
|
||||
}
|
||||
case MediaPlaylistTagName::kXDateRange: {
|
||||
// TODO(crbug.com/1266991): Implement the EXT-X-DATERANGE tag.
|
||||
// TODO(crbug.com/40057824): Implement the EXT-X-DATERANGE tag.
|
||||
break;
|
||||
}
|
||||
case MediaPlaylistTagName::kXDiscontinuity: {
|
||||
@ -229,7 +229,7 @@ ParseStatus::Or<scoped_refptr<MediaPlaylist>> MediaPlaylist::Parse(
|
||||
break;
|
||||
}
|
||||
case MediaPlaylistTagName::kXKey: {
|
||||
// TODO(crbug.com/1266991): Implement the EXT-X-KEY tag.
|
||||
// TODO(crbug.com/40057824): Implement the EXT-X-KEY tag.
|
||||
break;
|
||||
}
|
||||
case MediaPlaylistTagName::kXMap: {
|
||||
@ -276,7 +276,7 @@ ParseStatus::Or<scoped_refptr<MediaPlaylist>> MediaPlaylist::Parse(
|
||||
break;
|
||||
}
|
||||
case MediaPlaylistTagName::kXPart: {
|
||||
// TODO(crbug.com/1266991): Integrate the EXT-X-PART tag.
|
||||
// TODO(crbug.com/40057824): Integrate the EXT-X-PART tag.
|
||||
break;
|
||||
}
|
||||
case MediaPlaylistTagName::kXPartInf: {
|
||||
@ -294,15 +294,16 @@ ParseStatus::Or<scoped_refptr<MediaPlaylist>> MediaPlaylist::Parse(
|
||||
break;
|
||||
}
|
||||
case MediaPlaylistTagName::kXPreloadHint: {
|
||||
// TODO(crbug.com/1266991): Implement the EXT-X-PRELOAD-HINT tag.
|
||||
// TODO(crbug.com/40057824): Implement the EXT-X-PRELOAD-HINT tag.
|
||||
break;
|
||||
}
|
||||
case MediaPlaylistTagName::kXProgramDateTime: {
|
||||
// TODO(crbug.com/1266991): Implement the EXT-X-PROGRAM-DATE-TIME tag.
|
||||
// TODO(crbug.com/40057824): Implement the EXT-X-PROGRAM-DATE-TIME
|
||||
// tag.
|
||||
break;
|
||||
}
|
||||
case MediaPlaylistTagName::kXRenditionReport: {
|
||||
// TODO(crbug.com/1266991): Implement the EXT-X-RENDITION-REPORT tag.
|
||||
// TODO(crbug.com/40057824): Implement the EXT-X-RENDITION-REPORT tag.
|
||||
break;
|
||||
}
|
||||
case MediaPlaylistTagName::kXServerControl: {
|
||||
@ -313,7 +314,7 @@ ParseStatus::Or<scoped_refptr<MediaPlaylist>> MediaPlaylist::Parse(
|
||||
break;
|
||||
}
|
||||
case MediaPlaylistTagName::kXSkip: {
|
||||
// TODO(crbug.com/1266991): Implement the EXT-X-SKIP tag.
|
||||
// TODO(crbug.com/40057824): Implement the EXT-X-SKIP tag.
|
||||
// Since the appearance of the EXT-X-SKIP tag implies that this is a
|
||||
// playlist delta update, we cannot parse this playlist.
|
||||
return ParseStatusCode::kPlaylistHasUnexpectedDeltaUpdate;
|
||||
|
@ -446,7 +446,7 @@ TEST(HlsMediaPlaylistTest, XByteRangeTag) {
|
||||
}
|
||||
}
|
||||
// EXT-X-BYTERANGE may not appear twice per-segment.
|
||||
// TODO(https://crbug.com/1328528): Some players support this, using only the
|
||||
// TODO(crbug.com/40226468): Some players support this, using only the
|
||||
// final occurrence.
|
||||
{
|
||||
auto fork = builder;
|
||||
@ -457,7 +457,7 @@ TEST(HlsMediaPlaylistTest, XByteRangeTag) {
|
||||
fork.ExpectError(ParseStatusCode::kPlaylistHasDuplicateTags);
|
||||
}
|
||||
// Offset is required if this is the first media segment.
|
||||
// TODO(https://crbug.com/1328528): Some players support this, default offset
|
||||
// TODO(crbug.com/40226468): Some players support this, default offset
|
||||
// to 0.
|
||||
{
|
||||
auto fork = builder;
|
||||
@ -500,7 +500,7 @@ TEST(HlsMediaPlaylistTest, XByteRangeTag) {
|
||||
}
|
||||
// Offset is required if the previous media segment is a byterange of a
|
||||
// different resource.
|
||||
// TODO(https://crbug.com/1328528): Some players support this.
|
||||
// TODO(crbug.com/40226468): Some players support this.
|
||||
{
|
||||
auto fork = builder;
|
||||
fork.AppendLine("#EXT-X-BYTERANGE:12@34");
|
||||
|
@ -135,11 +135,12 @@ MultivariantPlaylist::Parse(std::string_view source,
|
||||
|
||||
switch (static_cast<MultivariantPlaylistTagName>(*tag->GetName())) {
|
||||
case MultivariantPlaylistTagName::kXContentSteering: {
|
||||
// TODO(crbug.com/1266991): Implement the EXT-X-CONTENT-STEERING tag
|
||||
// TODO(crbug.com/40057824): Implement the EXT-X-CONTENT-STEERING tag
|
||||
break;
|
||||
}
|
||||
case MultivariantPlaylistTagName::kXIFrameStreamInf: {
|
||||
// TODO(crbug.com/1266991): Implement the EXT-X-I-FRAME-STREAM-INF tag
|
||||
// TODO(crbug.com/40057824): Implement the EXT-X-I-FRAME-STREAM-INF
|
||||
// tag
|
||||
break;
|
||||
}
|
||||
case MultivariantPlaylistTagName::kXMedia: {
|
||||
@ -163,26 +164,26 @@ MultivariantPlaylist::Parse(std::string_view source,
|
||||
break;
|
||||
}
|
||||
case MediaType::kVideo: {
|
||||
// TODO(crbug.com/1266991): Support alternate video renditions
|
||||
// TODO(crbug.com/40057824): Support alternate video renditions
|
||||
break;
|
||||
}
|
||||
case MediaType::kSubtitles: {
|
||||
// TODO(crbug.com/1266991): Support subtitle renditions
|
||||
// TODO(crbug.com/40057824): Support subtitle renditions
|
||||
break;
|
||||
}
|
||||
case MediaType::kClosedCaptions: {
|
||||
// TODO(crbug.com/1266991): Support closed captions renditions
|
||||
// TODO(crbug.com/40057824): Support closed captions renditions
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case MultivariantPlaylistTagName::kXSessionData: {
|
||||
// TODO(crbug.com/1266991): Implement the EXT-X-SESSION-DATA tag
|
||||
// TODO(crbug.com/40057824): Implement the EXT-X-SESSION-DATA tag
|
||||
break;
|
||||
}
|
||||
case MultivariantPlaylistTagName::kXSessionKey: {
|
||||
// TODO(crbug.com/1266991): Implement the EXT-X-SESSION-KEY tag
|
||||
// TODO(crbug.com/40057824): Implement the EXT-X-SESSION-KEY tag
|
||||
break;
|
||||
}
|
||||
case MultivariantPlaylistTagName::kXStreamInf: {
|
||||
|
@ -49,7 +49,7 @@ ParseStatus::Or<M3uTag> CheckM3uTag(SourceLineIterator* src_iter) {
|
||||
|
||||
void HandleUnknownTag(TagItem /*tag*/) {
|
||||
// Unknown tags are ignored for forward-compatibility purposes.
|
||||
// TODO(crbug.com/1266991): Should record a metric to discover common
|
||||
// TODO(crbug.com/40057824): Should record a metric to discover common
|
||||
// unrecognized tags.
|
||||
}
|
||||
|
||||
@ -98,7 +98,7 @@ std::optional<ParseStatus> ParseCommonTag(TagItem tag,
|
||||
return ParseUniqueTag(tag, state->independent_segments_tag);
|
||||
}
|
||||
case CommonTagName::kXStart: {
|
||||
// TODO(crbug.com/1266991): Implement the EXT-X-START tag.
|
||||
// TODO(crbug.com/40057824): Implement the EXT-X-START tag.
|
||||
break;
|
||||
}
|
||||
case CommonTagName::kXVersion: {
|
||||
|
@ -37,12 +37,12 @@ RenditionManager::CodecSupportType VariantTypeSupported(
|
||||
}
|
||||
|
||||
std::string GetVariantDisplayString(const VariantStream* variant) {
|
||||
// TODO(crbug/1266991): implement.
|
||||
// TODO(crbug.com/40057824): implement.
|
||||
return "variant";
|
||||
}
|
||||
|
||||
std::string GetAudioRenditionDisplayString(const AudioRendition* rendition) {
|
||||
// TODO(crbug/1266991): Consider displaying characteristics / channels /
|
||||
// TODO(crbug.com/40057824): Consider displaying characteristics / channels /
|
||||
// language and other things rather than just the name.
|
||||
return rendition->GetName();
|
||||
}
|
||||
@ -184,9 +184,9 @@ void RenditionManager::InitializeVariantMaps(
|
||||
// finding any audio-only variants, drop all the audio-specific variants and
|
||||
// renditions. If we find any audio-only variants after a video variant, do
|
||||
// not consider it.
|
||||
// TODO(crbug/1266991): Is this correct? The spec does not say anything about
|
||||
// playlists which have audio-only variants next to variants with video. It
|
||||
// might be used in the wild to play only video if the network is truly in
|
||||
// TODO(crbug.com/40057824): Is this correct? The spec does not say anything
|
||||
// about playlists which have audio-only variants next to variants with video.
|
||||
// It might be used in the wild to play only video if the network is truly in
|
||||
// bad shape, but it's not clear. I've not run into any playlists in the wild
|
||||
// which have this.
|
||||
for (const VariantStream& variant : playlist_->GetVariants()) {
|
||||
|
@ -60,9 +60,9 @@ void SegmentStream::SetNewPlaylist(scoped_refptr<MediaPlaylist> playlist) {
|
||||
const auto& segments = active_playlist_->GetSegments();
|
||||
if (segments.empty()) {
|
||||
// No new segments.
|
||||
// TODO(crbug/1266991): Should this be an error? I do not know if this ever
|
||||
// happens in the wild. I can imagine that it does, hence not raising an
|
||||
// error here for now. The spec doesn't seem to clear it up.
|
||||
// TODO(crbug.com/40057824): Should this be an error? I do not know if this
|
||||
// ever happens in the wild. I can imagine that it does, hence not raising
|
||||
// an error here for now. The spec doesn't seem to clear it up.
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -283,7 +283,7 @@ TEST(HlsTagsTest, ParseXStartTag) {
|
||||
RunTagIdenficationTest(ToTagName(CommonTagName::kXStart),
|
||||
"#EXT-X-START:TIME-OFFSET=30,PRECISE=YES\n",
|
||||
"TIME-OFFSET=30,PRECISE=YES");
|
||||
// TODO(crbug.com/1266991): Implement the EXT-X-START tag.
|
||||
// TODO(crbug.com/40057824): Implement the EXT-X-START tag.
|
||||
}
|
||||
|
||||
TEST(HlsTagsTest, ParseXVersionTag) {
|
||||
@ -333,7 +333,7 @@ TEST(HlsTagsTest, ParseXContentSteeringTag) {
|
||||
"#EXT-X-CONTENT-STEERING:SERVER-URI=\"https://google.com/"
|
||||
"manifest.json\"\n",
|
||||
"SERVER-URI=\"https://google.com/manifest.json\"");
|
||||
// TODO(crbug.com/1266991): Implement the EXT-X-CONTENT-STEERING tag.
|
||||
// TODO(crbug.com/40057824): Implement the EXT-X-CONTENT-STEERING tag.
|
||||
}
|
||||
|
||||
TEST(HlsTagsTest, ParseXIFrameStreamInfTag) {
|
||||
@ -341,7 +341,7 @@ TEST(HlsTagsTest, ParseXIFrameStreamInfTag) {
|
||||
ToTagName(MultivariantPlaylistTagName::kXIFrameStreamInf),
|
||||
"#EXT-X-I-FRAME-STREAM-INF:URI=\"foo.m3u8\",BANDWIDTH=1000\n",
|
||||
"URI=\"foo.m3u8\",BANDWIDTH=1000");
|
||||
// TODO(crbug.com/1266991): Implement the EXT-X-I-FRAME-STREAM-INF tag.
|
||||
// TODO(crbug.com/40057824): Implement the EXT-X-I-FRAME-STREAM-INF tag.
|
||||
}
|
||||
|
||||
TEST(HlsTagsTest, ParseXMediaTag) {
|
||||
@ -1066,7 +1066,7 @@ TEST(HlsTagsTest, ParseXSessionDataTag) {
|
||||
ToTagName(MultivariantPlaylistTagName::kXSessionData),
|
||||
"#EXT-X-SESSION-DATA:DATA-ID=\"com.google.key\",VALUE=\"value\"\n",
|
||||
"DATA-ID=\"com.google.key\",VALUE=\"value\"");
|
||||
// TODO(crbug.com/1266991): Implement the EXT-X-SESSION-DATA tag.
|
||||
// TODO(crbug.com/40057824): Implement the EXT-X-SESSION-DATA tag.
|
||||
}
|
||||
|
||||
TEST(HlsTagsTest, ParseXSessionKeyTag) {
|
||||
@ -1074,7 +1074,7 @@ TEST(HlsTagsTest, ParseXSessionKeyTag) {
|
||||
ToTagName(MultivariantPlaylistTagName::kXSessionKey),
|
||||
"#EXT-X-SESSION-KEY:METHOD=AES-128,URI=\"https://google.com/key\"\n",
|
||||
"METHOD=AES-128,URI=\"https://google.com/key\"");
|
||||
// TODO(crbug.com/1266991): Implement the EXT-X-SESSION-KEY tag.
|
||||
// TODO(crbug.com/40057824): Implement the EXT-X-SESSION-KEY tag.
|
||||
}
|
||||
|
||||
TEST(HlsTagsTest, ParseXStreamInfTag) {
|
||||
@ -1306,7 +1306,7 @@ TEST(HlsTagsTest, ParseXDateRangeTag) {
|
||||
ToTagName(MediaPlaylistTagName::kXDateRange),
|
||||
"#EXT-X-DATERANGE:ID=\"ad\",START-DATE=\"2022-07-19T01:04:57+0000\"\n",
|
||||
"ID=\"ad\",START-DATE=\"2022-07-19T01:04:57+0000\"");
|
||||
// TODO(crbug.com/1266991): Implement the EXT-X-DATERANGE tag.
|
||||
// TODO(crbug.com/40057824): Implement the EXT-X-DATERANGE tag.
|
||||
}
|
||||
|
||||
TEST(HlsTagsTest, ParseXDiscontinuityTag) {
|
||||
@ -1340,7 +1340,7 @@ TEST(HlsTagsTest, ParseXIFramesOnlyTag) {
|
||||
TEST(HlsTagsTest, ParseXKeyTag) {
|
||||
RunTagIdenficationTest(ToTagName(MediaPlaylistTagName::kXKey),
|
||||
"#EXT-X-KEY:METHOD=NONE\n", "METHOD=NONE");
|
||||
// TODO(crbug.com/1266991): Implement the EXT-X-KEY tag.
|
||||
// TODO(crbug.com/40057824): Implement the EXT-X-KEY tag.
|
||||
}
|
||||
|
||||
TEST(HlsTagsTest, ParseXMapTag) {
|
||||
@ -1572,7 +1572,7 @@ TEST(HlsTagsTest, ParseXPreloadHintTag) {
|
||||
RunTagIdenficationTest(ToTagName(MediaPlaylistTagName::kXPreloadHint),
|
||||
"#EXT-X-PRELOAD-HINT:TYPE=PART,URI=\"foo.ts\"\n",
|
||||
"TYPE=PART,URI=\"foo.ts\"");
|
||||
// TODO(crbug.com/1266991): Implement the EXT-X-PRELOAD-HINT tag.
|
||||
// TODO(crbug.com/40057824): Implement the EXT-X-PRELOAD-HINT tag.
|
||||
}
|
||||
|
||||
TEST(HlsTagsTest, ParseXProgramDateTimeTag) {
|
||||
|
@ -381,7 +381,7 @@ ParseStatus AttributeMap::FillUntilError(AttributeListIterator* iter) {
|
||||
return std::move(result).error();
|
||||
}
|
||||
|
||||
// TODO(crbug.com/1266991): It may be worth recording a UMA here, to
|
||||
// TODO(crbug.com/40057824): It may be worth recording a UMA here, to
|
||||
// discover common unhandled attributes. Since we can't plug arbitrary
|
||||
// strings into UMA this will require some additional design work.
|
||||
}
|
||||
|
@ -210,7 +210,7 @@ void EsParserH264::Flush() {
|
||||
// Fail if this AUD's push fails allocation, since otherwise the behavior of
|
||||
// the subsequent parse would vary based on whether or not the system is
|
||||
// near-OOM.
|
||||
// TODO(crbug.com/1266639): Consider plumbing parse failure for this push
|
||||
// TODO(crbug.com/40204179): Consider plumbing parse failure for this push
|
||||
// failure case, instead of what used to OOM but now instead would fail this
|
||||
// CHECK.
|
||||
CHECK(es_queue_->Push(aud, sizeof(aud)));
|
||||
|
@ -576,7 +576,7 @@ void Mp2tStreamParser::RegisterPes(int pes_pid,
|
||||
|
||||
// Ignore stream types not specified in the creation of the SourceBuffer.
|
||||
// See https://crbug.com/1169393.
|
||||
// TODO(https://crbug.com/535738): Remove this hack when MSE stream/mime type
|
||||
// TODO(crbug.com/41204005): Remove this hack when MSE stream/mime type
|
||||
// checks have been relaxed.
|
||||
if (allowed_stream_types_.has_value() &&
|
||||
!allowed_stream_types_->contains(stream_type)) {
|
||||
|
@ -153,8 +153,8 @@ bool MP4StreamParser::AppendToParseBuffer(const uint8_t* buf, size_t size) {
|
||||
// synchronous with the app's appendBuffer() call, instead of async decode
|
||||
// error during async parse. Since Parse() cannot succeed in kError state,
|
||||
// don't even copy `buf` into `queue_` in this case.
|
||||
// TODO(crbug.com/1379160): Instrument this path to see if it can be changed
|
||||
// to just DCHECK_NE(state_, kError).
|
||||
// TODO(crbug.com/40244241): Instrument this path to see if it can be
|
||||
// changed to just DCHECK_NE(state_, kError).
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -117,8 +117,8 @@ bool MPEGAudioStreamParserBase::AppendToParseBuffer(const uint8_t* buf,
|
||||
// synchronous with the app's appendBuffer() call, instead of async decode
|
||||
// error during async parse. Since Parse() cannot succeed in kError state,
|
||||
// don't even copy `buf` into `queue_` in this case.
|
||||
// TODO(crbug.com/1379160): Instrument this path to see if it can be changed
|
||||
// to just DCHECK_NE(state_, PARSE_ERROR).
|
||||
// TODO(crbug.com/40244241): Instrument this path to see if it can be
|
||||
// changed to just DCHECK_NE(state_, PARSE_ERROR).
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -18,7 +18,7 @@
|
||||
|
||||
namespace {
|
||||
|
||||
// TODO(crbug.com/1144908): Since these must be identical to those generated
|
||||
// TODO(crbug.com/40155657): Since these must be identical to those generated
|
||||
// in the SourceBuffer, consider moving these to possibly stream_parser.h.
|
||||
// Meanwhile, must be kept in sync with similar constexpr in SourceBuffer
|
||||
// manually.
|
||||
@ -82,7 +82,7 @@ bool WebCodecsEncodedChunkStreamParser::GetGenerateTimestampsFlag() const {
|
||||
bool WebCodecsEncodedChunkStreamParser::AppendToParseBuffer(
|
||||
const uint8_t* /* buf */,
|
||||
size_t /* size */) {
|
||||
// TODO(crbug.com/1144908): Protect against app reaching this (and similer
|
||||
// TODO(crbug.com/40155657): Protect against app reaching this (and similer
|
||||
// inverse case in other parsers) simply by using the wrong append method on
|
||||
// the SourceBuffer. Maybe a better MEDIA_LOG here would be sufficient? Or
|
||||
// instead have the top-level SourceBuffer throw synchronous exception when
|
||||
@ -94,7 +94,7 @@ bool WebCodecsEncodedChunkStreamParser::AppendToParseBuffer(
|
||||
|
||||
StreamParser::ParseStatus WebCodecsEncodedChunkStreamParser::Parse(
|
||||
int /* max_pending_bytes_to_inspect */) {
|
||||
// TODO(crbug.com/1144908): Protect against app reaching this (and similer
|
||||
// TODO(crbug.com/40155657): Protect against app reaching this (and similer
|
||||
// inverse case in other parsers) simply by using the wrong append method on
|
||||
// the SourceBuffer. Maybe a better MEDIA_LOG here would be sufficient? Or
|
||||
// instead have the top-level SourceBuffer throw synchronous exception when
|
||||
@ -161,7 +161,7 @@ bool WebCodecsEncodedChunkStreamParser::ProcessChunks(
|
||||
}
|
||||
}
|
||||
|
||||
// TODO(crbug.com/1144908): Add a different new_buffers_cb type for us to use
|
||||
// TODO(crbug.com/40155657): Add a different new_buffers_cb type for us to use
|
||||
// so that we can just std::move the buffer_queue, and avoid potential issues
|
||||
// with out-of-order timestamps in the caller-provided queue that would
|
||||
// otherwise cause parse failure in MergeBufferQueues with the current, legacy
|
||||
|
@ -204,7 +204,7 @@ WebMColorMetadata WebMColourParser::GetWebMColorMetadata() const {
|
||||
cta_861_3.max_frame_average_light_level = max_frame_average_light_level_;
|
||||
}
|
||||
|
||||
// TODO(https://crbug.com/1446302): Consider rejecting metadata that does
|
||||
// TODO(crbug.com/40268540): Consider rejecting metadata that does
|
||||
// not specify all values.
|
||||
color_metadata.hdr_metadata->cta_861_3 = cta_861_3;
|
||||
}
|
||||
|
@ -89,8 +89,8 @@ bool WebMStreamParser::AppendToParseBuffer(const uint8_t* buf, size_t size) {
|
||||
// synchronous with the app's appendBuffer() call, instead of async decode
|
||||
// error during async parse. Since Parse() cannot succeed in kError state,
|
||||
// don't even copy `buf` into `byte_queue_` in this case.
|
||||
// TODO(crbug.com/1379160): Instrument this path to see if it can be changed
|
||||
// to just DCHECK_NE(state_, kError).
|
||||
// TODO(crbug.com/40244241): Instrument this path to see if it can be
|
||||
// changed to just DCHECK_NE(state_, kError).
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -71,7 +71,7 @@ constexpr size_t kOutputFrameConfigSize = 128 * 1024;
|
||||
|
||||
const VideoCodecProfile kSupportedProfiles[] = {
|
||||
H264PROFILE_BASELINE,
|
||||
// TODO(crbug.com/1373293): Support HEVC codec.
|
||||
// TODO(crbug.com/40241992): Support HEVC codec.
|
||||
};
|
||||
|
||||
fuchsia::sysmem::PixelFormatType GetPixelFormatType(
|
||||
@ -438,7 +438,7 @@ bool FuchsiaVideoEncodeAccelerator::Initialize(
|
||||
if (config.input_format != PIXEL_FORMAT_I420) {
|
||||
return false;
|
||||
}
|
||||
// TODO(crbug.com/1373293): Support HEVC codec.
|
||||
// TODO(crbug.com/40241992): Support HEVC codec.
|
||||
if (config.output_profile != H264PROFILE_BASELINE) {
|
||||
return false;
|
||||
}
|
||||
@ -704,7 +704,7 @@ FuchsiaVideoEncodeAccelerator::CreateFormatDetails(
|
||||
format_details.set_domain(std::move(domain));
|
||||
|
||||
// For now, hardcode mime type for H264.
|
||||
// TODO(crbug.com/1373293): Support HEVC codec.
|
||||
// TODO(crbug.com/40241992): Support HEVC codec.
|
||||
DCHECK(config.output_profile == H264PROFILE_BASELINE);
|
||||
format_details.set_mime_type("video/h264");
|
||||
fuchsia::media::H264EncoderSettings h264_settings;
|
||||
|
@ -298,7 +298,7 @@ CodecWrapperImpl::QueueStatus CodecWrapperImpl::QueueInputBuffer(
|
||||
const DecryptConfig* decrypt_config = buffer.decrypt_config();
|
||||
MediaCodecResult result;
|
||||
if (decrypt_config) {
|
||||
// TODO(crbug.com/813845): Use encryption scheme settings from
|
||||
// TODO(crbug.com/40563697): Use encryption scheme settings from
|
||||
// DecryptConfig.
|
||||
result = codec_->QueueSecureInputBuffer(
|
||||
input_buffer, buffer.data(), buffer.size(), decrypt_config->key_id(),
|
||||
|
@ -1005,7 +1005,7 @@ static std::vector<VideoCodec> GetVp8IfAvailable() {
|
||||
: std::vector<VideoCodec>();
|
||||
}
|
||||
|
||||
// TODO(https://crbug.com/1179801): Uncomment once MediaCodecVideoDecoderVp9Test
|
||||
// TODO(crbug.com/40169704): Uncomment once MediaCodecVideoDecoderVp9Test
|
||||
// is fixed.
|
||||
// static std::vector<VideoCodec> GetVp9IfAvailable() {
|
||||
// return MediaCodecUtil::IsVp9DecoderAvailable()
|
||||
@ -1032,7 +1032,7 @@ INSTANTIATE_TEST_SUITE_P(MediaCodecVideoDecoderVp8Test,
|
||||
MediaCodecVideoDecoderVp8Test,
|
||||
testing::ValuesIn(GetVp8IfAvailable()));
|
||||
|
||||
// TODO(https://crbug.com/1179801): Uncomment once MediaCodecVideoDecoderVp9Test
|
||||
// TODO(crbug.com/40169704): Uncomment once MediaCodecVideoDecoderVp9Test
|
||||
// is fixed.
|
||||
// INSTANTIATE_TEST_SUITE_P(MediaCodecVideoDecoderVp9Test,
|
||||
// MediaCodecVideoDecoderVp9Test,
|
||||
@ -1042,7 +1042,7 @@ INSTANTIATE_TEST_SUITE_P(MediaCodecVideoDecoderAV1Test,
|
||||
MediaCodecVideoDecoderAV1Test,
|
||||
testing::ValuesIn(GetAv1IfAvailable()));
|
||||
|
||||
// TODO(https://crbug.com/1179801): Remove this annotation once
|
||||
// TODO(crbug.com/40169704): Remove this annotation once
|
||||
// MediaCodecVideoDecoderVp9Test is fixed.
|
||||
GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(MediaCodecVideoDecoderVp9Test);
|
||||
// This test suite is empty on some OSes.
|
||||
|
@ -1226,7 +1226,8 @@ VideoDecoderPipeline::PickDecoderOutputFormat(
|
||||
|
||||
if (!image_processor) {
|
||||
DVLOGF(2) << "Unable to find ImageProcessor to convert format";
|
||||
// TODO(crbug/1103510): Make CreateWithInputCandidates return an Or type.
|
||||
// TODO(crbug.com/40139291): Make CreateWithInputCandidates return an Or
|
||||
// type.
|
||||
return CroStatus::Codes::kFailedToCreateImageProcessor;
|
||||
}
|
||||
|
||||
|
@ -149,7 +149,7 @@ bool VideoToolboxAV1Accelerator::OutputPicture(const AV1Picture& pic) {
|
||||
}
|
||||
|
||||
// Submit for decoding.
|
||||
// TODO(crbug.com/1331597): Replace all const ref AV1Picture with
|
||||
// TODO(crbug.com/40227557): Replace all const ref AV1Picture with
|
||||
// scoped_refptr.
|
||||
decode_cb_.Run(std::move(sample), session_metadata_,
|
||||
base::WrapRefCounted(const_cast<AV1Picture*>(&pic)));
|
||||
@ -169,9 +169,9 @@ bool VideoToolboxAV1Accelerator::ProcessFormat(
|
||||
DVLOG(4) << __func__;
|
||||
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
|
||||
|
||||
// TODO(crbug.com/1331597): Consider merging with CreateFormatExtensions() to
|
||||
// TODO(crbug.com/40227557): Consider merging with CreateFormatExtensions() to
|
||||
// avoid converting back and forth.
|
||||
// TODO(crbug.com/1331597): Extract from sequence header instead?
|
||||
// TODO(crbug.com/40227557): Extract from sequence header instead?
|
||||
VideoColorSpace color_space = pic.get_colorspace();
|
||||
|
||||
VideoCodecProfile profile;
|
||||
|
@ -52,7 +52,7 @@ struct MEDIA_GPU_EXPORT VideoToolboxDecodeMetadata {
|
||||
bool discard = false;
|
||||
|
||||
// Session metadata is included in case the decoder needs to be reconfigured.
|
||||
// TODO(crbug.com/1331597): Pass separately, maybe even independently.
|
||||
// TODO(crbug.com/40227557): Pass separately, maybe even independently.
|
||||
VideoToolboxDecompressionSessionMetadata session_metadata;
|
||||
};
|
||||
|
||||
|
@ -208,7 +208,7 @@ bool VideoToolboxDecompressionSessionManager::CreateSession(
|
||||
#endif
|
||||
|
||||
// Build destination image buffer attributes.
|
||||
// TODO(crbug.com/1331597): Also set size using the visible rect.
|
||||
// TODO(crbug.com/40227557): Also set size using the visible rect.
|
||||
|
||||
// It is possible to create a decompression session with no destination image
|
||||
// buffer attributes, but then we must be able to handle any kind of pixel
|
||||
@ -230,7 +230,7 @@ bool VideoToolboxDecompressionSessionManager::CreateSession(
|
||||
// NV12/P010 contents and all 422/444 contents to RGBA which could avoid
|
||||
// chroma downsampling.
|
||||
//
|
||||
// TODO(crbug.com/1331597): Do not create an image config for known-supported
|
||||
// TODO(crbug.com/40227557): Do not create an image config for known-supported
|
||||
// formats, and add full-range versions as supported formats.
|
||||
// TODO(crbug.com/331679628): Add 422/444 multi-planar format for 8/10/12-bit
|
||||
// 422/444 contents.
|
||||
|
@ -240,7 +240,7 @@ void VideoToolboxFrameConverter::Convert(
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO(crbug.com/1331597): Ensure that the frame color space matches the
|
||||
// TODO(crbug.com/40227557): Ensure that the frame color space matches the
|
||||
// IOSurface color space. There doesn't seem to be a way to specify it for
|
||||
// H.264 unless we create the format description manually.
|
||||
frame->set_color_space(metadata->color_space);
|
||||
@ -255,7 +255,7 @@ void VideoToolboxFrameConverter::Convert(
|
||||
// (not just submitted).
|
||||
frame->metadata().read_lock_fences_enabled = true;
|
||||
frame->metadata().is_webgpu_compatible = is_webgpu_compatible;
|
||||
// TODO(crbug.com/1331597): VideoToolbox can report software usage, should
|
||||
// TODO(crbug.com/40227557): VideoToolbox can report software usage, should
|
||||
// we plumb that through?
|
||||
frame->metadata().power_efficient = true;
|
||||
|
||||
|
@ -83,8 +83,8 @@ VideoToolboxH264Accelerator::SubmitFrameMetadata(
|
||||
if (sps_data != active_sps_data_ || pps_data != active_pps_data_) {
|
||||
// If we're not at a keyframe and only the PPS has changed, put the new PPS
|
||||
// in-band and don't create a new format.
|
||||
// TODO(crbug.com/1331597): Record that this PPS has been provided and avoid
|
||||
// sending it again. (Copy implementation from H265Accelerator.)
|
||||
// TODO(crbug.com/40227557): Record that this PPS has been provided and
|
||||
// avoid sending it again. (Copy implementation from H265Accelerator.)
|
||||
if (!pic->idr && sps_data == active_sps_data_) {
|
||||
slice_nalu_data_.push_back(base::make_span(pps_data));
|
||||
return Status::kOk;
|
||||
|
@ -268,7 +268,7 @@ VideoToolboxH265Accelerator::Status VideoToolboxH265Accelerator::SubmitDecode(
|
||||
|
||||
// Create a new format description if necessary.
|
||||
// We assume that session metadata can only change at a keyframe.
|
||||
// TODO(crbug.com/1331597): It's not clear when it is better to inline the
|
||||
// TODO(crbug.com/40227557): It's not clear when it is better to inline the
|
||||
// parameter sets vs. creating a new format.
|
||||
if (!active_format_ || (combined_nalu_data.size() && frame_is_keyframe_)) {
|
||||
combined_nalu_data.clear();
|
||||
|
@ -139,11 +139,11 @@ void VideoToolboxVideoDecoder::Initialize(const VideoDecoderConfig& config,
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO(crbug.com/1331597): Distinguish unsupported profile from unsupported
|
||||
// TODO(crbug.com/40227557): Distinguish unsupported profile from unsupported
|
||||
// codec.
|
||||
// TODO(crbug.com/1331597): Make sure that config.profile() matches
|
||||
// TODO(crbug.com/40227557): Make sure that config.profile() matches
|
||||
// config.codec().
|
||||
// TODO(crbug.com/1331597): Check that the size is supported.
|
||||
// TODO(crbug.com/40227557): Check that the size is supported.
|
||||
bool profile_supported = false;
|
||||
for (const auto& supported_config :
|
||||
GetSupportedVideoDecoderConfigs(gpu_workarounds_)) {
|
||||
@ -396,7 +396,7 @@ void VideoToolboxVideoDecoder::OnVideoToolboxOutput(
|
||||
}
|
||||
|
||||
// Check if the frame was dropped.
|
||||
// TODO(crbug.com/1331597): Notify the output queue of dropped frames.
|
||||
// TODO(crbug.com/40227557): Notify the output queue of dropped frames.
|
||||
if (!image) {
|
||||
ReleaseDecodeCallbacks();
|
||||
return;
|
||||
@ -461,9 +461,9 @@ VideoToolboxVideoDecoder::GetSupportedVideoDecoderConfigs(
|
||||
const gpu::GpuDriverBugWorkarounds& gpu_workarounds) {
|
||||
std::vector<SupportedVideoDecoderConfig> supported;
|
||||
|
||||
// TODO(crbug.com/1331597): Test support for other H.264 profiles.
|
||||
// TODO(crbug.com/1331597): Exclude resolutions that are not accelerated.
|
||||
// TODO(crbug.com/1331597): Check if higher resolutions are supported.
|
||||
// TODO(crbug.com/40227557): Test support for other H.264 profiles.
|
||||
// TODO(crbug.com/40227557): Exclude resolutions that are not accelerated.
|
||||
// TODO(crbug.com/40227557): Check if higher resolutions are supported.
|
||||
if (!gpu_workarounds.disable_accelerated_h264_decode && SupportsH264()) {
|
||||
supported.emplace_back(
|
||||
/*profile_min=*/H264PROFILE_BASELINE,
|
||||
|
@ -90,10 +90,10 @@ bool VideoToolboxVP9Accelerator::ProcessFrame(scoped_refptr<VP9Picture> pic) {
|
||||
}
|
||||
|
||||
if (format_changed && frame_data_) {
|
||||
// TODO(crbug.com/1331597): Consider dropping existing frame data. Doing so
|
||||
// TODO(crbug.com/40227557): Consider dropping existing frame data. Doing so
|
||||
// probably requires handling output callbacks ourselves, so that we don't
|
||||
// have to figure out which ones are duplicates.
|
||||
// TODO(crbug.com/1331597): Add Reset() to VP9Accelerator for resetting
|
||||
// TODO(crbug.com/40227557): Add Reset() to VP9Accelerator for resetting
|
||||
// superframe state after Flush().
|
||||
MEDIA_LOG(WARNING, media_log_.get()) << "Format change inside superframe";
|
||||
}
|
||||
@ -131,7 +131,7 @@ bool VideoToolboxVP9Accelerator::ProcessFormat(scoped_refptr<VP9Picture> pic,
|
||||
DVLOG(4) << __func__;
|
||||
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
|
||||
|
||||
// TODO(crbug.com/1331597): Consider merging with CreateFormatExtensions() to
|
||||
// TODO(crbug.com/40227557): Consider merging with CreateFormatExtensions() to
|
||||
// avoid converting back and forth.
|
||||
VideoColorSpace color_space = pic->frame_hdr->GetColorSpace();
|
||||
|
||||
|
@ -30,7 +30,7 @@ namespace {
|
||||
const int32_t kDrmNumNodes = 64;
|
||||
const int32_t kMinNodeNumber = 128;
|
||||
|
||||
// TODO(https://crbug.com/1043007): use ui/gfx/linux/gbm_device.h instead.
|
||||
// TODO(crbug.com/40115082): use ui/gfx/linux/gbm_device.h instead.
|
||||
gbm_device* CreateGbmDevice() {
|
||||
int fd;
|
||||
int32_t min_node = kMinNodeNumber;
|
||||
|
@ -720,7 +720,7 @@ bool VP9Validator::ValidateSVCStream(const DecoderBuffer& decoder_buffer,
|
||||
// Check that referenced frames are OK.
|
||||
if (header.IsIntra()) {
|
||||
if (!vp9.p_diffs.empty()) {
|
||||
// TODO(crbug.com/1186051): Consider if this is truly an error-state.
|
||||
// TODO(crbug.com/40172317): Consider if this is truly an error-state.
|
||||
LOG(ERROR) << "|p_diffs| should be empty in intra-frames.";
|
||||
return false;
|
||||
}
|
||||
@ -770,7 +770,7 @@ bool VP9Validator::ValidateSVCStream(const DecoderBuffer& decoder_buffer,
|
||||
}
|
||||
}
|
||||
if (!expected_pdiffs.empty()) {
|
||||
// TODO(crbug.com/1186051): Consider if this is truly an error-state.
|
||||
// TODO(crbug.com/40172317): Consider if this is truly an error-state.
|
||||
LOG(ERROR) << "|p_diff| contains frame that is not actually referenced.";
|
||||
return false;
|
||||
}
|
||||
@ -892,7 +892,7 @@ bool VP9Validator::ValidateSmodeStream(const DecoderBuffer& decoder_buffer,
|
||||
// Check that referenced frames are OK.
|
||||
if (header.IsIntra()) {
|
||||
if (!vp9.p_diffs.empty()) {
|
||||
// TODO(crbug.com/1186051): Consider if this is truly an error-state.
|
||||
// TODO(crbug.com/40172317): Consider if this is truly an error-state.
|
||||
LOG(ERROR) << "|p_diffs| should be empty in intra-frames.";
|
||||
return false;
|
||||
}
|
||||
@ -938,7 +938,7 @@ bool VP9Validator::ValidateSmodeStream(const DecoderBuffer& decoder_buffer,
|
||||
}
|
||||
}
|
||||
if (!expected_pdiffs.empty()) {
|
||||
// TODO(crbug.com/1186051): Consider if this is truly an error-state.
|
||||
// TODO(crbug.com/40172317): Consider if this is truly an error-state.
|
||||
LOG(ERROR) << "|p_diff| contains frame that is not actually referenced.";
|
||||
return false;
|
||||
}
|
||||
|
@ -273,8 +273,8 @@ void V4L2VideoDecoder::Initialize(const VideoDecoderConfig& config,
|
||||
LogAndRecordUMA(FROM_HERE,
|
||||
V4l2VideoDecoderFunctions::kStopStreamV4L2Queue);
|
||||
|
||||
// TODO(crbug/1103510): Make StopStreamV4L2Queue return a StatusOr, and
|
||||
// pipe that back instead.
|
||||
// TODO(crbug.com/40139291): Make StopStreamV4L2Queue return a StatusOr,
|
||||
// and pipe that back instead.
|
||||
std::move(init_cb).Run(
|
||||
DecoderStatus(DecoderStatus::Codes::kNotInitialized)
|
||||
.AddCause(
|
||||
|
@ -232,7 +232,7 @@ source_set("vaapi_image_decoder_test_common") {
|
||||
]
|
||||
}
|
||||
|
||||
# TODO(https://crbug.com/1043007): remove is_chromeos.
|
||||
# TODO(crbug.com/40115082): remove is_chromeos.
|
||||
if (is_chromeos_ash) {
|
||||
source_set("jpeg_decoder_unit_test") {
|
||||
testonly = true
|
||||
@ -305,7 +305,7 @@ test("vaapi_unittest") {
|
||||
# that ChromeOS can build the vaapi_unittest without building the fake driver.
|
||||
data_deps = [ "//media/gpu/vaapi/test/fake_libva_driver:fake_drv_video" ]
|
||||
|
||||
# TODO(https://crbug.com/1043007): remove is_chromeos.
|
||||
# TODO(crbug.com/40115082): remove is_chromeos.
|
||||
if (is_chromeos_ash) {
|
||||
deps += [
|
||||
":jpeg_decoder_unit_test",
|
||||
|
@ -270,8 +270,8 @@ VaapiJpegDecoder::GetSupportedProfile() {
|
||||
return std::nullopt;
|
||||
}
|
||||
if (VaapiWrapper::GetImplementationType() == VAImplementation::kMesaGallium) {
|
||||
// TODO(crbug.com/974438): we can't advertise accelerated image decoding in
|
||||
// AMD until we support VAAPI surfaces with multiple buffer objects.
|
||||
// TODO(crbug.com/40632250): we can't advertise accelerated image decoding
|
||||
// in AMD until we support VAAPI surfaces with multiple buffer objects.
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
|
@ -469,7 +469,7 @@ class VaapiJpegDecoderWithDmaBufsTest : public VaapiJpegDecoderTest {
|
||||
TEST_P(VaapiJpegDecoderWithDmaBufsTest, DecodeSucceeds) {
|
||||
ASSERT_NE(VAImplementation::kInvalid, VaapiWrapper::GetImplementationType());
|
||||
if (VaapiWrapper::GetImplementationType() == VAImplementation::kMesaGallium) {
|
||||
// TODO(crbug.com/974438): until we support surfaces with multiple buffer
|
||||
// TODO(crbug.com/40632250): until we support surfaces with multiple buffer
|
||||
// objects, the AMD driver fails this test.
|
||||
GTEST_SKIP();
|
||||
}
|
||||
|
@ -830,7 +830,7 @@ void VaapiVideoDecoder::ApplyResolutionChangeWithScreenSizes(
|
||||
DVLOGF(2) << "The frame pool initialization is aborted";
|
||||
SetState(State::kExpectingReset);
|
||||
} else {
|
||||
// TODO(crbug/1103510): don't drop the error on the floor here.
|
||||
// TODO(crbug.com/40139291): don't drop the error on the floor here.
|
||||
SetErrorState("failed Initialize()ing the frame pool");
|
||||
}
|
||||
return;
|
||||
|
@ -175,7 +175,7 @@ bool VaapiVideoEncodeAccelerator::Initialize(
|
||||
}
|
||||
#endif // BUILDFLAG(IS_CHROMEOS)
|
||||
|
||||
// TODO(crbug.com/1186051): Remove this restriction.
|
||||
// TODO(crbug.com/40172317): Remove this restriction.
|
||||
for (size_t i = 0; i < config.spatial_layers.size(); ++i) {
|
||||
for (size_t j = i + 1; j < config.spatial_layers.size(); ++j) {
|
||||
if (config.spatial_layers[i].width == config.spatial_layers[j].width &&
|
||||
|
@ -2622,7 +2622,7 @@ VaapiWrapper::ExportVASurfaceAsNativePixmapDmaBufUnwrapped(
|
||||
// We only support one bo containing all the planes. The fd should be owned by
|
||||
// us: per va/va.h, "the exported handles are owned by the caller."
|
||||
//
|
||||
// TODO(crbug.com/974438): support multiple buffer objects so that this can
|
||||
// TODO(crbug.com/40632250): support multiple buffer objects so that this can
|
||||
// work in AMD.
|
||||
CHECK_EQ(descriptor.num_objects, 1u)
|
||||
<< "Only surface descriptors with one bo are supported";
|
||||
|
@ -204,7 +204,7 @@ class D3D12VideoDecoderWrapperImpl : public D3D12VideoDecoderWrapper {
|
||||
RETURN_IF_FAILED("D3D12Fence SetEventOnCompletion() failed",
|
||||
D3D11StatusCode::kDecoderEndFrameFailed, hr);
|
||||
|
||||
// TODO(crbug.com/1348104): Let ID3D11DeviceContext4::Wait() for a
|
||||
// TODO(crbug.com/40233230): Let ID3D11DeviceContext4::Wait() for a
|
||||
// ID3D11Fence instead.
|
||||
return WaitForSingleObject(fence_event.get(), INFINITE) == WAIT_OBJECT_0;
|
||||
}
|
||||
@ -415,7 +415,7 @@ std::unique_ptr<D3D12VideoDecoderWrapper> D3D12VideoDecoderWrapper::Create(
|
||||
hr = video_decoder->GetDevice(IID_PPV_ARGS(&device));
|
||||
CHECK_EQ(hr, S_OK);
|
||||
|
||||
// TODO(crbug.com/1348104): Share the command queue across video decoders.
|
||||
// TODO(crbug.com/40233230): Share the command queue across video decoders.
|
||||
Microsoft::WRL::ComPtr<ID3D12CommandQueue> command_queue;
|
||||
D3D12_COMMAND_QUEUE_DESC command_queue_desc{
|
||||
D3D12_COMMAND_LIST_TYPE_VIDEO_DECODE};
|
||||
|
@ -352,7 +352,7 @@ media_subcomponent_deps = [
|
||||
"//media/audio",
|
||||
"//media/base",
|
||||
|
||||
# TODO(crbug.com/583067): These files should not be in //media/base.
|
||||
# TODO(crbug.com/41237623): These files should not be in //media/base.
|
||||
"//media/base/android",
|
||||
"//media/capabilities",
|
||||
"//media/cdm",
|
||||
|
@ -315,14 +315,14 @@ scoped_refptr<VideoFrame> MediaFoundationRendererClient::Render(
|
||||
media_task_runner_->PostTask(
|
||||
FROM_HERE, base::BindOnce(callback, weak_factory_.GetWeakPtr()));
|
||||
|
||||
// TODO(crbug.com/1298093): Need to report underflow when we don't have a
|
||||
// TODO(crbug.com/40822735): Need to report underflow when we don't have a
|
||||
// frame ready for presentation by calling OnBufferingStateChange
|
||||
|
||||
return next_video_frame_;
|
||||
}
|
||||
|
||||
void MediaFoundationRendererClient::OnFrameDropped() {
|
||||
// TODO(crbug.com/1298093): Need to notify when frames were not presented.
|
||||
// TODO(crbug.com/40822735): Need to notify when frames were not presented.
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -39,7 +39,7 @@ class MEDIA_EXPORT Mp4Muxer : public Muxer {
|
||||
|
||||
const std::unique_ptr<Mp4MuxerDelegateInterface> mp4_muxer_delegate_;
|
||||
|
||||
// TODO(crbug.com/1381323): consider if output should be based on media
|
||||
// TODO(crbug.com/40876732): consider if output should be based on media
|
||||
// timestamps.
|
||||
base::TimeDelta max_data_output_interval_;
|
||||
base::TimeTicks start_or_lastest_flushed_time_;
|
||||
|
@ -67,7 +67,7 @@ void BuildTrack(
|
||||
moov.extends.track_extends[track_index];
|
||||
audio_extends.track_id = track_index + 1;
|
||||
|
||||
// TODO(crbug.com/1464063): Various MP4 samples doesn't need
|
||||
// TODO(crbug.com/40275472): Various MP4 samples doesn't need
|
||||
// default_sample_duration, default_sample_size, default_sample_flags. We need
|
||||
// to investigate it further though whether we need to set these fields.
|
||||
audio_extends.default_sample_description_index = 1;
|
||||
|
@ -195,7 +195,7 @@ void Mp4MuxerDelegateFragment::AddNewTrack(uint32_t track_index) {
|
||||
fragment_header_flags = {
|
||||
TrackFragmentHeaderFlags::kDefaultBaseIsMoof,
|
||||
TrackFragmentHeaderFlags::kkDefaultSampleFlagsPresent
|
||||
// TODO(crbug.com/1464063).
|
||||
// TODO(crbug.com/40275472).
|
||||
// TrackFragmentHeaderFlags::kDefaultSampleDurationPresent,
|
||||
};
|
||||
track_fragment.header.flags =
|
||||
@ -251,7 +251,7 @@ void Mp4MuxerDelegateFragment::AddDataToMdat(std::vector<uint8_t>& track_data,
|
||||
// `VideoEncoder::produce_annexb=false`.
|
||||
|
||||
// Copy the data to the mdat.
|
||||
// TODO(crbug.com/1458518): We'll want to store the data as a vector of
|
||||
// TODO(crbug.com/40273983): We'll want to store the data as a vector of
|
||||
// encoded buffers instead of a single block so you don't have to resize
|
||||
// a giant blob of memory to hold them all. We should only have one
|
||||
// copy into the final muxed output buffer in an ideal world.
|
||||
@ -260,7 +260,7 @@ void Mp4MuxerDelegateFragment::AddDataToMdat(std::vector<uint8_t>& track_data,
|
||||
track_data.reserve((current_size + encoded_data.size()) * 1.5);
|
||||
}
|
||||
|
||||
// TODO(crbug.com/1458518): encoded stream needs to be movable container.
|
||||
// TODO(crbug.com/40273983): encoded stream needs to be movable container.
|
||||
track_data.resize(current_size + encoded_data.size());
|
||||
memcpy(&track_data[current_size], encoded_data.data(), encoded_data.size());
|
||||
}
|
||||
|
@ -438,7 +438,7 @@ void WebmMuxer::MaybeForceNewCluster() {
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO(crbug.com/1381323): consider if cluster output should be based on
|
||||
// TODO(crbug.com/40876732): consider if cluster output should be based on
|
||||
// media timestamps
|
||||
if (base::TimeTicks::Now() - delegate_->last_data_output_timestamp() >=
|
||||
max_data_output_interval_) {
|
||||
|
@ -129,7 +129,7 @@ class MEDIA_EXPORT WebmMuxer : public Muxer {
|
||||
// |duration| after the last write.
|
||||
// The maximum duration between forced clusters is internally limited to not
|
||||
// go below 100 ms.
|
||||
// TODO(crbug.com/1381323): consider if cluster output should be based on
|
||||
// TODO(crbug.com/40876732): consider if cluster output should be based on
|
||||
// media timestamps.
|
||||
base::TimeDelta max_data_output_interval_;
|
||||
|
||||
|
@ -323,7 +323,7 @@ void RendererController::OnDataSourceInitialized(
|
||||
|
||||
void RendererController::OnHlsManifestDetected() {
|
||||
is_hls_ = true;
|
||||
// TODO(crbug.com/1266991) Android used to rely solely on MediaPlayer for HLS
|
||||
// TODO(crbug.com/40057824) Android used to rely solely on MediaPlayer for HLS
|
||||
// playback, but now there is an alternative native player. Should we still
|
||||
// be doing this in all cases? It does work in its current state, on both
|
||||
// android and desktop, but it is not thoroughly tested.
|
||||
|
@ -446,7 +446,7 @@ void ConvertVideoFrameToRGBPixelsTask(const VideoFrame* video_frame,
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO(crbug.com/828599): This should default to BT.709 color space.
|
||||
// TODO(crbug.com/41380578): This should default to BT.709 color space.
|
||||
auto yuv_cs = kRec601_SkYUVColorSpace;
|
||||
video_frame->ColorSpace().ToSkYUVColorSpace(video_frame->BitDepth(), &yuv_cs);
|
||||
const libyuv::YuvConstants* matrix = GetYuvContantsForColorSpace(yuv_cs);
|
||||
@ -798,7 +798,7 @@ class VideoImageGenerator : public cc::PaintImageGenerator {
|
||||
SkYUVColorSpace yuv_color_space;
|
||||
if (!frame_->ColorSpace().ToSkYUVColorSpace(frame_->BitDepth(),
|
||||
&yuv_color_space)) {
|
||||
// TODO(crbug.com/828599): This should default to BT.709 color space.
|
||||
// TODO(crbug.com/41380578): This should default to BT.709 color space.
|
||||
yuv_color_space = kRec601_SkYUVColorSpace;
|
||||
}
|
||||
|
||||
|
@ -385,7 +385,7 @@ SkYUVAInfo VideoFrameYUVMailboxesHolder::VideoFrameGetSkYUVAInfo(
|
||||
std::tie(plane_config, subsampling) =
|
||||
VideoPixelFormatToSkiaValues(video_frame->format());
|
||||
|
||||
// TODO(crbug.com/828599): This should really default to rec709.
|
||||
// TODO(crbug.com/41380578): This should really default to rec709.
|
||||
SkYUVColorSpace color_space = kRec601_SkYUVColorSpace;
|
||||
video_frame->ColorSpace().ToSkYUVColorSpace(video_frame->BitDepth(),
|
||||
&color_space);
|
||||
|
@ -1654,7 +1654,7 @@ bool VideoResourceUpdater::WriteYUVPixelsForAllPlanesToTexture(
|
||||
SkYUVAInfo::PlaneConfig plane_config = ToSkYUVAPlaneConfig(yuv_si_format);
|
||||
SkYUVAInfo::Subsampling subsampling = ToSkYUVASubsampling(yuv_si_format);
|
||||
|
||||
// TODO(crbug.com/828599): This should really default to rec709.
|
||||
// TODO(crbug.com/41380578): This should really default to rec709.
|
||||
SkYUVColorSpace color_space = kIdentity_SkYUVColorSpace;
|
||||
if (video_frame->ColorSpace().IsValid()) {
|
||||
// This feature is disabled for valid but unsupported color spaces, so we
|
||||
|
@ -279,8 +279,8 @@ HRESULT MediaFoundationRenderer::CreateMediaEngine(
|
||||
RETURN_IF_FAILED(creation_attributes->SetUnknown(
|
||||
MF_MEDIA_ENGINE_DXGI_MANAGER, dxgi_device_manager_.Get()));
|
||||
|
||||
// TODO(crbug.com/1276067): We'll investigate scenarios to see if we can use
|
||||
// the on-screen video window size and not the native video size.
|
||||
// TODO(crbug.com/40808656): We'll investigate scenarios to see if we can
|
||||
// use the on-screen video window size and not the native video size.
|
||||
if (rendering_mode_ == MediaFoundationRenderingMode::FrameServer) {
|
||||
gfx::Size max_video_size;
|
||||
bool has_video = false;
|
||||
@ -718,7 +718,7 @@ HRESULT MediaFoundationRenderer::InitializeTexturePool(const gfx::Size& size) {
|
||||
return E_UNEXPECTED;
|
||||
}
|
||||
|
||||
// TODO(crbug.com/1276067): change |size| to instead use the required
|
||||
// TODO(crbug.com/40808656): change |size| to instead use the required
|
||||
// size of the output (for example if the video is only 1280x720 instead
|
||||
// of a source frame of 1920x1080 we'd use the 1280x720 texture size).
|
||||
// However we also need to investigate the scenario of WebGL and 360 video
|
||||
@ -1137,8 +1137,8 @@ void MediaFoundationRenderer::RequestNextFrame() {
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO(crbug.com/1276067): Change the |native_video_size_| to get the correct
|
||||
// output video size as determined by the output texture requirements.
|
||||
// TODO(crbug.com/40808656): Change the |native_video_size_| to get the
|
||||
// correct output video size as determined by the output texture requirements.
|
||||
gfx::Size video_size = native_video_size_;
|
||||
|
||||
base::UnguessableToken frame_token;
|
||||
|
@ -86,7 +86,7 @@ class MediaFoundationRendererIntegrationTest
|
||||
};
|
||||
|
||||
TEST_F(MediaFoundationRendererIntegrationTest, BasicPlayback) {
|
||||
// TODO(crbug.com/1240681): This test is very flaky on win10-20h2.
|
||||
// TODO(crbug.com/40194343): This test is very flaky on win10-20h2.
|
||||
if (base::win::OSInfo::GetInstance()->version() >=
|
||||
base::win::Version::WIN10_20H2) {
|
||||
GTEST_SKIP() << "Skipping test for WIN10_20H2 and greater";
|
||||
@ -101,7 +101,7 @@ TEST_F(MediaFoundationRendererIntegrationTest, BasicPlayback) {
|
||||
}
|
||||
|
||||
TEST_F(MediaFoundationRendererIntegrationTest, BasicPlayback_MediaSource) {
|
||||
// TODO(crbug.com/1240681): This test is very flaky on win10-20h2.
|
||||
// TODO(crbug.com/40194343): This test is very flaky on win10-20h2.
|
||||
if (base::win::OSInfo::GetInstance()->version() >=
|
||||
base::win::Version::WIN10_20H2) {
|
||||
GTEST_SKIP() << "Skipping test for WIN10_20H2 and greater";
|
||||
|
@ -321,7 +321,7 @@ FrameResources::CreateVideoFrameAndTakeGpuMemoryBuffer() {
|
||||
|
||||
video_frame->set_color_space(color_space_);
|
||||
|
||||
// TODO(https://crbug.com/1191956): This should depend on the platform and
|
||||
// TODO(crbug.com/40174702): This should depend on the platform and
|
||||
// format.
|
||||
video_frame->metadata().allow_overlay = true;
|
||||
|
||||
@ -412,7 +412,7 @@ void InternalRefCountedPool::OnVideoFrameDestroyed(
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO(https://crbug.com/1191956): Determine if we can get away with just
|
||||
// TODO(crbug.com/40174702): Determine if we can get away with just
|
||||
// having 1 available frame, or if that will cause flakey underruns.
|
||||
constexpr size_t kMaxAvailableFrames = 2;
|
||||
available_frame_resources_.push_back(std::move(frame_resources));
|
||||
|
@ -82,8 +82,8 @@ bool ApmNeedsPlayoutReference(const webrtc::AudioProcessing* apm,
|
||||
// needed.
|
||||
return false;
|
||||
}
|
||||
// TODO(crbug.com/1410129): Move the logic below into WebRTC APM since APM may
|
||||
// use injected sub-modules the usage of which is not reflected in the APM
|
||||
// TODO(crbug.com/40889535): Move the logic below into WebRTC APM since APM
|
||||
// may use injected sub-modules the usage of which is not reflected in the APM
|
||||
// config (e.g., render side processing).
|
||||
const webrtc::AudioProcessing::Config config = apm->GetConfig();
|
||||
const bool aec = config.echo_canceller.enabled;
|
||||
|
@ -50,7 +50,7 @@ void ConfigAutomaticGainControl(const AudioProcessingSettings& settings,
|
||||
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \
|
||||
BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_FUCHSIA)
|
||||
// Use AGC2 digital and input volume controller.
|
||||
// TODO(crbug.com/1375239): Remove `kWebRtcAllowInputVolumeAdjustment` safely
|
||||
// TODO(crbug.com/40872787): Remove `kWebRtcAllowInputVolumeAdjustment` safely
|
||||
// and set `input_volume_controller.enabled` true.
|
||||
apm_config.gain_controller2.input_volume_controller.enabled =
|
||||
!kInputVolumeAdjustmentOverrideAllowed ||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user