blob: e579028e4410fb7446cff9a3c1b77f7adc19ac22 [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "media/learning/common/media_learning_tasks.h"
#include "base/notreached.h"
namespace media {
namespace learning {
static const LearningTask& GetWillPlayTask() {
static LearningTask task_;
if (!task_.feature_descriptions.size()) {
task_.name = tasknames::kWillPlay;
// TODO(liberato): fill in the rest here, once we have the features picked.
}
return task_;
}
// Add some features to |task| that WMPI knows how to add.
static void PushWMPIFeatures(LearningTask& task) {
// TODO: Be sure to update webmediaplayer_impl if you change these, since it
// memorizes them.
task.feature_descriptions.push_back(
{"codec", LearningTask::Ordering::kUnordered});
task.feature_descriptions.push_back(
{"profile", LearningTask::Ordering::kUnordered});
task.feature_descriptions.push_back(
{"width", LearningTask::Ordering::kNumeric});
task.feature_descriptions.push_back(
{"fps", LearningTask::Ordering::kNumeric});
}
static const LearningTask& GetConsecutiveBadWindowsTask() {
static LearningTask task_;
if (!task_.feature_descriptions.size()) {
task_.name = tasknames::kConsecutiveBadWindows;
task_.model = LearningTask::Model::kExtraTrees;
// Target is max number of consecutive bad windows.
task_.target_description = {"max_bad_windows",
LearningTask::Ordering::kNumeric};
PushWMPIFeatures(task_);
// Report via UKM, but allow up to 100 bad windows, since it'll auto-scale
// to two digits of precision. Might as well use all of it, even if 100
// consecutive bad windows is unlikely.
task_.report_via_ukm = true;
task_.ukm_min_input_value = 0.0;
task_.ukm_max_input_value = 100.0;
}
return task_;
}
static const LearningTask& GetConsecutiveNNRsTask() {
static LearningTask task_;
if (!task_.feature_descriptions.size()) {
task_.name = tasknames::kConsecutiveNNRs;
task_.model = LearningTask::Model::kExtraTrees;
// Target is max number of consecutive bad windows.
task_.target_description = {"total_playback_nnrs",
LearningTask::Ordering::kNumeric};
PushWMPIFeatures(task_);
task_.report_via_ukm = true;
task_.ukm_min_input_value = 0.0;
task_.ukm_max_input_value = 100.0;
}
return task_;
}
// static
const LearningTask& MediaLearningTasks::Get(const char* task_name) {
if (strcmp(task_name, tasknames::kWillPlay) == 0)
return GetWillPlayTask();
if (strcmp(task_name, tasknames::kConsecutiveBadWindows) == 0)
return GetConsecutiveBadWindowsTask();
if (strcmp(task_name, tasknames::kConsecutiveNNRs) == 0)
return GetConsecutiveNNRsTask();
NOTREACHED() << " Unknown learning task:" << task_name;
static LearningTask empty_task;
return empty_task;
}
// static
void MediaLearningTasks::Register(
base::RepeatingCallback<void(const LearningTask&)> cb) {
cb.Run(Get(tasknames::kWillPlay));
cb.Run(Get(tasknames::kConsecutiveBadWindows));
cb.Run(Get(tasknames::kConsecutiveNNRs));
}
} // namespace learning
} // namespace media