1 /* Copyright (c) 2011-2012, The Linux Foundation. All rights reserved. 2 * 3 * Redistribution and use in source and binary forms, with or without 4 * modification, are permitted provided that the following conditions are 5 * met: 6 * * Redistributions of source code must retain the above copyright 7 * notice, this list of conditions and the following disclaimer. 8 * * Redistributions in binary form must reproduce the above 9 * copyright notice, this list of conditions and the following 10 * disclaimer in the documentation and/or other materials provided 11 * with the distribution. 12 * * Neither the name of The Linux Foundation nor the names of its 13 * contributors may be used to endorse or promote products derived 14 * from this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 20 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 23 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 25 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 26 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 #ifndef ANDROID_HARDWARE_QUALCOMM_CAMERA_USBCAM_H 30 #define ANDROID_HARDWARE_QUALCOMM_CAMERA_USBCAM_H 31 32 extern "C" { 33 #include <sys/time.h> 34 } 35 36 #include "QCameraHWI.h" 37 38 extern "C" { 39 40 /*#include <hardware/camera.h>*/ 41 42 int usbcam_get_number_of_cameras(); 43 int usbcam_get_camera_info(int camera_id, struct camera_info *info); 44 45 int usbcam_camera_device_open(const struct hw_module_t* module, const char* id, 46 struct hw_device_t** device); 47 48 hw_device_t * usbcam_open_camera_device(int cameraId); 49 50 int usbcam_close_camera_device( hw_device_t *); 51 52 namespace android { 53 54 /** Set the ANativeWindow to which preview frames are sent */ 55 int usbcam_set_preview_window(struct camera_device *, 56 struct preview_stream_ops *window); 57 58 /** Set the notification and data callbacks */ 59 void usbcam_set_CallBacks(struct camera_device *, 60 camera_notify_callback notify_cb, 61 camera_data_callback data_cb, 62 camera_data_timestamp_callback data_cb_timestamp, 63 camera_request_memory get_memory, 64 void *user); 65 66 /** 67 * The following three functions all take a msg_type, which is a bitmask of 68 * the messages defined in include/ui/Camera.h 69 */ 70 71 /** 72 * Enable a message, or set of messages. 73 */ 74 void usbcam_enable_msg_type(struct camera_device *, int32_t msg_type); 75 76 /** 77 * Disable a message, or a set of messages. 78 * 79 * Once received a call to disableMsgType(CAMERA_MSG_VIDEO_FRAME), camera 80 * HAL should not rely on its client to call releaseRecordingFrame() to 81 * release video recording frames sent out by the cameral HAL before and 82 * after the disableMsgType(CAMERA_MSG_VIDEO_FRAME) call. Camera HAL 83 * clients must not modify/access any video recording frame after calling 84 * disableMsgType(CAMERA_MSG_VIDEO_FRAME). 85 */ 86 void usbcam_disable_msg_type(struct camera_device *, int32_t msg_type); 87 88 /** 89 * Query whether a message, or a set of messages, is enabled. Note that 90 * this is operates as an AND, if any of the messages queried are off, this 91 * will return false. 92 */ 93 int usbcam_msg_type_enabled(struct camera_device *, int32_t msg_type); 94 95 /** 96 * Start preview mode. 97 */ 98 int usbcam_start_preview(struct camera_device *); 99 100 /** 101 * Stop a previously started preview. 102 */ 103 void usbcam_stop_preview(struct camera_device *); 104 105 /** 106 * Returns true if preview is enabled. 107 */ 108 int usbcam_preview_enabled(struct camera_device *); 109 110 /** 111 * Request the camera HAL to store meta data or real YUV data in the video 112 * buffers sent out via CAMERA_MSG_VIDEO_FRAME for a recording session. If 113 * it is not called, the default camera HAL behavior is to store real YUV 114 * data in the video buffers. 115 * 116 * This method should be called before startRecording() in order to be 117 * effective. 118 * 119 * If meta data is stored in the video buffers, it is up to the receiver of 120 * the video buffers to interpret the contents and to find the actual frame 121 * data with the help of the meta data in the buffer. How this is done is 122 * outside of the scope of this method. 123 * 124 * Some camera HALs may not support storing meta data in the video buffers, 125 * but all camera HALs should support storing real YUV data in the video 126 * buffers. If the camera HAL does not support storing the meta data in the 127 * video buffers when it is requested to do do, INVALID_OPERATION must be 128 * returned. It is very useful for the camera HAL to pass meta data rather 129 * than the actual frame data directly to the video encoder, since the 130 * amount of the uncompressed frame data can be very large if video size is 131 * large. 132 * 133 * @param enable if true to instruct the camera HAL to store 134 * meta data in the video buffers; false to instruct 135 * the camera HAL to store real YUV data in the video 136 * buffers. 137 * 138 * @return OK on success. 139 */ 140 int usbcam_store_meta_data_in_buffers(struct camera_device *, int enable); 141 142 /** 143 * Start record mode. When a record image is available, a 144 * CAMERA_MSG_VIDEO_FRAME message is sent with the corresponding 145 * frame. Every record frame must be released by a camera HAL client via 146 * releaseRecordingFrame() before the client calls 147 * disableMsgType(CAMERA_MSG_VIDEO_FRAME). After the client calls 148 * disableMsgType(CAMERA_MSG_VIDEO_FRAME), it is the camera HAL's 149 * responsibility to manage the life-cycle of the video recording frames, 150 * and the client must not modify/access any video recording frames. 151 */ 152 int usbcam_start_recording(struct camera_device *); 153 154 /** 155 * Stop a previously started recording. 156 */ 157 void usbcam_stop_recording(struct camera_device *); 158 159 /** 160 * Returns true if recording is enabled. 161 */ 162 int usbcam_recording_enabled(struct camera_device *); 163 164 /** 165 * Release a record frame previously returned by CAMERA_MSG_VIDEO_FRAME. 166 * 167 * It is camera HAL client's responsibility to release video recording 168 * frames sent out by the camera HAL before the camera HAL receives a call 169 * to disableMsgType(CAMERA_MSG_VIDEO_FRAME). After it receives the call to 170 * disableMsgType(CAMERA_MSG_VIDEO_FRAME), it is the camera HAL's 171 * responsibility to manage the life-cycle of the video recording frames. 172 */ 173 void usbcam_release_recording_frame(struct camera_device *, 174 const void *opaque); 175 176 /** 177 * Start auto focus, the notification callback routine is called with 178 * CAMERA_MSG_FOCUS once when focusing is complete. autoFocus() will be 179 * called again if another auto focus is needed. 180 */ 181 int usbcam_auto_focus(struct camera_device *); 182 183 /** 184 * Cancels auto-focus function. If the auto-focus is still in progress, 185 * this function will cancel it. Whether the auto-focus is in progress or 186 * not, this function will return the focus position to the default. If 187 * the camera does not support auto-focus, this is a no-op. 188 */ 189 int usbcam_cancel_auto_focus(struct camera_device *); 190 191 /** 192 * Take a picture. 193 */ 194 int usbcam_take_picture(struct camera_device *); 195 196 /** 197 * Cancel a picture that was started with takePicture. Calling this method 198 * when no picture is being taken is a no-op. 199 */ 200 int usbcam_cancel_picture(struct camera_device *); 201 202 /** 203 * Set the camera parameters. This returns BAD_VALUE if any parameter is 204 * invalid or not supported. 205 */ 206 int usbcam_set_parameters(struct camera_device *, const char *parms); 207 208 //status_t setParameters(const QCameraParameters& params); 209 /** Retrieve the camera parameters. The buffer returned by the camera HAL 210 must be returned back to it with put_parameters, if put_parameters 211 is not NULL. 212 */ 213 char* usbcam_get_parameters(struct camera_device *); 214 215 /** The camera HAL uses its own memory to pass us the parameters when we 216 call get_parameters. Use this function to return the memory back to 217 the camera HAL, if put_parameters is not NULL. If put_parameters 218 is NULL, then you have to use free() to release the memory. 219 */ 220 void usbcam_put_parameters(struct camera_device *, char *); 221 222 /** 223 * Send command to camera driver. 224 */ 225 int usbcam_send_command(struct camera_device *, 226 int32_t cmd, int32_t arg1, int32_t arg2); 227 228 /** 229 * Release the hardware resources owned by this object. Note that this is 230 * *not* done in the destructor. 231 */ 232 void usbcam_release(struct camera_device *); 233 234 /** 235 * Dump state of the camera hardware 236 */ 237 int usbcam_dump(struct camera_device *, int fd); 238 239 }; // namespace android 240 241 } //extern "C" 242 243 #endif 244