166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/* Copyright (c) 2012, The Linux Foundation. All rights reserved. 266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * Redistribution and use in source and binary forms, with or without 466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * modification, are permitted provided that the following conditions are 566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * met: 666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * * Redistributions of source code must retain the above copyright 766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * notice, this list of conditions and the following disclaimer. 866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * * Redistributions in binary form must reproduce the above 966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * copyright notice, this list of conditions and the following 1066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * disclaimer in the documentation and/or other materials provided 1166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * with the distribution. 1266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * * Neither the name of The Linux Foundation nor the names of its 1366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * contributors may be used to endorse or promote products derived 1466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * from this software without specific prior written permission. 1566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * 1666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 1766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 1866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 1966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 2066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 2366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 2466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 2566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 2666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin */ 2866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 2966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#ifndef ANDROID_HARDWARE_QCAMERA_USB_PRIV_H 3066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define ANDROID_HARDWARE_QCAMERA_USB_PRIV_H 3166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 3266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinnamespace android { 3366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 3466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/* File name length in number of characters */ 3566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define FILENAME_LENGTH (256) 3666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 3766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/* Number of display buffers (in addition to minimum number of undequed buffers */ 3866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define PRVW_DISP_BUF_CNT 2 3966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 4066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/* Number of V4L2 capture buffers. */ 4166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define PRVW_CAP_BUF_CNT 4 4266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 4366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/* Maximum buffer size for JPEG output in number of bytes */ 4466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define MAX_JPEG_BUFFER_SIZE (1024 * 1024) 4566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 4666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/* Preview loop commands */ 4766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define USB_CAM_PREVIEW_EXIT (0x100) 4866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define USB_CAM_PREVIEW_PAUSE (0x101) 4966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define USB_CAM_PREVIEW_TAKEPIC (0x200) 5066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 5166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/****************************************************************************** 5266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * Macro function to input validate device handle 5366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *****************************************************************************/ 5466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define VALIDATE_DEVICE_HDL(camHal, device, ret_err_code) {\ 5566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(device && device->priv){\ 5666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camHal = (camera_hardware_t *)device->priv;\ 5766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin }else{\ 5866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ALOGE("%s: Null device or device->priv", __func__);\ 5966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return ret_err_code;\ 6066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin }\ 6166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}\ 6266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 6366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/****************************************************************************** 6466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * Macro function to check return status of a function, log and exit the thread 6566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *****************************************************************************/ 6666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define ERROR_CHECK_EXIT_THREAD(rc, string) {\ 6766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(rc < 0) {\ 6866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ALOGE("%s: Error %s", __func__, string);\ 6966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return (void *)-1;\ 7066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin }\ 7166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 7266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 7366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/****************************************************************************** 7466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * Macro function to check return status of a function, log and exit 7566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *****************************************************************************/ 7666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define ERROR_CHECK_EXIT(rc, string) {\ 7766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(rc < 0) {\ 7866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ALOGE("%s: Error %s", __func__, string);\ 7966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return -1;\ 8066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin }\ 8166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 8266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 8366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/****************************************************************************** 8466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* Macro function to Print the parameter string 1000 characters at a time 8566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin******************************************************************************/ 8666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define PRINT_PARAM_STR(parms) {\ 8766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char temp[1001] = {0};\ 8866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int n=0;\ 8966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin while(1) {\ 9066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin strlcpy(temp,parms+n,1000);\ 9166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ALOGD("parms = %s", temp);\ 9266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if (strlen(temp) < 1000) break;\ 9366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin n += 1000;\ 9466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin }\ 9566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin }\ 9666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 9766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/****************************************************************************** 9866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * Macro function to open camera 9966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *****************************************************************************/ 10066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define USB_CAM_OPEN(camHal) {\ 10166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camHal->fd = open(camHal->dev_name, O_RDWR | O_NONBLOCK, 0);\ 10266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(!camHal->fd)\ 10366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ALOGE("%s: Error in open", __func__);\ 10466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin else\ 10566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ALOGD("%s: Successfully opened", __func__);\ 10666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin }\ 10766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 10866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/****************************************************************************** 10966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * Macro function to close camera 11066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *****************************************************************************/ 11166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define USB_CAM_CLOSE(camHal) {\ 11266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int rc;\ 11366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(camHal->fd){\ 11466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin rc = close(camHal->fd);\ 11566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin if(0 > rc){\ 11666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ALOGE("%s: close failed ", __func__);\ 11766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin }\ 11866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin else{\ 11966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camHal->fd = 0;\ 12066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ALOGD("%s: close successful", __func__);\ 12166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin }\ 12266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin }\ 12366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin }\ 12466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 12566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinstruct bufObj { 12666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *data; 12766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int len; 12866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 12966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 13066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef struct { 13166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera_device hw_dev; 13266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin Mutex lock; 13366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int previewEnabledFlag; 13466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int prvwStoppedForPicture; 13566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int msgEnabledFlag; 13666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin volatile int prvwCmdPending; 13766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin volatile int prvwCmd; 13866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pthread_t previewThread; 13966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pthread_t takePictureThread; 14066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 14166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera_notify_callback notify_cb; 14266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera_data_callback data_cb; 14366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera_data_timestamp_callback data_cb_timestamp; 14466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera_request_memory get_memory; 14566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void* cb_ctxt; 14666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 14766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* capture related members */ 14866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* prevFormat is pixel format of preview buffers that are exported */ 14966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int prevFormat; 15066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int prevFps; 15166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int prevWidth; 15266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int prevHeight; 15366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* captureFormat is internal setting for USB camera buffers */ 15466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int captureFormat; 15566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char dev_name[FILENAME_LENGTH]; 15666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int fd; 15766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin unsigned int n_buffers; 15866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin struct v4l2_buffer curCaptureBuf; 15966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin struct bufObj *buffers; 16066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 16166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* Display related members */ 16266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin preview_stream_ops* window; 16366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraHalMemory_t previewMem; 16466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* dispFormat is preview display format.Same as preview buffer format*/ 16566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int dispFormat; 16666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int dispWidth; 16766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int dispHeight; 16866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 16966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* MJPEG decoder related members */ 17066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* MJPEG decoder object */ 17166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void* mjpegd; 17266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 17366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* JPEG picture and thumbnail related members */ 17466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int pictFormat; 17566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int pictWidth; 17666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int pictHeight; 17766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int pictJpegQlty; 17866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int thumbnailWidth; 17966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int thumbnailHeight; 18066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int thumbnailJpegQlty; 18166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraHalMemory_t pictMem; 18266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int takePictInProgress; 18366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int jpegEncInProgress; 18466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pthread_mutex_t jpegEncMutex; 18566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pthread_cond_t jpegEncCond; 18666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 18766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* */ 18866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraParameters qCamParams; 18966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 prevSizeValues; 19066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 pictSizeValues; 19166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 thumbnailSizeValues; 19266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 vidSizeValues; 19366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 pictFormatValues; 19466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 prevFormatValues; 19566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin String8 prevFpsRangesValues; 19666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 19766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} camera_hardware_t; 19866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 19966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 20066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; // namespace android 20166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 20266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#endif /* ANDROID_HARDWARE_QCAMERA_USB_PRIV_H */ 203