PageRenderTime 56ms CodeModel.GetById 13ms RepoModel.GetById 1ms app.codeStats 0ms

/aries/libcamera/SecCamera.cpp

https://github.com/kangsterizer/android_device_samsung_common
C++ | 3160 lines | 2369 code | 621 blank | 170 comment | 466 complexity | 88228a412053ef0894ba40d5567ca171 MD5 | raw file
  1. /*
  2. * Copyright 2008, The Android Open Source Project
  3. * Copyright 2010, Samsung Electronics Co. LTD
  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. ************************************
  19. * Filename: SecCamera.cpp
  20. * Author: Sachin P. Kamat
  21. * Purpose: This file interacts with the Camera and JPEG drivers.
  22. *************************************
  23. */
  24. //#define LOG_NDEBUG 0
  25. #define LOG_TAG "SecCamera"
  26. #include <utils/Log.h>
  27. #include <string.h>
  28. #include <stdlib.h>
  29. #include <sys/poll.h>
  30. #include "SecCamera.h"
  31. #include "cutils/properties.h"
  32. using namespace android;
  33. #define CHECK(return_value) \
  34. if (return_value < 0) { \
  35. LOGE("%s::%d fail. errno: %s, m_camera_id = %d\n", \
  36. __func__, __LINE__, strerror(errno), m_camera_id); \
  37. return -1; \
  38. }
  39. #define CHECK_PTR(return_value) \
  40. if (return_value < 0) { \
  41. LOGE("%s::%d fail, errno: %s, m_camera_id = %d\n", \
  42. __func__,__LINE__, strerror(errno), m_camera_id); \
  43. return NULL; \
  44. }
  45. #define ALIGN_TO_32B(x) ((((x) + (1 << 5) - 1) >> 5) << 5)
  46. #define ALIGN_TO_128B(x) ((((x) + (1 << 7) - 1) >> 7) << 7)
  47. #define ALIGN_TO_8KB(x) ((((x) + (1 << 13) - 1) >> 13) << 13)
  48. namespace android {
  49. // ======================================================================
  50. // Camera controls
  51. static struct timeval time_start;
  52. static struct timeval time_stop;
  53. unsigned long measure_time(struct timeval *start, struct timeval *stop)
  54. {
  55. unsigned long sec, usec, time;
  56. sec = stop->tv_sec - start->tv_sec;
  57. if (stop->tv_usec >= start->tv_usec) {
  58. usec = stop->tv_usec - start->tv_usec;
  59. } else {
  60. usec = stop->tv_usec + 1000000 - start->tv_usec;
  61. sec--;
  62. }
  63. time = (sec * 1000000) + usec;
  64. return time;
  65. }
  66. static int get_pixel_depth(unsigned int fmt)
  67. {
  68. int depth = 0;
  69. switch (fmt) {
  70. case V4L2_PIX_FMT_NV12:
  71. depth = 12;
  72. break;
  73. case V4L2_PIX_FMT_NV12T:
  74. depth = 12;
  75. break;
  76. case V4L2_PIX_FMT_NV21:
  77. depth = 12;
  78. break;
  79. case V4L2_PIX_FMT_YUV420:
  80. depth = 12;
  81. break;
  82. case V4L2_PIX_FMT_RGB565:
  83. case V4L2_PIX_FMT_YUYV:
  84. case V4L2_PIX_FMT_YVYU:
  85. case V4L2_PIX_FMT_UYVY:
  86. case V4L2_PIX_FMT_VYUY:
  87. case V4L2_PIX_FMT_NV16:
  88. case V4L2_PIX_FMT_NV61:
  89. case V4L2_PIX_FMT_YUV422P:
  90. depth = 16;
  91. break;
  92. case V4L2_PIX_FMT_RGB32:
  93. depth = 32;
  94. break;
  95. }
  96. return depth;
  97. }
  98. #define ALIGN_W(x) (((x) + 0x7F) & (~0x7F)) // Set as multiple of 128
  99. #define ALIGN_H(x) (((x) + 0x1F) & (~0x1F)) // Set as multiple of 32
  100. #define ALIGN_BUF(x) (((x) + 0x1FFF)& (~0x1FFF)) // Set as multiple of 8K
  101. static int init_preview_buffers(struct fimc_buffer *buffers, int width, int height, unsigned int fmt)
  102. {
  103. int i, len;
  104. if (fmt==V4L2_PIX_FMT_NV12T) {
  105. len = ALIGN_BUF(ALIGN_W(width) * ALIGN_H(height)) +
  106. ALIGN_BUF(ALIGN_W(width) * ALIGN_H(height / 2));
  107. } else {
  108. len = (width * height * get_pixel_depth(fmt)) / 8;
  109. }
  110. for (i = 0; i < MAX_BUFFERS; i++) {
  111. buffers[i].length = len;
  112. }
  113. return 0;
  114. }
  115. static int fimc_poll(struct pollfd *events)
  116. {
  117. int ret;
  118. /* 10 second delay is because sensor can take a long time
  119. * to do auto focus and capture in dark settings
  120. */
  121. ret = poll(events, 1, 10000);
  122. if (ret < 0) {
  123. LOGE("ERR(%s):poll error\n", __func__);
  124. return ret;
  125. }
  126. if (ret == 0) {
  127. LOGE("ERR(%s):No data in 10 secs..\n", __func__);
  128. return ret;
  129. }
  130. return ret;
  131. }
  132. int SecCamera::previewPoll(bool preview)
  133. {
  134. int ret;
  135. if (preview) {
  136. #ifdef ENABLE_ESD_PREVIEW_CHECK
  137. int status = 0;
  138. if (!(++m_esd_check_count % 60)) {
  139. status = getCameraSensorESDStatus();
  140. m_esd_check_count = 0;
  141. if (status) {
  142. LOGE("ERR(%s) ESD status(%d)", __func__, status);
  143. return status;
  144. }
  145. }
  146. #endif
  147. ret = poll(&m_events_c, 1, 1000);
  148. } else {
  149. ret = poll(&m_events_c2, 1, 1000);
  150. }
  151. if (ret < 0) {
  152. LOGE("ERR(%s):poll error\n", __func__);
  153. return ret;
  154. }
  155. if (ret == 0) {
  156. LOGE("ERR(%s):No data in 1 secs.. Camera Device Reset \n", __func__);
  157. return ret;
  158. }
  159. return ret;
  160. }
  161. static int fimc_v4l2_querycap(int fp)
  162. {
  163. struct v4l2_capability cap;
  164. int ret = 0;
  165. ret = ioctl(fp, VIDIOC_QUERYCAP, &cap);
  166. if (ret < 0) {
  167. LOGE("ERR(%s):VIDIOC_QUERYCAP failed\n", __func__);
  168. return -1;
  169. }
  170. if (!(cap.capabilities & V4L2_CAP_VIDEO_CAPTURE)) {
  171. LOGE("ERR(%s):no capture devices\n", __func__);
  172. return -1;
  173. }
  174. return ret;
  175. }
  176. static const __u8* fimc_v4l2_enuminput(int fp, int index)
  177. {
  178. static struct v4l2_input input;
  179. input.index = index;
  180. if (ioctl(fp, VIDIOC_ENUMINPUT, &input) != 0) {
  181. LOGE("ERR(%s):No matching index found\n", __func__);
  182. return NULL;
  183. }
  184. LOGI("Name of input channel[%d] is %s\n", input.index, input.name);
  185. return input.name;
  186. }
  187. static int fimc_v4l2_s_input(int fp, int index)
  188. {
  189. struct v4l2_input input;
  190. int ret;
  191. input.index = index;
  192. ret = ioctl(fp, VIDIOC_S_INPUT, &input);
  193. if (ret < 0) {
  194. LOGE("ERR(%s):VIDIOC_S_INPUT failed\n", __func__);
  195. return ret;
  196. }
  197. return ret;
  198. }
  199. static int fimc_v4l2_s_fmt(int fp, int width, int height, unsigned int fmt, int flag_capture)
  200. {
  201. struct v4l2_format v4l2_fmt;
  202. struct v4l2_pix_format pixfmt;
  203. int ret;
  204. v4l2_fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
  205. memset(&pixfmt, 0, sizeof(pixfmt));
  206. pixfmt.width = width;
  207. pixfmt.height = height;
  208. pixfmt.pixelformat = fmt;
  209. pixfmt.sizeimage = (width * height * get_pixel_depth(fmt)) / 8;
  210. pixfmt.field = V4L2_FIELD_NONE;
  211. v4l2_fmt.fmt.pix = pixfmt;
  212. /* Set up for capture */
  213. ret = ioctl(fp, VIDIOC_S_FMT, &v4l2_fmt);
  214. if (ret < 0) {
  215. LOGE("ERR(%s):VIDIOC_S_FMT failed\n", __func__);
  216. return -1;
  217. }
  218. return 0;
  219. }
  220. static int fimc_v4l2_s_fmt_cap(int fp, int width, int height, unsigned int fmt)
  221. {
  222. struct v4l2_format v4l2_fmt;
  223. struct v4l2_pix_format pixfmt;
  224. int ret;
  225. memset(&pixfmt, 0, sizeof(pixfmt));
  226. v4l2_fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
  227. pixfmt.width = width;
  228. pixfmt.height = height;
  229. pixfmt.pixelformat = fmt;
  230. if (fmt == V4L2_PIX_FMT_JPEG) {
  231. pixfmt.colorspace = V4L2_COLORSPACE_JPEG;
  232. }
  233. pixfmt.sizeimage = (width * height * get_pixel_depth(fmt)) / 8;
  234. v4l2_fmt.fmt.pix = pixfmt;
  235. LOGV("ori_w %d, ori_h %d, w %d, h %d\n", width, height, v4l2_fmt.fmt.pix.width, v4l2_fmt.fmt.pix.height);
  236. /* Set up for capture */
  237. ret = ioctl(fp, VIDIOC_S_FMT, &v4l2_fmt);
  238. if (ret < 0) {
  239. LOGE("ERR(%s):VIDIOC_S_FMT failed\n", __func__);
  240. return ret;
  241. }
  242. return ret;
  243. }
  244. static int fimc_v4l2_enum_fmt(int fp, unsigned int fmt)
  245. {
  246. struct v4l2_fmtdesc fmtdesc;
  247. int found = 0;
  248. fmtdesc.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
  249. fmtdesc.index = 0;
  250. while (ioctl(fp, VIDIOC_ENUM_FMT, &fmtdesc) == 0) {
  251. if (fmtdesc.pixelformat == fmt) {
  252. LOGV("passed fmt = %#x found pixel format[%d]: %s\n", fmt, fmtdesc.index, fmtdesc.description);
  253. found = 1;
  254. break;
  255. }
  256. fmtdesc.index++;
  257. }
  258. if (!found) {
  259. LOGE("unsupported pixel format\n");
  260. return -1;
  261. }
  262. return 0;
  263. }
  264. static int fimc_v4l2_reqbufs(int fp, enum v4l2_buf_type type, int nr_bufs)
  265. {
  266. struct v4l2_requestbuffers req;
  267. int ret;
  268. req.count = nr_bufs;
  269. req.type = type;
  270. req.memory = V4L2_MEMORY_MMAP;
  271. ret = ioctl(fp, VIDIOC_REQBUFS, &req);
  272. if (ret < 0) {
  273. LOGE("ERR(%s):VIDIOC_REQBUFS failed\n", __func__);
  274. return -1;
  275. }
  276. return req.count;
  277. }
  278. static int fimc_v4l2_querybuf(int fp, struct fimc_buffer *buffer, enum v4l2_buf_type type)
  279. {
  280. struct v4l2_buffer v4l2_buf;
  281. int ret;
  282. LOGI("%s :", __func__);
  283. v4l2_buf.type = type;
  284. v4l2_buf.memory = V4L2_MEMORY_MMAP;
  285. v4l2_buf.index = 0;
  286. ret = ioctl(fp , VIDIOC_QUERYBUF, &v4l2_buf);
  287. if (ret < 0) {
  288. LOGE("ERR(%s):VIDIOC_QUERYBUF failed\n", __func__);
  289. return -1;
  290. }
  291. buffer->length = v4l2_buf.length;
  292. if ((buffer->start = (char *)mmap(0, v4l2_buf.length,
  293. PROT_READ | PROT_WRITE, MAP_SHARED,
  294. fp, v4l2_buf.m.offset)) < 0) {
  295. LOGE("%s %d] mmap() failed\n",__func__, __LINE__);
  296. return -1;
  297. }
  298. LOGI("%s: buffer->start = %p v4l2_buf.length = %d",
  299. __func__, buffer->start, v4l2_buf.length);
  300. return 0;
  301. }
  302. static int fimc_v4l2_streamon(int fp)
  303. {
  304. enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
  305. int ret;
  306. ret = ioctl(fp, VIDIOC_STREAMON, &type);
  307. if (ret < 0) {
  308. LOGE("ERR(%s):VIDIOC_STREAMON failed\n", __func__);
  309. return ret;
  310. }
  311. return ret;
  312. }
  313. static int fimc_v4l2_streamoff(int fp)
  314. {
  315. enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
  316. int ret;
  317. LOGV("%s :", __func__);
  318. ret = ioctl(fp, VIDIOC_STREAMOFF, &type);
  319. if (ret < 0) {
  320. LOGE("ERR(%s):VIDIOC_STREAMOFF failed\n", __func__);
  321. return ret;
  322. }
  323. return ret;
  324. }
  325. static int fimc_v4l2_qbuf(int fp, int index)
  326. {
  327. struct v4l2_buffer v4l2_buf;
  328. int ret;
  329. v4l2_buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
  330. v4l2_buf.memory = V4L2_MEMORY_MMAP;
  331. v4l2_buf.index = index;
  332. ret = ioctl(fp, VIDIOC_QBUF, &v4l2_buf);
  333. if (ret < 0) {
  334. LOGE("ERR(%s):VIDIOC_QBUF failed\n", __func__);
  335. return ret;
  336. }
  337. return 0;
  338. }
  339. static int fimc_v4l2_dqbuf(int fp)
  340. {
  341. struct v4l2_buffer v4l2_buf;
  342. int ret;
  343. v4l2_buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
  344. v4l2_buf.memory = V4L2_MEMORY_MMAP;
  345. ret = ioctl(fp, VIDIOC_DQBUF, &v4l2_buf);
  346. if (ret < 0) {
  347. LOGE("ERR(%s):VIDIOC_DQBUF failed, dropped frame\n", __func__);
  348. return ret;
  349. }
  350. return v4l2_buf.index;
  351. }
  352. static int fimc_v4l2_g_ctrl(int fp, unsigned int id)
  353. {
  354. struct v4l2_control ctrl;
  355. int ret;
  356. ctrl.id = id;
  357. ret = ioctl(fp, VIDIOC_G_CTRL, &ctrl);
  358. if (ret < 0) {
  359. LOGE("ERR(%s): VIDIOC_G_CTRL(id = 0x%x (%d)) failed, ret = %d\n",
  360. __func__, id, id-V4L2_CID_PRIVATE_BASE, ret);
  361. return ret;
  362. }
  363. return ctrl.value;
  364. }
  365. static int fimc_v4l2_s_ctrl(int fp, unsigned int id, unsigned int value)
  366. {
  367. struct v4l2_control ctrl;
  368. int ret;
  369. ctrl.id = id;
  370. ctrl.value = value;
  371. ret = ioctl(fp, VIDIOC_S_CTRL, &ctrl);
  372. if (ret < 0) {
  373. LOGE("ERR(%s):VIDIOC_S_CTRL(id = %#x (%d), value = %d) failed ret = %d\n",
  374. __func__, id, id-V4L2_CID_PRIVATE_BASE, value, ret);
  375. return ret;
  376. }
  377. return ctrl.value;
  378. }
  379. static int fimc_v4l2_s_ext_ctrl(int fp, unsigned int id, void *value)
  380. {
  381. struct v4l2_ext_controls ctrls;
  382. struct v4l2_ext_control ctrl;
  383. int ret;
  384. ctrl.id = id;
  385. ctrl.reserved = value;
  386. ctrls.ctrl_class = V4L2_CTRL_CLASS_CAMERA;
  387. ctrls.count = 1;
  388. ctrls.controls = &ctrl;
  389. ret = ioctl(fp, VIDIOC_S_EXT_CTRLS, &ctrls);
  390. if (ret < 0)
  391. LOGE("ERR(%s):VIDIOC_S_EXT_CTRLS failed\n", __func__);
  392. return ret;
  393. }
  394. static int fimc_v4l2_g_parm(int fp, struct v4l2_streamparm *streamparm)
  395. {
  396. int ret;
  397. streamparm->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
  398. ret = ioctl(fp, VIDIOC_G_PARM, streamparm);
  399. if (ret < 0) {
  400. LOGE("ERR(%s):VIDIOC_G_PARM failed\n", __func__);
  401. return -1;
  402. }
  403. LOGV("%s : timeperframe: numerator %d, denominator %d\n", __func__,
  404. streamparm->parm.capture.timeperframe.numerator,
  405. streamparm->parm.capture.timeperframe.denominator);
  406. return 0;
  407. }
  408. static int fimc_v4l2_s_parm(int fp, struct v4l2_streamparm *streamparm)
  409. {
  410. int ret;
  411. streamparm->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
  412. ret = ioctl(fp, VIDIOC_S_PARM, streamparm);
  413. if (ret < 0) {
  414. LOGE("ERR(%s):VIDIOC_S_PARM failed\n", __func__);
  415. return ret;
  416. }
  417. return 0;
  418. }
  419. // ======================================================================
  420. // Constructor & Destructor
  421. SecCamera::SecCamera() :
  422. m_flag_init(0),
  423. m_camera_id(CAMERA_ID_BACK),
  424. m_preview_v4lformat(V4L2_PIX_FMT_NV21),
  425. m_preview_width (0),
  426. m_preview_height (0),
  427. m_preview_max_width (MAX_BACK_CAMERA_PREVIEW_WIDTH),
  428. m_preview_max_height (MAX_BACK_CAMERA_PREVIEW_HEIGHT),
  429. m_snapshot_v4lformat(-1),
  430. m_snapshot_width (0),
  431. m_snapshot_height (0),
  432. m_snapshot_max_width (MAX_BACK_CAMERA_SNAPSHOT_WIDTH),
  433. m_snapshot_max_height (MAX_BACK_CAMERA_SNAPSHOT_HEIGHT),
  434. m_angle(-1),
  435. m_anti_banding(-1),
  436. m_wdr(-1),
  437. m_anti_shake(-1),
  438. m_zoom_level(-1),
  439. m_object_tracking(-1),
  440. m_smart_auto(-1),
  441. m_beauty_shot(-1),
  442. m_vintage_mode(-1),
  443. m_face_detect(-1),
  444. m_gps_latitude(-1),
  445. m_gps_longitude(-1),
  446. m_gps_altitude(-1),
  447. m_gps_timestamp(-1),
  448. m_vtmode(0),
  449. m_sensor_mode(-1),
  450. m_shot_mode(-1),
  451. m_exif_orientation(-1),
  452. m_blur_level(-1),
  453. m_chk_dataline(-1),
  454. m_video_gamma(-1),
  455. m_slow_ae(-1),
  456. m_camera_af_flag(-1),
  457. m_flag_camera_start(0),
  458. m_jpeg_thumbnail_width (0),
  459. m_jpeg_thumbnail_height(0),
  460. m_jpeg_quality(100)
  461. #ifdef ENABLE_ESD_PREVIEW_CHECK
  462. ,
  463. m_esd_check_count(0)
  464. #endif // ENABLE_ESD_PREVIEW_CHECK
  465. {
  466. m_params = (struct sec_cam_parm*)&m_streamparm.parm.raw_data;
  467. struct v4l2_captureparm capture;
  468. m_params->capture.timeperframe.numerator = 1;
  469. m_params->capture.timeperframe.denominator = 0;
  470. m_params->contrast = -1;
  471. m_params->effects = -1;
  472. m_params->brightness = -1;
  473. m_params->flash_mode = -1;
  474. m_params->focus_mode = -1;
  475. m_params->iso = -1;
  476. m_params->metering = -1;
  477. m_params->saturation = -1;
  478. m_params->scene_mode = -1;
  479. m_params->sharpness = -1;
  480. m_params->white_balance = -1;
  481. memset(&m_capture_buf, 0, sizeof(m_capture_buf));
  482. LOGV("%s :", __func__);
  483. }
  484. int SecCamera::flagCreate(void) const
  485. {
  486. LOGV("%s : : %d", __func__, m_flag_init);
  487. return m_flag_init;
  488. }
  489. SecCamera::~SecCamera()
  490. {
  491. LOGV("%s :", __func__);
  492. }
  493. int SecCamera::initCamera(int index)
  494. {
  495. LOGV("%s :", __func__);
  496. int ret = 0;
  497. if (!m_flag_init) {
  498. /* Arun C
  499. * Reset the lense position only during camera starts; don't do
  500. * reset between shot to shot
  501. */
  502. m_camera_af_flag = -1;
  503. m_cam_fd_temp = -1;
  504. m_cam_fd2_temp = -1;
  505. m_cam_fd = open(CAMERA_DEV_NAME, O_RDWR);
  506. if (m_cam_fd < 0) {
  507. LOGE("ERR(%s):Cannot open %s (error : %s)\n", __func__, CAMERA_DEV_NAME, strerror(errno));
  508. return -1;
  509. }
  510. if (m_cam_fd < 3) { // for 0, 1, 2
  511. LOGE("ERR(%s):m_cam_fd is %d\n", __func__, m_cam_fd);
  512. close(m_cam_fd);
  513. m_cam_fd_temp = open(CAMERA_DEV_NAME_TEMP, O_CREAT);
  514. LOGE("ERR(%s):m_cam_fd_temp is %d\n", __func__, m_cam_fd_temp);
  515. m_cam_fd = open(CAMERA_DEV_NAME, O_RDWR);
  516. if (m_cam_fd < 3) { // for 0, 1, 2
  517. LOGE("ERR(%s):retring to open %s is failed, %d\n", __func__, CAMERA_DEV_NAME, m_cam_fd);
  518. if (m_cam_fd < 0) {
  519. return -1;
  520. } else {
  521. close(m_cam_fd);
  522. m_cam_fd = -1;
  523. }
  524. if (m_cam_fd_temp != -1){
  525. close(m_cam_fd_temp);
  526. m_cam_fd_temp = -1;
  527. }
  528. return -1;
  529. }
  530. }
  531. LOGE("initCamera: m_cam_fd(%d), m_jpeg_fd(%d)", m_cam_fd, m_jpeg_fd);
  532. ret = fimc_v4l2_querycap(m_cam_fd);
  533. CHECK(ret);
  534. if (!fimc_v4l2_enuminput(m_cam_fd, index))
  535. return -1;
  536. ret = fimc_v4l2_s_input(m_cam_fd, index);
  537. CHECK(ret);
  538. m_cam_fd2 = open(CAMERA_DEV_NAME2, O_RDWR);
  539. if (m_cam_fd2 < 0) {
  540. LOGE("ERR(%s):Cannot open %s (error : %s)\n", __func__, CAMERA_DEV_NAME2, strerror(errno));
  541. return -1;
  542. }
  543. if (m_cam_fd2 < 3) { // for 0, 1, 2
  544. LOGE("ERR(%s):m_cam_fd2 is %d\n", __func__, m_cam_fd2);
  545. close(m_cam_fd2);
  546. m_cam_fd2_temp = open(CAMERA_DEV_NAME2_TEMP, O_CREAT);
  547. LOGE("ERR(%s):m_cam_fd2_temp is %d\n", __func__, m_cam_fd2_temp);
  548. m_cam_fd2 = open(CAMERA_DEV_NAME2, O_RDWR);
  549. if (m_cam_fd2 < 3) { // for 0, 1, 2
  550. LOGE("ERR(%s):retring to open %s is failed, %d\n", __func__, CAMERA_DEV_NAME2, m_cam_fd2);
  551. if (m_cam_fd2 < 0) {
  552. return -1;
  553. }
  554. else{
  555. close(m_cam_fd2);
  556. m_cam_fd2 = -1;
  557. }
  558. if (m_cam_fd2_temp != -1) {
  559. close(m_cam_fd2_temp);
  560. m_cam_fd2_temp = -1;
  561. }
  562. return -1;
  563. }
  564. }
  565. if (m_cam_fd_temp != -1) {
  566. close(m_cam_fd_temp);
  567. m_cam_fd_temp = -1;
  568. }
  569. if (m_cam_fd2_temp != -1) {
  570. close(m_cam_fd2_temp);
  571. m_cam_fd2_temp = -1;
  572. }
  573. LOGE("initCamera: m_cam_fd2(%d)", m_cam_fd2);
  574. ret = fimc_v4l2_querycap(m_cam_fd2);
  575. CHECK(ret);
  576. if (!fimc_v4l2_enuminput(m_cam_fd2, index))
  577. return -1;
  578. ret = fimc_v4l2_s_input(m_cam_fd2, index);
  579. CHECK(ret);
  580. m_camera_id = index;
  581. setExifFixedAttribute();
  582. m_flag_init = 1;
  583. }
  584. return 0;
  585. }
  586. void SecCamera::resetCamera()
  587. {
  588. LOGV("%s :", __func__);
  589. DeinitCamera();
  590. initCamera(m_camera_id);
  591. }
  592. void SecCamera::DeinitCamera()
  593. {
  594. LOGV("%s :", __func__);
  595. if (m_flag_init) {
  596. stopRecord();
  597. /* close m_cam_fd after stopRecord() because stopRecord()
  598. * uses m_cam_fd to change frame rate
  599. */
  600. LOGI("DeinitCamera: m_cam_fd(%d)", m_cam_fd);
  601. if (m_cam_fd > -1) {
  602. close(m_cam_fd);
  603. m_cam_fd = -1;
  604. }
  605. LOGI("DeinitCamera: m_cam_fd2(%d)", m_cam_fd2);
  606. if (m_cam_fd2 > -1) {
  607. close(m_cam_fd2);
  608. m_cam_fd2 = -1;
  609. }
  610. if (m_cam_fd_temp != -1) {
  611. close(m_cam_fd_temp);
  612. m_cam_fd_temp = -1;
  613. }
  614. if (m_cam_fd2_temp != -1) {
  615. close(m_cam_fd2_temp);
  616. m_cam_fd2_temp = -1;
  617. }
  618. m_flag_init = 0;
  619. }
  620. }
  621. int SecCamera::getCameraFd(void)
  622. {
  623. return m_cam_fd;
  624. }
  625. // ======================================================================
  626. // Preview
  627. int SecCamera::startPreview(void)
  628. {
  629. v4l2_streamparm streamparm;
  630. struct sec_cam_parm *parms;
  631. parms = (struct sec_cam_parm*)&streamparm.parm.raw_data;
  632. LOGV("%s :", __func__);
  633. // aleady started
  634. if (m_flag_camera_start > 0) {
  635. LOGE("ERR(%s):Preview was already started\n", __func__);
  636. return 0;
  637. }
  638. if (m_cam_fd <= 0) {
  639. LOGE("ERR(%s):Camera was closed\n", __func__);
  640. return -1;
  641. }
  642. memset(&m_events_c, 0, sizeof(m_events_c));
  643. m_events_c.fd = m_cam_fd;
  644. m_events_c.events = POLLIN | POLLERR;
  645. /* enum_fmt, s_fmt sample */
  646. int ret = fimc_v4l2_enum_fmt(m_cam_fd,m_preview_v4lformat);
  647. CHECK(ret);
  648. ret = fimc_v4l2_s_fmt(m_cam_fd, m_preview_width,m_preview_height,m_preview_v4lformat, 0);
  649. CHECK(ret);
  650. ret = fimc_v4l2_reqbufs(m_cam_fd, V4L2_BUF_TYPE_VIDEO_CAPTURE, MAX_BUFFERS);
  651. CHECK(ret);
  652. LOGV("%s : m_preview_width: %d m_preview_height: %d m_angle: %d\n",
  653. __func__, m_preview_width, m_preview_height, m_angle);
  654. ret = fimc_v4l2_s_ctrl(m_cam_fd,
  655. V4L2_CID_CAMERA_CHECK_DATALINE, m_chk_dataline);
  656. CHECK(ret);
  657. if (m_camera_id == CAMERA_ID_FRONT) {
  658. /* VT mode setting */
  659. ret = fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_VT_MODE, m_vtmode);
  660. CHECK(ret);
  661. }
  662. /* start with all buffers in queue */
  663. for (int i = 0; i < MAX_BUFFERS; i++) {
  664. ret = fimc_v4l2_qbuf(m_cam_fd, i);
  665. CHECK(ret);
  666. }
  667. ret = fimc_v4l2_streamon(m_cam_fd);
  668. CHECK(ret);
  669. m_flag_camera_start = 1;
  670. ret = fimc_v4l2_s_parm(m_cam_fd, &m_streamparm);
  671. CHECK(ret);
  672. if (m_camera_id == CAMERA_ID_FRONT) {
  673. /* Blur setting */
  674. LOGV("m_blur_level = %d", m_blur_level);
  675. ret = fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_VGA_BLUR,
  676. m_blur_level);
  677. CHECK(ret);
  678. }
  679. // It is a delay for a new frame, not to show the previous bigger ugly picture frame.
  680. ret = fimc_poll(&m_events_c);
  681. CHECK(ret);
  682. ret = fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_RETURN_FOCUS, 0);
  683. CHECK(ret);
  684. LOGV("%s: got the first frame of the preview\n", __func__);
  685. return 0;
  686. }
  687. int SecCamera::stopPreview(void)
  688. {
  689. int ret;
  690. LOGV("%s :", __func__);
  691. if (m_flag_camera_start == 0) {
  692. LOGW("%s: doing nothing because m_flag_camera_start is zero", __func__);
  693. return 0;
  694. }
  695. if (m_params->flash_mode == FLASH_MODE_TORCH)
  696. setFlashMode(FLASH_MODE_OFF);
  697. if (m_cam_fd <= 0) {
  698. LOGE("ERR(%s):Camera was closed\n", __func__);
  699. return -1;
  700. }
  701. ret = fimc_v4l2_streamoff(m_cam_fd);
  702. CHECK(ret);
  703. m_flag_camera_start = 0;
  704. return ret;
  705. }
  706. //Recording
  707. int SecCamera::startRecord(void)
  708. {
  709. int ret, i;
  710. LOGV("%s :", __func__);
  711. // aleady started
  712. if (m_flag_record_start > 0) {
  713. LOGE("ERR(%s):Preview was already started\n", __func__);
  714. return 0;
  715. }
  716. if (m_cam_fd2 <= 0) {
  717. LOGE("ERR(%s):Camera was closed\n", __func__);
  718. return -1;
  719. }
  720. /* enum_fmt, s_fmt sample */
  721. ret = fimc_v4l2_enum_fmt(m_cam_fd2, V4L2_PIX_FMT_NV12T);
  722. CHECK(ret);
  723. LOGI("%s: m_recording_width = %d, m_recording_height = %d\n",
  724. __func__, m_recording_width, m_recording_height);
  725. ret = fimc_v4l2_s_fmt(m_cam_fd2, m_recording_width,
  726. m_recording_height, V4L2_PIX_FMT_NV12T, 0);
  727. CHECK(ret);
  728. ret = fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_FRAME_RATE,
  729. m_params->capture.timeperframe.denominator);
  730. CHECK(ret);
  731. ret = fimc_v4l2_reqbufs(m_cam_fd2, V4L2_BUF_TYPE_VIDEO_CAPTURE, MAX_BUFFERS);
  732. CHECK(ret);
  733. /* start with all buffers in queue */
  734. for (i = 0; i < MAX_BUFFERS; i++) {
  735. ret = fimc_v4l2_qbuf(m_cam_fd2, i);
  736. CHECK(ret);
  737. }
  738. ret = fimc_v4l2_streamon(m_cam_fd2);
  739. CHECK(ret);
  740. // Get and throw away the first frame since it is often garbled.
  741. memset(&m_events_c2, 0, sizeof(m_events_c2));
  742. m_events_c2.fd = m_cam_fd2;
  743. m_events_c2.events = POLLIN | POLLERR;
  744. ret = fimc_poll(&m_events_c2);
  745. CHECK(ret);
  746. m_flag_record_start = 1;
  747. return 0;
  748. }
  749. int SecCamera::stopRecord(void)
  750. {
  751. int ret;
  752. LOGV("%s :", __func__);
  753. if (m_flag_record_start == 0) {
  754. LOGW("%s: doing nothing because m_flag_record_start is zero", __func__);
  755. return 0;
  756. }
  757. if (m_cam_fd2 <= 0) {
  758. LOGE("ERR(%s):Camera was closed\n", __func__);
  759. return -1;
  760. }
  761. m_flag_record_start = 0;
  762. ret = fimc_v4l2_streamoff(m_cam_fd2);
  763. CHECK(ret);
  764. ret = fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_FRAME_RATE,
  765. FRAME_RATE_AUTO);
  766. CHECK(ret);
  767. return 0;
  768. }
  769. unsigned int SecCamera::getRecPhyAddrY(int index)
  770. {
  771. unsigned int addr_y;
  772. addr_y = fimc_v4l2_s_ctrl(m_cam_fd2, V4L2_CID_PADDR_Y, index);
  773. CHECK((int)addr_y);
  774. return addr_y;
  775. }
  776. unsigned int SecCamera::getRecPhyAddrC(int index)
  777. {
  778. unsigned int addr_c;
  779. addr_c = fimc_v4l2_s_ctrl(m_cam_fd2, V4L2_CID_PADDR_CBCR, index);
  780. CHECK((int)addr_c);
  781. return addr_c;
  782. }
  783. unsigned int SecCamera::getPhyAddrY(int index)
  784. {
  785. unsigned int addr_y;
  786. addr_y = fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_PADDR_Y, index);
  787. CHECK((int)addr_y);
  788. return addr_y;
  789. }
  790. unsigned int SecCamera::getPhyAddrC(int index)
  791. {
  792. unsigned int addr_c;
  793. addr_c = fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_PADDR_CBCR, index);
  794. CHECK((int)addr_c);
  795. return addr_c;
  796. }
  797. void SecCamera::pausePreview()
  798. {
  799. fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_STREAM_PAUSE, 0);
  800. }
  801. int SecCamera::getPreview()
  802. {
  803. int index;
  804. int ret;
  805. if (m_flag_camera_start == 0 || previewPoll(true) == 0) {
  806. LOGE("ERR(%s):Start Camera Device Reset \n", __func__);
  807. /* GAUDI Project([arun.c@samsung.com]) 2010.05.20. [Implemented ESD code] */
  808. /*
  809. * When there is no data for more than 1 second from the camera we inform
  810. * the FIMC driver by calling fimc_v4l2_s_input() with a special value = 1000
  811. * FIMC driver identify that there is something wrong with the camera
  812. * and it restarts the sensor.
  813. */
  814. stopPreview();
  815. /* Reset Only Camera Device */
  816. ret = fimc_v4l2_querycap(m_cam_fd);
  817. CHECK(ret);
  818. if (fimc_v4l2_enuminput(m_cam_fd, m_camera_id))
  819. return -1;
  820. ret = fimc_v4l2_s_input(m_cam_fd, 1000);
  821. CHECK(ret);
  822. ret = startPreview();
  823. if (ret < 0) {
  824. LOGE("ERR(%s): startPreview() return %d\n", __func__, ret);
  825. return 0;
  826. }
  827. }
  828. index = fimc_v4l2_dqbuf(m_cam_fd);
  829. if (!(0 <= index && index < MAX_BUFFERS)) {
  830. LOGE("ERR(%s):wrong index = %d\n", __func__, index);
  831. return -1;
  832. }
  833. ret = fimc_v4l2_qbuf(m_cam_fd, index);
  834. CHECK(ret);
  835. return index;
  836. }
  837. int SecCamera::getRecordFrame()
  838. {
  839. if (m_flag_record_start == 0) {
  840. LOGE("%s: m_flag_record_start is 0", __func__);
  841. return -1;
  842. }
  843. previewPoll(false);
  844. return fimc_v4l2_dqbuf(m_cam_fd2);
  845. }
  846. int SecCamera::releaseRecordFrame(int index)
  847. {
  848. if (!m_flag_record_start) {
  849. /* this can happen when recording frames are returned after
  850. * the recording is stopped at the driver level. we don't
  851. * need to return the buffers in this case and we've seen
  852. * cases where fimc could crash if we called qbuf and it
  853. * wasn't expecting it.
  854. */
  855. LOGI("%s: recording not in progress, ignoring", __func__);
  856. return 0;
  857. }
  858. return fimc_v4l2_qbuf(m_cam_fd2, index);
  859. }
  860. int SecCamera::setPreviewSize(int width, int height, int pixel_format)
  861. {
  862. LOGV("%s(width(%d), height(%d), format(%d))", __func__, width, height, pixel_format);
  863. int v4lpixelformat = pixel_format;
  864. #if defined(LOG_NDEBUG) && LOG_NDEBUG == 0
  865. if (v4lpixelformat == V4L2_PIX_FMT_YUV420)
  866. LOGV("PreviewFormat:V4L2_PIX_FMT_YUV420");
  867. else if (v4lpixelformat == V4L2_PIX_FMT_NV12)
  868. LOGV("PreviewFormat:V4L2_PIX_FMT_NV12");
  869. else if (v4lpixelformat == V4L2_PIX_FMT_NV12T)
  870. LOGV("PreviewFormat:V4L2_PIX_FMT_NV12T");
  871. else if (v4lpixelformat == V4L2_PIX_FMT_NV21)
  872. LOGV("PreviewFormat:V4L2_PIX_FMT_NV21");
  873. else if (v4lpixelformat == V4L2_PIX_FMT_YUV422P)
  874. LOGV("PreviewFormat:V4L2_PIX_FMT_YUV422P");
  875. else if (v4lpixelformat == V4L2_PIX_FMT_YUYV)
  876. LOGV("PreviewFormat:V4L2_PIX_FMT_YUYV");
  877. else if (v4lpixelformat == V4L2_PIX_FMT_RGB565)
  878. LOGV("PreviewFormat:V4L2_PIX_FMT_RGB565");
  879. else
  880. LOGV("PreviewFormat:UnknownFormat");
  881. #endif
  882. m_preview_width = width;
  883. m_preview_height = height;
  884. m_preview_v4lformat = v4lpixelformat;
  885. return 0;
  886. }
  887. int SecCamera::getPreviewSize(int *width, int *height, int *frame_size)
  888. {
  889. *width = m_preview_width;
  890. *height = m_preview_height;
  891. *frame_size = m_frameSize(m_preview_v4lformat, m_preview_width, m_preview_height);
  892. return 0;
  893. }
  894. int SecCamera::getPreviewMaxSize(int *width, int *height)
  895. {
  896. *width = m_preview_max_width;
  897. *height = m_preview_max_height;
  898. return 0;
  899. }
  900. int SecCamera::getPreviewPixelFormat(void)
  901. {
  902. return m_preview_v4lformat;
  903. }
  904. // ======================================================================
  905. // Snapshot
  906. /*
  907. * Devide getJpeg() as two funcs, setSnapshotCmd() & getJpeg() because of the shutter sound timing.
  908. * Here, just send the capture cmd to camera ISP to start JPEG capture.
  909. */
  910. int SecCamera::setSnapshotCmd(void)
  911. {
  912. LOGV("%s :", __func__);
  913. int ret = 0;
  914. LOG_TIME_DEFINE(0)
  915. LOG_TIME_DEFINE(1)
  916. if (m_cam_fd <= 0) {
  917. LOGE("ERR(%s):Camera was closed\n", __func__);
  918. return 0;
  919. }
  920. if (m_flag_camera_start > 0) {
  921. LOG_TIME_START(0)
  922. LOGW("WARN(%s):Camera was in preview, should have been stopped\n", __func__);
  923. stopPreview();
  924. LOG_TIME_END(0)
  925. }
  926. memset(&m_events_c, 0, sizeof(m_events_c));
  927. m_events_c.fd = m_cam_fd;
  928. m_events_c.events = POLLIN | POLLERR;
  929. LOG_TIME_START(1) // prepare
  930. int nframe = 1;
  931. ret = fimc_v4l2_enum_fmt(m_cam_fd,m_snapshot_v4lformat);
  932. CHECK(ret);
  933. ret = fimc_v4l2_s_fmt_cap(m_cam_fd, m_snapshot_width, m_snapshot_height, V4L2_PIX_FMT_JPEG);
  934. CHECK(ret);
  935. ret = fimc_v4l2_reqbufs(m_cam_fd, V4L2_BUF_TYPE_VIDEO_CAPTURE, nframe);
  936. CHECK(ret);
  937. ret = fimc_v4l2_querybuf(m_cam_fd, &m_capture_buf, V4L2_BUF_TYPE_VIDEO_CAPTURE);
  938. CHECK(ret);
  939. ret = fimc_v4l2_qbuf(m_cam_fd, 0);
  940. CHECK(ret);
  941. ret = fimc_v4l2_streamon(m_cam_fd);
  942. CHECK(ret);
  943. LOG_TIME_END(1)
  944. return 0;
  945. }
  946. int SecCamera::endSnapshot(void)
  947. {
  948. int ret;
  949. LOGI("%s :", __func__);
  950. if (m_capture_buf.start) {
  951. munmap(m_capture_buf.start, m_capture_buf.length);
  952. LOGI("munmap():virt. addr %p size = %d\n",
  953. m_capture_buf.start, m_capture_buf.length);
  954. m_capture_buf.start = NULL;
  955. m_capture_buf.length = 0;
  956. }
  957. return 0;
  958. }
  959. /*
  960. * Set Jpeg quality & exif info and get JPEG data from camera ISP
  961. */
  962. unsigned char* SecCamera::getJpeg(int *jpeg_size, unsigned int *phyaddr)
  963. {
  964. LOGV("%s :", __func__);
  965. int index, ret = 0;
  966. unsigned char *addr;
  967. LOG_TIME_DEFINE(2)
  968. // capture
  969. ret = fimc_poll(&m_events_c);
  970. CHECK_PTR(ret);
  971. index = fimc_v4l2_dqbuf(m_cam_fd);
  972. if (index != 0) {
  973. LOGE("ERR(%s):wrong index = %d\n", __func__, index);
  974. return NULL;
  975. }
  976. *jpeg_size = fimc_v4l2_g_ctrl(m_cam_fd, V4L2_CID_CAM_JPEG_MAIN_SIZE);
  977. CHECK_PTR(*jpeg_size);
  978. int main_offset = fimc_v4l2_g_ctrl(m_cam_fd, V4L2_CID_CAM_JPEG_MAIN_OFFSET);
  979. CHECK_PTR(main_offset);
  980. m_postview_offset = fimc_v4l2_g_ctrl(m_cam_fd, V4L2_CID_CAM_JPEG_POSTVIEW_OFFSET);
  981. CHECK_PTR(m_postview_offset);
  982. ret = fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_STREAM_PAUSE, 0);
  983. CHECK_PTR(ret);
  984. LOGV("\nsnapshot dqueued buffer = %d snapshot_width = %d snapshot_height = %d, size = %d\n\n",
  985. index, m_snapshot_width, m_snapshot_height, *jpeg_size);
  986. addr = (unsigned char*)(m_capture_buf.start) + main_offset;
  987. *phyaddr = getPhyAddrY(index) + m_postview_offset;
  988. LOG_TIME_START(2) // post
  989. ret = fimc_v4l2_streamoff(m_cam_fd);
  990. CHECK_PTR(ret);
  991. LOG_TIME_END(2)
  992. return addr;
  993. }
  994. int SecCamera::getExif(unsigned char *pExifDst, unsigned char *pThumbSrc)
  995. {
  996. JpegEncoder jpgEnc;
  997. LOGV("%s : m_jpeg_thumbnail_width = %d, height = %d",
  998. __func__, m_jpeg_thumbnail_width, m_jpeg_thumbnail_height);
  999. if ((m_jpeg_thumbnail_width > 0) && (m_jpeg_thumbnail_height > 0)) {
  1000. int inFormat = JPG_MODESEL_YCBCR;
  1001. int outFormat = JPG_422;
  1002. switch (m_snapshot_v4lformat) {
  1003. case V4L2_PIX_FMT_NV12:
  1004. case V4L2_PIX_FMT_NV21:
  1005. case V4L2_PIX_FMT_NV12T:
  1006. case V4L2_PIX_FMT_YUV420:
  1007. outFormat = JPG_420;
  1008. break;
  1009. case V4L2_PIX_FMT_YUYV:
  1010. case V4L2_PIX_FMT_UYVY:
  1011. case V4L2_PIX_FMT_YUV422P:
  1012. outFormat = JPG_422;
  1013. break;
  1014. }
  1015. if (jpgEnc.setConfig(JPEG_SET_ENCODE_IN_FORMAT, inFormat) != JPG_SUCCESS)
  1016. return -1;
  1017. if (jpgEnc.setConfig(JPEG_SET_SAMPING_MODE, outFormat) != JPG_SUCCESS)
  1018. return -1;
  1019. if (jpgEnc.setConfig(JPEG_SET_ENCODE_QUALITY, JPG_QUALITY_LEVEL_2) != JPG_SUCCESS)
  1020. return -1;
  1021. int thumbWidth, thumbHeight, thumbSrcSize;
  1022. getThumbnailConfig(&thumbWidth, &thumbHeight, &thumbSrcSize);
  1023. if (jpgEnc.setConfig(JPEG_SET_ENCODE_WIDTH, thumbWidth) != JPG_SUCCESS)
  1024. return -1;
  1025. if (jpgEnc.setConfig(JPEG_SET_ENCODE_HEIGHT, thumbHeight) != JPG_SUCCESS)
  1026. return -1;
  1027. char *pInBuf = (char *)jpgEnc.getInBuf(thumbSrcSize);
  1028. if (pInBuf == NULL)
  1029. return -1;
  1030. memcpy(pInBuf, pThumbSrc, thumbSrcSize);
  1031. unsigned int thumbSize;
  1032. jpgEnc.encode(&thumbSize, NULL);
  1033. LOGV("%s : enableThumb set to true", __func__);
  1034. mExifInfo.enableThumb = true;
  1035. } else {
  1036. LOGV("%s : enableThumb set to false", __func__);
  1037. mExifInfo.enableThumb = false;
  1038. }
  1039. unsigned int exifSize;
  1040. setExifChangedAttribute();
  1041. LOGV("%s: calling jpgEnc.makeExif, mExifInfo.width set to %d, height to %d\n",
  1042. __func__, mExifInfo.width, mExifInfo.height);
  1043. jpgEnc.makeExif(pExifDst, &mExifInfo, &exifSize, true);
  1044. return exifSize;
  1045. }
  1046. void SecCamera::getPostViewConfig(int *width, int *height, int *size)
  1047. {
  1048. if (m_preview_width == 1024) {
  1049. *width = BACK_CAMERA_POSTVIEW_WIDE_WIDTH;
  1050. *height = BACK_CAMERA_POSTVIEW_HEIGHT;
  1051. *size = BACK_CAMERA_POSTVIEW_WIDE_WIDTH * BACK_CAMERA_POSTVIEW_HEIGHT * BACK_CAMERA_POSTVIEW_BPP / 8;
  1052. } else {
  1053. *width = BACK_CAMERA_POSTVIEW_WIDTH;
  1054. *height = BACK_CAMERA_POSTVIEW_HEIGHT;
  1055. *size = BACK_CAMERA_POSTVIEW_WIDTH * BACK_CAMERA_POSTVIEW_HEIGHT * BACK_CAMERA_POSTVIEW_BPP / 8;
  1056. }
  1057. LOGV("[5B] m_preview_width : %d, mPostViewWidth = %d mPostViewHeight = %d mPostViewSize = %d",
  1058. m_preview_width, *width, *height, *size);
  1059. }
  1060. void SecCamera::getThumbnailConfig(int *width, int *height, int *size)
  1061. {
  1062. if (m_camera_id == CAMERA_ID_BACK) {
  1063. *width = BACK_CAMERA_THUMBNAIL_WIDTH;
  1064. *height = BACK_CAMERA_THUMBNAIL_HEIGHT;
  1065. *size = BACK_CAMERA_THUMBNAIL_WIDTH * BACK_CAMERA_THUMBNAIL_HEIGHT
  1066. * BACK_CAMERA_THUMBNAIL_BPP / 8;
  1067. } else {
  1068. *width = FRONT_CAMERA_THUMBNAIL_WIDTH;
  1069. *height = FRONT_CAMERA_THUMBNAIL_HEIGHT;
  1070. *size = FRONT_CAMERA_THUMBNAIL_WIDTH * FRONT_CAMERA_THUMBNAIL_HEIGHT
  1071. * FRONT_CAMERA_THUMBNAIL_BPP / 8;
  1072. }
  1073. }
  1074. int SecCamera::getPostViewOffset(void)
  1075. {
  1076. return m_postview_offset;
  1077. }
  1078. int SecCamera::getSnapshotAndJpeg(unsigned char *yuv_buf, unsigned char *jpeg_buf,
  1079. unsigned int *output_size)
  1080. {
  1081. LOGV("%s :", __func__);
  1082. int index;
  1083. //unsigned int addr;
  1084. unsigned char *addr;
  1085. int ret = 0;
  1086. LOG_TIME_DEFINE(0)
  1087. LOG_TIME_DEFINE(1)
  1088. LOG_TIME_DEFINE(2)
  1089. LOG_TIME_DEFINE(3)
  1090. LOG_TIME_DEFINE(4)
  1091. LOG_TIME_DEFINE(5)
  1092. //fimc_v4l2_streamoff(m_cam_fd); [zzangdol] remove - it is separate in HWInterface with camera_id
  1093. if (m_cam_fd <= 0) {
  1094. LOGE("ERR(%s):Camera was closed\n", __func__);
  1095. return -1;
  1096. }
  1097. if (m_flag_camera_start > 0) {
  1098. LOG_TIME_START(0)
  1099. LOGW("WARN(%s):Camera was in preview, should have been stopped\n", __func__);
  1100. stopPreview();
  1101. LOG_TIME_END(0)
  1102. }
  1103. memset(&m_events_c, 0, sizeof(m_events_c));
  1104. m_events_c.fd = m_cam_fd;
  1105. m_events_c.events = POLLIN | POLLERR;
  1106. #if defined(LOG_NDEBUG) && LOG_NDEBUG == 0
  1107. if (m_snapshot_v4lformat == V4L2_PIX_FMT_YUV420)
  1108. LOGV("SnapshotFormat:V4L2_PIX_FMT_YUV420");
  1109. else if (m_snapshot_v4lformat == V4L2_PIX_FMT_NV12)
  1110. LOGV("SnapshotFormat:V4L2_PIX_FMT_NV12");
  1111. else if (m_snapshot_v4lformat == V4L2_PIX_FMT_NV12T)
  1112. LOGV("SnapshotFormat:V4L2_PIX_FMT_NV12T");
  1113. else if (m_snapshot_v4lformat == V4L2_PIX_FMT_NV21)
  1114. LOGV("SnapshotFormat:V4L2_PIX_FMT_NV21");
  1115. else if (m_snapshot_v4lformat == V4L2_PIX_FMT_YUV422P)
  1116. LOGV("SnapshotFormat:V4L2_PIX_FMT_YUV422P");
  1117. else if (m_snapshot_v4lformat == V4L2_PIX_FMT_YUYV)
  1118. LOGV("SnapshotFormat:V4L2_PIX_FMT_YUYV");
  1119. else if (m_snapshot_v4lformat == V4L2_PIX_FMT_UYVY)
  1120. LOGV("SnapshotFormat:V4L2_PIX_FMT_UYVY");
  1121. else if (m_snapshot_v4lformat == V4L2_PIX_FMT_RGB565)
  1122. LOGV("SnapshotFormat:V4L2_PIX_FMT_RGB565");
  1123. else
  1124. LOGV("SnapshotFormat:UnknownFormat");
  1125. #endif
  1126. LOG_TIME_START(1) // prepare
  1127. int nframe = 1;
  1128. ret = fimc_v4l2_enum_fmt(m_cam_fd,m_snapshot_v4lformat);
  1129. CHECK(ret);
  1130. ret = fimc_v4l2_s_fmt_cap(m_cam_fd, m_snapshot_width, m_snapshot_height, m_snapshot_v4lformat);
  1131. CHECK(ret);
  1132. ret = fimc_v4l2_reqbufs(m_cam_fd, V4L2_BUF_TYPE_VIDEO_CAPTURE, nframe);
  1133. CHECK(ret);
  1134. ret = fimc_v4l2_querybuf(m_cam_fd, &m_capture_buf, V4L2_BUF_TYPE_VIDEO_CAPTURE);
  1135. CHECK(ret);
  1136. ret = fimc_v4l2_qbuf(m_cam_fd, 0);
  1137. CHECK(ret);
  1138. ret = fimc_v4l2_streamon(m_cam_fd);
  1139. CHECK(ret);
  1140. LOG_TIME_END(1)
  1141. LOG_TIME_START(2) // capture
  1142. fimc_poll(&m_events_c);
  1143. index = fimc_v4l2_dqbuf(m_cam_fd);
  1144. fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_STREAM_PAUSE, 0);
  1145. LOGV("\nsnapshot dequeued buffer = %d snapshot_width = %d snapshot_height = %d\n\n",
  1146. index, m_snapshot_width, m_snapshot_height);
  1147. LOG_TIME_END(2)
  1148. LOGI("%s : calling memcpy from m_capture_buf", __func__);
  1149. memcpy(yuv_buf, (unsigned char*)m_capture_buf.start, m_snapshot_width * m_snapshot_height * 2);
  1150. LOG_TIME_START(5) // post
  1151. fimc_v4l2_streamoff(m_cam_fd);
  1152. LOG_TIME_END(5)
  1153. LOG_CAMERA("getSnapshotAndJpeg intervals : stopPreview(%lu), prepare(%lu),"
  1154. " capture(%lu), memcpy(%lu), yuv2Jpeg(%lu), post(%lu) us",
  1155. LOG_TIME(0), LOG_TIME(1), LOG_TIME(2), LOG_TIME(3), LOG_TIME(4), LOG_TIME(5));
  1156. /* JPEG encoding */
  1157. JpegEncoder jpgEnc;
  1158. int inFormat = JPG_MODESEL_YCBCR;
  1159. int outFormat = JPG_422;
  1160. switch (m_snapshot_v4lformat) {
  1161. case V4L2_PIX_FMT_NV12:
  1162. case V4L2_PIX_FMT_NV21:
  1163. case V4L2_PIX_FMT_NV12T:
  1164. case V4L2_PIX_FMT_YUV420:
  1165. outFormat = JPG_420;
  1166. break;
  1167. case V4L2_PIX_FMT_YUYV:
  1168. case V4L2_PIX_FMT_UYVY:
  1169. case V4L2_PIX_FMT_YUV422P:
  1170. default:
  1171. outFormat = JPG_422;
  1172. break;
  1173. }
  1174. if (jpgEnc.setConfig(JPEG_SET_ENCODE_IN_FORMAT, inFormat) != JPG_SUCCESS)
  1175. LOGE("[JPEG_SET_ENCODE_IN_FORMAT] Error\n");
  1176. if (jpgEnc.setConfig(JPEG_SET_SAMPING_MODE, outFormat) != JPG_SUCCESS)
  1177. LOGE("[JPEG_SET_SAMPING_MODE] Error\n");
  1178. image_quality_type_t jpegQuality;
  1179. if (m_jpeg_quality >= 90)
  1180. jpegQuality = JPG_QUALITY_LEVEL_1;
  1181. else if (m_jpeg_quality >= 80)
  1182. jpegQuality = JPG_QUALITY_LEVEL_2;
  1183. else if (m_jpeg_quality >= 70)
  1184. jpegQuality = JPG_QUALITY_LEVEL_3;
  1185. else
  1186. jpegQuality = JPG_QUALITY_LEVEL_4;
  1187. if (jpgEnc.setConfig(JPEG_SET_ENCODE_QUALITY, jpegQuality) != JPG_SUCCESS)
  1188. LOGE("[JPEG_SET_ENCODE_QUALITY] Error\n");
  1189. if (jpgEnc.setConfig(JPEG_SET_ENCODE_WIDTH, m_snapshot_width) != JPG_SUCCESS)
  1190. LOGE("[JPEG_SET_ENCODE_WIDTH] Error\n");
  1191. if (jpgEnc.setConfig(JPEG_SET_ENCODE_HEIGHT, m_snapshot_height) != JPG_SUCCESS)
  1192. LOGE("[JPEG_SET_ENCODE_HEIGHT] Error\n");
  1193. unsigned int snapshot_size = m_snapshot_width * m_snapshot_height * 2;
  1194. unsigned char *pInBuf = (unsigned char *)jpgEnc.getInBuf(snapshot_size);
  1195. if (pInBuf == NULL) {
  1196. LOGE("JPEG input buffer is NULL!!\n");
  1197. return -1;
  1198. }
  1199. memcpy(pInBuf, yuv_buf, snapshot_size);
  1200. setExifChangedAttribute();
  1201. jpgEnc.encode(output_size, &mExifInfo);
  1202. uint64_t outbuf_size;
  1203. unsigned char *pOutBuf = (unsigned char *)jpgEnc.getOutBuf(&outbuf_size);
  1204. if (pOutBuf == NULL) {
  1205. LOGE("JPEG output buffer is NULL!!\n");
  1206. return -1;
  1207. }
  1208. memcpy(jpeg_buf, pOutBuf, outbuf_size);
  1209. return 0;
  1210. }
  1211. int SecCamera::setSnapshotSize(int width, int height)
  1212. {
  1213. LOGV("%s(width(%d), height(%d))", __func__, width, height);
  1214. m_snapshot_width = width;
  1215. m_snapshot_height = height;
  1216. return 0;
  1217. }
  1218. int SecCamera::getSnapshotSize(int *width, int *height, int *frame_size)
  1219. {
  1220. *width = m_snapshot_width;
  1221. *height = m_snapshot_height;
  1222. int frame = 0;
  1223. frame = m_frameSize(m_snapshot_v4lformat, m_snapshot_width, m_snapshot_height);
  1224. // set it big.
  1225. if (frame == 0)
  1226. frame = m_snapshot_width * m_snapshot_height * BPP;
  1227. *frame_size = frame;
  1228. return 0;
  1229. }
  1230. int SecCamera::getSnapshotMaxSize(int *width, int *height)
  1231. {
  1232. switch (m_camera_id) {
  1233. case CAMERA_ID_FRONT:
  1234. m_snapshot_max_width = MAX_FRONT_CAMERA_SNAPSHOT_WIDTH;
  1235. m_snapshot_max_height = MAX_FRONT_CAMERA_SNAPSHOT_HEIGHT;
  1236. break;
  1237. default:
  1238. case CAMERA_ID_BACK:
  1239. m_snapshot_max_width = MAX_BACK_CAMERA_SNAPSHOT_WIDTH;
  1240. m_snapshot_max_height = MAX_BACK_CAMERA_SNAPSHOT_HEIGHT;
  1241. break;
  1242. }
  1243. *width = m_snapshot_max_width;
  1244. *height = m_snapshot_max_height;
  1245. return 0;
  1246. }
  1247. int SecCamera::setSnapshotPixelFormat(int pixel_format)
  1248. {
  1249. int v4lpixelformat= pixel_format;
  1250. if (m_snapshot_v4lformat != v4lpixelformat) {
  1251. m_snapshot_v4lformat = v4lpixelformat;
  1252. }
  1253. #if defined(LOG_NDEBUG) && LOG_NDEBUG == 0
  1254. if (m_snapshot_v4lformat == V4L2_PIX_FMT_YUV420)
  1255. LOGE("%s : SnapshotFormat:V4L2_PIX_FMT_YUV420", __func__);
  1256. else if (m_snapshot_v4lformat == V4L2_PIX_FMT_NV12)
  1257. LOGD("%s : SnapshotFormat:V4L2_PIX_FMT_NV12", __func__);
  1258. else if (m_snapshot_v4lformat == V4L2_PIX_FMT_NV12T)
  1259. LOGD("%s : SnapshotFormat:V4L2_PIX_FMT_NV12T", __func__);
  1260. else if (m_snapshot_v4lformat == V4L2_PIX_FMT_NV21)
  1261. LOGD("%s : SnapshotFormat:V4L2_PIX_FMT_NV21", __func__);
  1262. else if (m_snapshot_v4lformat == V4L2_PIX_FMT_YUV422P)
  1263. LOGD("%s : SnapshotFormat:V4L2_PIX_FMT_YUV422P", __func__);
  1264. else if (m_snapshot_v4lformat == V4L2_PIX_FMT_YUYV)
  1265. LOGD("%s : SnapshotFormat:V4L2_PIX_FMT_YUYV", __func__);
  1266. else if (m_snapshot_v4lformat == V4L2_PIX_FMT_UYVY)
  1267. LOGD("%s : SnapshotFormat:V4L2_PIX_FMT_UYVY", __func__);
  1268. else if (m_snapshot_v4lformat == V4L2_PIX_FMT_RGB565)
  1269. LOGD("%s : SnapshotFormat:V4L2_PIX_FMT_RGB565", __func__);
  1270. else
  1271. LOGD("SnapshotFormat:UnknownFormat");
  1272. #endif
  1273. return 0;
  1274. }
  1275. int SecCamera::getSnapshotPixelFormat(void)
  1276. {
  1277. return m_snapshot_v4lformat;
  1278. }
  1279. // ======================================================================
  1280. // Settings
  1281. int SecCamera::setCameraId(int camera_id)
  1282. {
  1283. if ((camera_id != CAMERA_ID_FRONT) && (camera_id != CAMERA_ID_BACK)) {
  1284. LOGE("ERR(%s)::Invalid camera id(%d)\n", __func__, camera_id);
  1285. return -1;
  1286. }
  1287. if (m_camera_id == camera_id)
  1288. return 0;
  1289. LOGV("%s(camera_id(%d))", __func__, camera_id);
  1290. switch (camera_id) {
  1291. case CAMERA_ID_FRONT:
  1292. m_preview_max_width = MAX_FRONT_CAMERA_PREVIEW_WIDTH;
  1293. m_preview_max_height = MAX_FRONT_CAMERA_PREVIEW_HEIGHT;
  1294. m_snapshot_max_width = MAX_FRONT_CAMERA_SNAPSHOT_WIDTH;
  1295. m_snapshot_max_height = MAX_FRONT_CAMERA_SNAPSHOT_HEIGHT;
  1296. break;
  1297. case CAMERA_ID_BACK:
  1298. m_preview_max_width = MAX_BACK_CAMERA_PREVIEW_WIDTH;
  1299. m_preview_max_height = MAX_BACK_CAMERA_PREVIEW_HEIGHT;
  1300. m_snapshot_max_width = MAX_BACK_CAMERA_SNAPSHOT_WIDTH;
  1301. m_snapshot_max_height = MAX_BACK_CAMERA_SNAPSHOT_HEIGHT;
  1302. break;
  1303. }
  1304. m_camera_id = camera_id;
  1305. resetCamera();
  1306. return 0;
  1307. }
  1308. int SecCamera::getCameraId(void)
  1309. {
  1310. return m_camera_id;
  1311. }
  1312. // -----------------------------------
  1313. int SecCamera::setAutofocus(void)
  1314. {
  1315. LOGV("%s :", __func__);
  1316. if (m_cam_fd <= 0) {
  1317. LOGE("ERR(%s):Camera was closed\n", __func__);
  1318. return -1;
  1319. }
  1320. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_SET_AUTO_FOCUS, AUTO_FOCUS_ON) < 0) {
  1321. LOGE("ERR(%s):Fail on V4L2_CID_CAMERA_SET_AUTO_FOCUS", __func__);
  1322. return -1;
  1323. }
  1324. return 0;
  1325. }
  1326. int SecCamera::getAutoFocusResult(void)
  1327. {
  1328. int af_result;
  1329. af_result = fimc_v4l2_g_ctrl(m_cam_fd, V4L2_CID_CAMERA_AUTO_FOCUS_RESULT);
  1330. LOGV("%s : returning %d", __func__, af_result);
  1331. return af_result;
  1332. }
  1333. int SecCamera::cancelAutofocus(void)
  1334. {
  1335. LOGV("%s :", __func__);
  1336. if (m_cam_fd <= 0) {
  1337. LOGE("ERR(%s):Camera was closed\n", __func__);
  1338. return -1;
  1339. }
  1340. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_SET_AUTO_FOCUS, AUTO_FOCUS_OFF) < 0) {
  1341. LOGE("ERR(%s):Fail on V4L2_CID_CAMERA_SET_AUTO_FOCUS", __func__);
  1342. return -1;
  1343. }
  1344. return 0;
  1345. }
  1346. // -----------------------------------
  1347. int SecCamera::zoomIn(void)
  1348. {
  1349. LOGV("%s :", __func__);
  1350. return 0;
  1351. }
  1352. int SecCamera::zoomOut(void)
  1353. {
  1354. LOGV("%s :", __func__);
  1355. return 0;
  1356. }
  1357. // -----------------------------------
  1358. int SecCamera::SetRotate(int angle)
  1359. {
  1360. LOGE("%s(angle(%d))", __func__, angle);
  1361. if (m_angle != angle) {
  1362. switch (angle) {
  1363. case -360:
  1364. case 0:
  1365. case 360:
  1366. m_angle = 0;
  1367. break;
  1368. case -270:
  1369. case 90:
  1370. m_angle = 90;
  1371. break;
  1372. case -180:
  1373. case 180:
  1374. m_angle = 180;
  1375. break;
  1376. case -90:
  1377. case 270:
  1378. m_angle = 270;
  1379. break;
  1380. default:
  1381. LOGE("ERR(%s):Invalid angle(%d)", __func__, angle);
  1382. return -1;
  1383. }
  1384. if (m_flag_camera_start) {
  1385. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_ROTATION, angle) < 0) {
  1386. LOGE("ERR(%s):Fail on V4L2_CID_ROTATION", __func__);
  1387. return -1;
  1388. }
  1389. }
  1390. }
  1391. return 0;
  1392. }
  1393. int SecCamera::getRotate(void)
  1394. {
  1395. LOGV("%s : angle(%d)", __func__, m_angle);
  1396. return m_angle;
  1397. }
  1398. int SecCamera::setFrameRate(int frame_rate)
  1399. {
  1400. LOGV("%s(FrameRate(%d))", __func__, frame_rate);
  1401. if (frame_rate < FRAME_RATE_AUTO || FRAME_RATE_MAX < frame_rate )
  1402. LOGE("ERR(%s):Invalid frame_rate(%d)", __func__, frame_rate);
  1403. if (m_params->capture.timeperframe.denominator != (unsigned)frame_rate) {
  1404. m_params->capture.timeperframe.denominator = frame_rate;
  1405. if (m_flag_camera_start) {
  1406. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_FRAME_RATE, frame_rate) < 0) {
  1407. LOGE("ERR(%s):Fail on V4L2_CID_CAMERA_FRAME_RATE", __func__);
  1408. return -1;
  1409. }
  1410. }
  1411. }
  1412. return 0;
  1413. }
  1414. // -----------------------------------
  1415. int SecCamera::setVerticalMirror(void)
  1416. {
  1417. LOGV("%s :", __func__);
  1418. if (m_cam_fd <= 0) {
  1419. LOGE("ERR(%s):Camera was closed\n", __func__);
  1420. return -1;
  1421. }
  1422. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_VFLIP, 0) < 0) {
  1423. LOGE("ERR(%s):Fail on V4L2_CID_VFLIP", __func__);
  1424. return -1;
  1425. }
  1426. return 0;
  1427. }
  1428. int SecCamera::setHorizontalMirror(void)
  1429. {
  1430. LOGV("%s :", __func__);
  1431. if (m_cam_fd <= 0) {
  1432. LOGE("ERR(%s):Camera was closed\n", __func__);
  1433. return -1;
  1434. }
  1435. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_HFLIP, 0) < 0) {
  1436. LOGE("ERR(%s):Fail on V4L2_CID_HFLIP", __func__);
  1437. return -1;
  1438. }
  1439. return 0;
  1440. }
  1441. // -----------------------------------
  1442. int SecCamera::setWhiteBalance(int white_balance)
  1443. {
  1444. LOGV("%s(white_balance(%d))", __func__, white_balance);
  1445. if (white_balance <= WHITE_BALANCE_BASE || WHITE_BALANCE_MAX <= white_balance) {
  1446. LOGE("ERR(%s):Invalid white_balance(%d)", __func__, white_balance);
  1447. return -1;
  1448. }
  1449. if (m_params->white_balance != white_balance) {
  1450. m_params->white_balance = white_balance;
  1451. if (m_flag_camera_start) {
  1452. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_WHITE_BALANCE, white_balance) < 0) {
  1453. LOGE("ERR(%s):Fail on V4L2_CID_CAMERA_WHITE_BALANCE", __func__);
  1454. return -1;
  1455. }
  1456. }
  1457. }
  1458. return 0;
  1459. }
  1460. int SecCamera::getWhiteBalance(void)
  1461. {
  1462. LOGV("%s : white_balance(%d)", __func__, m_params->white_balance);
  1463. return m_params->white_balance;
  1464. }
  1465. // -----------------------------------
  1466. int SecCamera::setBrightness(int brightness)
  1467. {
  1468. LOGV("%s(brightness(%d))", __func__, brightness);
  1469. brightness += EV_DEFAULT;
  1470. if (brightness < EV_MINUS_4 || EV_PLUS_4 < brightness) {
  1471. LOGE("ERR(%s):Invalid brightness(%d)", __func__, brightness);
  1472. return -1;
  1473. }
  1474. if (m_params->brightness != brightness) {
  1475. m_params->brightness = brightness;
  1476. if (m_flag_camera_start) {
  1477. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_BRIGHTNESS, brightness) < 0) {
  1478. LOGE("ERR(%s):Fail on V4L2_CID_CAMERA_BRIGHTNESS", __func__);
  1479. return -1;
  1480. }
  1481. }
  1482. }
  1483. return 0;
  1484. }
  1485. int SecCamera::getBrightness(void)
  1486. {
  1487. LOGV("%s : brightness(%d)", __func__, m_params->brightness);
  1488. return m_params->brightness;
  1489. }
  1490. // -----------------------------------
  1491. int SecCamera::setImageEffect(int image_effect)
  1492. {
  1493. LOGV("%s(image_effect(%d))", __func__, image_effect);
  1494. if (image_effect <= IMAGE_EFFECT_BASE || IMAGE_EFFECT_MAX <= image_effect) {
  1495. LOGE("ERR(%s):Invalid image_effect(%d)", __func__, image_effect);
  1496. return -1;
  1497. }
  1498. if (m_params->effects != image_effect) {
  1499. m_params->effects = image_effect;
  1500. if (m_flag_camera_start) {
  1501. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_EFFECT, image_effect) < 0) {
  1502. LOGE("ERR(%s):Fail on V4L2_CID_CAMERA_EFFECT", __func__);
  1503. return -1;
  1504. }
  1505. }
  1506. }
  1507. return 0;
  1508. }
  1509. int SecCamera::getImageEffect(void)
  1510. {
  1511. LOGV("%s : image_effect(%d)", __func__, m_params->effects);
  1512. return m_params->effects;
  1513. }
  1514. // ======================================================================
  1515. int SecCamera::setAntiBanding(int anti_banding)
  1516. {
  1517. LOGV("%s(anti_banding(%d))", __func__, anti_banding);
  1518. if (anti_banding < ANTI_BANDING_AUTO || ANTI_BANDING_OFF < anti_banding) {
  1519. LOGE("ERR(%s):Invalid anti_banding (%d)", __func__, anti_banding);
  1520. return -1;
  1521. }
  1522. if (m_anti_banding != anti_banding) {
  1523. m_anti_banding = anti_banding;
  1524. if (m_flag_camera_start) {
  1525. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_ANTI_BANDING, anti_banding) < 0) {
  1526. LOGE("ERR(%s):Fail on V4L2_CID_CAMERA_ANTI_BANDING", __func__);
  1527. return -1;
  1528. }
  1529. }
  1530. }
  1531. return 0;
  1532. }
  1533. //======================================================================
  1534. int SecCamera::setSceneMode(int scene_mode)
  1535. {
  1536. LOGV("%s(scene_mode(%d))", __func__, scene_mode);
  1537. if (scene_mode <= SCENE_MODE_BASE || SCENE_MODE_MAX <= scene_mode) {
  1538. LOGE("ERR(%s):Invalid scene_mode (%d)", __func__, scene_mode);
  1539. return -1;
  1540. }
  1541. if (m_params->scene_mode != scene_mode) {
  1542. m_params->scene_mode = scene_mode;
  1543. if (m_flag_camera_start) {
  1544. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_SCENE_MODE, scene_mode) < 0) {
  1545. LOGE("ERR(%s):Fail on V4L2_CID_CAMERA_SCENE_MODE", __func__);
  1546. return -1;
  1547. }
  1548. }
  1549. }
  1550. return 0;
  1551. }
  1552. int SecCamera::getSceneMode(void)
  1553. {
  1554. return m_params->scene_mode;
  1555. }
  1556. //======================================================================
  1557. int SecCamera::setFlashMode(int flash_mode)
  1558. {
  1559. LOGV("%s(flash_mode(%d))", __func__, flash_mode);
  1560. if (flash_mode <= FLASH_MODE_BASE || FLASH_MODE_MAX <= flash_mode) {
  1561. LOGE("ERR(%s):Invalid flash_mode (%d)", __func__, flash_mode);
  1562. return -1;
  1563. }
  1564. if (m_params->flash_mode != flash_mode) {
  1565. m_params->flash_mode = flash_mode;
  1566. if (m_flag_camera_start) {
  1567. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_FLASH_MODE, flash_mode) < 0) {
  1568. LOGE("ERR(%s):Fail on V4L2_CID_CAMERA_FLASH_MODE", __func__);
  1569. return -1;
  1570. }
  1571. }
  1572. }
  1573. return 0;
  1574. }
  1575. int SecCamera::getFlashMode(void)
  1576. {
  1577. return m_params->flash_mode;
  1578. }
  1579. //======================================================================
  1580. int SecCamera::setISO(int iso_value)
  1581. {
  1582. LOGV("%s(iso_value(%d))", __func__, iso_value);
  1583. if (iso_value < ISO_AUTO || ISO_MAX <= iso_value) {
  1584. LOGE("ERR(%s):Invalid iso_value (%d)", __func__, iso_value);
  1585. return -1;
  1586. }
  1587. if (m_params->iso != iso_value) {
  1588. m_params->iso = iso_value;
  1589. if (m_flag_camera_start) {
  1590. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_ISO, iso_value) < 0) {
  1591. LOGE("ERR(%s):Fail on V4L2_CID_CAMERA_ISO", __func__);
  1592. return -1;
  1593. }
  1594. }
  1595. }
  1596. return 0;
  1597. }
  1598. int SecCamera::getISO(void)
  1599. {
  1600. return m_params->iso;
  1601. }
  1602. //======================================================================
  1603. int SecCamera::setContrast(int contrast_value)
  1604. {
  1605. LOGV("%s(contrast_value(%d))", __func__, contrast_value);
  1606. if (contrast_value < CONTRAST_MINUS_2 || CONTRAST_MAX <= contrast_value) {
  1607. LOGE("ERR(%s):Invalid contrast_value (%d)", __func__, contrast_value);
  1608. return -1;
  1609. }
  1610. if (m_params->contrast != contrast_value) {
  1611. m_params->contrast = contrast_value;
  1612. if (m_flag_camera_start) {
  1613. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_CONTRAST, contrast_value) < 0) {
  1614. LOGE("ERR(%s):Fail on V4L2_CID_CAMERA_CONTRAST", __func__);
  1615. return -1;
  1616. }
  1617. }
  1618. }
  1619. return 0;
  1620. }
  1621. int SecCamera::getContrast(void)
  1622. {
  1623. return m_params->contrast;
  1624. }
  1625. //======================================================================
  1626. int SecCamera::setSaturation(int saturation_value)
  1627. {
  1628. LOGV("%s(saturation_value(%d))", __func__, saturation_value);
  1629. if (saturation_value <SATURATION_MINUS_2 || SATURATION_MAX<= saturation_value) {
  1630. LOGE("ERR(%s):Invalid saturation_value (%d)", __func__, saturation_value);
  1631. return -1;
  1632. }
  1633. if (m_params->saturation != saturation_value) {
  1634. m_params->saturation = saturation_value;
  1635. if (m_flag_camera_start) {
  1636. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_SATURATION, saturation_value) < 0) {
  1637. LOGE("ERR(%s):Fail on V4L2_CID_CAMERA_SATURATION", __func__);
  1638. return -1;
  1639. }
  1640. }
  1641. }
  1642. return 0;
  1643. }
  1644. int SecCamera::getSaturation(void)
  1645. {
  1646. return m_params->saturation;
  1647. }
  1648. //======================================================================
  1649. int SecCamera::setSharpness(int sharpness_value)
  1650. {
  1651. LOGV("%s(sharpness_value(%d))", __func__, sharpness_value);
  1652. if (sharpness_value < SHARPNESS_MINUS_2 || SHARPNESS_MAX <= sharpness_value) {
  1653. LOGE("ERR(%s):Invalid sharpness_value (%d)", __func__, sharpness_value);
  1654. return -1;
  1655. }
  1656. if (m_params->sharpness != sharpness_value) {
  1657. m_params->sharpness = sharpness_value;
  1658. if (m_flag_camera_start) {
  1659. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_SHARPNESS, sharpness_value) < 0) {
  1660. LOGE("ERR(%s):Fail on V4L2_CID_CAMERA_SHARPNESS", __func__);
  1661. return -1;
  1662. }
  1663. }
  1664. }
  1665. return 0;
  1666. }
  1667. int SecCamera::getSharpness(void)
  1668. {
  1669. return m_params->sharpness;
  1670. }
  1671. //======================================================================
  1672. int SecCamera::setWDR(int wdr_value)
  1673. {
  1674. LOGV("%s(wdr_value(%d))", __func__, wdr_value);
  1675. if (wdr_value < WDR_OFF || WDR_MAX <= wdr_value) {
  1676. LOGE("ERR(%s):Invalid wdr_value (%d)", __func__, wdr_value);
  1677. return -1;
  1678. }
  1679. if (m_wdr != wdr_value) {
  1680. m_wdr = wdr_value;
  1681. if (m_flag_camera_start) {
  1682. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_WDR, wdr_value) < 0) {
  1683. LOGE("ERR(%s):Fail on V4L2_CID_CAMERA_WDR", __func__);
  1684. return -1;
  1685. }
  1686. }
  1687. }
  1688. return 0;
  1689. }
  1690. int SecCamera::getWDR(void)
  1691. {
  1692. return m_wdr;
  1693. }
  1694. //======================================================================
  1695. int SecCamera::setAntiShake(int anti_shake)
  1696. {
  1697. LOGV("%s(anti_shake(%d))", __func__, anti_shake);
  1698. if (anti_shake < ANTI_SHAKE_OFF || ANTI_SHAKE_MAX <= anti_shake) {
  1699. LOGE("ERR(%s):Invalid anti_shake (%d)", __func__, anti_shake);
  1700. return -1;
  1701. }
  1702. if (m_anti_shake != anti_shake) {
  1703. m_anti_shake = anti_shake;
  1704. if (m_flag_camera_start) {
  1705. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_ANTI_SHAKE, anti_shake) < 0) {
  1706. LOGE("ERR(%s):Fail on V4L2_CID_CAMERA_ANTI_SHAKE", __func__);
  1707. return -1;
  1708. }
  1709. }
  1710. }
  1711. return 0;
  1712. }
  1713. int SecCamera::getAntiShake(void)
  1714. {
  1715. return m_anti_shake;
  1716. }
  1717. //======================================================================
  1718. int SecCamera::setMetering(int metering_value)
  1719. {
  1720. LOGV("%s(metering (%d))", __func__, metering_value);
  1721. if (metering_value <= METERING_BASE || METERING_MAX <= metering_value) {
  1722. LOGE("ERR(%s):Invalid metering_value (%d)", __func__, metering_value);
  1723. return -1;
  1724. }
  1725. if (m_params->metering != metering_value) {
  1726. m_params->metering = metering_value;
  1727. if (m_flag_camera_start) {
  1728. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_METERING, metering_value) < 0) {
  1729. LOGE("ERR(%s):Fail on V4L2_CID_CAMERA_METERING", __func__);
  1730. return -1;
  1731. }
  1732. }
  1733. }
  1734. return 0;
  1735. }
  1736. int SecCamera::getMetering(void)
  1737. {
  1738. return m_params->metering;
  1739. }
  1740. //======================================================================
  1741. int SecCamera::setJpegQuality(int jpeg_quality)
  1742. {
  1743. LOGV("%s(jpeg_quality (%d))", __func__, jpeg_quality);
  1744. if (jpeg_quality < JPEG_QUALITY_ECONOMY || JPEG_QUALITY_MAX <= jpeg_quality) {
  1745. LOGE("ERR(%s):Invalid jpeg_quality (%d)", __func__, jpeg_quality);
  1746. return -1;
  1747. }
  1748. if (m_jpeg_quality != jpeg_quality) {
  1749. m_jpeg_quality = jpeg_quality;
  1750. if (m_flag_camera_start && (m_camera_id == CAMERA_ID_BACK)) {
  1751. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAM_JPEG_QUALITY, jpeg_quality) < 0) {
  1752. LOGE("ERR(%s):Fail on V4L2_CID_CAM_JPEG_QUALITY", __func__);
  1753. return -1;
  1754. }
  1755. }
  1756. }
  1757. return 0;
  1758. }
  1759. int SecCamera::getJpegQuality(void)
  1760. {
  1761. return m_jpeg_quality;
  1762. }
  1763. //======================================================================
  1764. int SecCamera::setZoom(int zoom_level)
  1765. {
  1766. LOGV("%s(zoom_level (%d))", __func__, zoom_level);
  1767. if (zoom_level < ZOOM_LEVEL_0 || ZOOM_LEVEL_MAX <= zoom_level) {
  1768. LOGE("ERR(%s):Invalid zoom_level (%d)", __func__, zoom_level);
  1769. return -1;
  1770. }
  1771. if (m_zoom_level != zoom_level) {
  1772. m_zoom_level = zoom_level;
  1773. if (m_flag_camera_start) {
  1774. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_ZOOM, zoom_level) < 0) {
  1775. LOGE("ERR(%s):Fail on V4L2_CID_CAMERA_ZOOM", __func__);
  1776. return -1;
  1777. }
  1778. }
  1779. }
  1780. return 0;
  1781. }
  1782. int SecCamera::getZoom(void)
  1783. {
  1784. return m_zoom_level;
  1785. }
  1786. //======================================================================
  1787. int SecCamera::setObjectTracking(int object_tracking)
  1788. {
  1789. LOGV("%s(object_tracking (%d))", __func__, object_tracking);
  1790. if (object_tracking < OBJECT_TRACKING_OFF || OBJECT_TRACKING_MAX <= object_tracking) {
  1791. LOGE("ERR(%s):Invalid object_tracking (%d)", __func__, object_tracking);
  1792. return -1;
  1793. }
  1794. if (m_object_tracking != object_tracking) {
  1795. m_object_tracking = object_tracking;
  1796. }
  1797. return 0;
  1798. }
  1799. int SecCamera::getObjectTracking(void)
  1800. {
  1801. return m_object_tracking;
  1802. }
  1803. int SecCamera::getObjectTrackingStatus(void)
  1804. {
  1805. int obj_status = 0;
  1806. obj_status = fimc_v4l2_g_ctrl(m_cam_fd, V4L2_CID_CAMERA_OBJ_TRACKING_STATUS);
  1807. return obj_status;
  1808. }
  1809. int SecCamera::setObjectTrackingStartStop(int start_stop)
  1810. {
  1811. LOGV("%s(object_tracking_start_stop (%d))", __func__, start_stop);
  1812. if (m_object_tracking_start_stop != start_stop) {
  1813. m_object_tracking_start_stop = start_stop;
  1814. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_OBJ_TRACKING_START_STOP, start_stop) < 0) {
  1815. LOGE("ERR(%s):Fail on V4L2_CID_CAMERA_OBJ_TRACKING_START_STOP", __func__);
  1816. return -1;
  1817. }
  1818. }
  1819. return 0;
  1820. }
  1821. int SecCamera::setTouchAFStartStop(int start_stop)
  1822. {
  1823. LOGV("%s(touch_af_start_stop (%d))", __func__, start_stop);
  1824. if (m_touch_af_start_stop != start_stop) {
  1825. m_touch_af_start_stop = start_stop;
  1826. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_TOUCH_AF_START_STOP, start_stop) < 0) {
  1827. LOGE("ERR(%s):Fail on V4L2_CID_CAMERA_TOUCH_AF_START_STOP", __func__);
  1828. return -1;
  1829. }
  1830. }
  1831. return 0;
  1832. }
  1833. //======================================================================
  1834. int SecCamera::setSmartAuto(int smart_auto)
  1835. {
  1836. LOGV("%s(smart_auto (%d))", __func__, smart_auto);
  1837. if (smart_auto < SMART_AUTO_OFF || SMART_AUTO_MAX <= smart_auto) {
  1838. LOGE("ERR(%s):Invalid smart_auto (%d)", __func__, smart_auto);
  1839. return -1;
  1840. }
  1841. if (m_smart_auto != smart_auto) {
  1842. m_smart_auto = smart_auto;
  1843. if (m_flag_camera_start) {
  1844. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_SMART_AUTO, smart_auto) < 0) {
  1845. LOGE("ERR(%s):Fail on V4L2_CID_CAMERA_SMART_AUTO", __func__);
  1846. return -1;
  1847. }
  1848. }
  1849. }
  1850. return 0;
  1851. }
  1852. int SecCamera::getSmartAuto(void)
  1853. {
  1854. return m_smart_auto;
  1855. }
  1856. int SecCamera::getAutosceneStatus(void)
  1857. {
  1858. int autoscene_status = -1;
  1859. if (getSmartAuto() == SMART_AUTO_ON) {
  1860. autoscene_status = fimc_v4l2_g_ctrl(m_cam_fd, V4L2_CID_CAMERA_SMART_AUTO_STATUS);
  1861. if ((autoscene_status < SMART_AUTO_STATUS_AUTO) || (autoscene_status > SMART_AUTO_STATUS_MAX)) {
  1862. LOGE("ERR(%s):Invalid getAutosceneStatus (%d)", __func__, autoscene_status);
  1863. return -1;
  1864. }
  1865. }
  1866. //LOGV("%s : autoscene_status (%d)", __func__, autoscene_status);
  1867. return autoscene_status;
  1868. }
  1869. //======================================================================
  1870. int SecCamera::setBeautyShot(int beauty_shot)
  1871. {
  1872. LOGV("%s(beauty_shot (%d))", __func__, beauty_shot);
  1873. if (beauty_shot < BEAUTY_SHOT_OFF || BEAUTY_SHOT_MAX <= beauty_shot) {
  1874. LOGE("ERR(%s):Invalid beauty_shot (%d)", __func__, beauty_shot);
  1875. return -1;
  1876. }
  1877. if (m_beauty_shot != beauty_shot) {
  1878. m_beauty_shot = beauty_shot;
  1879. if (m_flag_camera_start) {
  1880. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_BEAUTY_SHOT, beauty_shot) < 0) {
  1881. LOGE("ERR(%s):Fail on V4L2_CID_CAMERA_BEAUTY_SHOT", __func__);
  1882. return -1;
  1883. }
  1884. }
  1885. setFaceDetect(FACE_DETECTION_ON_BEAUTY);
  1886. }
  1887. return 0;
  1888. }
  1889. int SecCamera::getBeautyShot(void)
  1890. {
  1891. return m_beauty_shot;
  1892. }
  1893. //======================================================================
  1894. int SecCamera::setVintageMode(int vintage_mode)
  1895. {
  1896. LOGV("%s(vintage_mode(%d))", __func__, vintage_mode);
  1897. if (vintage_mode <= VINTAGE_MODE_BASE || VINTAGE_MODE_MAX <= vintage_mode) {
  1898. LOGE("ERR(%s):Invalid vintage_mode (%d)", __func__, vintage_mode);
  1899. return -1;
  1900. }
  1901. if (m_vintage_mode != vintage_mode) {
  1902. m_vintage_mode = vintage_mode;
  1903. if (m_flag_camera_start) {
  1904. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_VINTAGE_MODE, vintage_mode) < 0) {
  1905. LOGE("ERR(%s):Fail on V4L2_CID_CAMERA_VINTAGE_MODE", __func__);
  1906. return -1;
  1907. }
  1908. }
  1909. }
  1910. return 0;
  1911. }
  1912. int SecCamera::getVintageMode(void)
  1913. {
  1914. return m_vintage_mode;
  1915. }
  1916. //======================================================================
  1917. int SecCamera::setFocusMode(int focus_mode)
  1918. {
  1919. LOGV("%s(focus_mode(%d))", __func__, focus_mode);
  1920. if (FOCUS_MODE_MAX <= focus_mode) {
  1921. LOGE("ERR(%s):Invalid focus_mode (%d)", __func__, focus_mode);
  1922. return -1;
  1923. }
  1924. if (m_params->focus_mode != focus_mode) {
  1925. m_params->focus_mode = focus_mode;
  1926. if (m_flag_camera_start) {
  1927. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_FOCUS_MODE, focus_mode) < 0) {
  1928. LOGE("ERR(%s):Fail on V4L2_CID_CAMERA_FOCUS_MODE", __func__);
  1929. return -1;
  1930. }
  1931. }
  1932. }
  1933. return 0;
  1934. }
  1935. int SecCamera::getFocusMode(void)
  1936. {
  1937. return m_params->focus_mode;
  1938. }
  1939. //======================================================================
  1940. int SecCamera::setFaceDetect(int face_detect)
  1941. {
  1942. LOGV("%s(face_detect(%d))", __func__, face_detect);
  1943. if (m_face_detect != face_detect) {
  1944. m_face_detect = face_detect;
  1945. if (m_flag_camera_start) {
  1946. if (m_face_detect != FACE_DETECTION_OFF) {
  1947. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_FOCUS_MODE, FOCUS_MODE_AUTO) < 0) {
  1948. LOGE("ERR(%s):Fail on V4L2_CID_CAMERA_FOCUS_MODin face detecion", __func__);
  1949. return -1;
  1950. }
  1951. }
  1952. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_FACE_DETECTION, face_detect) < 0) {
  1953. LOGE("ERR(%s):Fail on V4L2_CID_CAMERA_FACE_DETECTION", __func__);
  1954. return -1;
  1955. }
  1956. }
  1957. }
  1958. return 0;
  1959. }
  1960. int SecCamera::getFaceDetect(void)
  1961. {
  1962. return m_face_detect;
  1963. }
  1964. //======================================================================
  1965. int SecCamera::setGPSLatitude(const char *gps_latitude)
  1966. {
  1967. double conveted_latitude = 0;
  1968. LOGV("%s(gps_latitude(%s))", __func__, gps_latitude);
  1969. if (gps_latitude == NULL)
  1970. m_gps_latitude = 0;
  1971. else {
  1972. conveted_latitude = atof(gps_latitude);
  1973. m_gps_latitude = (long)(conveted_latitude * 10000 / 1);
  1974. }
  1975. LOGV("%s(m_gps_latitude(%ld))", __func__, m_gps_latitude);
  1976. return 0;
  1977. }
  1978. int SecCamera::setGPSLongitude(const char *gps_longitude)
  1979. {
  1980. double conveted_longitude = 0;
  1981. LOGV("%s(gps_longitude(%s))", __func__, gps_longitude);
  1982. if (gps_longitude == NULL)
  1983. m_gps_longitude = 0;
  1984. else {
  1985. conveted_longitude = atof(gps_longitude);
  1986. m_gps_longitude = (long)(conveted_longitude * 10000 / 1);
  1987. }
  1988. LOGV("%s(m_gps_longitude(%ld))", __func__, m_gps_longitude);
  1989. return 0;
  1990. }
  1991. int SecCamera::setGPSAltitude(const char *gps_altitude)
  1992. {
  1993. double conveted_altitude = 0;
  1994. LOGV("%s(gps_altitude(%s))", __func__, gps_altitude);
  1995. if (gps_altitude == NULL)
  1996. m_gps_altitude = 0;
  1997. else {
  1998. conveted_altitude = atof(gps_altitude);
  1999. m_gps_altitude = (long)(conveted_altitude * 100 / 1);
  2000. }
  2001. LOGV("%s(m_gps_altitude(%ld))", __func__, m_gps_altitude);
  2002. return 0;
  2003. }
  2004. int SecCamera::setGPSTimeStamp(const char *gps_timestamp)
  2005. {
  2006. LOGV("%s(gps_timestamp(%s))", __func__, gps_timestamp);
  2007. if (gps_timestamp == NULL)
  2008. m_gps_timestamp = 0;
  2009. else
  2010. m_gps_timestamp = atol(gps_timestamp);
  2011. LOGV("%s(m_gps_timestamp(%ld))", __func__, m_gps_timestamp);
  2012. return 0;
  2013. }
  2014. int SecCamera::setGPSProcessingMethod(const char *gps_processing_method)
  2015. {
  2016. LOGV("%s(gps_processing_method(%s))", __func__, gps_processing_method);
  2017. memset(mExifInfo.gps_processing_method, 0, sizeof(mExifInfo.gps_processing_method));
  2018. if (gps_processing_method != NULL) {
  2019. size_t len = strlen(gps_processing_method);
  2020. if (len > sizeof(mExifInfo.gps_processing_method)) {
  2021. len = sizeof(mExifInfo.gps_processing_method);
  2022. }
  2023. memcpy(mExifInfo.gps_processing_method, gps_processing_method, len);
  2024. }
  2025. return 0;
  2026. }
  2027. int SecCamera::setFaceDetectLockUnlock(int facedetect_lockunlock)
  2028. {
  2029. LOGV("%s(facedetect_lockunlock(%d))", __func__, facedetect_lockunlock);
  2030. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_FACEDETECT_LOCKUNLOCK, facedetect_lockunlock) < 0) {
  2031. LOGE("ERR(%s):Fail on V4L2_CID_CAMERA_FACEDETECT_LOCKUNLOCK", __func__);
  2032. return -1;
  2033. }
  2034. return 0;
  2035. }
  2036. int SecCamera::setObjectPosition(int x, int y)
  2037. {
  2038. LOGV("%s(setObjectPosition(x=%d, y=%d))", __func__, x, y);
  2039. if (m_preview_width ==640)
  2040. x = x - 80;
  2041. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_OBJECT_POSITION_X, x) < 0) {
  2042. LOGE("ERR(%s):Fail on V4L2_CID_CAMERA_OBJECT_POSITION_X", __func__);
  2043. return -1;
  2044. }
  2045. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_OBJECT_POSITION_Y, y) < 0) {
  2046. LOGE("ERR(%s):Fail on V4L2_CID_CAMERA_OBJECT_POSITION_Y", __func__);
  2047. return -1;
  2048. }
  2049. return 0;
  2050. }
  2051. //======================================================================
  2052. int SecCamera::setGamma(int gamma)
  2053. {
  2054. LOGV("%s(gamma(%d))", __func__, gamma);
  2055. if (gamma < GAMMA_OFF || GAMMA_MAX <= gamma) {
  2056. LOGE("ERR(%s):Invalid gamma (%d)", __func__, gamma);
  2057. return -1;
  2058. }
  2059. if (m_video_gamma != gamma) {
  2060. m_video_gamma = gamma;
  2061. if (m_flag_camera_start) {
  2062. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_SET_GAMMA, gamma) < 0) {
  2063. LOGE("ERR(%s):Fail on V4L2_CID_CAMERA_SET_GAMMA", __func__);
  2064. return -1;
  2065. }
  2066. }
  2067. }
  2068. return 0;
  2069. }
  2070. //======================================================================
  2071. int SecCamera::setSlowAE(int slow_ae)
  2072. {
  2073. LOGV("%s(slow_ae(%d))", __func__, slow_ae);
  2074. if (slow_ae < GAMMA_OFF || GAMMA_MAX <= slow_ae) {
  2075. LOGE("ERR(%s):Invalid slow_ae (%d)", __func__, slow_ae);
  2076. return -1;
  2077. }
  2078. if (m_slow_ae!= slow_ae) {
  2079. m_slow_ae = slow_ae;
  2080. if (m_flag_camera_start) {
  2081. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_SET_SLOW_AE, slow_ae) < 0) {
  2082. LOGE("ERR(%s):Fail on V4L2_CID_CAMERA_SET_SLOW_AE", __func__);
  2083. return -1;
  2084. }
  2085. }
  2086. }
  2087. return 0;
  2088. }
  2089. //======================================================================
  2090. int SecCamera::setRecordingSize(int width, int height)
  2091. {
  2092. LOGV("%s(width(%d), height(%d))", __func__, width, height);
  2093. m_recording_width = width;
  2094. m_recording_height = height;
  2095. return 0;
  2096. }
  2097. //======================================================================
  2098. int SecCamera::setExifOrientationInfo(int orientationInfo)
  2099. {
  2100. LOGV("%s(orientationInfo(%d))", __func__, orientationInfo);
  2101. if (orientationInfo < 0) {
  2102. LOGE("ERR(%s):Invalid orientationInfo (%d)", __func__, orientationInfo);
  2103. return -1;
  2104. }
  2105. m_exif_orientation = orientationInfo;
  2106. return 0;
  2107. }
  2108. //======================================================================
  2109. int SecCamera::setBatchReflection()
  2110. {
  2111. if (m_flag_camera_start) {
  2112. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_BATCH_REFLECTION, 1) < 0) {
  2113. LOGE("ERR(%s):Fail on V4L2_CID_CAMERA_BATCH_REFLECTION", __func__);
  2114. return -1;
  2115. }
  2116. }
  2117. return 0;
  2118. }
  2119. /*Video call*/
  2120. int SecCamera::setVTmode(int vtmode)
  2121. {
  2122. LOGV("%s(vtmode (%d))", __func__, vtmode);
  2123. if (vtmode < VT_MODE_OFF || VT_MODE_MAX <= vtmode) {
  2124. LOGE("ERR(%s):Invalid vtmode (%d)", __func__, vtmode);
  2125. return -1;
  2126. }
  2127. if (m_vtmode != vtmode) {
  2128. m_vtmode = vtmode;
  2129. }
  2130. return 0;
  2131. }
  2132. /* Camcorder fix fps */
  2133. int SecCamera::setSensorMode(int sensor_mode)
  2134. {
  2135. LOGV("%s(sensor_mode (%d))", __func__, sensor_mode);
  2136. if (sensor_mode < SENSOR_MODE_CAMERA || SENSOR_MODE_MOVIE < sensor_mode) {
  2137. LOGE("ERR(%s):Invalid sensor mode (%d)", __func__, sensor_mode);
  2138. return -1;
  2139. }
  2140. if (m_sensor_mode != sensor_mode) {
  2141. m_sensor_mode = sensor_mode;
  2142. }
  2143. return 0;
  2144. }
  2145. /* Shot mode */
  2146. /* SINGLE = 0
  2147. * CONTINUOUS = 1
  2148. * PANORAMA = 2
  2149. * SMILE = 3
  2150. * SELF = 6
  2151. */
  2152. int SecCamera::setShotMode(int shot_mode)
  2153. {
  2154. LOGV("%s(shot_mode (%d))", __func__, shot_mode);
  2155. if (shot_mode < SHOT_MODE_SINGLE || SHOT_MODE_SELF < shot_mode) {
  2156. LOGE("ERR(%s):Invalid shot_mode (%d)", __func__, shot_mode);
  2157. return -1;
  2158. }
  2159. m_shot_mode = shot_mode;
  2160. return 0;
  2161. }
  2162. int SecCamera::getVTmode(void)
  2163. {
  2164. return m_vtmode;
  2165. }
  2166. int SecCamera::setBlur(int blur_level)
  2167. {
  2168. LOGV("%s(level (%d))", __func__, blur_level);
  2169. if (blur_level < BLUR_LEVEL_0 || BLUR_LEVEL_MAX <= blur_level) {
  2170. LOGE("ERR(%s):Invalid level (%d)", __func__, blur_level);
  2171. return -1;
  2172. }
  2173. if (m_blur_level != blur_level) {
  2174. m_blur_level = blur_level;
  2175. if (m_flag_camera_start) {
  2176. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_VGA_BLUR, blur_level) < 0) {
  2177. LOGE("ERR(%s):Fail on V4L2_CID_CAMERA_VGA_BLUR", __func__);
  2178. return -1;
  2179. }
  2180. }
  2181. }
  2182. return 0;
  2183. }
  2184. int SecCamera::getBlur(void)
  2185. {
  2186. return m_blur_level;
  2187. }
  2188. int SecCamera::setDataLineCheck(int chk_dataline)
  2189. {
  2190. LOGV("%s(chk_dataline (%d))", __func__, chk_dataline);
  2191. if (chk_dataline < CHK_DATALINE_OFF || CHK_DATALINE_MAX <= chk_dataline) {
  2192. LOGE("ERR(%s):Invalid chk_dataline (%d)", __func__, chk_dataline);
  2193. return -1;
  2194. }
  2195. if (m_chk_dataline != chk_dataline) {
  2196. m_chk_dataline = chk_dataline;
  2197. }
  2198. return 0;
  2199. }
  2200. int SecCamera::getDataLineCheck(void)
  2201. {
  2202. return m_chk_dataline;
  2203. }
  2204. int SecCamera::setDataLineCheckStop(void)
  2205. {
  2206. LOGV("%s", __func__);
  2207. if (m_flag_camera_start) {
  2208. if (fimc_v4l2_s_ctrl(m_cam_fd, V4L2_CID_CAMERA_CHECK_DATALINE_STOP, 1) < 0) {
  2209. LOGE("ERR(%s):Fail on V4L2_CID_CAMERA_CHECK_DATALINE_STOP", __func__);
  2210. return -1;
  2211. }
  2212. }
  2213. return 0;
  2214. }
  2215. const __u8* SecCamera::getCameraSensorName(void)
  2216. {
  2217. LOGV("%s", __func__);
  2218. return fimc_v4l2_enuminput(m_cam_fd, getCameraId());
  2219. }
  2220. #ifdef ENABLE_ESD_PREVIEW_CHECK
  2221. int SecCamera::getCameraSensorESDStatus(void)
  2222. {
  2223. LOGV("%s", __func__);
  2224. // 0 : normal operation, 1 : abnormal operation
  2225. int status = fimc_v4l2_g_ctrl(m_cam_fd, V4L2_CID_ESD_INT);
  2226. return status;
  2227. }
  2228. #endif // ENABLE_ESD_PREVIEW_CHECK
  2229. // ======================================================================
  2230. // Jpeg
  2231. int SecCamera::setJpegThumbnailSize(int width, int height)
  2232. {
  2233. LOGV("%s(width(%d), height(%d))", __func__, width, height);
  2234. m_jpeg_thumbnail_width = width;
  2235. m_jpeg_thumbnail_height = height;
  2236. return 0;
  2237. }
  2238. int SecCamera::getJpegThumbnailSize(int *width, int *height)
  2239. {
  2240. if (width)
  2241. *width = m_jpeg_thumbnail_width;
  2242. if (height)
  2243. *height = m_jpeg_thumbnail_height;
  2244. return 0;
  2245. }
  2246. void SecCamera::setExifFixedAttribute()
  2247. {
  2248. char property[PROPERTY_VALUE_MAX];
  2249. //2 0th IFD TIFF Tags
  2250. //3 Maker
  2251. property_get("ro.product.brand", property, EXIF_DEF_MAKER);
  2252. strncpy((char *)mExifInfo.maker, property,
  2253. sizeof(mExifInfo.maker) - 1);
  2254. mExifInfo.maker[sizeof(mExifInfo.maker) - 1] = '\0';
  2255. //3 Model
  2256. property_get("ro.product.model", property, EXIF_DEF_MODEL);
  2257. strncpy((char *)mExifInfo.model, property,
  2258. sizeof(mExifInfo.model) - 1);
  2259. mExifInfo.model[sizeof(mExifInfo.model) - 1] = '\0';
  2260. //3 Software
  2261. property_get("ro.build.id", property, EXIF_DEF_SOFTWARE);
  2262. strncpy((char *)mExifInfo.software, property,
  2263. sizeof(mExifInfo.software) - 1);
  2264. mExifInfo.software[sizeof(mExifInfo.software) - 1] = '\0';
  2265. //3 YCbCr Positioning
  2266. mExifInfo.ycbcr_positioning = EXIF_DEF_YCBCR_POSITIONING;
  2267. //2 0th IFD Exif Private Tags
  2268. //3 F Number
  2269. mExifInfo.fnumber.num = EXIF_DEF_FNUMBER_NUM;
  2270. mExifInfo.fnumber.den = EXIF_DEF_FNUMBER_DEN;
  2271. //3 Exposure Program
  2272. mExifInfo.exposure_program = EXIF_DEF_EXPOSURE_PROGRAM;
  2273. //3 Exif Version
  2274. memcpy(mExifInfo.exif_version, EXIF_DEF_EXIF_VERSION, sizeof(mExifInfo.exif_version));
  2275. //3 Aperture
  2276. uint32_t av = APEX_FNUM_TO_APERTURE((double)mExifInfo.fnumber.num/mExifInfo.fnumber.den);
  2277. mExifInfo.aperture.num = av*EXIF_DEF_APEX_DEN;
  2278. mExifInfo.aperture.den = EXIF_DEF_APEX_DEN;
  2279. //3 Maximum lens aperture
  2280. mExifInfo.max_aperture.num = mExifInfo.aperture.num;
  2281. mExifInfo.max_aperture.den = mExifInfo.aperture.den;
  2282. //3 Lens Focal Length
  2283. if (m_camera_id == CAMERA_ID_BACK)
  2284. mExifInfo.focal_length.num = BACK_CAMERA_FOCAL_LENGTH;
  2285. else
  2286. mExifInfo.focal_length.num = FRONT_CAMERA_FOCAL_LENGTH;
  2287. mExifInfo.focal_length.den = EXIF_DEF_FOCAL_LEN_DEN;
  2288. //3 User Comments
  2289. strcpy((char *)mExifInfo.user_comment, EXIF_DEF_USERCOMMENTS);
  2290. //3 Color Space information
  2291. mExifInfo.color_space = EXIF_DEF_COLOR_SPACE;
  2292. //3 Exposure Mode
  2293. mExifInfo.exposure_mode = EXIF_DEF_EXPOSURE_MODE;
  2294. //2 0th IFD GPS Info Tags
  2295. unsigned char gps_version[4] = { 0x02, 0x02, 0x00, 0x00 };
  2296. memcpy(mExifInfo.gps_version_id, gps_version, sizeof(gps_version));
  2297. //2 1th IFD TIFF Tags
  2298. mExifInfo.compression_scheme = EXIF_DEF_COMPRESSION;
  2299. mExifInfo.x_resolution.num = EXIF_DEF_RESOLUTION_NUM;
  2300. mExifInfo.x_resolution.den = EXIF_DEF_RESOLUTION_DEN;
  2301. mExifInfo.y_resolution.num = EXIF_DEF_RESOLUTION_NUM;
  2302. mExifInfo.y_resolution.den = EXIF_DEF_RESOLUTION_DEN;
  2303. mExifInfo.resolution_unit = EXIF_DEF_RESOLUTION_UNIT;
  2304. }
  2305. void SecCamera::setExifChangedAttribute()
  2306. {
  2307. //2 0th IFD TIFF Tags
  2308. //3 Width
  2309. mExifInfo.width = m_snapshot_width;
  2310. //3 Height
  2311. mExifInfo.height = m_snapshot_height;
  2312. //3 Orientation
  2313. switch (m_exif_orientation) {
  2314. case 0:
  2315. mExifInfo.orientation = EXIF_ORIENTATION_UP;
  2316. break;
  2317. case 90:
  2318. mExifInfo.orientation = EXIF_ORIENTATION_90;
  2319. break;
  2320. case 180:
  2321. mExifInfo.orientation = EXIF_ORIENTATION_180;
  2322. break;
  2323. case 270:
  2324. mExifInfo.orientation = EXIF_ORIENTATION_270;
  2325. break;
  2326. default:
  2327. mExifInfo.orientation = EXIF_ORIENTATION_UP;
  2328. break;
  2329. }
  2330. //3 Date time
  2331. time_t rawtime;
  2332. struct tm *timeinfo;
  2333. time(&rawtime);
  2334. timeinfo = localtime(&rawtime);
  2335. strftime((char *)mExifInfo.date_time, 20, "%Y:%m:%d %H:%M:%S", timeinfo);
  2336. //2 0th IFD Exif Private Tags
  2337. //3 Exposure Time
  2338. int shutterSpeed = fimc_v4l2_g_ctrl(m_cam_fd,
  2339. V4L2_CID_CAMERA_GET_SHT_TIME);
  2340. /* TBD - front camera needs to be fixed to support this g_ctrl,
  2341. it current returns a negative err value, so avoid putting
  2342. odd value into exif for now */
  2343. if (shutterSpeed < 0) {
  2344. LOGE("%s: error %d getting shutterSpeed, camera_id = %d, using 100",
  2345. __func__, shutterSpeed, m_camera_id);
  2346. shutterSpeed = 100;
  2347. }
  2348. mExifInfo.exposure_time.num = 1;
  2349. // x us -> 1/x s */
  2350. mExifInfo.exposure_time.den = (uint32_t)(1000000 / shutterSpeed);
  2351. //3 ISO Speed Rating
  2352. int iso = fimc_v4l2_g_ctrl(m_cam_fd, V4L2_CID_CAMERA_GET_ISO);
  2353. /* TBD - front camera needs to be fixed to support this g_ctrl,
  2354. it current returns a negative err value, so avoid putting
  2355. odd value into exif for now */
  2356. if (iso < 0) {
  2357. LOGE("%s: error %d getting iso, camera_id = %d, using 100",
  2358. __func__, iso, m_camera_id);
  2359. iso = ISO_100;
  2360. }
  2361. switch(iso) {
  2362. case ISO_50:
  2363. mExifInfo.iso_speed_rating = 50;
  2364. break;
  2365. case ISO_100:
  2366. mExifInfo.iso_speed_rating = 100;
  2367. break;
  2368. case ISO_200:
  2369. mExifInfo.iso_speed_rating = 200;
  2370. break;
  2371. case ISO_400:
  2372. mExifInfo.iso_speed_rating = 400;
  2373. break;
  2374. case ISO_800:
  2375. mExifInfo.iso_speed_rating = 800;
  2376. break;
  2377. case ISO_1600:
  2378. mExifInfo.iso_speed_rating = 1600;
  2379. break;
  2380. default:
  2381. mExifInfo.iso_speed_rating = 100;
  2382. break;
  2383. }
  2384. uint32_t av, tv, bv, sv, ev;
  2385. av = APEX_FNUM_TO_APERTURE((double)mExifInfo.fnumber.num / mExifInfo.fnumber.den);
  2386. tv = APEX_EXPOSURE_TO_SHUTTER((double)mExifInfo.exposure_time.num / mExifInfo.exposure_time.den);
  2387. sv = APEX_ISO_TO_FILMSENSITIVITY(mExifInfo.iso_speed_rating);
  2388. bv = av + tv - sv;
  2389. ev = av + tv;
  2390. LOGD("Shutter speed=%d us, iso=%d\n", shutterSpeed, mExifInfo.iso_speed_rating);
  2391. LOGD("AV=%d, TV=%d, SV=%d\n", av, tv, sv);
  2392. //3 Shutter Speed
  2393. mExifInfo.shutter_speed.num = tv*EXIF_DEF_APEX_DEN;
  2394. mExifInfo.shutter_speed.den = EXIF_DEF_APEX_DEN;
  2395. //3 Brightness
  2396. mExifInfo.brightness.num = bv*EXIF_DEF_APEX_DEN;
  2397. mExifInfo.brightness.den = EXIF_DEF_APEX_DEN;
  2398. //3 Exposure Bias
  2399. if (m_params->scene_mode == SCENE_MODE_BEACH_SNOW) {
  2400. mExifInfo.exposure_bias.num = EXIF_DEF_APEX_DEN;
  2401. mExifInfo.exposure_bias.den = EXIF_DEF_APEX_DEN;
  2402. } else {
  2403. mExifInfo.exposure_bias.num = 0;
  2404. mExifInfo.exposure_bias.den = 0;
  2405. }
  2406. //3 Metering Mode
  2407. switch (m_params->metering) {
  2408. case METERING_SPOT:
  2409. mExifInfo.metering_mode = EXIF_METERING_SPOT;
  2410. break;
  2411. case METERING_MATRIX:
  2412. mExifInfo.metering_mode = EXIF_METERING_AVERAGE;
  2413. break;
  2414. case METERING_CENTER:
  2415. mExifInfo.metering_mode = EXIF_METERING_CENTER;
  2416. break;
  2417. default :
  2418. mExifInfo.metering_mode = EXIF_METERING_AVERAGE;
  2419. break;
  2420. }
  2421. //3 Flash
  2422. int flash = fimc_v4l2_g_ctrl(m_cam_fd, V4L2_CID_CAMERA_GET_FLASH_ONOFF);
  2423. if (flash < 0)
  2424. mExifInfo.flash = EXIF_DEF_FLASH;
  2425. else
  2426. mExifInfo.flash = flash;
  2427. //3 White Balance
  2428. if (m_params->white_balance == WHITE_BALANCE_AUTO)
  2429. mExifInfo.white_balance = EXIF_WB_AUTO;
  2430. else
  2431. mExifInfo.white_balance = EXIF_WB_MANUAL;
  2432. //3 Scene Capture Type
  2433. switch (m_params->scene_mode) {
  2434. case SCENE_MODE_PORTRAIT:
  2435. mExifInfo.scene_capture_type = EXIF_SCENE_PORTRAIT;
  2436. break;
  2437. case SCENE_MODE_LANDSCAPE:
  2438. mExifInfo.scene_capture_type = EXIF_SCENE_LANDSCAPE;
  2439. break;
  2440. case SCENE_MODE_NIGHTSHOT:
  2441. mExifInfo.scene_capture_type = EXIF_SCENE_NIGHT;
  2442. break;
  2443. default:
  2444. mExifInfo.scene_capture_type = EXIF_SCENE_STANDARD;
  2445. break;
  2446. }
  2447. //2 0th IFD GPS Info Tags
  2448. if (m_gps_latitude != 0 && m_gps_longitude != 0) {
  2449. if (m_gps_latitude > 0)
  2450. strcpy((char *)mExifInfo.gps_latitude_ref, "N");
  2451. else
  2452. strcpy((char *)mExifInfo.gps_latitude_ref, "S");
  2453. if (m_gps_longitude > 0)
  2454. strcpy((char *)mExifInfo.gps_longitude_ref, "E");
  2455. else
  2456. strcpy((char *)mExifInfo.gps_longitude_ref, "W");
  2457. if (m_gps_altitude > 0)
  2458. mExifInfo.gps_altitude_ref = 0;
  2459. else
  2460. mExifInfo.gps_altitude_ref = 1;
  2461. double latitude = fabs(m_gps_latitude / 10000.0);
  2462. double longitude = fabs(m_gps_longitude / 10000.0);
  2463. double altitude = fabs(m_gps_altitude / 100.0);
  2464. mExifInfo.gps_latitude[0].num = (uint32_t)latitude;
  2465. mExifInfo.gps_latitude[0].den = 1;
  2466. mExifInfo.gps_latitude[1].num = (uint32_t)((latitude - mExifInfo.gps_latitude[0].num) * 60);
  2467. mExifInfo.gps_latitude[1].den = 1;
  2468. mExifInfo.gps_latitude[2].num = (uint32_t)((((latitude - mExifInfo.gps_latitude[0].num) * 60)
  2469. - mExifInfo.gps_latitude[1].num) * 60);
  2470. mExifInfo.gps_latitude[2].den = 1;
  2471. mExifInfo.gps_longitude[0].num = (uint32_t)longitude;
  2472. mExifInfo.gps_longitude[0].den = 1;
  2473. mExifInfo.gps_longitude[1].num = (uint32_t)((longitude - mExifInfo.gps_longitude[0].num) * 60);
  2474. mExifInfo.gps_longitude[1].den = 1;
  2475. mExifInfo.gps_longitude[2].num = (uint32_t)((((longitude - mExifInfo.gps_longitude[0].num) * 60)
  2476. - mExifInfo.gps_longitude[1].num) * 60);
  2477. mExifInfo.gps_longitude[2].den = 1;
  2478. mExifInfo.gps_altitude.num = (uint32_t)altitude;
  2479. mExifInfo.gps_altitude.den = 1;
  2480. struct tm tm_data;
  2481. gmtime_r(&m_gps_timestamp, &tm_data);
  2482. mExifInfo.gps_timestamp[0].num = tm_data.tm_hour;
  2483. mExifInfo.gps_timestamp[0].den = 1;
  2484. mExifInfo.gps_timestamp[1].num = tm_data.tm_min;
  2485. mExifInfo.gps_timestamp[1].den = 1;
  2486. mExifInfo.gps_timestamp[2].num = tm_data.tm_sec;
  2487. mExifInfo.gps_timestamp[2].den = 1;
  2488. snprintf((char*)mExifInfo.gps_datestamp, sizeof(mExifInfo.gps_datestamp),
  2489. "%04d:%02d:%02d", tm_data.tm_year + 1900, tm_data.tm_mon, tm_data.tm_mday);
  2490. mExifInfo.enableGps = true;
  2491. } else {
  2492. mExifInfo.enableGps = false;
  2493. }
  2494. //2 1th IFD TIFF Tags
  2495. mExifInfo.widthThumb = m_jpeg_thumbnail_width;
  2496. mExifInfo.heightThumb = m_jpeg_thumbnail_height;
  2497. }
  2498. // ======================================================================
  2499. // Conversions
  2500. inline int SecCamera::m_frameSize(int format, int width, int height)
  2501. {
  2502. int size = 0;
  2503. switch (format) {
  2504. case V4L2_PIX_FMT_YUV420:
  2505. case V4L2_PIX_FMT_NV12:
  2506. case V4L2_PIX_FMT_NV21:
  2507. size = (width * height * 3 / 2);
  2508. break;
  2509. case V4L2_PIX_FMT_NV12T:
  2510. size = ALIGN_TO_8KB(ALIGN_TO_128B(width) * ALIGN_TO_32B(height)) +
  2511. ALIGN_TO_8KB(ALIGN_TO_128B(width) * ALIGN_TO_32B(height / 2));
  2512. break;
  2513. case V4L2_PIX_FMT_YUV422P:
  2514. case V4L2_PIX_FMT_YUYV:
  2515. case V4L2_PIX_FMT_UYVY:
  2516. size = (width * height * 2);
  2517. break;
  2518. default :
  2519. LOGE("ERR(%s):Invalid V4L2 pixel format(%d)\n", __func__, format);
  2520. case V4L2_PIX_FMT_RGB565:
  2521. size = (width * height * BPP);
  2522. break;
  2523. }
  2524. return size;
  2525. }
  2526. status_t SecCamera::dump(int fd, const Vector<String16> &args)
  2527. {
  2528. const size_t SIZE = 256;
  2529. char buffer[SIZE];
  2530. String8 result;
  2531. snprintf(buffer, 255, "dump(%d)\n", fd);
  2532. result.append(buffer);
  2533. ::write(fd, result.string(), result.size());
  2534. return NO_ERROR;
  2535. }
  2536. double SecCamera::jpeg_ratio = 0.7;
  2537. int SecCamera::interleaveDataSize = 4261248;
  2538. int SecCamera::jpegLineLength = 636;
  2539. }; // namespace android