blob: 58b3278481882cfcdd86a513e02da21dd0e8a3de [file] [log] [blame] [edit]
// Copyright 2020 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef RUNTIME_PROBE_FUNCTIONS_USB_CAMERA_H_
#define RUNTIME_PROBE_FUNCTIONS_USB_CAMERA_H_
#include <linux/videodev2.h>
#include <optional>
#include <base/files/file_path.h>
#include "runtime_probe/probe_function.h"
namespace runtime_probe {
class UsbCameraFunction : public PrivilegedProbeFunction {
using PrivilegedProbeFunction::PrivilegedProbeFunction;
public:
NAME_PROBE_FUNCTION("usb_camera");
private:
DataType EvalImpl() const override;
// For mocking.
// Query the V4L2 capability of file descriptor |fd| via ioctl.
//
// @return: V4L2 capability if the query is successful, otherwise
// std::nullopt.
virtual std::optional<v4l2_capability> QueryV4l2Cap(int32_t fd) const;
// Check if the device at |path| is a capture device
bool IsCaptureDevice(const base::FilePath& path) const;
// If |path| represents an usb camera, probe its information from sysfs and
// store it in |res|.
//
// @return: |true| if the device is an usb camera.
bool ExploreAsUsbCamera(const base::FilePath& path, base::Value* res) const;
};
} // namespace runtime_probe
#endif // RUNTIME_PROBE_FUNCTIONS_USB_CAMERA_H_