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