| /* |
| * Copyright 2015 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 CAMERA_HAL_USB_V1_CAMERA_DEVICE_DELEGATE_H_ |
| #define CAMERA_HAL_USB_V1_CAMERA_DEVICE_DELEGATE_H_ |
| |
| #include <string> |
| #include <vector> |
| |
| #include <base/macros.h> |
| |
| #include "hal/usb_v1/common_types.h" |
| |
| namespace arc { |
| |
| // CameraDeviceDelegate should match the one in Android camera HAL. |
| class CameraDeviceDelegate { |
| public: |
| CameraDeviceDelegate() {} |
| virtual ~CameraDeviceDelegate() {} |
| |
| // Connect camera device with |device_path|. Return 0 if device is opened |
| // successfully. Otherwise, return -|errno|. |
| virtual int Connect(const std::string& device_path) = 0; |
| |
| // Disconnect camera device. This function is a no-op if the camera device |
| // is not connected. If the stream is on, this function will also stop the |
| // stream. |
| virtual void Disconnect() = 0; |
| |
| // Enable camera device stream. Setup captured frame with |width|x|height| |
| // resolution, |pixel_format|, and |frame_rate|. Get frame buffer file |
| // descriptors |fds| and |buffer_size|. |buffer_size| is the size allocated |
| // for each buffer. The ownership of |fds| are transferred to the caller and |
| // |fds| should be closed when done. Caller can memory map |fds| and should |
| // unmap when done. Return 0 if device supports the format. Otherwise, return |
| // -|errno|. This function should be called after Connect(). |
| virtual int StreamOn(uint32_t width, |
| uint32_t height, |
| uint32_t pixel_format, |
| float frame_rate, |
| std::vector<int>* fds, |
| uint32_t* buffer_size) = 0; |
| |
| // Disable camera device stream. Return 0 if device disables stream |
| // successfully. Otherwise, return -|errno|. This function is a no-op if the |
| // stream is already stopped. |
| virtual int StreamOff() = 0; |
| |
| // Get next frame buffer from device. Device returns the corresponding |
| // buffer with |buffer_id| and |data_size| bytes. |data_size| is how many |
| // bytes used in the buffer for this frame. Return 0 if device gets the |
| // buffer successfully. Otherwise, return -|errno|. Return -EAGAIN immediately |
| // if next frame buffer is not ready. This function should be called after |
| // StreamOn(). |
| virtual int GetNextFrameBuffer(uint32_t* buffer_id, uint32_t* data_size) = 0; |
| |
| // Return |buffer_id| buffer to device. Return 0 if the buffer is returned |
| // successfully. Otherwise, return -|errno|. This function should be called |
| // after StreamOn(). |
| virtual int ReuseFrameBuffer(uint32_t buffer_id) = 0; |
| |
| // Get all supported formats of device by |device_path|. This function can be |
| // called without calling Connect(). |
| virtual const SupportedFormats GetDeviceSupportedFormats( |
| const std::string& device_path) = 0; |
| |
| // Get all camera devices information. This function can be called without |
| // calling Connect(). |
| virtual const DeviceInfos GetCameraDeviceInfos() = 0; |
| |
| DISALLOW_COPY_AND_ASSIGN(CameraDeviceDelegate); |
| }; |
| |
| } // namespace arc |
| |
| #endif // CAMERA_HAL_USB_V1_CAMERA_DEVICE_DELEGATE_H_ |