0

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:
Alison Gale
2024-04-26 22:38:20 +00:00
committed by Chromium LUCI CQ
parent 2c7aee3593
commit 71bd8f1596
558 changed files with 1182 additions and 1150 deletions
media
audio
base
capture
cast
cdm
ffmpeg
filters
formats
fuchsia
gpu
media_options.gni
mojo
muxers
remoting
renderers
video
webrtc
mojo
net
android
base
cert
cookies
disk_cache
dns
extras
http
log
proxy_resolution
quic
reporting
socket
spdy
test
tools
url_request
websockets
pdf
printing
remoting
sandbox
services
device
image_annotation
media_session
network
proxy_resolver_win
resource_coordinator
memory_instrumentation
screen_ai
service_manager
tracing
viz
webnn
skia/ext
sql
storage
testing
ui
accessibility
android
aura
base
compositor
display
events
file_manager
file_manager
integration_tests
file_manager
gfx
gl
latency
native_theme
ozone
platform_window
shell_dialogs
snapshot
views
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