Home | History | Annotate | Download | only in HAL
      1 /* Copyright (c) 2015-2017, 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 
     30 #ifndef ANDROID_HARDWARE_QCAMERA_PARAMETERS_INTF_H
     31 #define ANDROID_HARDWARE_QCAMERA_PARAMETERS_INTF_H
     32 
     33 #include <utils/String8.h>
     34 #include <utils/Mutex.h>
     35 #include "cam_intf.h"
     36 #include "cam_types.h"
     37 #include "QCameraThermalAdapter.h"
     38 #include "QCameraFOVControl.h"
     39 
     40 extern "C" {
     41 #include <mm_camera_interface.h>
     42 #include <mm_jpeg_interface.h>
     43 }
     44 
     45 using namespace android;
     46 
     47 namespace qcamera {
     48 
     49 typedef cam_manual_capture_type QCameraManualCaptureModes;
     50 
     51 class QCameraAdjustFPS
     52 {
     53 public:
     54     virtual int recalcFPSRange(int &minFPS, int &maxFPS,
     55             const float &minVideoFPS, const float &maxVideoFPs,
     56             cam_fps_range_t &adjustedRange, bool bRecordingHint) = 0;
     57     virtual ~QCameraAdjustFPS() {}
     58 };
     59 
     60 class QCameraParameters;
     61 
     62 class QCameraParametersIntf
     63 {
     64 public:
     65 
     66     // member variables
     67     QCameraParametersIntf();
     68     ~QCameraParametersIntf();
     69 
     70     int32_t allocate(uint8_t bufCount = 1);
     71     int32_t init(cam_capability_t *capabilities,
     72                  mm_camera_vtbl_t *mmOps,
     73                  QCameraAdjustFPS *adjustFPS,
     74                  QCameraFOVControl *fovControl);
     75 
     76     void deinit();
     77     int32_t updateParameters(const String8& params, bool &needRestart);
     78     int32_t commitParameters();
     79 
     80     char* getParameters();
     81     void getPreviewFpsRange(int *min_fps, int *max_fps) const;
     82 #ifdef TARGET_TS_MAKEUP
     83     bool getTsMakeupInfo(int &whiteLevel, int &cleanLevel) const;
     84 #endif
     85 
     86     int getPreviewHalPixelFormat();
     87     int32_t getStreamRotation(cam_stream_type_t streamType,
     88             cam_pp_feature_config_t &featureConfig,
     89             cam_dimension_t &dim);
     90     int32_t getStreamFormat(cam_stream_type_t streamType,
     91             cam_format_t &format);
     92 
     93     int32_t getStreamSubFormat(
     94       cam_stream_type_t streamType, cam_sub_format_type_t &sub_format);
     95 
     96 
     97     int32_t getStreamDimension(cam_stream_type_t streamType,
     98             cam_dimension_t &dim, uint32_t cam_type = MM_CAMERA_TYPE_MAIN);
     99 
    100     void getThumbnailSize(int *width, int *height) const;
    101     uint8_t getZSLBurstInterval();
    102     uint8_t getZSLQueueDepth();
    103     uint8_t getZSLBackLookCount();
    104     uint8_t getMaxUnmatchedFramesInQueue();
    105     bool isZSLMode();
    106     bool isRdiMode();
    107     bool isSecureMode();
    108     cam_stream_type_t getSecureStreamType();
    109     bool isNoDisplayMode();
    110     bool isWNREnabled();
    111     bool isTNRSnapshotEnabled();
    112     int32_t getCDSMode();
    113     bool isLTMForSeeMoreEnabled();
    114     bool isHfrMode();
    115     void getHfrFps(cam_fps_range_t &pFpsRange);
    116     uint8_t getNumOfSnapshots();
    117     uint8_t getNumOfRetroSnapshots();
    118     uint8_t getNumOfExtraHDRInBufsIfNeeded();
    119     uint8_t getNumOfExtraHDROutBufsIfNeeded();
    120 
    121     bool getRecordingHintValue();
    122     uint32_t getJpegQuality();
    123     uint32_t getRotation();
    124     uint32_t getDeviceRotation();
    125     uint32_t getJpegExifRotation();
    126     bool useJpegExifRotation();
    127     int32_t getEffectValue();
    128     bool isInstantAECEnabled();
    129     bool isInstantCaptureEnabled();
    130     uint8_t getAecFrameBoundValue();
    131     uint8_t getAecSkipDisplayFrameBound();
    132 
    133     int32_t getExifDateTime(String8 &dateTime, String8 &subsecTime);
    134     int32_t getExifFocalLength(rat_t *focalLenght);
    135     uint16_t getExifIsoSpeed();
    136     int32_t getExifGpsProcessingMethod(char *gpsProcessingMethod,
    137             uint32_t &count);
    138     int32_t getExifLatitude(rat_t *latitude, char *latRef);
    139     int32_t getExifLongitude(rat_t *longitude, char *lonRef);
    140     int32_t getExifAltitude(rat_t *altitude, char *altRef);
    141     int32_t getExifGpsDateTimeStamp(char *gpsDateStamp,
    142             uint32_t bufLen, rat_t *gpsTimeStamp);
    143     bool isVideoBuffersCached();
    144     int32_t updateFocusDistances(cam_focus_distances_info_t *focusDistances);
    145 
    146     bool isAEBracketEnabled();
    147     int32_t setAEBracketing();
    148     bool isFpsDebugEnabled();
    149     bool isHistogramEnabled();
    150     bool isSceneSelectionEnabled();
    151     bool isSmallJpegSizeEnabled();
    152     int32_t setSelectedScene(cam_scene_mode_type scene);
    153     cam_scene_mode_type getSelectedScene();
    154     bool isFaceDetectionEnabled();
    155     int32_t setFaceDetectionOption(bool enabled);
    156     int32_t setHistogram(bool enabled);
    157     int32_t setFaceDetection(bool enabled, bool initCommit);
    158     int32_t setFrameSkip(enum msm_vfe_frame_skip_pattern pattern);
    159     qcamera_thermal_mode getThermalMode();
    160     int32_t updateRecordingHintValue(int32_t value);
    161     int32_t setHDRAEBracket(cam_exp_bracketing_t hdrBracket);
    162     bool isHDREnabled();
    163     bool isAutoHDREnabled();
    164     int32_t stopAEBracket();
    165     int32_t updateRAW(cam_dimension_t max_dim);
    166     bool isDISEnabled();
    167     bool isAVTimerEnabled();
    168     int32_t setISType();
    169     cam_is_type_t getVideoISType();
    170     cam_is_type_t getPreviewISType();
    171     uint8_t getMobicatMask();
    172 
    173     cam_focus_mode_type getFocusMode() const;
    174     int32_t setNumOfSnapshot();
    175     int32_t adjustPreviewFpsRange(cam_fps_range_t *fpsRange);
    176     bool isJpegPictureFormat();
    177     bool isNV16PictureFormat();
    178     bool isNV21PictureFormat();
    179     cam_denoise_process_type_t getDenoiseProcessPlate(cam_intf_parm_type_t type);
    180     int32_t getMaxPicSize(cam_dimension_t &dim);
    181     int getFlipMode(cam_stream_type_t streamType);
    182     bool isSnapshotFDNeeded();
    183 
    184     bool isHDR1xFrameEnabled();
    185     bool isYUVFrameInfoNeeded();
    186     const char*getFrameFmtString(cam_format_t fmt);
    187     bool isHDR1xExtraBufferNeeded();
    188     bool isHDROutputCropEnabled();
    189 
    190     bool isPreviewFlipChanged();
    191     bool isVideoFlipChanged();
    192     bool isSnapshotFlipChanged();
    193     bool isZoomChanged();
    194     void setHDRSceneEnable(bool bflag);
    195     int32_t updateAWBParams(cam_awb_params_t &awb_params);
    196 
    197     const char *getASDStateString(cam_auto_scene_t scene);
    198     bool isHDRThumbnailProcessNeeded();
    199     void setMinPpMask(cam_feature_mask_t min_pp_mask);
    200     bool setStreamConfigure(bool isCapture,
    201             bool previewAsPostview, bool resetConfig);
    202     int32_t addOnlineRotation(uint32_t rotation, uint32_t streamId,
    203             int32_t device_rotation);
    204     uint8_t getNumOfExtraBuffersForImageProc();
    205     uint8_t getNumOfExtraBuffersForVideo();
    206     uint8_t getNumOfExtraBuffersForPreview();
    207     uint32_t getExifBufIndex(uint32_t captureIndex);
    208     bool needThumbnailReprocess(cam_feature_mask_t *pFeatureMask);
    209     bool isUbiFocusEnabled();
    210     bool isChromaFlashEnabled();
    211     bool isHighQualityNoiseReductionMode();
    212     bool isTruePortraitEnabled();
    213     size_t getTPMaxMetaSize();
    214     bool isSeeMoreEnabled();
    215     bool isStillMoreEnabled();
    216     bool isOptiZoomEnabled();
    217 
    218     int32_t commitAFBracket(cam_af_bracketing_t afBracket);
    219     int32_t set3ALock(bool lock3A);
    220     int32_t setAndCommitZoom(int zoom_level);
    221     uint8_t getBurstCountForAdvancedCapture();
    222     uint32_t getNumberInBufsForSingleShot();
    223     uint32_t getNumberOutBufsForSingleShot();
    224     int32_t setLongshotEnable(bool enable);
    225     String8 dump();
    226     bool isUbiRefocus();
    227     uint32_t getRefocusMaxMetaSize();
    228     uint8_t getRefocusOutputCount();
    229     bool generateThumbFromMain();
    230     void updateCurrentFocusPosition(cam_focus_pos_info_t &cur_pos_info);
    231     void updateAEInfo(cam_3a_params_t &ae_params);
    232     bool isDisplayFrameNeeded();
    233     bool isAdvCamFeaturesEnabled();
    234     int32_t setAecLock(const char *aecStr);
    235     int32_t updateDebugLevel();
    236     bool is4k2kVideoResolution();
    237     bool isUBWCEnabled();
    238 
    239     int getBrightness();
    240     int32_t updateOisValue(bool oisValue);
    241     int32_t setIntEvent(cam_int_evt_params_t params);
    242     bool getofflineRAW();
    243     bool getQuadraCfa();
    244     int32_t updatePpFeatureMask(cam_stream_type_t stream_type);
    245     int32_t getStreamPpMask(cam_stream_type_t stream_type, cam_feature_mask_t &pp_mask);
    246     int32_t getSharpness();
    247     int32_t getEffect();
    248     int32_t updateFlashMode(cam_flash_mode_t flash_mode);
    249     int32_t configureAEBracketing(cam_capture_frame_config_t &frame_config);
    250     int32_t configureHDRBracketing(cam_capture_frame_config_t &frame_config);
    251     int32_t configFrameCapture(bool commitSettings);
    252     int32_t resetFrameCapture(bool commitSettings, bool lowLightEnabled);
    253     cam_still_more_t getStillMoreSettings();
    254     void setStillMoreSettings(cam_still_more_t stillmore_config);
    255     cam_still_more_t getStillMoreCapability();
    256     cam_dyn_img_data_t getDynamicImgData();
    257     void setDynamicImgData(cam_dyn_img_data_t d);
    258 
    259     int32_t getParmZoomLevel();
    260     int8_t getReprocCount();
    261     int8_t getCurPPCount();
    262     void setReprocCount();
    263     bool isPostProcScaling();
    264     bool isLLNoiseEnabled();
    265     void setCurPPCount(int8_t count);
    266     int32_t setQuadraCfaMode(uint32_t value, bool initCommit);
    267     int32_t setToneMapMode(uint32_t value, bool initCommit);
    268     void setTintless(bool enable);
    269     uint8_t getLongshotStages();
    270     int8_t getBufBatchCount();
    271     int8_t getVideoBatchSize();
    272 
    273     int32_t setManualCaptureMode(
    274             QCameraManualCaptureModes value = CAM_MANUAL_CAPTURE_TYPE_OFF);
    275     QCameraManualCaptureModes getManualCaptureMode();
    276     int64_t getExposureTime();
    277 
    278     cam_capture_frame_config_t getCaptureFrameConfig();
    279     void setJpegRotation(int rotation);
    280     uint32_t getJpegRotation();
    281 
    282     void setLowLightLevel(cam_low_light_mode_t value);
    283     cam_low_light_mode_t getLowLightLevel();
    284     bool getLowLightCapture();
    285     bool isLinkPreviewForLiveShot();
    286 
    287     /* Dual camera specific */
    288     bool getDcrf();
    289     int32_t setRelatedCamSyncInfo(
    290             cam_sync_related_sensors_event_info_t* info);
    291     const cam_sync_related_sensors_event_info_t*
    292             getRelatedCamSyncInfo(void);
    293     int32_t setFrameSyncEnabled(bool enable);
    294     bool isFrameSyncEnabled(void);
    295     int32_t getRelatedCamCalibration(
    296             cam_related_system_calibration_data_t* calib);
    297     int32_t bundleRelatedCameras(bool sync);
    298     uint8_t fdModeInVideo();
    299     bool isOEMFeatEnabled();
    300     uint8_t isOEMFeatFrameSkipEnabled();
    301 
    302     int32_t setZslMode(bool value);
    303     int32_t updateZSLModeValue(bool value);
    304 
    305     bool isReprocScaleEnabled();
    306     bool isUnderReprocScaling();
    307     int32_t getPicSizeFromAPK(int &width, int &height);
    308 
    309     int32_t checkFeatureConcurrency();
    310     int32_t setInstantAEC(uint8_t enable, bool initCommit);
    311 
    312     int32_t getAnalysisInfo(
    313         bool fdVideoEnabled,
    314         cam_feature_mask_t featureMask,
    315         cam_analysis_info_t *pAnalysisInfo);
    316     int32_t updateDtVc(int32_t *dt, int32_t *vc);
    317     int32_t SetDualCamera(bool value);
    318     int32_t setCameraControls(int32_t controls);
    319     int32_t setSwitchCamera(uint32_t camMaster);
    320     int32_t setDeferCamera(cam_dual_camera_defer_cmd_t type);
    321     void setBundledSnapshot(bool value);
    322     int32_t getDualLedCalibration();
    323     bool isDCmAsymmetricSnapMode();
    324 private:
    325     QCameraParameters *mImpl;
    326     mutable Mutex mLock;
    327 };
    328 
    329 }; // namespace qcamera
    330 
    331 #endif
    332