| Index: media/capture/video/linux/camera_facing_chromeos.h
|
| diff --git a/media/capture/video/linux/camera_facing_chromeos.h b/media/capture/video/linux/camera_facing_chromeos.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e03a03fbc7e64306b7a8dab5c3435063dfef1ac3
|
| --- /dev/null
|
| +++ b/media/capture/video/linux/camera_facing_chromeos.h
|
| @@ -0,0 +1,82 @@
|
| +// Copyright 2016 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.
|
| +
|
| +#ifndef MEDIA_CAPTURE_VIDEO_LINUX_CAMERA_FACING_CHROMEOS_H_
|
| +#define MEDIA_CAPTURE_VIDEO_LINUX_CAMERA_FACING_CHROMEOS_H_
|
| +
|
| +#include <stddef.h>
|
| +
|
| +#include <string>
|
| +#include <unordered_map>
|
| +
|
| +#include <base/strings/string_piece.h>
|
| +#include "media/capture/capture_export.h"
|
| +
|
| +namespace media {
|
| +
|
| +// CameraFacingChromeOS reads the file /etc/camera/camera_characteristics.conf
|
| +// and populates |camera_id_to_facing_|, |usb_id_to_camera_id_| and
|
| +// |model_id_to_camera_id_|.
|
| +//
|
| +// Each line in the config file can be:
|
| +// 1. Empty line
|
| +// 2. Line starts with '#': comments
|
| +// 3. Line follows the format:
|
| +// camera[camera_id].[root_level_attribute]=[value] OR
|
| +// camera[camera_id].module[module_id].[module_level_attribute]=[value]
|
| +//
|
| +// There are several assumptions of the config file:
|
| +// 1. One camera ID has exactly one lens_facing attribute, at root level.
|
| +// 2. usb_path is specified at module level. usb_path may not present at all,
|
| +// but if it presents, the same usb_path does not appear accross different
|
| +// camera IDs.
|
| +// 3. usb_vid_pid is specified at module level. If usb_path does not present,
|
| +// each module needs to have one unique usb_vid_pid.
|
| +//
|
| +// Example of the config file:
|
| +// camera0.lens_facing=0
|
| +// camera0.sensor_orientation=0
|
| +// camera0.module0.usb_vid_pid=0123:4567
|
| +// camera0.module0.horizontal_view_angle=68.4
|
| +// camera0.module0.lens_info_available_focal_lengths=1.64
|
| +// camera0.module0.lens_info_minimum_focus_distance=0.22
|
| +// camera0.module0.lens_info_optimal_focus_distance=0.5
|
| +// camera0.module0.vertical_view_angle=41.6
|
| +// camera0.module1.usb_vid_pid=89ab:cdef
|
| +// camera0.module1.lens_info_available_focal_lengths=1.69,2
|
| +// camera1.lens_facing=1
|
| +// camera1.sensor_orientation=180
|
| +class CAPTURE_EXPORT CameraFacingChromeOS {
|
| + public:
|
| + enum LensFacing { FRONT = 0, BACK = 1 };
|
| +
|
| + CameraFacingChromeOS();
|
| + CAPTURE_EXPORT CameraFacingChromeOS(const std::string& config_file_path);
|
| + CAPTURE_EXPORT ~CameraFacingChromeOS();
|
| +
|
| + // Get camera facing by specifying USB vid and pid and device path. |model_id|
|
| + // should be formatted as "vid:pid". |device_id| is something like
|
| + // "/dev/video2". It first tries to match usb path, obtained from |device_id|.
|
| + // If fails, |model_id| is then used.
|
| + // Returns LensFacing::FRONT or LensFacing::BACK.
|
| + // Default is LensFacing::FRONT.
|
| + CAPTURE_EXPORT LensFacing GetCameraFacing(const std::string& device_id,
|
| + const std::string& model_id) const;
|
| +
|
| + static const LensFacing kLensFacingDefault = LensFacing::FRONT;
|
| +
|
| + private:
|
| + std::string GetUsbId(const std::string& device_id) const;
|
| + // Read file content and populate |camera_id_to_facing_|,
|
| + // |usb_id_to_camera_id_| and |model_id_to_camera_id_|.
|
| + void InitializeDeviceInfo(const std::string& config_file_path);
|
| +
|
| + std::unordered_map<int, LensFacing> camera_id_to_facing_;
|
| + std::unordered_map<std::string, int> usb_id_to_camera_id_;
|
| + std::unordered_map<std::string, int> model_id_to_camera_id_;
|
| +};
|
| +
|
| +} // namespace media
|
| +
|
| +#endif // MEDIA_CAPTURE_VIDEO_LINUX_CAMERA_FACING_CHROMEOS_H_
|
|
|