blob: fc30fc48c94e3ee321337f402deeb4fd34248d9f [file] [log] [blame]
codeworkx62f02ba2012-05-20 12:00:36 +02001/*
2**
3** Copyright 2008, The Android Open Source Project
4** Copyright 2010, Samsung Electronics Co. LTD
5**
6** Licensed under the Apache License, Version 2.0 (the "License");
7** you may not use this file except in compliance with the License.
8** You may obtain a copy of the License at
9**
10** http://www.apache.org/licenses/LICENSE-2.0
11**
12** Unless required by applicable law or agreed to in writing, software
13** distributed under the License is distributed on an "AS IS" BASIS,
14** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15** See the License for the specific language governing permissions and
16** limitations under the License.
17*/
18
19#ifndef ANDROID_HARDWARE_CAMERA_SEC_H
20#define ANDROID_HARDWARE_CAMERA_SEC_H
21
22#include <stdio.h>
23#include <string.h>
24#include <stdlib.h>
25
26#include <fcntl.h>
27#include <unistd.h>
28#include <errno.h>
29#include <signal.h>
30#include <sys/mman.h>
31#include <sys/time.h>
32#include <sys/ioctl.h>
33#include <sys/poll.h>
34#include <sys/stat.h>
35
36#include <utils/RefBase.h>
37#include <hardware/camera.h>
38#include <videodev2.h>
39#include <videodev2_samsung.h>
40#include "sec_utils_v4l2.h"
41
42#include "SecBuffer.h"
43
44#include <utils/String8.h>
45
46#ifdef SAMSUNG_EXYNOS4210
47#include "jpeg_api.h"
48#endif
49
50#ifdef SAMSUNG_EXYNOS4x12
51#include "jpeg_hal.h"
52#endif
53
54#include "Exif.h"
55namespace android {
56
57//#define ENABLE_ESD_PREVIEW_CHECK
58//#define ZERO_SHUTTER_LAG
59#define VIDEO_SNAPSHOT
60
61#if defined VIDEO_SNAPSHOT
62#define ZERO_SHUTTER_LAG
63#endif
64
65#define USE_FACE_DETECTION
66//#define USE_TOUCH_AF
67
68#if defined(LOG_NDEBUG) && (LOG_NDEBUG == 0)
69#define LOG_CAMERA LOGD
70#define LOG_CAMERA_PREVIEW LOGD
71
72#define LOG_TIME_DEFINE(n) \
73 struct timeval time_start_##n, time_stop_##n; unsigned long log_time_##n = 0;
74
75#define LOG_TIME_START(n) \
76 gettimeofday(&time_start_##n, NULL);
77
78#define LOG_TIME_END(n) \
79 gettimeofday(&time_stop_##n, NULL); log_time_##n = measure_time_camera(&time_start_##n, &time_stop_##n);
80
81#define LOG_TIME(n) \
82 log_time_##n
83
84#else
85#define LOG_CAMERA(...)
86#define LOG_CAMERA_PREVIEW(...)
87#define LOG_TIME_DEFINE(n)
88#define LOG_TIME_START(n)
89#define LOG_TIME_END(n)
90#define LOG_TIME(n)
91#endif
92
93#define FRM_RATIO(w, h) ((w)*10/(h))
94#define SIZE_4K (1 << 12)
95
96#define JOIN(x, y) JOIN_AGAIN(x, y)
97#define JOIN_AGAIN(x, y) x ## y
98
99#define FRONT_CAM S5K6A3
100#define BACK_CAM M5MO
101
102#if !defined (FRONT_CAM) || !defined(BACK_CAM)
103#error "Please define the Camera module"
104#endif
105
106#define M5MO_PREVIEW_WIDTH 640
107#define M5MO_PREVIEW_HEIGHT 480
108#define M5MO_SNAPSHOT_WIDTH 3264
109#define M5MO_SNAPSHOT_HEIGHT 2448
110
111#define M5MO_THUMBNAIL_WIDTH 320
112#define M5MO_THUMBNAIL_HEIGHT 240
113#define M5MO_THUMBNAIL_BPP 16
114
115#define M5MO_FPS 30
116
117/* focal length of 3.43mm */
118#define M5MO_FOCAL_LENGTH 343
119
120#define S5K6A3_PREVIEW_WIDTH 480
121#define S5K6A3_PREVIEW_HEIGHT 480
122#define S5K6A3_SNAPSHOT_WIDTH 1392
123#define S5K6A3_SNAPSHOT_HEIGHT 1392
124
125#define S5K6A3_THUMBNAIL_WIDTH 160
126#define S5K6A3_THUMBNAIL_HEIGHT 120
127#define S5K6A3_THUMBNAIL_BPP 16
128
129#define S5K6A3_FPS 30
130
131/* focal length of 0.9mm */
132#define S5K6A3_FOCAL_LENGTH 90
133
134#define MAX_BACK_CAMERA_PREVIEW_WIDTH JOIN(BACK_CAM,_PREVIEW_WIDTH)
135#define MAX_BACK_CAMERA_PREVIEW_HEIGHT JOIN(BACK_CAM,_PREVIEW_HEIGHT)
136#define MAX_BACK_CAMERA_SNAPSHOT_WIDTH JOIN(BACK_CAM,_SNAPSHOT_WIDTH)
137#define MAX_BACK_CAMERA_SNAPSHOT_HEIGHT JOIN(BACK_CAM,_SNAPSHOT_HEIGHT)
138
139#define BACK_CAMERA_THUMBNAIL_WIDTH JOIN(BACK_CAM,_THUMBNAIL_WIDTH)
140#define BACK_CAMERA_THUMBNAIL_HEIGHT JOIN(BACK_CAM,_THUMBNAIL_HEIGHT)
141#define BACK_CAMERA_THUMBNAIL_BPP JOIN(BACK_CAM,_THUMBNAIL_BPP)
142
143#define BACK_CAMERA_FPS JOIN(BACK_CAM,_FPS)
144
145#define BACK_CAMERA_FOCAL_LENGTH JOIN(BACK_CAM,_FOCAL_LENGTH)
146
147#define MAX_FRONT_CAMERA_PREVIEW_WIDTH JOIN(FRONT_CAM,_PREVIEW_WIDTH)
148#define MAX_FRONT_CAMERA_PREVIEW_HEIGHT JOIN(FRONT_CAM,_PREVIEW_HEIGHT)
149#define MAX_FRONT_CAMERA_SNAPSHOT_WIDTH JOIN(FRONT_CAM,_SNAPSHOT_WIDTH)
150#define MAX_FRONT_CAMERA_SNAPSHOT_HEIGHT JOIN(FRONT_CAM,_SNAPSHOT_HEIGHT)
151
152#define FRONT_CAMERA_THUMBNAIL_WIDTH JOIN(FRONT_CAM,_THUMBNAIL_WIDTH)
153#define FRONT_CAMERA_THUMBNAIL_HEIGHT JOIN(FRONT_CAM,_THUMBNAIL_HEIGHT)
154#define FRONT_CAMERA_THUMBNAIL_BPP JOIN(FRONT_CAM,_THUMBNAIL_BPP)
155
156#define FRONT_CAMERA_FPS JOIN(FRONT_CAM,_FPS)
157
158#define FRONT_CAMERA_FOCAL_LENGTH JOIN(FRONT_CAM,_FOCAL_LENGTH)
159
160#define DEFAULT_JPEG_THUMBNAIL_WIDTH 256
161#define DEFAULT_JPEG_THUMBNAIL_HEIGHT 192
162
163#ifdef BOARD_USE_V4L2
164#define CAMERA_DEV_NAME "/dev/video1"
165#else
166#define CAMERA_DEV_NAME "/dev/video0"
167#endif
168
169#ifdef SAMSUNG_EXYNOS4210
170#define CAMERA_DEV_NAME3 "/dev/video2"
171#endif
172
173#ifdef SAMSUNG_EXYNOS4x12
174#ifdef BOARD_USE_V4L2
175#define CAMERA_DEV_NAME3 "/dev/video3"
176#else
177#define CAMERA_DEV_NAME3 "/dev/video1"
178#endif
179#ifdef ZERO_SHUTTER_LAG
180#define CAMERA_DEV_NAME2 "/dev/video2"
181#endif
182#endif
183
184#define CAMERA_DEV_NAME_TEMP "/data/videotmp_000"
185#define CAMERA_DEV_NAME2_TEMP "/data/videotemp_002"
186
187
188#define BPP 2
189#define MIN(x, y) (((x) < (y)) ? (x) : (y))
190#define MAX_BUFFERS 8
191
192#ifdef ZERO_SHUTTER_LAG
193#define CAP_BUFFERS 8
194#else
195#define CAP_BUFFERS 1
196#endif
197
198#ifdef BOARD_USE_V4L2
199#define MAX_PLANES (3)
200#define V4L2_BUF_TYPE V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE
201#else
202#define MAX_PLANES (1)
203#define V4L2_BUF_TYPE V4L2_BUF_TYPE_VIDEO_CAPTURE
204#endif
205
206#ifdef BOARD_USE_V4L2_ION
207#define V4L2_MEMORY_TYPE V4L2_MEMORY_USERPTR
208#define RECORD_PIX_FMT V4L2_PIX_FMT_NV12M
209#define PREVIEW_NUM_PLANE (3)
210#define RECORD_NUM_PLANE (2)
211#else
212#define V4L2_MEMORY_TYPE V4L2_MEMORY_MMAP
213#define RECORD_PIX_FMT V4L2_PIX_FMT_NV12
214#define PREVIEW_NUM_PLANE (1)
215#define RECORD_NUM_PLANE (1)
216#endif
217
218/*
219 * V 4 L 2 F I M C E X T E N S I O N S
220 *
221 */
222#define V4L2_CID_ROTATION (V4L2_CID_PRIVATE_BASE + 0)
223#define V4L2_CID_PADDR_Y (V4L2_CID_PRIVATE_BASE + 1)
224#define V4L2_CID_PADDR_CB (V4L2_CID_PRIVATE_BASE + 2)
225#define V4L2_CID_PADDR_CR (V4L2_CID_PRIVATE_BASE + 3)
226#define V4L2_CID_PADDR_CBCR (V4L2_CID_PRIVATE_BASE + 4)
227#define V4L2_CID_STREAM_PAUSE (V4L2_CID_PRIVATE_BASE + 53)
228
229#define V4L2_CID_CAM_JPEG_MAIN_SIZE (V4L2_CID_PRIVATE_BASE + 32)
230#define V4L2_CID_CAM_JPEG_MAIN_OFFSET (V4L2_CID_PRIVATE_BASE + 33)
231#define V4L2_CID_CAM_JPEG_THUMB_SIZE (V4L2_CID_PRIVATE_BASE + 34)
232#define V4L2_CID_CAM_JPEG_THUMB_OFFSET (V4L2_CID_PRIVATE_BASE + 35)
233#define V4L2_CID_CAM_JPEG_POSTVIEW_OFFSET (V4L2_CID_PRIVATE_BASE + 36)
234#define V4L2_CID_CAM_JPEG_QUALITY (V4L2_CID_PRIVATE_BASE + 37)
235
236#define TPATTERN_COLORBAR 1
237#define TPATTERN_HORIZONTAL 2
238#define TPATTERN_VERTICAL 3
239
240#define V4L2_PIX_FMT_YVYU v4l2_fourcc('Y', 'V', 'Y', 'U')
241
242/* FOURCC for FIMC specific */
243#define V4L2_PIX_FMT_VYUY v4l2_fourcc('V', 'Y', 'U', 'Y')
244#define V4L2_PIX_FMT_NV16 v4l2_fourcc('N', 'V', '1', '6')
245#define V4L2_PIX_FMT_NV61 v4l2_fourcc('N', 'V', '6', '1')
246#define V4L2_PIX_FMT_NV12T v4l2_fourcc('T', 'V', '1', '2')
247/*
248 * U S E R D E F I N E D T Y P E S
249 *
250 */
251#define PREVIEW_MODE 1
252#define CAPTURE_MODE 2
253#define RECORD_MODE 3
254
255struct yuv_fmt_list {
256 const char *name;
257 const char *desc;
258 unsigned int fmt;
259 int depth;
260 int planes;
261};
262
263struct camsensor_date_info {
264 unsigned int year;
265 unsigned int month;
266 unsigned int date;
267};
268
269class SecCamera : public virtual RefBase {
270public:
271
272 enum CAMERA_ID {
273 CAMERA_ID_BACK = 0,
274 CAMERA_ID_FRONT = 1,
275 };
276
277 enum JPEG_QUALITY {
278 JPEG_QUALITY_ECONOMY = 0,
279 JPEG_QUALITY_NORMAL = 50,
280 JPEG_QUALITY_SUPERFINE = 100,
281 JPEG_QUALITY_MAX,
282 };
283
284 enum OBJECT_TRACKING {
285 OBJECT_TRACKING_OFF,
286 OBJECT_TRACKING_ON,
287 OBJECT_TRACKING_MAX,
288 };
289
290 /*VT call*/
291 enum VT_MODE {
292 VT_MODE_OFF,
293 VT_MODE_ON,
294 VT_MODE_MAX,
295 };
296
297 /*Camera sensor mode - Camcorder fix fps*/
298 enum SENSOR_MODE {
299 SENSOR_MODE_CAMERA,
300 SENSOR_MODE_MOVIE,
301 };
302
303 /*Camera Shot mode*/
304 enum SHOT_MODE {
305 SHOT_MODE_SINGLE = 0,
306 SHOT_MODE_CONTINUOUS = 1,
307 SHOT_MODE_PANORAMA = 2,
308 SHOT_MODE_SMILE = 3,
309 SHOT_MODE_SELF = 6,
310 };
311
312 enum CHK_DATALINE {
313 CHK_DATALINE_OFF,
314 CHK_DATALINE_ON,
315 CHK_DATALINE_MAX,
316 };
317
318 enum CAM_MODE {
319 PREVIEW = 0,
320 PICTURE = 1,
321 RECORDING = 2,
322 };
323
324 int m_touch_af_start_stop;
325
326 SecCamera();
327 virtual ~SecCamera();
328
329 static SecCamera* createInstance(void)
330 {
331 static SecCamera singleton;
332 return &singleton;
333 }
334 status_t dump(int fd);
335
336 bool CreateCamera(int index);
337 bool DestroyCamera(void);
338 int getCameraId(void);
339 void initParameters(int index);
340 int setMode(int recording_en);
341
342 int startPreview(void);
343 int stopPreview(void);
344 int getPreviewState(void)
345 {
346 return m_preview_state;
347 }
348 void clearPreviewState(void)
349 {
350 m_preview_state = 0;
351 }
352
353 int startSnapshot(SecBuffer *yuv_buf);
354 int stopSnapshot(void);
355 int getSnapshot(void);
356 int setSnapshotFrame(int index);
357
358 int startRecord(bool recordHint);
359 int stopRecord(void);
360 int setPreviewFrame(int index);
361 int getRecordFrame(void);
362 int releaseRecordFrame(int index);
363 int getRecordAddr(int index, SecBuffer *buffer);
364
365 int getPreview(camera_frame_metadata_t *facedata);
366 int setPreviewSize(int width, int height, int pixel_format);
367 int getPreviewSize(int *width, int *height, int *frame_size);
368 int getPreviewMaxSize(int *width, int *height);
369 int getPreviewPixelFormat(void);
370 int setPreviewImage(int index, unsigned char *buffer, int size);
371
372 int setVideosnapshotSize(int width, int height);
373 int getVideosnapshotSize(int *width, int *height, int *frame_size);
374 int setSnapshotSize(int width, int height);
375 int getSnapshotSize(int *width, int *height, int *frame_size);
376 int getSnapshotMaxSize(int *width, int *height);
377 int setSnapshotPixelFormat(int pixel_format);
378 int getSnapshotPixelFormat(void);
379
380 unsigned char* getJpeg(unsigned char *snapshot_data, int snapshot_size, int *size);
381 unsigned char* yuv2Jpeg(unsigned char *raw_data, int raw_size,
382 int *jpeg_size,
383 int width, int height, int pixel_format);
384
385 int setJpegThumbnailSize(int width, int height);
386 int getJpegThumbnailSize(int *width, int *height);
387
388 int setJpegThumbnailQuality(int jpeg_thumbnail_quality);
389 int getJpegThumbnailQuality(void);
390
391 int initSetParams(void);
392
393 int setAutofocus(void);
394 int setTouchAF(void);
395
396 int SetRotate(int angle);
397 int getRotate(void);
398
399 int setVerticalMirror(void);
400 int setHorizontalMirror(void);
401
402 int setWhiteBalance(int white_balance);
403 int getWhiteBalance(void);
404
405 int setBrightness(int brightness);
406 int getBrightness(void);
407
408 int setExposure(int exposure);
409 int getExposure(void);
410
411 int setImageEffect(int image_effect);
412 int getImageEffect(void);
413
414 int setSceneMode(int scene_mode);
415 int getSceneMode(void);
416
417 int setFlashMode(int flash_mode);
418 int getFlashMode(void);
419
420 int setMetering(int metering_value);
421 int getMetering(void);
422
423 int setAutoExposureLock(int toggle);
424 int setAutoWhiteBalanceLock(int toggle);
425
426 int setISO(int iso_value);
427 int getISO(void);
428
429 int setContrast(int contrast_value);
430 int getContrast(void);
431
432 int setSaturation(int saturation_value);
433 int getSaturation(void);
434
435 int setSharpness(int sharpness_value);
436 int getSharpness(void);
437
438 int setHue(int hue_value);
439 int getHue(void);
440
441 int setWDR(int wdr_value);
442 int getWDR(void);
443
444 int setAntiShake(int anti_shake);
445 int getAntiShake(void);
446
447 int setJpegQuality(int jpeg_qality);
448 int getJpegQuality(void);
449
450 int setZoom(int zoom_level);
451 int getZoom(void);
452
453 int setObjectTracking(int object_tracking);
454 int getObjectTracking(void);
455 int getObjectTrackingStatus(void);
456
457 int setSmartAuto(int smart_auto);
458 int getSmartAuto(void);
459 int getAutosceneStatus(void);
460
461 int setBeautyShot(int beauty_shot);
462 int getBeautyShot(void);
463
464 int setVintageMode(int vintage_mode);
465 int getVintageMode(void);
466
467 int setFocusMode(int focus_mode);
468 int getFocusMode(void);
469
470 int setFaceDetect(int face_detect);
471 int getFaceDetect(void);
472
473 int setGPSLatitude(const char *gps_latitude);
474 int setGPSLongitude(const char *gps_longitude);
475 int setGPSAltitude(const char *gps_altitude);
476 int setGPSTimeStamp(const char *gps_timestamp);
477 int setGPSProcessingMethod(const char *gps_timestamp);
478 int cancelAutofocus(void);
479 int setFaceDetectLockUnlock(int facedetect_lockunlock);
480 int setObjectPosition(int x, int y);
481 int setObjectTrackingStartStop(int start_stop);
482 int setTouchAFStartStop(int start_stop);
483 int setCAFStatus(int on_off);
484 int getAutoFocusResult(void);
485 int setAntiBanding(int anti_banding);
486 int getPostview(void);
487 int setRecordingSize(int width, int height);
488 int getRecordingSize(int *width, int *height);
489 int setGamma(int gamma);
490 int setSlowAE(int slow_ae);
491 int setExifOrientationInfo(int orientationInfo);
492 int setBatchReflection(void);
493 int setSnapshotCmd(void);
494 int endSnapshot(void);
495 int setCameraSensorReset(void);
496 int setSensorMode(int sensor_mode); /* Camcorder fix fps */
497 int setShotMode(int shot_mode); /* Shot mode */
498 int setDataLineCheck(int chk_dataline);
499 int getDataLineCheck(void);
500 int setDataLineCheckStop(void);
501 int setDefultIMEI(int imei);
502 int getDefultIMEI(void);
503 const __u8* getCameraSensorName(void);
504 bool getUseInternalISP(void);
505#ifdef ENABLE_ESD_PREVIEW_CHECK
506 int getCameraSensorESDStatus(void);
507#endif // ENABLE_ESD_PREVIEW_CHECK
508
509 int setFrameRate(int frame_rate);
510 unsigned char* getJpeg(int *jpeg_size,
511 int *thumb_size,
512 unsigned int *thumb_addr,
513 unsigned int *phyaddr);
514 int getSnapshotAndJpeg(SecBuffer *yuv_buf,
515 int index,
516 unsigned char *jpeg_buf,
517 int *output_size);
518 int getExif(unsigned char *pExifDst, unsigned char *pThumbSrc, int thumbSize);
519
520 void getPostViewConfig(int*, int*, int*);
521 void getThumbnailConfig(int *width, int *height, int *size);
522
523 int getPostViewOffset(void);
524 int getCameraFd(enum CAM_MODE);
525 int getJpegFd(void);
526 void SetJpgAddr(unsigned char *addr);
527 int getPreviewAddr(int index, SecBuffer *buffer);
528 int getCaptureAddr(int index, SecBuffer *buffer);
529#ifdef BOARD_USE_V4L2_ION
530 void setUserBufferAddr(void *ptr, int index, int mode);
531#endif
532 static void setJpegRatio(double ratio)
533 {
534 if((ratio < 0) || (ratio > 1))
535 return;
536
537 jpeg_ratio = ratio;
538 }
539
540 static double getJpegRatio()
541 {
542 return jpeg_ratio;
543 }
544
545 static void setInterleaveDataSize(int x)
546 {
547 interleaveDataSize = x;
548 }
549
550 static int getInterleaveDataSize()
551 {
552 return interleaveDataSize;
553 }
554
555 static void setJpegLineLength(int x)
556 {
557 jpegLineLength = x;
558 }
559
560 static int getJpegLineLength()
561 {
562 return jpegLineLength;
563 }
564
565private:
566 v4l2_streamparm m_streamparm;
567 struct sec_cam_parm *m_params;
568 int m_flagCreate;
569 int m_preview_state;
570 int m_snapshot_state;
571 int m_camera_id;
572 bool m_camera_use_ISP;
573
574 int m_cam_fd;
575 struct pollfd m_events_c;
576
577 int m_cam_fd2;
578 int m_cap_fd;
579 struct pollfd m_events_c2;
580
581 int m_cam_fd3;
582 int m_rec_fd;
583 struct pollfd m_events_c3;
584 int m_flag_record_start;
585
586 int m_preview_v4lformat;
587 int m_preview_width;
588 int m_preview_height;
589 int m_preview_max_width;
590 int m_preview_max_height;
591
592 int m_snapshot_v4lformat;
593 int m_snapshot_width;
594 int m_snapshot_height;
595 int m_snapshot_max_width;
596 int m_snapshot_max_height;
597
598 int m_num_capbuf;
599 int m_videosnapshot_width;
600 int m_videosnapshot_height;
601
602 int m_angle;
603 int m_anti_banding;
604 int m_wdr;
605 int m_anti_shake;
606 int m_zoom_level;
607 int m_object_tracking;
608 int m_smart_auto;
609 int m_beauty_shot;
610 int m_vintage_mode;
611 int m_face_detect;
612 int m_object_tracking_start_stop;
613 int m_recording_en;
614 bool m_record_hint;
615 int m_recording_width;
616 int m_recording_height;
617 long m_gps_latitude;
618 long m_gps_longitude;
619 long m_gps_altitude;
620 long m_gps_timestamp;
621 int m_sensor_mode; /*Camcorder fix fps */
622 int m_shot_mode; /* Shot mode */
623 int m_exif_orientation;
624 int m_chk_dataline;
625 int m_video_gamma;
626 int m_slow_ae;
627 int m_camera_af_flag;
628 int m_auto_focus_state;
629
630 int m_flag_camera_create;
631 int m_flag_camera_start;
632
633 int m_jpeg_fd;
634 int m_jpeg_thumbnail_width;
635 int m_jpeg_thumbnail_height;
636 int m_jpeg_thumbnail_quality;
637 int m_jpeg_quality;
638
639 int m_postview_offset;
640
641#ifdef ENABLE_ESD_PREVIEW_CHECK
642 int m_esd_check_count;
643#endif // ENABLE_ESD_PREVIEW_CHECK
644
645 exif_attribute_t mExifInfo;
646
647 struct SecBuffer m_capture_buf[CAP_BUFFERS];
648 struct SecBuffer m_buffers_preview[MAX_BUFFERS];
649 struct SecBuffer m_buffers_record[MAX_BUFFERS];
650
651 inline void writeExifIfd(unsigned char **pCur,
652 unsigned short tag,
653 unsigned short type,
654 unsigned int count,
655 uint32_t value);
656 inline void writeExifIfd(unsigned char **pCur,
657 unsigned short tag,
658 unsigned short type,
659 unsigned int count,
660 unsigned char *pValue);
661 inline void writeExifIfd(unsigned char **pCur,
662 unsigned short tag,
663 unsigned short type,
664 unsigned int count,
665 rational_t *pValue,
666 unsigned int *offset,
667 unsigned char *start);
668 inline void writeExifIfd(unsigned char **pCur,
669 unsigned short tag,
670 unsigned short type,
671 unsigned int count,
672 unsigned char *pValue,
673 unsigned int *offset,
674 unsigned char *start);
675
676 void setExifChangedAttribute();
677 void setExifFixedAttribute();
678 int makeExif (unsigned char *exifOut,
679 unsigned char *thumb_buf,
680 unsigned int thumb_size,
681 exif_attribute_t *exifInfo,
682 unsigned int *size,
683 bool useMainbufForThumb);
684 void resetCamera();
685
686 static double jpeg_ratio;
687 static int interleaveDataSize;
688 static int jpegLineLength;
689};
690
691extern unsigned long measure_time_camera(struct timeval *start, struct timeval *stop);
692
693}; // namespace android
694
695#endif // ANDROID_HARDWARE_CAMERA_SEC_H