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