Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 1 | /* |
| 2 | ** Copyright 2008, Google Inc. |
Apurva Rajguru | 0838385 | 2010-05-17 14:25:39 -0700 | [diff] [blame] | 3 | ** Copyright (c) 2009-2010, Code Aurora Forum. All rights reserved. |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 4 | ** |
| 5 | ** Licensed under the Apache License, Version 2.0 (the "License"); |
| 6 | ** you may not use this file except in compliance with the License. |
| 7 | ** You may obtain a copy of the License at |
| 8 | ** |
| 9 | ** http://www.apache.org/licenses/LICENSE-2.0 |
| 10 | ** |
| 11 | ** Unless required by applicable law or agreed to in writing, software |
| 12 | ** distributed under the License is distributed on an "AS IS" BASIS, |
| 13 | ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 14 | ** See the License for the specific language governing permissions and |
| 15 | ** limitations under the License. |
| 16 | */ |
| 17 | |
| 18 | #ifndef ANDROID_HARDWARE_QUALCOMM_CAMERA_HARDWARE_H |
| 19 | #define ANDROID_HARDWARE_QUALCOMM_CAMERA_HARDWARE_H |
| 20 | |
Priya Komarlingam | 9bb2d49 | 2010-06-23 19:21:52 -0700 | [diff] [blame] | 21 | #include <camera/CameraHardwareInterface.h> |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 22 | #include <binder/MemoryBase.h> |
| 23 | #include <binder/MemoryHeapBase.h> |
| 24 | #include <stdint.h> |
Kiran Kumar H N | 5efb3ff | 2009-12-07 01:02:44 -0800 | [diff] [blame] | 25 | #include <ui/Overlay.h> |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 26 | |
| 27 | extern "C" { |
| 28 | #include <linux/android_pmem.h> |
| 29 | #include <media/msm_camera.h> |
| 30 | #include <camera.h> |
Apurva Rajguru | 1db0c39 | 2009-11-30 21:39:04 -0800 | [diff] [blame] | 31 | #include <camera_defs_i.h> |
Nishant Pandit | 741742b | 2010-09-21 03:24:20 +0530 | [diff] [blame] | 32 | #include <mm_camera_interface.h> |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 33 | } |
| 34 | |
| 35 | struct str_map { |
| 36 | const char *const desc; |
| 37 | int val; |
| 38 | }; |
| 39 | |
Kiran Kumar H N | 8ff7b98 | 2010-01-25 13:54:39 -0800 | [diff] [blame] | 40 | typedef enum { |
| 41 | TARGET_MSM7625, |
| 42 | TARGET_MSM7627, |
| 43 | TARGET_QSD8250, |
| 44 | TARGET_MSM7630, |
Nishant Pandit | 3c278cd | 2010-07-13 15:56:04 +0530 | [diff] [blame] | 45 | TARGET_MSM8660, |
Kiran Kumar H N | 8ff7b98 | 2010-01-25 13:54:39 -0800 | [diff] [blame] | 46 | TARGET_MAX |
| 47 | }targetType; |
| 48 | |
Vamshidhar Kondra | 92ce914 | 2010-09-03 18:22:08 +0530 | [diff] [blame] | 49 | typedef enum { |
| 50 | LIVESHOT_DONE, |
| 51 | LIVESHOT_IN_PROGRESS, |
| 52 | LIVESHOT_STOPPED |
| 53 | }liveshotState; |
| 54 | |
Kiran Kumar H N | 8ff7b98 | 2010-01-25 13:54:39 -0800 | [diff] [blame] | 55 | struct target_map { |
| 56 | const char *targetStr; |
| 57 | targetType targetEnum; |
| 58 | }; |
| 59 | |
Srinivasan Kannan | 9c14ead | 2010-02-22 17:15:58 -0800 | [diff] [blame] | 60 | struct board_property{ |
| 61 | targetType target; |
| 62 | unsigned int previewSizeMask; |
Apurva Rajguru | 8e0a8da | 2010-06-02 11:26:36 -0700 | [diff] [blame] | 63 | bool hasSceneDetect; |
Apurva Rajguru | e5965c4 | 2010-09-09 14:24:54 -0700 | [diff] [blame] | 64 | bool hasSelectableZoneAf; |
Srinivasan Kannan | 9c14ead | 2010-02-22 17:15:58 -0800 | [diff] [blame] | 65 | }; |
| 66 | |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 67 | namespace android { |
| 68 | |
| 69 | class QualcommCameraHardware : public CameraHardwareInterface { |
| 70 | public: |
| 71 | |
| 72 | virtual sp<IMemoryHeap> getPreviewHeap() const; |
| 73 | virtual sp<IMemoryHeap> getRawHeap() const; |
| 74 | |
| 75 | virtual void setCallbacks(notify_callback notify_cb, |
| 76 | data_callback data_cb, |
| 77 | data_callback_timestamp data_cb_timestamp, |
| 78 | void* user); |
| 79 | virtual void enableMsgType(int32_t msgType); |
| 80 | virtual void disableMsgType(int32_t msgType); |
| 81 | virtual bool msgTypeEnabled(int32_t msgType); |
| 82 | |
| 83 | virtual status_t dump(int fd, const Vector<String16>& args) const; |
| 84 | virtual status_t startPreview(); |
| 85 | virtual void stopPreview(); |
| 86 | virtual bool previewEnabled(); |
| 87 | virtual status_t startRecording(); |
| 88 | virtual void stopRecording(); |
| 89 | virtual bool recordingEnabled(); |
| 90 | virtual void releaseRecordingFrame(const sp<IMemory>& mem); |
| 91 | virtual status_t autoFocus(); |
| 92 | virtual status_t cancelAutoFocus(); |
| 93 | virtual status_t takePicture(); |
Vamshidhar Kondra | 92ce914 | 2010-09-03 18:22:08 +0530 | [diff] [blame] | 94 | virtual status_t takeLiveSnapshot(); |
| 95 | void set_liveshot_exifinfo(); |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 96 | virtual status_t cancelPicture(); |
| 97 | virtual status_t setParameters(const CameraParameters& params); |
| 98 | virtual CameraParameters getParameters() const; |
| 99 | virtual status_t sendCommand(int32_t command, int32_t arg1, int32_t arg2); |
Kiran Kumar H N | 4dd45a6 | 2010-02-26 15:56:33 -0800 | [diff] [blame] | 100 | virtual status_t getBufferInfo( sp<IMemory>& Frame, size_t *alignedSize); |
Mohan Kandra | 1659b0c | 2010-07-18 16:36:25 -0700 | [diff] [blame] | 101 | virtual void encodeData( ); |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 102 | |
| 103 | virtual void release(); |
Kiran Kumar H N | 5efb3ff | 2009-12-07 01:02:44 -0800 | [diff] [blame] | 104 | virtual bool useOverlay(); |
| 105 | virtual status_t setOverlay(const sp<Overlay> &overlay); |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 106 | |
| 107 | static sp<CameraHardwareInterface> createInstance(); |
| 108 | static sp<QualcommCameraHardware> getInstance(); |
| 109 | |
| 110 | void receivePreviewFrame(struct msm_frame *frame); |
Vamshidhar Kondra | 92ce914 | 2010-09-03 18:22:08 +0530 | [diff] [blame] | 111 | void receiveLiveSnapshot(uint32_t jpeg_size); |
Nishant Pandit | 741742b | 2010-09-21 03:24:20 +0530 | [diff] [blame] | 112 | void receiveCameraStats(camstats_type stype, camera_preview_histogram_info* histinfo); |
Sravank | b4f5f1c | 2010-01-21 11:06:17 +0530 | [diff] [blame] | 113 | void receiveRecordingFrame(struct msm_frame *frame); |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 114 | void receiveJpegPicture(void); |
| 115 | void jpeg_set_location(); |
| 116 | void receiveJpegPictureFragment(uint8_t *buf, uint32_t size); |
Kiran Kumar H N | cb54ba8 | 2010-03-09 10:27:38 -0800 | [diff] [blame] | 117 | void notifyShutter(common_crop_t *crop, bool mPlayShutterSoundOnly); |
Mohan Kandra | 3dd524f | 2010-09-20 13:41:42 -0700 | [diff] [blame] | 118 | void receive_camframe_error_timeout(); |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 119 | |
| 120 | private: |
| 121 | QualcommCameraHardware(); |
| 122 | virtual ~QualcommCameraHardware(); |
| 123 | status_t startPreviewInternal(); |
Nishant Pandit | 741742b | 2010-09-21 03:24:20 +0530 | [diff] [blame] | 124 | status_t setHistogramOn(); |
| 125 | status_t setHistogramOff(); |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 126 | void stopPreviewInternal(); |
| 127 | friend void *auto_focus_thread(void *user); |
| 128 | void runAutoFocus(); |
| 129 | status_t cancelAutoFocusInternal(); |
| 130 | bool native_set_dimension (int camfd); |
| 131 | bool native_jpeg_encode (void); |
Deepak Kurien | eb58c68 | 2010-11-01 15:26:02 -0700 | [diff] [blame] | 132 | bool native_set_parms(mm_camera_parm_type_t type, uint16_t length, void *value); |
| 133 | bool native_set_parms( mm_camera_parm_type_t type, uint16_t length, void *value, int *result); |
Mohan Kandra | d9efed9 | 2010-01-15 19:08:39 -0800 | [diff] [blame] | 134 | bool native_zoom_image(int fd, int srcOffset, int dstOffset, common_crop_t *crop); |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 135 | |
| 136 | static wp<QualcommCameraHardware> singleton; |
| 137 | |
| 138 | /* These constants reflect the number of buffers that libmmcamera requires |
| 139 | for preview and raw, and need to be updated when libmmcamera |
| 140 | changes. |
| 141 | */ |
| 142 | static const int kPreviewBufferCount = NUM_PREVIEW_BUFFERS; |
| 143 | static const int kRawBufferCount = 1; |
| 144 | static const int kJpegBufferCount = 1; |
| 145 | |
Srinivasan Kannan | 5701a94 | 2010-04-15 16:17:21 -0700 | [diff] [blame] | 146 | int jpegPadding; |
| 147 | |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 148 | CameraParameters mParameters; |
| 149 | unsigned int frame_size; |
| 150 | bool mCameraRunning; |
Srinivasan Kannan | 74712c9 | 2010-04-07 13:36:48 -0700 | [diff] [blame] | 151 | Mutex mCameraRunningLock; |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 152 | bool mPreviewInitialized; |
| 153 | |
| 154 | // This class represents a heap which maintains several contiguous |
| 155 | // buffers. The heap may be backed by pmem (when pmem_pool contains |
| 156 | // the name of a /dev/pmem* file), or by ashmem (when pmem_pool == NULL). |
| 157 | |
| 158 | struct MemPool : public RefBase { |
| 159 | MemPool(int buffer_size, int num_buffers, |
| 160 | int frame_size, |
| 161 | const char *name); |
| 162 | |
| 163 | virtual ~MemPool() = 0; |
| 164 | |
| 165 | void completeInitialization(); |
| 166 | bool initialized() const { |
| 167 | return mHeap != NULL && mHeap->base() != MAP_FAILED; |
| 168 | } |
| 169 | |
| 170 | virtual status_t dump(int fd, const Vector<String16>& args) const; |
| 171 | |
| 172 | int mBufferSize; |
| 173 | int mAlignedBufferSize; |
| 174 | int mNumBuffers; |
| 175 | int mFrameSize; |
| 176 | sp<MemoryHeapBase> mHeap; |
| 177 | sp<MemoryBase> *mBuffers; |
| 178 | |
| 179 | const char *mName; |
| 180 | }; |
| 181 | |
| 182 | struct AshmemPool : public MemPool { |
| 183 | AshmemPool(int buffer_size, int num_buffers, |
| 184 | int frame_size, |
| 185 | const char *name); |
| 186 | }; |
| 187 | |
| 188 | struct PmemPool : public MemPool { |
| 189 | PmemPool(const char *pmem_pool, |
| 190 | int control_camera_fd, int flags, int pmem_type, |
| 191 | int buffer_size, int num_buffers, |
Mohan Kandra | 0248604 | 2010-06-18 16:49:43 -0700 | [diff] [blame] | 192 | int frame_size, int cbcr_offset, |
| 193 | int yoffset, const char *name); |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 194 | virtual ~PmemPool(); |
| 195 | int mFd; |
| 196 | int mPmemType; |
Mohan Kandra | 0248604 | 2010-06-18 16:49:43 -0700 | [diff] [blame] | 197 | int mCbCrOffset; |
| 198 | int myOffset; |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 199 | int mCameraControlFd; |
| 200 | uint32_t mAlignedSize; |
| 201 | struct pmem_region mSize; |
| 202 | }; |
| 203 | |
| 204 | sp<PmemPool> mPreviewHeap; |
Sravank | b4f5f1c | 2010-01-21 11:06:17 +0530 | [diff] [blame] | 205 | sp<PmemPool> mRecordHeap; |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 206 | sp<PmemPool> mThumbnailHeap; |
| 207 | sp<PmemPool> mRawHeap; |
| 208 | sp<PmemPool> mDisplayHeap; |
| 209 | sp<AshmemPool> mJpegHeap; |
Nishant Pandit | 741742b | 2010-09-21 03:24:20 +0530 | [diff] [blame] | 210 | sp<AshmemPool> mStatHeap; |
Srinivasan Kannan | 39dae8e | 2009-12-03 15:52:34 -0800 | [diff] [blame] | 211 | sp<PmemPool> mRawSnapShotPmemHeap; |
Priyanka Kharat | 0280766 | 2010-10-13 23:44:47 -0700 | [diff] [blame] | 212 | sp<PmemPool> mPostViewHeap; |
Srinivasan Kannan | 39dae8e | 2009-12-03 15:52:34 -0800 | [diff] [blame] | 213 | |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 214 | bool startCamera(); |
| 215 | bool initPreview(); |
Sravank | b4f5f1c | 2010-01-21 11:06:17 +0530 | [diff] [blame] | 216 | bool initRecord(); |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 217 | void deinitPreview(); |
| 218 | bool initRaw(bool initJpegHeap); |
Vamshidhar Kondra | 92ce914 | 2010-09-03 18:22:08 +0530 | [diff] [blame] | 219 | bool initLiveSnapshot(int videowidth, int videoheight); |
Srinivasan Kannan | 39dae8e | 2009-12-03 15:52:34 -0800 | [diff] [blame] | 220 | bool initRawSnapshot(); |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 221 | void deinitRaw(); |
Srinivasan Kannan | 39dae8e | 2009-12-03 15:52:34 -0800 | [diff] [blame] | 222 | void deinitRawSnapshot(); |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 223 | |
| 224 | bool mFrameThreadRunning; |
| 225 | Mutex mFrameThreadWaitLock; |
| 226 | Condition mFrameThreadWait; |
| 227 | friend void *frame_thread(void *user); |
| 228 | void runFrameThread(void *data); |
| 229 | |
Sravank | b4f5f1c | 2010-01-21 11:06:17 +0530 | [diff] [blame] | 230 | //720p recording video thread |
| 231 | bool mVideoThreadExit; |
Mohan Kandra | 156d0ac | 2010-01-25 16:59:17 -0800 | [diff] [blame] | 232 | bool mVideoThreadRunning; |
Sravank | b4f5f1c | 2010-01-21 11:06:17 +0530 | [diff] [blame] | 233 | Mutex mVideoThreadWaitLock; |
| 234 | Condition mVideoThreadWait; |
| 235 | friend void *video_thread(void *user); |
| 236 | void runVideoThread(void *data); |
| 237 | |
Nishant Pandit | 741742b | 2010-09-21 03:24:20 +0530 | [diff] [blame] | 238 | // For Histogram |
| 239 | int mStatsOn; |
| 240 | int mCurrent; |
| 241 | bool mSendData; |
| 242 | Mutex mStatsWaitLock; |
| 243 | Condition mStatsWait; |
| 244 | |
| 245 | |
Sravank | b4f5f1c | 2010-01-21 11:06:17 +0530 | [diff] [blame] | 246 | |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 247 | bool mShutterPending; |
| 248 | Mutex mShutterLock; |
| 249 | |
| 250 | bool mSnapshotThreadRunning; |
| 251 | Mutex mSnapshotThreadWaitLock; |
| 252 | Condition mSnapshotThreadWait; |
| 253 | friend void *snapshot_thread(void *user); |
| 254 | void runSnapshotThread(void *data); |
Srinivasan Kannan | 426cde7 | 2010-06-04 09:37:21 -0700 | [diff] [blame] | 255 | Mutex mRawPictureHeapLock; |
Mohan Kandra | ca2e7a9 | 2010-06-21 15:48:45 -0700 | [diff] [blame] | 256 | bool mJpegThreadRunning; |
| 257 | Mutex mJpegThreadWaitLock; |
| 258 | Condition mJpegThreadWait; |
| 259 | bool mInSnapshotMode; |
| 260 | Mutex mInSnapshotModeWaitLock; |
| 261 | Condition mInSnapshotModeWait; |
Mohan Kandra | 1659b0c | 2010-07-18 16:36:25 -0700 | [diff] [blame] | 262 | bool mEncodePending; |
| 263 | Mutex mEncodePendingWaitLock; |
| 264 | Condition mEncodePendingWait; |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 265 | |
Mohan Kandra | bad0eaa | 2010-02-04 15:11:54 -0800 | [diff] [blame] | 266 | void debugShowPreviewFPS() const; |
| 267 | void debugShowVideoFPS() const; |
Mohan Kandra | 740cfce | 2010-01-07 12:58:24 -0800 | [diff] [blame] | 268 | |
Srinivasan Kannan | 39dae8e | 2009-12-03 15:52:34 -0800 | [diff] [blame] | 269 | int mSnapshotFormat; |
Priyanka Kharat | 0280766 | 2010-10-13 23:44:47 -0700 | [diff] [blame] | 270 | bool mFirstFrame; |
Deepak Kurien | eb58c68 | 2010-11-01 15:26:02 -0700 | [diff] [blame] | 271 | void hasAutoFocusSupport(); |
Srinivasan Kannan | 3b9e8df | 2009-12-05 12:21:46 -0800 | [diff] [blame] | 272 | void filterPictureSizes(); |
Srinivasan Kannan | 9c14ead | 2010-02-22 17:15:58 -0800 | [diff] [blame] | 273 | void filterPreviewSizes(); |
Kiran Kumar H N | 8ff7b98 | 2010-01-25 13:54:39 -0800 | [diff] [blame] | 274 | void storeTargetType(); |
Apurva Rajguru | 8e0a8da | 2010-06-02 11:26:36 -0700 | [diff] [blame] | 275 | bool supportsSceneDetection(); |
Apurva Rajguru | e5965c4 | 2010-09-09 14:24:54 -0700 | [diff] [blame] | 276 | bool supportsSelectableZoneAf(); |
Srinivasan Kannan | 39dae8e | 2009-12-03 15:52:34 -0800 | [diff] [blame] | 277 | |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 278 | void initDefaultParameters(); |
Srinivasan Kannan | 7122962 | 2009-12-04 12:05:58 -0800 | [diff] [blame] | 279 | void findSensorType(); |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 280 | |
| 281 | status_t setPreviewSize(const CameraParameters& params); |
Srinivasan Kannan | 264376e | 2010-08-13 18:54:35 -0700 | [diff] [blame] | 282 | status_t setJpegThumbnailSize(const CameraParameters& params); |
Srinivasan Kannan | a01751b | 2010-06-24 18:44:40 -0700 | [diff] [blame] | 283 | status_t setPreviewFrameRate(const CameraParameters& params); |
Mohan Kandra | bf6146d | 2010-07-20 18:48:37 -0700 | [diff] [blame] | 284 | status_t setPreviewFrameRateMode(const CameraParameters& params); |
Mohan Kandra | 091d5ab | 2010-07-14 16:53:25 -0700 | [diff] [blame] | 285 | status_t setRecordSize(const CameraParameters& params); |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 286 | status_t setPictureSize(const CameraParameters& params); |
| 287 | status_t setJpegQuality(const CameraParameters& params); |
| 288 | status_t setAntibanding(const CameraParameters& params); |
| 289 | status_t setEffect(const CameraParameters& params); |
Srinivasan Kannan | 4cc4b86 | 2010-06-30 14:22:26 -0700 | [diff] [blame] | 290 | status_t setExposureCompensation(const CameraParameters ¶ms); |
Apurva Rajguru | 55562b0 | 2009-12-03 12:25:35 -0800 | [diff] [blame] | 291 | status_t setAutoExposure(const CameraParameters& params); |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 292 | status_t setWhiteBalance(const CameraParameters& params); |
| 293 | status_t setFlash(const CameraParameters& params); |
| 294 | status_t setGpsLocation(const CameraParameters& params); |
| 295 | status_t setRotation(const CameraParameters& params); |
| 296 | status_t setZoom(const CameraParameters& params); |
| 297 | status_t setFocusMode(const CameraParameters& params); |
Nishant Pandit | c8c1ee7 | 2009-12-03 16:24:02 +0530 | [diff] [blame] | 298 | status_t setBrightness(const CameraParameters& params); |
Priyanka Kharat | e8dd0d6 | 2010-09-27 09:52:34 -0700 | [diff] [blame] | 299 | status_t setSkinToneEnhancement(const CameraParameters& params); |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 300 | status_t setOrientation(const CameraParameters& params); |
Nishant Pandit | c8c1ee7 | 2009-12-03 16:24:02 +0530 | [diff] [blame] | 301 | status_t setLensshadeValue(const CameraParameters& params); |
| 302 | status_t setISOValue(const CameraParameters& params); |
Srinivasan Kannan | 39dae8e | 2009-12-03 15:52:34 -0800 | [diff] [blame] | 303 | status_t setPictureFormat(const CameraParameters& params); |
Srinivasan Kannan | bddfd50 | 2010-01-03 17:27:36 -0800 | [diff] [blame] | 304 | status_t setSharpness(const CameraParameters& params); |
| 305 | status_t setContrast(const CameraParameters& params); |
| 306 | status_t setSaturation(const CameraParameters& params); |
Apurva Rajguru | 0838385 | 2010-05-17 14:25:39 -0700 | [diff] [blame] | 307 | status_t setSceneMode(const CameraParameters& params); |
Apurva Rajguru | 7b949c9 | 2010-05-26 15:46:57 -0700 | [diff] [blame] | 308 | status_t setContinuousAf(const CameraParameters& params); |
Apurva Rajguru | 0a2cb92 | 2010-06-08 15:33:22 -0700 | [diff] [blame] | 309 | status_t setTouchAfAec(const CameraParameters& params); |
Apurva Rajguru | 8e0a8da | 2010-06-02 11:26:36 -0700 | [diff] [blame] | 310 | status_t setSceneDetect(const CameraParameters& params); |
Mohan Kandra | 7110c24 | 2010-07-18 15:34:48 -0700 | [diff] [blame] | 311 | status_t setStrTextures(const CameraParameters& params); |
| 312 | status_t setPreviewFormat(const CameraParameters& params); |
Apurva Rajguru | e5965c4 | 2010-09-09 14:24:54 -0700 | [diff] [blame] | 313 | status_t setSelectableZoneAf(const CameraParameters& params); |
Apurva Rajguru | 66bdd7f | 2009-12-10 19:28:02 -0800 | [diff] [blame] | 314 | void setGpsParameters(); |
Priyanka Kharat | 0280766 | 2010-10-13 23:44:47 -0700 | [diff] [blame] | 315 | bool storePreviewFrameForPostview(); |
Kiran Kumar H N | b49af21 | 2010-02-17 15:12:17 -0800 | [diff] [blame] | 316 | bool isValidDimension(int w, int h); |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 317 | |
| 318 | Mutex mLock; |
Kiran Kumar H N | 215cac4 | 2009-12-08 01:53:46 -0800 | [diff] [blame] | 319 | Mutex mCamframeTimeoutLock; |
| 320 | bool camframe_timeout_flag; |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 321 | bool mReleasedRecordingFrame; |
| 322 | |
| 323 | void receiveRawPicture(void); |
Srinivasan Kannan | 39dae8e | 2009-12-03 15:52:34 -0800 | [diff] [blame] | 324 | void receiveRawSnapshot(void); |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 325 | |
| 326 | Mutex mCallbackLock; |
Kiran Kumar H N | 5efb3ff | 2009-12-07 01:02:44 -0800 | [diff] [blame] | 327 | Mutex mOverlayLock; |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 328 | Mutex mRecordLock; |
| 329 | Mutex mRecordFrameLock; |
| 330 | Condition mRecordWait; |
| 331 | Condition mStateWait; |
| 332 | |
| 333 | /* mJpegSize keeps track of the size of the accumulated JPEG. We clear it |
| 334 | when we are about to take a picture, so at any time it contains either |
| 335 | zero, or the size of the last JPEG picture taken. |
| 336 | */ |
| 337 | uint32_t mJpegSize; |
| 338 | unsigned int mPreviewFrameSize; |
Sravank | b4f5f1c | 2010-01-21 11:06:17 +0530 | [diff] [blame] | 339 | unsigned int mRecordFrameSize; |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 340 | int mRawSize; |
Mohan Kandra | 1659b0c | 2010-07-18 16:36:25 -0700 | [diff] [blame] | 341 | int mCbCrOffsetRaw; |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 342 | int mJpegMaxSize; |
Nishant Pandit | 741742b | 2010-09-21 03:24:20 +0530 | [diff] [blame] | 343 | int32_t mStatSize; |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 344 | |
| 345 | #if DLOPEN_LIBMMCAMERA |
| 346 | void *libmmcamera; |
| 347 | #endif |
| 348 | |
| 349 | int mCameraControlFd; |
| 350 | struct msm_camsensor_info mSensorInfo; |
| 351 | cam_ctrl_dimension_t mDimension; |
| 352 | bool mAutoFocusThreadRunning; |
| 353 | Mutex mAutoFocusThreadLock; |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 354 | |
Srinivasan Kannan | 572e25c | 2010-02-01 16:04:37 -0800 | [diff] [blame] | 355 | Mutex mAfLock; |
| 356 | |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 357 | pthread_t mFrameThread; |
Sravank | b4f5f1c | 2010-01-21 11:06:17 +0530 | [diff] [blame] | 358 | pthread_t mVideoThread; |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 359 | pthread_t mSnapshotThread; |
| 360 | |
| 361 | common_crop_t mCrop; |
| 362 | |
Srinivasan Kannan | a01751b | 2010-06-24 18:44:40 -0700 | [diff] [blame] | 363 | bool mInitialized; |
| 364 | |
Kiran Kumar H N | 215cac4 | 2009-12-08 01:53:46 -0800 | [diff] [blame] | 365 | int mBrightness; |
Priyanka Kharat | e8dd0d6 | 2010-09-27 09:52:34 -0700 | [diff] [blame] | 366 | int mSkinToneEnhancement; |
Apurva Rajguru | f12d9d2 | 2010-04-05 16:47:12 -0700 | [diff] [blame] | 367 | int mHJR; |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 368 | struct msm_frame frames[kPreviewBufferCount]; |
Apurva Rajguru | c73c172 | 2010-04-15 17:39:11 -0700 | [diff] [blame] | 369 | struct msm_frame *recordframes; |
Mohan Kandra | 1fd90f9 | 2010-06-17 14:54:17 -0700 | [diff] [blame] | 370 | bool *record_buffers_tracking_flag; |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 371 | bool mInPreviewCallback; |
Kiran Kumar H N | 5efb3ff | 2009-12-07 01:02:44 -0800 | [diff] [blame] | 372 | bool mUseOverlay; |
Kiran Kumar H N | 215cac4 | 2009-12-08 01:53:46 -0800 | [diff] [blame] | 373 | sp<Overlay> mOverlay; |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 374 | |
| 375 | int32_t mMsgEnabled; // camera msg to be handled |
| 376 | notify_callback mNotifyCallback; |
| 377 | data_callback mDataCallback; |
| 378 | data_callback_timestamp mDataCallbackTimestamp; |
| 379 | void *mCallbackCookie; // same for all callbacks |
Mohan Kandra | 740cfce | 2010-01-07 12:58:24 -0800 | [diff] [blame] | 380 | int mDebugFps; |
Mohan Kandra | d9efed9 | 2010-01-15 19:08:39 -0800 | [diff] [blame] | 381 | int kPreviewBufferCountActual; |
| 382 | int previewWidth, previewHeight; |
Apurva Rajguru | 3da1a70 | 2010-07-28 12:32:42 -0700 | [diff] [blame] | 383 | bool mSnapshotDone; |
Deepak Kurien | bf83f8e | 2010-09-30 10:29:26 -0700 | [diff] [blame] | 384 | bool mSnapshotPrepare; |
Deepak Kurien | eb58c68 | 2010-11-01 15:26:02 -0700 | [diff] [blame] | 385 | bool mHasAutoFocusSupport; |
Nishant Pandit | 741742b | 2010-09-21 03:24:20 +0530 | [diff] [blame] | 386 | mm_camera_config mCfgControl; |
Mohan Kandra | 39fad8d | 2010-07-15 12:29:19 -0700 | [diff] [blame] | 387 | int videoWidth, videoHeight; |
| 388 | |
| 389 | bool mDisEnabled; |
| 390 | int mRotation; |
Mohan Kandra | 9aff1f4 | 2010-09-02 19:00:41 -0700 | [diff] [blame] | 391 | bool mResetOverlayCrop; |
Mohan Kandra | 5e4f9d9 | 2010-08-26 18:23:50 -0700 | [diff] [blame] | 392 | int mThumbnailWidth, mThumbnailHeight; |
Mohan Kandra | 39fad8d | 2010-07-15 12:29:19 -0700 | [diff] [blame] | 393 | status_t setVpeParameters(); |
Mohan Kandra | cedd6cc | 2010-09-14 14:37:08 -0700 | [diff] [blame] | 394 | status_t setDIS(); |
Priya Komarlingam | b85535d | 2009-11-30 13:06:01 -0800 | [diff] [blame] | 395 | }; |
| 396 | |
| 397 | }; // namespace android |
| 398 | |
| 399 | #endif |