1e3e6d5190f31c50e5fd9f9b34dfdf32bfe457f3fDuy Truong/* Copyright (c) 2011, The Linux Foundation. All rights reserved.
200bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang *
300bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang * Redistribution and use in source and binary forms, with or without
400bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang * modification, are permitted provided that the following conditions are
500bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang * met:
600bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang *     * Redistributions of source code must retain the above copyright
700bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang *       notice, this list of conditions and the following disclaimer.
800bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang *     * Redistributions in binary form must reproduce the above
900bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang *       copyright notice, this list of conditions and the following
1000bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang *       disclaimer in the documentation and/or other materials provided
1100bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang *       with the distribution.
12e3e6d5190f31c50e5fd9f9b34dfdf32bfe457f3fDuy Truong *     * Neither the name of The Linux Foundation nor the names of its
1300bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang *       contributors may be used to endorse or promote products derived
1400bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang *       from this software without specific prior written permission.
1500bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang *
1600bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
1700bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
1800bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
1900bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
2000bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2100bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2200bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
2300bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
2400bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
2500bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
2600bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2700bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang *
2800bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang */
2900bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang
3000bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang#ifndef ANDROID_HARDWARE_QUALCOMM_CAMERA_H
3100bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang#define ANDROID_HARDWARE_QUALCOMM_CAMERA_H
3200bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang
3300bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang#include <hardware/camera2.h>
3400bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang
3500bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wangextern "C" {
3600bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang
3700bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang  int get_number_of_cameras();
3800bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang  int get_camera_info(int camera_id, struct camera_info *info);
3900bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang
4000bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang  int camera_device_open(const struct hw_module_t* module, const char* id,
4100bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang          struct hw_device_t** device);
4200bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang
4300bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang  hw_device_t * open_camera_device(int cameraId);
4400bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang
4500bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang  int close_camera_device( hw_device_t *);
4600bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang
4700bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wangnamespace android {
4800bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang  int set_request_queue_src_ops(const struct camera2_device *,
4900bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang    const camera2_request_queue_src_ops_t *request_src_ops);
5000bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang
5100bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang  int notify_request_queue_not_empty(const struct camera2_device *);
5200bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang
5300bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang  int set_frame_queue_dst_ops(const struct camera2_device *,
5400bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang    const camera2_frame_queue_dst_ops_t *frame_dst_ops);
5500bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang
5600bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang  int get_in_progress_count(const struct camera2_device *);
5700bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang
5800bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang  int flush_captures_in_progress(const struct camera2_device *);
5900bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang
6000bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang  int construct_default_request(const struct camera2_device *,
6100bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang    int request_template,
6200bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang    camera_metadata_t **request);
6300bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang
6400bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang  int allocate_stream(const struct camera2_device *,
6500bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang        uint32_t width,
6600bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang        uint32_t height,
6700bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang        int      format,
6800bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang        const camera2_stream_ops_t *stream_ops,
6900bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang        uint32_t *stream_id,
7000bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang        uint32_t *format_actual,
7100bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang        uint32_t *usage,
7200bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang        uint32_t *max_buffers);
7300bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang
7400bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang  int register_stream_buffers(
7500bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang        const struct camera2_device *,
7600bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang        uint32_t stream_id,
7700bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang        int num_buffers,
7800bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang        buffer_handle_t *buffers);
7900bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang
8000bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang  int release_stream(
8100bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang        const struct camera2_device *,
8200bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang        uint32_t stream_id);
8300bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang
8400bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang  int allocate_reprocess_stream(const struct camera2_device *,
8500bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang        uint32_t width,
8600bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang        uint32_t height,
8700bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang        uint32_t format,
8800bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang        const camera2_stream_in_ops_t *reprocess_stream_ops,
8900bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang        uint32_t *stream_id,
9000bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang        uint32_t *consumer_usage,
9100bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang        uint32_t *max_buffers);
9200bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang
93816a007691101fc4e5de41be16a15132984375ddEino-Ville Talvala  int allocate_reprocess_stream_from_stream(const struct camera2_device *,
94816a007691101fc4e5de41be16a15132984375ddEino-Ville Talvala        uint32_t output_stream_id,
95816a007691101fc4e5de41be16a15132984375ddEino-Ville Talvala        const camera2_stream_in_ops_t *stream_ops,
96816a007691101fc4e5de41be16a15132984375ddEino-Ville Talvala        uint32_t *stream_id);
97816a007691101fc4e5de41be16a15132984375ddEino-Ville Talvala
9800bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang  int release_reprocess_stream(
9900bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang        const struct camera2_device *,
10000bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang        uint32_t stream_id);
10100bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang
10200bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang  int trigger_action(const struct camera2_device *,
10300bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang        uint32_t trigger_id,
10400bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang        int32_t ext1,
10500bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang        int32_t ext2);
10600bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang
10700bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang  int set_notify_callback(const struct camera2_device *,
10800bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang        camera2_notify_callback notify_cb,
10900bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang        void *user);
11000bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang
11100bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang  int get_metadata_vendor_tag_ops(const struct camera2_device*,
11200bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang        vendor_tag_query_ops_t **ops);
11300bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang
11400bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang  int dump(const struct camera2_device *, int fd);
11500bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang}; // namespace android
11600bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang
11700bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang} //extern "C"
11800bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang
11900bf2d2f8f42f81436d1eaa7e0672817eb834994Shuzhen Wang#endif
120