PageRenderTime 41ms CodeModel.GetById 1ms RepoModel.GetById 0ms app.codeStats 1ms

/QCamera2/HAL/QCameraParameters.cpp

https://github.com/Evervolv/android_hardware_qcom_camera
C++ | 6148 lines | 3694 code | 448 blank | 2006 comment | 826 complexity | f3cb585f5a9720ab4d08a9cf76e1c054 MD5 | raw file

Large files files are truncated, but you can click here to view the full file

  1. /* Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
  2. *
  3. * Redistribution and use in source and binary forms, with or without
  4. * modification, are permitted provided that the following conditions are
  5. * met:
  6. * * Redistributions of source code must retain the above copyright
  7. * notice, this list of conditions and the following disclaimer.
  8. * * Redistributions in binary form must reproduce the above
  9. * copyright notice, this list of conditions and the following
  10. * disclaimer in the documentation and/or other materials provided
  11. * with the distribution.
  12. * * Neither the name of The Linux Foundation nor the names of its
  13. * contributors may be used to endorse or promote products derived
  14. * from this software without specific prior written permission.
  15. *
  16. * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
  17. * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  18. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
  19. * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
  20. * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  21. * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  22. * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
  23. * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  24. * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
  25. * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
  26. * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  27. *
  28. */
  29. #define LOG_TAG "QCameraParameters"
  30. #include <cutils/properties.h>
  31. #include <math.h>
  32. #include <utils/Errors.h>
  33. #include <string.h>
  34. #include <stdlib.h>
  35. #include <gralloc_priv.h>
  36. #include "QCamera2HWI.h"
  37. #include "QCameraParameters.h"
  38. #define ASPECT_TOLERANCE 0.001
  39. #define FLIP_V_H (FLIP_H | FLIP_V)
  40. namespace qcamera {
  41. // Parameter keys to communicate between camera application and driver.
  42. const char QCameraParameters::KEY_QC_SUPPORTED_HFR_SIZES[] = "hfr-size-values";
  43. const char QCameraParameters::KEY_QC_PREVIEW_FRAME_RATE_MODE[] = "preview-frame-rate-mode";
  44. const char QCameraParameters::KEY_QC_SUPPORTED_PREVIEW_FRAME_RATE_MODES[] = "preview-frame-rate-modes";
  45. const char QCameraParameters::KEY_QC_PREVIEW_FRAME_RATE_AUTO_MODE[] = "frame-rate-auto";
  46. const char QCameraParameters::KEY_QC_PREVIEW_FRAME_RATE_FIXED_MODE[] = "frame-rate-fixed";
  47. const char QCameraParameters::KEY_QC_TOUCH_AF_AEC[] = "touch-af-aec";
  48. const char QCameraParameters::KEY_QC_SUPPORTED_TOUCH_AF_AEC[] = "touch-af-aec-values";
  49. const char QCameraParameters::KEY_QC_TOUCH_INDEX_AEC[] = "touch-index-aec";
  50. const char QCameraParameters::KEY_QC_TOUCH_INDEX_AF[] = "touch-index-af";
  51. const char QCameraParameters::KEY_QC_SCENE_DETECT[] = "scene-detect";
  52. const char QCameraParameters::KEY_QC_SUPPORTED_SCENE_DETECT[] = "scene-detect-values";
  53. const char QCameraParameters::KEY_QC_ISO_MODE[] = "iso";
  54. const char QCameraParameters::KEY_QC_SUPPORTED_ISO_MODES[] = "iso-values";
  55. const char QCameraParameters::KEY_QC_LENSSHADE[] = "lensshade";
  56. const char QCameraParameters::KEY_QC_SUPPORTED_LENSSHADE_MODES[] = "lensshade-values";
  57. const char QCameraParameters::KEY_QC_AUTO_EXPOSURE[] = "auto-exposure";
  58. const char QCameraParameters::KEY_QC_SUPPORTED_AUTO_EXPOSURE[] = "auto-exposure-values";
  59. const char QCameraParameters::KEY_QC_DENOISE[] = "denoise";
  60. const char QCameraParameters::KEY_QC_SUPPORTED_DENOISE[] = "denoise-values";
  61. const char QCameraParameters::KEY_QC_FOCUS_ALGO[] = "selectable-zone-af";
  62. const char QCameraParameters::KEY_QC_SUPPORTED_FOCUS_ALGOS[] = "selectable-zone-af-values";
  63. const char QCameraParameters::KEY_QC_FACE_DETECTION[] = "face-detection";
  64. const char QCameraParameters::KEY_QC_SUPPORTED_FACE_DETECTION[] = "face-detection-values";
  65. const char QCameraParameters::KEY_QC_FACE_RECOGNITION[] = "face-recognition";
  66. const char QCameraParameters::KEY_QC_SUPPORTED_FACE_RECOGNITION[] = "face-recognition-values";
  67. const char QCameraParameters::KEY_QC_MEMORY_COLOR_ENHANCEMENT[] = "mce";
  68. const char QCameraParameters::KEY_QC_SUPPORTED_MEM_COLOR_ENHANCE_MODES[] = "mce-values";
  69. const char QCameraParameters::KEY_QC_DIS[] = "dis";
  70. const char QCameraParameters::KEY_QC_SUPPORTED_DIS_MODES[] = "dis-values";
  71. const char QCameraParameters::KEY_QC_VIDEO_HIGH_FRAME_RATE[] = "video-hfr";
  72. const char QCameraParameters::KEY_QC_SUPPORTED_VIDEO_HIGH_FRAME_RATE_MODES[] = "video-hfr-values";
  73. const char QCameraParameters::KEY_QC_REDEYE_REDUCTION[] = "redeye-reduction";
  74. const char QCameraParameters::KEY_QC_SUPPORTED_REDEYE_REDUCTION[] = "redeye-reduction-values";
  75. const char QCameraParameters::KEY_QC_HIGH_DYNAMIC_RANGE_IMAGING[] = "hdr";
  76. const char QCameraParameters::KEY_QC_SUPPORTED_HDR_IMAGING_MODES[] = "hdr-values";
  77. const char QCameraParameters::KEY_QC_ZSL[] = "zsl";
  78. const char QCameraParameters::KEY_QC_SUPPORTED_ZSL_MODES[] = "zsl-values";
  79. const char QCameraParameters::KEY_QC_ZSL_BURST_INTERVAL[] = "capture-burst-interval";
  80. const char QCameraParameters::KEY_QC_ZSL_BURST_LOOKBACK[] = "capture-burst-retroactive";
  81. const char QCameraParameters::KEY_QC_ZSL_QUEUE_DEPTH[] = "capture-burst-queue-depth";
  82. const char QCameraParameters::KEY_QC_CAMERA_MODE[] = "camera-mode";
  83. const char QCameraParameters::KEY_QC_AE_BRACKET_HDR[] = "ae-bracket-hdr";
  84. const char QCameraParameters::KEY_QC_SUPPORTED_AE_BRACKET_MODES[] = "ae-bracket-hdr-values";
  85. const char QCameraParameters::KEY_QC_SUPPORTED_RAW_FORMATS[] = "raw-format-values";
  86. const char QCameraParameters::KEY_QC_RAW_FORMAT[] = "raw-format";
  87. const char QCameraParameters::KEY_QC_ORIENTATION[] = "orientation";
  88. const char QCameraParameters::KEY_QC_SELECTABLE_ZONE_AF[] = "selectable-zone-af";
  89. const char QCameraParameters::KEY_QC_CAPTURE_BURST_EXPOSURE[] = "capture-burst-exposures";
  90. const char QCameraParameters::KEY_QC_NUM_SNAPSHOT_PER_SHUTTER[] = "num-snaps-per-shutter";
  91. const char QCameraParameters::KEY_QC_NO_DISPLAY_MODE[] = "no-display-mode";
  92. const char QCameraParameters::KEY_QC_RAW_PICUTRE_SIZE[] = "raw-size";
  93. const char QCameraParameters::KEY_QC_SUPPORTED_SKIN_TONE_ENHANCEMENT_MODES[] = "skinToneEnhancement-values";
  94. const char QCameraParameters::KEY_QC_SUPPORTED_LIVESNAPSHOT_SIZES[] = "supported-live-snapshot-sizes";
  95. const char QCameraParameters::KEY_QC_HDR_NEED_1X[] = "hdr-need-1x";
  96. const char QCameraParameters::KEY_QC_PREVIEW_FLIP[] = "preview-flip";
  97. const char QCameraParameters::KEY_QC_VIDEO_FLIP[] = "video-flip";
  98. const char QCameraParameters::KEY_QC_SNAPSHOT_PICTURE_FLIP[] = "snapshot-picture-flip";
  99. const char QCameraParameters::KEY_QC_SUPPORTED_FLIP_MODES[] = "flip-mode-values";
  100. const char QCameraParameters::KEY_QC_VIDEO_HDR[] = "video-hdr";
  101. const char QCameraParameters::KEY_QC_SUPPORTED_VIDEO_HDR_MODES[] = "video-hdr-values";
  102. // Values for effect settings.
  103. const char QCameraParameters::EFFECT_EMBOSS[] = "emboss";
  104. const char QCameraParameters::EFFECT_SKETCH[] = "sketch";
  105. const char QCameraParameters::EFFECT_NEON[] = "neon";
  106. // Values for auto exposure settings.
  107. const char QCameraParameters::TOUCH_AF_AEC_OFF[] = "touch-off";
  108. const char QCameraParameters::TOUCH_AF_AEC_ON[] = "touch-on";
  109. // Values for scene mode settings.
  110. const char QCameraParameters::SCENE_MODE_ASD[] = "asd"; // corresponds to CAMERA_BESTSHOT_AUTO in HAL
  111. const char QCameraParameters::SCENE_MODE_BACKLIGHT[] = "backlight";
  112. const char QCameraParameters::SCENE_MODE_FLOWERS[] = "flowers";
  113. const char QCameraParameters::SCENE_MODE_AR[] = "AR";
  114. const char QCameraParameters::SCENE_MODE_HDR[] = "hdr";
  115. // Formats for setPreviewFormat and setPictureFormat.
  116. const char QCameraParameters::PIXEL_FORMAT_YUV420SP_ADRENO[] = "yuv420sp-adreno";
  117. const char QCameraParameters::PIXEL_FORMAT_YV12[] = "yuv420p";
  118. const char QCameraParameters::PIXEL_FORMAT_NV12[] = "nv12";
  119. // Values for raw image formats
  120. const char QCameraParameters::QC_PIXEL_FORMAT_YUV_RAW_8BIT_YUYV[] = "yuv-raw8-yuyv";
  121. const char QCameraParameters::QC_PIXEL_FORMAT_YUV_RAW_8BIT_YVYU[] = "yuv-raw8-yvyu";
  122. const char QCameraParameters::QC_PIXEL_FORMAT_YUV_RAW_8BIT_UYVY[] = "yuv-raw8-uyvy";
  123. const char QCameraParameters::QC_PIXEL_FORMAT_YUV_RAW_8BIT_VYUY[] = "yuv-raw8-vyuy";
  124. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_8GBRG[] = "bayer-qcom-8gbrg";
  125. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_8GRBG[] = "bayer-qcom-8grbg";
  126. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_8RGGB[] = "bayer-qcom-8rggb";
  127. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_8BGGR[] = "bayer-qcom-8bggr";
  128. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_10GBRG[] = "bayer-qcom-10gbrg";
  129. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_10GRBG[] = "bayer-qcom-10grbg";
  130. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_10RGGB[] = "bayer-qcom-10rggb";
  131. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_10BGGR[] = "bayer-qcom-10bggr";
  132. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_12GBRG[] = "bayer-qcom-12gbrg";
  133. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_12GRBG[] = "bayer-qcom-12grbg";
  134. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_12RGGB[] = "bayer-qcom-12rggb";
  135. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_QCOM_RAW_12BGGR[] = "bayer-qcom-12bggr";
  136. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_8GBRG[] = "bayer-mipi-8gbrg";
  137. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_8GRBG[] = "bayer-mipi-8grbg";
  138. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_8RGGB[] = "bayer-mipi-8rggb";
  139. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_8BGGR[] = "bayer-mipi-8bggr";
  140. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_10GBRG[] = "bayer-mipi-10gbrg";
  141. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_10GRBG[] = "bayer-mipi-10grbg";
  142. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_10RGGB[] = "bayer-mipi-10rggb";
  143. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_10BGGR[] = "bayer-mipi-10bggr";
  144. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_12GBRG[] = "bayer-mipi-12gbrg";
  145. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_12GRBG[] = "bayer-mipi-12grbg";
  146. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_12RGGB[] = "bayer-mipi-12rggb";
  147. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_MIPI_RAW_12BGGR[] = "bayer-mipi-12bggr";
  148. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_8GBRG[] = "bayer-ideal-qcom-8gbrg";
  149. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_8GRBG[] = "bayer-ideal-qcom-8grbg";
  150. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_8RGGB[] = "bayer-ideal-qcom-8rggb";
  151. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_8BGGR[] = "bayer-ideal-qcom-8bggr";
  152. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_10GBRG[] = "bayer-ideal-qcom-10gbrg";
  153. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_10GRBG[] = "bayer-ideal-qcom-10grbg";
  154. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_10RGGB[] = "bayer-ideal-qcom-10rggb";
  155. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_10BGGR[] = "bayer-ideal-qcom-10bggr";
  156. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_12GBRG[] = "bayer-ideal-qcom-12gbrg";
  157. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_12GRBG[] = "bayer-ideal-qcom-12grbg";
  158. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_12RGGB[] = "bayer-ideal-qcom-12rggb";
  159. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_12BGGR[] = "bayer-ideal-qcom-12bggr";
  160. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_8GBRG[] = "bayer-ideal-mipi-8gbrg";
  161. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_8GRBG[] = "bayer-ideal-mipi-8grbg";
  162. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_8RGGB[] = "bayer-ideal-mipi-8rggb";
  163. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_8BGGR[] = "bayer-ideal-mipi-8bggr";
  164. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_10GBRG[] = "bayer-ideal-mipi-10gbrg";
  165. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_10GRBG[] = "bayer-ideal-mipi-10grbg";
  166. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_10RGGB[] = "bayer-ideal-mipi-10rggb";
  167. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_10BGGR[] = "bayer-ideal-mipi-10bggr";
  168. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_12GBRG[] = "bayer-ideal-mipi-12gbrg";
  169. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_12GRBG[] = "bayer-ideal-mipi-12grbg";
  170. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_12RGGB[] = "bayer-ideal-mipi-12rggb";
  171. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_12BGGR[] = "bayer-ideal-mipi-12bggr";
  172. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN8_8GBRG[] = "bayer-ideal-plain8-8gbrg";
  173. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN8_8GRBG[] = "bayer-ideal-plain8-8grbg";
  174. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN8_8RGGB[] = "bayer-ideal-plain8-8rggb";
  175. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN8_8BGGR[] = "bayer-ideal-plain8-8bggr";
  176. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_8GBRG[] = "bayer-ideal-plain16-8gbrg";
  177. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_8GRBG[] = "bayer-ideal-plain16-8grbg";
  178. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_8RGGB[] = "bayer-ideal-plain16-8rggb";
  179. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_8BGGR[] = "bayer-ideal-plain16-8bggr";
  180. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_10GBRG[] = "bayer-ideal-plain16-10gbrg";
  181. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_10GRBG[] = "bayer-ideal-plain16-10grbg";
  182. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_10RGGB[] = "bayer-ideal-plain16-10rggb";
  183. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_10BGGR[] = "bayer-ideal-plain16-10bggr";
  184. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_12GBRG[] = "bayer-ideal-plain16-12gbrg";
  185. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_12GRBG[] = "bayer-ideal-plain16-12grbg";
  186. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_12RGGB[] = "bayer-ideal-plain16-12rggb";
  187. const char QCameraParameters::QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_12BGGR[] = "bayer-ideal-plain16-12bggr";
  188. // Values for ISO Settings
  189. const char QCameraParameters::ISO_AUTO[] = "auto";
  190. const char QCameraParameters::ISO_HJR[] = "ISO_HJR";
  191. const char QCameraParameters::ISO_100[] = "ISO100";
  192. const char QCameraParameters::ISO_200[] = "ISO200";
  193. const char QCameraParameters::ISO_400[] = "ISO400";
  194. const char QCameraParameters::ISO_800[] = "ISO800";
  195. const char QCameraParameters::ISO_1600[] = "ISO1600";
  196. // Values for auto exposure settings.
  197. const char QCameraParameters::AUTO_EXPOSURE_FRAME_AVG[] = "frame-average";
  198. const char QCameraParameters::AUTO_EXPOSURE_CENTER_WEIGHTED[] = "center-weighted";
  199. const char QCameraParameters::AUTO_EXPOSURE_SPOT_METERING[] = "spot-metering";
  200. const char QCameraParameters::AUTO_EXPOSURE_SMART_METERING[] = "smart-metering";
  201. const char QCameraParameters::AUTO_EXPOSURE_USER_METERING[] = "user-metering";
  202. const char QCameraParameters::AUTO_EXPOSURE_SPOT_METERING_ADV[] = "spot-metering-adv";
  203. const char QCameraParameters::AUTO_EXPOSURE_CENTER_WEIGHTED_ADV[] = "center-weighted-adv";
  204. const char QCameraParameters::KEY_QC_GPS_LATITUDE_REF[] = "gps-latitude-ref";
  205. const char QCameraParameters::KEY_QC_GPS_LONGITUDE_REF[] = "gps-longitude-ref";
  206. const char QCameraParameters::KEY_QC_GPS_ALTITUDE_REF[] = "gps-altitude-ref";
  207. const char QCameraParameters::KEY_QC_GPS_STATUS[] = "gps-status";
  208. const char QCameraParameters::KEY_QC_HISTOGRAM[] = "histogram";
  209. const char QCameraParameters::KEY_QC_SUPPORTED_HISTOGRAM_MODES[] = "histogram-values";
  210. const char QCameraParameters::VALUE_ENABLE[] = "enable";
  211. const char QCameraParameters::VALUE_DISABLE[] = "disable";
  212. const char QCameraParameters::VALUE_OFF[] = "off";
  213. const char QCameraParameters::VALUE_ON[] = "on";
  214. const char QCameraParameters::VALUE_TRUE[] = "true";
  215. const char QCameraParameters::VALUE_FALSE[] = "false";
  216. const char QCameraParameters::KEY_QC_SHARPNESS[] = "sharpness";
  217. const char QCameraParameters::KEY_QC_MIN_SHARPNESS[] = "min-sharpness";
  218. const char QCameraParameters::KEY_QC_MAX_SHARPNESS[] = "max-sharpness";
  219. const char QCameraParameters::KEY_QC_SHARPNESS_STEP[] = "sharpness-step";
  220. const char QCameraParameters::KEY_QC_CONTRAST[] = "contrast";
  221. const char QCameraParameters::KEY_QC_MIN_CONTRAST[] = "min-contrast";
  222. const char QCameraParameters::KEY_QC_MAX_CONTRAST[] = "max-contrast";
  223. const char QCameraParameters::KEY_QC_CONTRAST_STEP[] = "contrast-step";
  224. const char QCameraParameters::KEY_QC_SATURATION[] = "saturation";
  225. const char QCameraParameters::KEY_QC_MIN_SATURATION[] = "min-saturation";
  226. const char QCameraParameters::KEY_QC_MAX_SATURATION[] = "max-saturation";
  227. const char QCameraParameters::KEY_QC_SATURATION_STEP[] = "saturation-step";
  228. const char QCameraParameters::KEY_QC_BRIGHTNESS[] = "luma-adaptation";
  229. const char QCameraParameters::KEY_QC_MIN_BRIGHTNESS[] = "min-brightness";
  230. const char QCameraParameters::KEY_QC_MAX_BRIGHTNESS[] = "max-brightness";
  231. const char QCameraParameters::KEY_QC_BRIGHTNESS_STEP[] = "brightness-step";
  232. const char QCameraParameters::KEY_QC_SCE_FACTOR[] = "skinToneEnhancement";
  233. const char QCameraParameters::KEY_QC_MIN_SCE_FACTOR[] = "min-sce-factor";
  234. const char QCameraParameters::KEY_QC_MAX_SCE_FACTOR[] = "max-sce-factor";
  235. const char QCameraParameters::KEY_QC_SCE_FACTOR_STEP[] = "sce-factor-step";
  236. const char QCameraParameters::KEY_QC_SUPPORTED_CAMERA_FEATURES[] = "qc-camera-features";
  237. const char QCameraParameters::KEY_QC_MAX_NUM_REQUESTED_FACES[] = "qc-max-num-requested-faces";
  238. //Values for DENOISE
  239. const char QCameraParameters::DENOISE_OFF[] = "denoise-off";
  240. const char QCameraParameters::DENOISE_ON[] = "denoise-on";
  241. // Values for selectable zone af Settings
  242. const char QCameraParameters::FOCUS_ALGO_AUTO[] = "auto";
  243. const char QCameraParameters::FOCUS_ALGO_SPOT_METERING[] = "spot-metering";
  244. const char QCameraParameters::FOCUS_ALGO_CENTER_WEIGHTED[] = "center-weighted";
  245. const char QCameraParameters::FOCUS_ALGO_FRAME_AVERAGE[] = "frame-average";
  246. // Values for HFR settings.
  247. const char QCameraParameters::VIDEO_HFR_OFF[] = "off";
  248. const char QCameraParameters::VIDEO_HFR_2X[] = "60";
  249. const char QCameraParameters::VIDEO_HFR_3X[] = "90";
  250. const char QCameraParameters::VIDEO_HFR_4X[] = "120";
  251. const char QCameraParameters::VIDEO_HFR_5X[] = "150";
  252. // Values for HDR Bracketing settings.
  253. const char QCameraParameters::AE_BRACKET_OFF[] = "Off";
  254. const char QCameraParameters::AE_BRACKET[] = "AE-Bracket";
  255. // Values for FLIP settings.
  256. const char QCameraParameters::FLIP_MODE_OFF[] = "off";
  257. const char QCameraParameters::FLIP_MODE_V[] = "flip-v";
  258. const char QCameraParameters::FLIP_MODE_H[] = "flip-h";
  259. const char QCameraParameters::FLIP_MODE_VH[] = "flip-vh";
  260. static const char* portrait = "portrait";
  261. static const char* landscape = "landscape";
  262. const cam_dimension_t QCameraParameters::THUMBNAIL_SIZES_MAP[] = {
  263. { 512, 288 }, //1.777778
  264. { 480, 288 }, //1.666667
  265. { 256, 154 }, //1.66233
  266. { 432, 288 }, //1.5
  267. { 320, 240 }, //1.33333
  268. { 176, 144 }, //1.222222
  269. { 0, 0 } // required by Android SDK
  270. };
  271. const QCameraParameters::QCameraMap QCameraParameters::AUTO_EXPOSURE_MAP[] = {
  272. { AUTO_EXPOSURE_FRAME_AVG, CAM_AEC_MODE_FRAME_AVERAGE },
  273. { AUTO_EXPOSURE_CENTER_WEIGHTED, CAM_AEC_MODE_CENTER_WEIGHTED },
  274. { AUTO_EXPOSURE_SPOT_METERING, CAM_AEC_MODE_SPOT_METERING },
  275. { AUTO_EXPOSURE_SMART_METERING, CAM_AEC_MODE_SMART_METERING },
  276. { AUTO_EXPOSURE_USER_METERING, CAM_AEC_MODE_USER_METERING },
  277. { AUTO_EXPOSURE_SPOT_METERING_ADV, CAM_AEC_MODE_SPOT_METERING_ADV },
  278. { AUTO_EXPOSURE_CENTER_WEIGHTED_ADV, CAM_AEC_MODE_CENTER_WEIGHTED_ADV },
  279. };
  280. const QCameraParameters::QCameraMap QCameraParameters::PREVIEW_FORMATS_MAP[] = {
  281. {PIXEL_FORMAT_YUV420SP, CAM_FORMAT_YUV_420_NV21},
  282. {PIXEL_FORMAT_YUV420P, CAM_FORMAT_YUV_420_YV12},
  283. {PIXEL_FORMAT_YUV420SP_ADRENO, CAM_FORMAT_YUV_420_NV21_ADRENO},
  284. {PIXEL_FORMAT_YV12, CAM_FORMAT_YUV_420_YV12},
  285. {PIXEL_FORMAT_NV12, CAM_FORMAT_YUV_420_NV12}
  286. };
  287. const QCameraParameters::QCameraMap QCameraParameters::PICTURE_TYPES_MAP[] = {
  288. {PIXEL_FORMAT_JPEG, CAM_FORMAT_JPEG},
  289. {PIXEL_FORMAT_YUV422SP, CAM_FORMAT_YUV_422_NV16},
  290. {QC_PIXEL_FORMAT_YUV_RAW_8BIT_YUYV, CAM_FORMAT_YUV_RAW_8BIT_YUYV},
  291. {QC_PIXEL_FORMAT_YUV_RAW_8BIT_YVYU, CAM_FORMAT_YUV_RAW_8BIT_YVYU},
  292. {QC_PIXEL_FORMAT_YUV_RAW_8BIT_UYVY, CAM_FORMAT_YUV_RAW_8BIT_UYVY},
  293. {QC_PIXEL_FORMAT_YUV_RAW_8BIT_VYUY, CAM_FORMAT_YUV_RAW_8BIT_VYUY},
  294. {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_8GBRG, CAM_FORMAT_BAYER_QCOM_RAW_8BPP_GBRG},
  295. {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_8GRBG, CAM_FORMAT_BAYER_QCOM_RAW_8BPP_GRBG},
  296. {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_8RGGB, CAM_FORMAT_BAYER_QCOM_RAW_8BPP_RGGB},
  297. {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_8BGGR, CAM_FORMAT_BAYER_QCOM_RAW_8BPP_BGGR},
  298. {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_10GBRG, CAM_FORMAT_BAYER_QCOM_RAW_10BPP_GBRG},
  299. {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_10GRBG, CAM_FORMAT_BAYER_QCOM_RAW_10BPP_GRBG},
  300. {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_10RGGB, CAM_FORMAT_BAYER_QCOM_RAW_10BPP_RGGB},
  301. {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_10BGGR, CAM_FORMAT_BAYER_QCOM_RAW_10BPP_BGGR},
  302. {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_12GBRG, CAM_FORMAT_BAYER_QCOM_RAW_12BPP_GBRG},
  303. {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_12GRBG, CAM_FORMAT_BAYER_QCOM_RAW_12BPP_GRBG},
  304. {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_12RGGB, CAM_FORMAT_BAYER_QCOM_RAW_12BPP_RGGB},
  305. {QC_PIXEL_FORMAT_BAYER_QCOM_RAW_12BGGR, CAM_FORMAT_BAYER_QCOM_RAW_12BPP_BGGR},
  306. {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_8GBRG, CAM_FORMAT_BAYER_MIPI_RAW_8BPP_GBRG},
  307. {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_8GRBG, CAM_FORMAT_BAYER_MIPI_RAW_8BPP_GRBG},
  308. {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_8RGGB, CAM_FORMAT_BAYER_MIPI_RAW_8BPP_RGGB},
  309. {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_8BGGR, CAM_FORMAT_BAYER_MIPI_RAW_8BPP_BGGR},
  310. {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_10GBRG, CAM_FORMAT_BAYER_MIPI_RAW_10BPP_GBRG},
  311. {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_10GRBG, CAM_FORMAT_BAYER_MIPI_RAW_10BPP_GRBG},
  312. {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_10RGGB, CAM_FORMAT_BAYER_MIPI_RAW_10BPP_RGGB},
  313. {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_10BGGR, CAM_FORMAT_BAYER_MIPI_RAW_10BPP_BGGR},
  314. {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_12GBRG, CAM_FORMAT_BAYER_MIPI_RAW_12BPP_GBRG},
  315. {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_12GRBG, CAM_FORMAT_BAYER_MIPI_RAW_12BPP_GRBG},
  316. {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_12RGGB, CAM_FORMAT_BAYER_MIPI_RAW_12BPP_RGGB},
  317. {QC_PIXEL_FORMAT_BAYER_MIPI_RAW_12BGGR, CAM_FORMAT_BAYER_MIPI_RAW_12BPP_BGGR},
  318. {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_8GBRG, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_8BPP_GBRG},
  319. {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_8GRBG, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_8BPP_GRBG},
  320. {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_8RGGB, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_8BPP_RGGB},
  321. {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_8BGGR, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_8BPP_BGGR},
  322. {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_10GBRG, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_10BPP_GBRG},
  323. {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_10GRBG, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_10BPP_GRBG},
  324. {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_10RGGB, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_10BPP_RGGB},
  325. {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_10BGGR, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_10BPP_BGGR},
  326. {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_12GBRG, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_12BPP_GBRG},
  327. {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_12GRBG, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_12BPP_GRBG},
  328. {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_12RGGB, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_12BPP_RGGB},
  329. {QC_PIXEL_FORMAT_BAYER_IDEAL_QCOM_12BGGR, CAM_FORMAT_BAYER_IDEAL_RAW_QCOM_12BPP_BGGR},
  330. {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_8GBRG, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_8BPP_GBRG},
  331. {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_8GRBG, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_8BPP_GRBG},
  332. {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_8RGGB, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_8BPP_RGGB},
  333. {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_8BGGR, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_8BPP_BGGR},
  334. {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_10GBRG, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_10BPP_GBRG},
  335. {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_10GRBG, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_10BPP_GRBG},
  336. {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_10RGGB, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_10BPP_RGGB},
  337. {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_10BGGR, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_10BPP_BGGR},
  338. {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_12GBRG, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_12BPP_GBRG},
  339. {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_12GRBG, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_12BPP_GRBG},
  340. {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_12RGGB, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_12BPP_RGGB},
  341. {QC_PIXEL_FORMAT_BAYER_IDEAL_MIPI_12BGGR, CAM_FORMAT_BAYER_IDEAL_RAW_MIPI_12BPP_BGGR},
  342. {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN8_8GBRG, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN8_8BPP_GBRG},
  343. {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN8_8GRBG, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN8_8BPP_GRBG},
  344. {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN8_8RGGB, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN8_8BPP_RGGB},
  345. {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN8_8BGGR, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN8_8BPP_BGGR},
  346. {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_8GBRG, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_8BPP_GBRG},
  347. {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_8GRBG, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_8BPP_GRBG},
  348. {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_8RGGB, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_8BPP_RGGB},
  349. {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_8BGGR, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_8BPP_BGGR},
  350. {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_10GBRG, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_10BPP_GBRG},
  351. {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_10GRBG, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_10BPP_GRBG},
  352. {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_10RGGB, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_10BPP_RGGB},
  353. {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_10BGGR, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_10BPP_BGGR},
  354. {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_12GBRG, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_12BPP_GBRG},
  355. {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_12GRBG, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_12BPP_GRBG},
  356. {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_12RGGB, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_12BPP_RGGB},
  357. {QC_PIXEL_FORMAT_BAYER_IDEAL_PLAIN16_12BGGR, CAM_FORMAT_BAYER_IDEAL_RAW_PLAIN16_12BPP_BGGR}
  358. };
  359. const QCameraParameters::QCameraMap QCameraParameters::RAW_FORMATS_MAP[] = {
  360. };
  361. const QCameraParameters::QCameraMap QCameraParameters::FOCUS_MODES_MAP[] = {
  362. { FOCUS_MODE_AUTO, CAM_FOCUS_MODE_AUTO },
  363. { FOCUS_MODE_INFINITY, CAM_FOCUS_MODE_INFINITY },
  364. { FOCUS_MODE_MACRO, CAM_FOCUS_MODE_MACRO },
  365. { FOCUS_MODE_FIXED, CAM_FOCUS_MODE_FIXED },
  366. { FOCUS_MODE_EDOF, CAM_FOCUS_MODE_EDOF },
  367. { FOCUS_MODE_CONTINUOUS_PICTURE, CAM_FOCUS_MODE_CONTINOUS_PICTURE },
  368. { FOCUS_MODE_CONTINUOUS_VIDEO, CAM_FOCUS_MODE_CONTINOUS_VIDEO }
  369. };
  370. const QCameraParameters::QCameraMap QCameraParameters::EFFECT_MODES_MAP[] = {
  371. { EFFECT_NONE, CAM_EFFECT_MODE_OFF },
  372. { EFFECT_MONO, CAM_EFFECT_MODE_MONO },
  373. { EFFECT_NEGATIVE, CAM_EFFECT_MODE_NEGATIVE },
  374. { EFFECT_SOLARIZE, CAM_EFFECT_MODE_SOLARIZE },
  375. { EFFECT_SEPIA, CAM_EFFECT_MODE_SEPIA },
  376. { EFFECT_POSTERIZE, CAM_EFFECT_MODE_POSTERIZE },
  377. { EFFECT_WHITEBOARD, CAM_EFFECT_MODE_WHITEBOARD },
  378. { EFFECT_BLACKBOARD, CAM_EFFECT_MODE_BLACKBOARD },
  379. { EFFECT_AQUA, CAM_EFFECT_MODE_AQUA },
  380. { EFFECT_EMBOSS, CAM_EFFECT_MODE_EMBOSS },
  381. { EFFECT_SKETCH, CAM_EFFECT_MODE_SKETCH },
  382. { EFFECT_NEON, CAM_EFFECT_MODE_NEON }
  383. };
  384. const QCameraParameters::QCameraMap QCameraParameters::SCENE_MODES_MAP[] = {
  385. { SCENE_MODE_AUTO, CAM_SCENE_MODE_OFF },
  386. { SCENE_MODE_ACTION, CAM_SCENE_MODE_ACTION },
  387. { SCENE_MODE_PORTRAIT, CAM_SCENE_MODE_PORTRAIT },
  388. { SCENE_MODE_LANDSCAPE, CAM_SCENE_MODE_LANDSCAPE },
  389. { SCENE_MODE_NIGHT, CAM_SCENE_MODE_NIGHT },
  390. { SCENE_MODE_NIGHT_PORTRAIT, CAM_SCENE_MODE_NIGHT_PORTRAIT },
  391. { SCENE_MODE_THEATRE, CAM_SCENE_MODE_THEATRE },
  392. { SCENE_MODE_BEACH, CAM_SCENE_MODE_BEACH },
  393. { SCENE_MODE_SNOW, CAM_SCENE_MODE_SNOW },
  394. { SCENE_MODE_SUNSET, CAM_SCENE_MODE_SUNSET },
  395. { SCENE_MODE_STEADYPHOTO, CAM_SCENE_MODE_ANTISHAKE },
  396. { SCENE_MODE_FIREWORKS , CAM_SCENE_MODE_FIREWORKS },
  397. { SCENE_MODE_SPORTS , CAM_SCENE_MODE_SPORTS },
  398. { SCENE_MODE_PARTY, CAM_SCENE_MODE_PARTY },
  399. { SCENE_MODE_CANDLELIGHT, CAM_SCENE_MODE_CANDLELIGHT },
  400. { SCENE_MODE_ASD, CAM_SCENE_MODE_AUTO },
  401. { SCENE_MODE_BACKLIGHT, CAM_SCENE_MODE_BACKLIGHT },
  402. { SCENE_MODE_FLOWERS, CAM_SCENE_MODE_FLOWERS },
  403. { SCENE_MODE_AR, CAM_SCENE_MODE_AR },
  404. { SCENE_MODE_HDR, CAM_SCENE_MODE_OFF },
  405. };
  406. const QCameraParameters::QCameraMap QCameraParameters::FLASH_MODES_MAP[] = {
  407. { FLASH_MODE_OFF, CAM_FLASH_MODE_OFF },
  408. { FLASH_MODE_AUTO, CAM_FLASH_MODE_AUTO },
  409. { FLASH_MODE_ON, CAM_FLASH_MODE_ON },
  410. { FLASH_MODE_TORCH, CAM_FLASH_MODE_TORCH }
  411. };
  412. const QCameraParameters::QCameraMap QCameraParameters::FOCUS_ALGO_MAP[] = {
  413. { FOCUS_ALGO_AUTO, CAM_FOCUS_ALGO_AUTO },
  414. { FOCUS_ALGO_SPOT_METERING, CAM_FOCUS_ALGO_SPOT },
  415. { FOCUS_ALGO_CENTER_WEIGHTED, CAM_FOCUS_ALGO_CENTER_WEIGHTED },
  416. { FOCUS_ALGO_FRAME_AVERAGE, CAM_FOCUS_ALGO_AVERAGE }
  417. };
  418. const QCameraParameters::QCameraMap QCameraParameters::WHITE_BALANCE_MODES_MAP[] = {
  419. { WHITE_BALANCE_AUTO, CAM_WB_MODE_AUTO },
  420. { WHITE_BALANCE_INCANDESCENT, CAM_WB_MODE_INCANDESCENT },
  421. { WHITE_BALANCE_FLUORESCENT, CAM_WB_MODE_FLUORESCENT },
  422. { WHITE_BALANCE_WARM_FLUORESCENT,CAM_WB_MODE_WARM_FLUORESCENT},
  423. { WHITE_BALANCE_DAYLIGHT, CAM_WB_MODE_DAYLIGHT },
  424. { WHITE_BALANCE_CLOUDY_DAYLIGHT, CAM_WB_MODE_CLOUDY_DAYLIGHT },
  425. { WHITE_BALANCE_TWILIGHT, CAM_WB_MODE_TWILIGHT },
  426. { WHITE_BALANCE_SHADE, CAM_WB_MODE_SHADE }
  427. };
  428. const QCameraParameters::QCameraMap QCameraParameters::ANTIBANDING_MODES_MAP[] = {
  429. { ANTIBANDING_OFF, CAM_ANTIBANDING_MODE_OFF },
  430. { ANTIBANDING_50HZ, CAM_ANTIBANDING_MODE_50HZ },
  431. { ANTIBANDING_60HZ, CAM_ANTIBANDING_MODE_60HZ },
  432. { ANTIBANDING_AUTO, CAM_ANTIBANDING_MODE_AUTO }
  433. };
  434. const QCameraParameters::QCameraMap QCameraParameters::ISO_MODES_MAP[] = {
  435. { ISO_AUTO, CAM_ISO_MODE_AUTO },
  436. { ISO_HJR, CAM_ISO_MODE_DEBLUR },
  437. { ISO_100, CAM_ISO_MODE_100 },
  438. { ISO_200, CAM_ISO_MODE_200 },
  439. { ISO_400, CAM_ISO_MODE_400 },
  440. { ISO_800, CAM_ISO_MODE_800 },
  441. { ISO_1600, CAM_ISO_MODE_1600 }
  442. };
  443. const QCameraParameters::QCameraMap QCameraParameters::HFR_MODES_MAP[] = {
  444. { VIDEO_HFR_OFF, CAM_HFR_MODE_OFF },
  445. { VIDEO_HFR_2X, CAM_HFR_MODE_60FPS },
  446. { VIDEO_HFR_3X, CAM_HFR_MODE_90FPS },
  447. { VIDEO_HFR_4X, CAM_HFR_MODE_120FPS },
  448. { VIDEO_HFR_5X, CAM_HFR_MODE_150FPS }
  449. };
  450. const QCameraParameters::QCameraMap QCameraParameters::BRACKETING_MODES_MAP[] = {
  451. { AE_BRACKET_OFF, CAM_EXP_BRACKETING_OFF },
  452. { AE_BRACKET, CAM_EXP_BRACKETING_ON }
  453. };
  454. const QCameraParameters::QCameraMap QCameraParameters::ON_OFF_MODES_MAP[] = {
  455. { VALUE_OFF, 0 },
  456. { VALUE_ON, 1 }
  457. };
  458. const QCameraParameters::QCameraMap QCameraParameters::TOUCH_AF_AEC_MODES_MAP[] = {
  459. { QCameraParameters::TOUCH_AF_AEC_OFF, 0 },
  460. { QCameraParameters::TOUCH_AF_AEC_ON, 1 }
  461. };
  462. const QCameraParameters::QCameraMap QCameraParameters::ENABLE_DISABLE_MODES_MAP[] = {
  463. { VALUE_ENABLE, 1 },
  464. { VALUE_DISABLE, 0 }
  465. };
  466. const QCameraParameters::QCameraMap QCameraParameters::DENOISE_ON_OFF_MODES_MAP[] = {
  467. { DENOISE_OFF, 0 },
  468. { DENOISE_ON, 1 }
  469. };
  470. const QCameraParameters::QCameraMap QCameraParameters::TRUE_FALSE_MODES_MAP[] = {
  471. { VALUE_FALSE, 0},
  472. { VALUE_TRUE, 1}
  473. };
  474. const QCameraParameters::QCameraMap QCameraParameters::FLIP_MODES_MAP[] = {
  475. {FLIP_MODE_OFF, 0},
  476. {FLIP_MODE_V, FLIP_V},
  477. {FLIP_MODE_H, FLIP_H},
  478. {FLIP_MODE_VH, FLIP_V_H}
  479. };
  480. #define DEFAULT_CAMERA_AREA "(0, 0, 0, 0, 0)"
  481. #define DATA_PTR(MEM_OBJ,INDEX) MEM_OBJ->getPtr( INDEX )
  482. /*===========================================================================
  483. * FUNCTION : QCameraParameters
  484. *
  485. * DESCRIPTION: default constructor of QCameraParameters
  486. *
  487. * PARAMETERS : none
  488. *
  489. * RETURN : None
  490. *==========================================================================*/
  491. QCameraParameters::QCameraParameters()
  492. : CameraParameters(),
  493. m_pCapability(NULL),
  494. m_pCamOpsTbl(NULL),
  495. m_pParamHeap(NULL),
  496. m_pParamBuf(NULL),
  497. m_bZslMode(false),
  498. m_bZslMode_new(false),
  499. m_bRecordingHint(false),
  500. m_bRecordingHint_new(false),
  501. m_bHistogramEnabled(false),
  502. m_nFaceProcMask(0),
  503. m_bDebugFps(false),
  504. mFocusMode(CAM_FOCUS_MODE_MAX),
  505. mPreviewFormat(CAM_FORMAT_YUV_420_NV21),
  506. mPictureFormat(CAM_FORMAT_JPEG),
  507. m_bNeedRestart(false),
  508. m_bNoDisplayMode(false),
  509. m_bWNROn(false),
  510. m_bNeedLockCAF(false),
  511. m_bCAFLocked(false),
  512. m_bAFRunning(false),
  513. m_tempMap()
  514. {
  515. char value[PROPERTY_VALUE_MAX];
  516. // TODO: may move to parameter instead of sysprop
  517. property_get("persist.debug.sf.showfps", value, "0");
  518. m_bDebugFps = atoi(value) > 0 ? true : false;
  519. // For thermal mode, it should be set as system property
  520. // because system property applies to all applications, while
  521. // parameters only apply to specific app.
  522. property_get("persist.camera.thermal.mode", value, "fps");
  523. if (!strcmp(value, "frameskip")) {
  524. m_ThermalMode = QCAMERA_THERMAL_ADJUST_FRAMESKIP;
  525. } else {
  526. if (strcmp(value, "fps"))
  527. ALOGE("%s: Invalid camera thermal mode %s", __func__, value);
  528. m_ThermalMode = QCAMERA_THERMAL_ADJUST_FPS;
  529. }
  530. memset(&m_LiveSnapshotSize, 0, sizeof(m_LiveSnapshotSize));
  531. }
  532. /*===========================================================================
  533. * FUNCTION : QCameraParameters
  534. *
  535. * DESCRIPTION: constructor of QCameraParameters
  536. *
  537. * PARAMETERS :
  538. * @params : parameters in string
  539. *
  540. * RETURN : None
  541. *==========================================================================*/
  542. QCameraParameters::QCameraParameters(const String8 &params)
  543. : CameraParameters(params),
  544. m_pCapability(NULL),
  545. m_pCamOpsTbl(NULL),
  546. m_pParamHeap(NULL),
  547. m_pParamBuf(NULL),
  548. m_bZslMode(false),
  549. m_bZslMode_new(false),
  550. m_bRecordingHint(false),
  551. m_bRecordingHint_new(false),
  552. m_bHistogramEnabled(false),
  553. m_nFaceProcMask(0),
  554. m_bDebugFps(false),
  555. mFocusMode(CAM_FOCUS_MODE_MAX),
  556. mPreviewFormat(CAM_FORMAT_YUV_420_NV21),
  557. mPictureFormat(CAM_FORMAT_JPEG),
  558. m_bNeedRestart(false),
  559. m_bNoDisplayMode(false),
  560. m_bWNROn(false),
  561. m_bNeedLockCAF(false),
  562. m_bCAFLocked(false),
  563. m_bAFRunning(false),
  564. m_tempMap()
  565. {
  566. memset(&m_LiveSnapshotSize, 0, sizeof(m_LiveSnapshotSize));
  567. }
  568. /*===========================================================================
  569. * FUNCTION : ~QCameraParameters
  570. *
  571. * DESCRIPTION: deconstructor of QCameraParameters
  572. *
  573. * PARAMETERS : none
  574. *
  575. * RETURN : None
  576. *==========================================================================*/
  577. QCameraParameters::~QCameraParameters()
  578. {
  579. deinit();
  580. }
  581. /*===========================================================================
  582. * FUNCTION : createSizesString
  583. *
  584. * DESCRIPTION: create string obj contains array of dimensions
  585. *
  586. * PARAMETERS :
  587. * @sizes : array of dimensions
  588. * @len : size of dimension array
  589. *
  590. * RETURN : string obj
  591. *==========================================================================*/
  592. String8 QCameraParameters::createSizesString(const cam_dimension_t *sizes, int len)
  593. {
  594. String8 str;
  595. char buffer[32];
  596. if (len > 0) {
  597. snprintf(buffer, sizeof(buffer), "%dx%d", sizes[0].width, sizes[0].height);
  598. str.append(buffer);
  599. }
  600. for (int i = 1; i < len; i++) {
  601. snprintf(buffer, sizeof(buffer), ",%dx%d", sizes[i].width, sizes[i].height);
  602. str.append(buffer);
  603. }
  604. return str;
  605. }
  606. /*===========================================================================
  607. * FUNCTION : createValuesString
  608. *
  609. * DESCRIPTION: create string obj contains array of values from map when matched
  610. * from input values array
  611. *
  612. * PARAMETERS :
  613. * @values : array of values
  614. * @len : size of values array
  615. * @map : map contains the mapping between values and enums
  616. * @map_len : size of the map
  617. *
  618. * RETURN : string obj
  619. *==========================================================================*/
  620. String8 QCameraParameters::createValuesString(const int *values,
  621. int len,
  622. const QCameraMap* map,
  623. int map_len)
  624. {
  625. String8 str;
  626. int count = 0;
  627. for (int i = 0; i < len; i++ ) {
  628. for (int j = 0; j < map_len; j ++)
  629. if (map[j].val == values[i]) {
  630. if (NULL != map[j].desc) {
  631. if (count > 0) {
  632. str.append(",");
  633. }
  634. str.append(map[j].desc);
  635. count++;
  636. break; //loop j
  637. }
  638. }
  639. }
  640. return str;
  641. }
  642. /*===========================================================================
  643. * FUNCTION : createValuesStringFromMap
  644. *
  645. * DESCRIPTION: create string obj contains array of values directly from map
  646. *
  647. * PARAMETERS :
  648. * @map : map contains the mapping between values and enums
  649. * @map_len : size of the map
  650. *
  651. * RETURN : string obj
  652. *==========================================================================*/
  653. String8 QCameraParameters::createValuesStringFromMap(const QCameraMap* map,
  654. int map_len)
  655. {
  656. String8 str;
  657. for (int i = 0; i < map_len; i++) {
  658. if (NULL != map[i].desc) {
  659. if (i > 0) {
  660. str.append(",");
  661. }
  662. str.append(map[i].desc);
  663. }
  664. }
  665. return str;
  666. }
  667. /*===========================================================================
  668. * FUNCTION : createZoomRatioValuesString
  669. *
  670. * DESCRIPTION: create string obj contains array of zoom ratio values
  671. *
  672. * PARAMETERS :
  673. * @zoomRaios : array of zoom ratios
  674. * @length : size of the array
  675. *
  676. * RETURN : string obj
  677. *==========================================================================*/
  678. String8 QCameraParameters::createZoomRatioValuesString(int *zoomRatios, int length)
  679. {
  680. String8 str;
  681. char buffer[32] = {0};
  682. if(length > 0){
  683. snprintf(buffer, sizeof(buffer), "%d", zoomRatios[0]);
  684. str.append(buffer);
  685. }
  686. for (int i =1;i<length;i++){
  687. memset(buffer, 0, sizeof(buffer));
  688. snprintf(buffer, sizeof(buffer), ",%d", zoomRatios[i]);
  689. str.append(buffer);
  690. }
  691. return str;
  692. }
  693. /*===========================================================================
  694. * FUNCTION : createHfrValuesString
  695. *
  696. * DESCRIPTION: create string obj contains array of hfr values from map when
  697. * matched from input hfr values
  698. *
  699. * PARAMETERS :
  700. * @values : array of hfr info
  701. * @len : size of the array
  702. * @map : map of hfr string value and enum
  703. * map_len : size of map
  704. *
  705. * RETURN : string obj
  706. *==========================================================================*/
  707. String8 QCameraParameters::createHfrValuesString(
  708. const cam_hfr_info_t *values,
  709. int len,
  710. const QCameraMap* map,
  711. int map_len)
  712. {
  713. String8 str;
  714. int count = 0;
  715. for (int i = 0; i < len; i++ ) {
  716. for (int j = 0; j < map_len; j ++)
  717. if (map[j].val == (int)values[i].mode) {
  718. if (NULL != map[j].desc) {
  719. if (count > 0) {
  720. str.append(",");
  721. }
  722. str.append(map[j].desc);
  723. count++;
  724. break; //loop j
  725. }
  726. }
  727. }
  728. return str;
  729. }
  730. /*===========================================================================
  731. * FUNCTION : createHfrSizesString
  732. *
  733. * DESCRIPTION: create string obj contains array of hfr sizes
  734. *
  735. * PARAMETERS :
  736. * @values : array of hfr info
  737. * @len : size of the array
  738. *
  739. * RETURN : string obj
  740. *==========================================================================*/
  741. String8 QCameraParameters::createHfrSizesString(
  742. const cam_hfr_info_t *values,
  743. int len)
  744. {
  745. String8 str;
  746. char buffer[32];
  747. if (len > 0) {
  748. snprintf(buffer, sizeof(buffer), "%dx%d",
  749. values[0].dim.width, values[0].dim.height);
  750. str.append(buffer);
  751. }
  752. for (int i = 1; i < len; i++) {
  753. snprintf(buffer, sizeof(buffer), ",%dx%d",
  754. values[i].dim.width, values[i].dim.height);
  755. str.append(buffer);
  756. }
  757. return str;
  758. }
  759. /*===========================================================================
  760. * FUNCTION : compareFPSValues
  761. *
  762. * DESCRIPTION: helper function for fps sorting
  763. *
  764. * PARAMETERS :
  765. * @p1 : first array element
  766. * @p2 : second array element
  767. *
  768. * RETURN : -1 - left element is greater than right
  769. * 0 - elements are equals
  770. * 1 - left element is less than right
  771. *==========================================================================*/
  772. int QCameraParameters::compareFPSValues(const void *p1, const void *p2)
  773. {
  774. if ( *( (int *) p1) > *( (int *) p2) ) {
  775. return -1;
  776. } else if ( *( (int *) p1) < *( (int *) p2) ) {
  777. return 1;
  778. }
  779. return 0;
  780. }
  781. /*===========================================================================
  782. * FUNCTION : createFpsString
  783. *
  784. * DESCRIPTION: create string obj contains array of FPS rates
  785. *
  786. * PARAMETERS :
  787. * @fps : array of fps ranges
  788. * @len : size of the array
  789. *
  790. * RETURN : string obj
  791. *==========================================================================*/
  792. String8 QCameraParameters::createFpsString(const cam_fps_range_t *fps, int len)
  793. {
  794. String8 str;
  795. char buffer[32];
  796. int duplicate = INT_MAX;
  797. int *fpsValues = new int[len];
  798. for (int i = 0; i < len; i++ ) {
  799. fpsValues[i] = int(fps[i].max_fps);
  800. }
  801. qsort(fpsValues, len, sizeof(int), compareFPSValues);
  802. for (int i = 0; i < len; i++ ) {
  803. if ( duplicate != fpsValues[i] ) {
  804. snprintf(buffer, sizeof(buffer), "%d", fpsValues[i]);
  805. str.append(buffer);
  806. if (i < len-1) {
  807. str.append(",");
  808. }
  809. duplicate = fpsValues[i];
  810. }
  811. }
  812. delete [] fpsValues;
  813. return str;
  814. }
  815. /*===========================================================================
  816. * FUNCTION : createFpsRangeString
  817. *
  818. * DESCRIPTION: create string obj contains array of FPS ranges
  819. *
  820. * PARAMETERS :
  821. * @fps : array of fps ranges
  822. * @len : size of the array
  823. * @default_fps_index : reference to index of default fps range
  824. *
  825. * RETURN : string obj
  826. *==========================================================================*/
  827. String8 QCameraParameters::createFpsRangeString(const cam_fps_range_t* fps,
  828. int len,
  829. int &default_fps_index)
  830. {
  831. String8 str;
  832. char buffer[32];
  833. int max_range = 0;
  834. int min_fps, max_fps;
  835. if (len > 0) {
  836. min_fps = int(fps[0].min_fps * 1000);
  837. max_fps = int(fps[0].max_fps * 1000);
  838. max_range = max_fps - min_fps;
  839. default_fps_index = 0;
  840. snprintf(buffer, sizeof(buffer), "(%d,%d)", min_fps, max_fps);
  841. str.append(buffer);
  842. }
  843. for (int i = 1; i < len; i++) {
  844. min_fps = int(fps[i].min_fps * 1000);
  845. max_fps = int(fps[i].max_fps * 1000);
  846. if (max_range < (max_fps - min_fps)) {
  847. max_range = max_fps - min_fps;
  848. default_fps_index = i;
  849. }
  850. snprintf(buffer, sizeof(buffer), ",(%d,%d)", min_fps, max_fps);
  851. str.append(buffer);
  852. }
  853. return str;
  854. }
  855. /*===========================================================================
  856. * FUNCTION : lookupAttr
  857. *
  858. * DESCRIPTION: lookup a value by its name
  859. *
  860. * PARAMETERS :
  861. * @attr : map contains <name, value>
  862. * @len : size of the map
  863. * @name : name to be looked up
  864. *
  865. * RETURN : valid value if found
  866. * NAME_NOT_FOUND if not found
  867. *==========================================================================*/
  868. int QCameraParameters::lookupAttr(const QCameraMap arr[], int len, const char *name)
  869. {
  870. if (name) {
  871. for (int i = 0; i < len; i++) {
  872. if (!strcmp(arr[i].desc, name))
  873. return arr[i].val;
  874. }
  875. }
  876. return NAME_NOT_FOUND;
  877. }
  878. /*===========================================================================
  879. * FUNCTION : lookupNameByValue
  880. *
  881. * DESCRIPTION: lookup a name by its value
  882. *
  883. * PARAMETERS :
  884. * @attr : map contains <name, value>
  885. * @len : size of the map
  886. * @value : value to be looked up
  887. *
  888. * RETURN : name str or NULL if not found
  889. *==========================================================================*/
  890. const char *QCameraParameters::lookupNameByValue(const QCameraMap arr[], int len, int value)
  891. {
  892. for (int i = 0; i < len; i++) {
  893. if (arr[i].val == value) {
  894. return arr[i].desc;
  895. }
  896. }
  897. return NULL;
  898. }
  899. /*===========================================================================
  900. * FUNCTION : setPreviewSize
  901. *
  902. * DESCRIPTION: set preview size from user setting
  903. *
  904. * PARAMETERS :
  905. * @params : user setting parameters
  906. *
  907. * RETURN : int32_t type of status
  908. * NO_ERROR -- success
  909. * none-zero failure code
  910. *==========================================================================*/
  911. int32_t QCameraParameters::setPreviewSize(const QCameraParameters& params)
  912. {
  913. int width, height;
  914. params.getPreviewSize(&width, &height);
  915. ALOGV("Requested preview size %d x %d", width, height);
  916. // Validate the preview size
  917. for (size_t i = 0; i < m_pCapability->preview_sizes_tbl_cnt; ++i) {
  918. if (width == m_pCapability->preview_sizes_tbl[i].width
  919. && height == m_pCapability->preview_sizes_tbl[i].height) {
  920. // check if need to restart preview in case of preview size change
  921. int old_width, old_height;
  922. CameraParameters::getPreviewSize(&old_width, &old_height);
  923. if (width != old_width || height != old_height) {
  924. m_bNeedRestart = true;
  925. }
  926. // set the new value
  927. CameraParameters::setPreviewSize(width, height);
  928. return NO_ERROR;
  929. }
  930. }
  931. ALOGE("Invalid preview size requested: %dx%d", width, height);
  932. return BAD_VALUE;
  933. }
  934. /*===========================================================================
  935. * FUNCTION : setPictureSize
  936. *
  937. * DESCRIPTION: set picture size from user setting
  938. *
  939. * PARAMETERS :
  940. * @params : user setting parameters
  941. *
  942. * RETURN : int32_t type of status
  943. * NO_ERROR -- success
  944. * none-zero failure code
  945. *==========================================================================*/
  946. int32_t QCameraParameters::setPictureSize(const QCameraParameters& params)
  947. {
  948. int width, height;
  949. params.getPictureSize(&width, &height);
  950. ALOGV("Requested picture size %d x %d", width, height);
  951. // Validate the picture size
  952. for (size_t i = 0; i < m_pCapability->picture_sizes_tbl_cnt; ++i) {
  953. if (width == m_pCapability->picture_sizes_tbl[i].width
  954. && height == m_pCapability->picture_sizes_tbl[i].height) {
  955. // check if need to restart preview in case of picture size change
  956. int old_width, old_height;
  957. CameraParameters::getPictureSize(&old_width, &old_height);
  958. if ((m_bZslMode || m_bRecordingHint) &&
  959. (width != old_width || height != old_height)) {
  960. m_bNeedRestart = true;
  961. }
  962. // set the new value
  963. CameraParameters::setPictureSize(width, height);
  964. return NO_ERROR;
  965. }
  966. }
  967. ALOGE("Invalid picture size requested: %dx%d", width, height);
  968. return BAD_VALUE;
  969. }
  970. /*===========================================================================
  971. * FUNCTION : setVideoSize
  972. *
  973. * DESCRIPTION: set video size from user setting
  974. *
  975. * PARAMETERS :
  976. * @params : user setting parameters
  977. *
  978. * RETURN : int32_t type of status
  979. * NO_ERROR -- success
  980. * none-zero failure code
  981. *==========================================================================*/
  982. int32_t QCameraParameters::setVideoSize(const QCameraParameters& params)
  983. {
  984. const char *str= NULL;
  985. int width, height;
  986. str = params.get(KEY_VIDEO_SIZE);
  987. if(!str) {
  988. //If application didn't set this parameter string, use the values from
  989. //getPreviewSize() as video dimensions.
  990. params.getPreviewSize(&width, &height);
  991. AL

Large files files are truncated, but you can click here to view the full file