// 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.

#ifndef MEDIA_CAPABILITIES_COMMON_H_
#define MEDIA_CAPABILITIES_COMMON_H_

#include <string>
#include <utility>
#include <vector>

#include <base/files/file_path.h>

enum class CameraDescription : int32_t {
  kNone = 0,
  kBuiltinUSBCamera,
  kBuiltinMIPICamera,
  kVividCamera,
  kBuiltinCamera,
  kBuiltinOrVividCamera,
};

enum class Profile : int32_t {
  kNone = 0,
  // TODO(hiroh): Think about adding h264 constrained baseline.
  kH264Baseline,
  kH264Main,
  kH264High,
  kVP8,
  kVP9Profile0,
  kVP9Profile2,
  kAV1Main,
  // TODO(b/172229001): Add HEVC and HEVC10 profiles.
  kJPEG,
};

enum class Resolution : int32_t {
  kNone = 0,
  k1080p,  // 1920x1080
  k2160p,  // 3840x2160
};

enum class Subsampling : int32_t {
  kNone = 0,
  kYUV420,
  kYUV422,
  kYUV444,
};

enum class ColorDepth : int32_t {
  kNone = 0,
  k8bit,
  k10bit,
};

// TODO(b/172229001): Add encryption enum.

class Capability {
 public:
  // For codec capability.
  Capability(Profile profile,
             bool decode,
             Resolution resolution,
             Subsampling subsampling,
             ColorDepth color_depth);
  // For camera capability.
  explicit Capability(CameraDescription camera_description);
  ~Capability() = default;
  Capability(const Capability&) = default;
  Capability& operator=(const Capability&) = default;

  bool operator<(const Capability& other) const;
  bool operator==(const Capability& other) const;
  bool operator!=(const Capability& other) const;
  std::string ToString() const;

 private:
  CameraDescription camera_description_;
  Profile profile_;
  bool decode_;
  Resolution resolution_;
  Subsampling subsampling_;
  ColorDepth color_depth_;
};

// Gets paths of all existing files (not directories) with the specified prefix,
// |absolute_path|. For instance, if "/dev/video" is given, /dev/video0 and
// /dev/video-dec0 are returned if they exist.
std::vector<base::FilePath> GetAllFilesWithPrefix(
    const base::FilePath& absolute_path);

// Executes an ioctl() retrying in case of a signal interruption.
int Ioctl(int fd, uint32_t request, void* args);

// Gets all Resolutions that are less than or equal to |resolution|.
std::vector<Resolution> GetInterestingResolutionsUpTo(
    const std::pair<int, int>& resolution);
#endif  // MEDIA_CAPABILITIES_COMMON_H_
