blob: 94e9926e3d8a9bb33cfa1e579496f8485aa641f4 [file] [log] [blame]
// Copyright 2021 The Chromium OS 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 <stdlib.h>
#include <algorithm>
#include <iostream>
#include <memory>
#include <vector>
#include <base/bind.h>
#include <base/callback.h>
#include <base/logging.h>
#include <brillo/flag_helper.h>
#include <brillo/syslog_logging.h>
#include "media_capabilities/camera.h"
#include "media_capabilities/common.h"
#if defined(USE_V4L2_CODEC)
#include "media_capabilities/v4l2.h"
#endif // defined(USE_V4L2_CODEC)
#if defined(USE_VAAPI)
#include "media_capabilities/vaapi.h"
#endif // defined(USE_VAAPI)
int main(int argc, char* argv[]) {
DEFINE_int32(log_level, 0,
"Logging level - 0: LOG(INFO), 1: LOG(WARNING), 2: LOG(ERROR), "
"-1: VLOG(1), -2: VLOG(2), ...");
brillo::FlagHelper::Init(
argc, argv, "Command line tool to detect video and camera capabilities");
brillo::InitLog(brillo::kLogToStderrIfTty);
logging::SetMinLogLevel(FLAGS_log_level);
using DetectFunction = base::RepeatingCallback<std::vector<Capability>()>;
const DetectFunction kDetectFunctions[] = {
#if defined(USE_V4L2_CODEC)
base::BindRepeating(&DetectV4L2Capabilities),
#endif // defined(USE_V4L2_CODEC)
#if defined(USE_VAAPI)
base::BindRepeating(&DetectVaapiCapabilities),
#endif // defined(USE_VAAPI)
base::BindRepeating(&DetectCameraCapabilities),
};
std::vector<Capability> capabilities;
for (const DetectFunction& detect_function : kDetectFunctions) {
for (const auto& cap : detect_function.Run())
capabilities.push_back(cap);
}
// Remove duplicated capabilities to not print the same capability multiple
// times when the same capabilities are available in V4L2 API and VA-API.
std::sort(capabilities.begin(), capabilities.end());
auto last = std::unique(capabilities.begin(), capabilities.end());
capabilities.erase(last, capabilities.end());
for (const auto& cap : capabilities)
std::cout << cap.ToString() << std::endl;
}