• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /* Copyright (c) 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_QCAMERA_USB_PRIV_H
30  #define ANDROID_HARDWARE_QCAMERA_USB_PRIV_H
31  
32  namespace android {
33  
34  /* File name length in number of characters */
35  #define FILENAME_LENGTH     (256)
36  
37  /* Number of display buffers (in addition to minimum number of undequed buffers */
38  #define PRVW_DISP_BUF_CNT   2
39  
40  /* Number of V4L2 capture  buffers. */
41  #define PRVW_CAP_BUF_CNT    4
42  
43  /* Maximum buffer size for JPEG output in number of bytes */
44  #define MAX_JPEG_BUFFER_SIZE    (1024 * 1024)
45  
46  /* Preview loop commands */
47  #define USB_CAM_PREVIEW_EXIT    (0x100)
48  #define USB_CAM_PREVIEW_PAUSE   (0x101)
49  #define USB_CAM_PREVIEW_TAKEPIC (0x200)
50  
51  /******************************************************************************
52   * Macro function to input validate device handle
53   *****************************************************************************/
54  #define VALIDATE_DEVICE_HDL(camHal, device, ret_err_code)     {\
55      if(device && device->priv){\
56          camHal = (camera_hardware_t *)device->priv;\
57      }else{\
58          ALOGE("%s: Null device or device->priv", __func__);\
59          return ret_err_code;\
60      }\
61  }\
62  
63  /******************************************************************************
64   * Macro function to check return status of a function, log and exit the thread
65   *****************************************************************************/
66  #define ERROR_CHECK_EXIT_THREAD(rc, string)    {\
67      if(rc < 0) {\
68          ALOGE("%s: Error %s", __func__, string);\
69          return (void *)-1;\
70      }\
71  }
72  
73  /******************************************************************************
74   * Macro function to check return status of a function, log and exit
75   *****************************************************************************/
76  #define ERROR_CHECK_EXIT(rc, string)    {\
77      if(rc < 0) {\
78          ALOGE("%s: Error %s", __func__, string);\
79          return -1;\
80      }\
81  }
82  
83  /******************************************************************************
84  * Macro function to Print the parameter string 1000 characters at a time
85  ******************************************************************************/
86  #define PRINT_PARAM_STR(parms)    {\
87          char temp[1001] = {0};\
88          int n=0;\
89          while(1) {\
90              strlcpy(temp,parms+n,1000);\
91              ALOGD("parms = %s", temp);\
92              if (strlen(temp) < 1000) break;\
93              n += 1000;\
94          }\
95      }\
96  
97  /******************************************************************************
98   * Macro function to open camera
99   *****************************************************************************/
100  #define USB_CAM_OPEN(camHal)    {\
101          camHal->fd = open(camHal->dev_name, O_RDWR | O_NONBLOCK, 0);\
102          if(!camHal->fd)\
103              ALOGE("%s: Error in open", __func__);\
104          else\
105              ALOGD("%s: Successfully opened", __func__);\
106          }\
107  
108  /******************************************************************************
109   * Macro function to close camera
110   *****************************************************************************/
111  #define USB_CAM_CLOSE(camHal) {\
112          int rc;\
113          if(camHal->fd){\
114              rc = close(camHal->fd);\
115              if(0 > rc){\
116                  ALOGE("%s: close failed ", __func__);\
117              }\
118              else{\
119                  camHal->fd = 0;\
120                  ALOGD("%s: close successful", __func__);\
121              }\
122          }\
123      }\
124  
125  struct bufObj {
126      void    *data;
127      int     len;
128  };
129  
130  typedef struct {
131      camera_device                       hw_dev;
132      Mutex                               lock;
133      int                                 previewEnabledFlag;
134      int                                 prvwStoppedForPicture;
135      int                                 msgEnabledFlag;
136      volatile int                        prvwCmdPending;
137      volatile int                        prvwCmd;
138      pthread_t                           previewThread;
139      pthread_t                           takePictureThread;
140  
141      camera_notify_callback              notify_cb;
142      camera_data_callback                data_cb;
143      camera_data_timestamp_callback      data_cb_timestamp;
144      camera_request_memory               get_memory;
145      void*                               cb_ctxt;
146  
147      /* capture related members */
148      /* prevFormat is pixel format of preview buffers that are exported */
149      int                                 prevFormat;
150      int                                 prevFps;
151      int                                 prevWidth;
152      int                                 prevHeight;
153      /* captureFormat is internal setting for USB camera buffers */
154      int                                 captureFormat;
155      char                                dev_name[FILENAME_LENGTH];
156      int                                 fd;
157      unsigned int                        n_buffers;
158      struct v4l2_buffer                  curCaptureBuf;
159      struct bufObj                       *buffers;
160  
161      /* Display related members */
162      preview_stream_ops*                 window;
163      QCameraHalMemory_t                  previewMem;
164      /* dispFormat is preview display format.Same as preview buffer format*/
165      int                                 dispFormat;
166      int                                 dispWidth;
167      int                                 dispHeight;
168  
169      /* MJPEG decoder related members */
170      /* MJPEG decoder object */
171      void*                               mjpegd;
172  
173      /* JPEG picture and thumbnail related members */
174      int                                 pictFormat;
175      int                                 pictWidth;
176      int                                 pictHeight;
177      int                                 pictJpegQlty;
178      int                                 thumbnailWidth;
179      int                                 thumbnailHeight;
180      int                                 thumbnailJpegQlty;
181      QCameraHalMemory_t                  pictMem;
182      int                                 takePictInProgress;
183      int                                 jpegEncInProgress;
184      pthread_mutex_t                     jpegEncMutex;
185      pthread_cond_t                      jpegEncCond;
186  
187      /* */
188      QCameraParameters                   qCamParams;
189      String8                             prevSizeValues;
190      String8                             pictSizeValues;
191      String8                             thumbnailSizeValues;
192      String8                             vidSizeValues;
193      String8                             pictFormatValues;
194      String8                             prevFormatValues;
195      String8                             prevFpsRangesValues;
196  
197  } camera_hardware_t;
198  
199  
200  }; // namespace android
201  
202  #endif /* ANDROID_HARDWARE_QCAMERA_USB_PRIV_H */
203