aboutsummaryrefslogtreecommitdiff
path: root/camera/QCamera2/HAL3/QCamera3HWI.h
diff options
context:
space:
mode:
Diffstat (limited to 'camera/QCamera2/HAL3/QCamera3HWI.h')
-rw-r--r--camera/QCamera2/HAL3/QCamera3HWI.h536
1 files changed, 536 insertions, 0 deletions
diff --git a/camera/QCamera2/HAL3/QCamera3HWI.h b/camera/QCamera2/HAL3/QCamera3HWI.h
new file mode 100644
index 0000000..1bcf23a
--- /dev/null
+++ b/camera/QCamera2/HAL3/QCamera3HWI.h
@@ -0,0 +1,536 @@
+/* Copyright (c) 2012-2016, The Linux Foundation. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are
+* met:
+* * Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+* * Redistributions in binary form must reproduce the above
+* copyright notice, this list of conditions and the following
+* disclaimer in the documentation and/or other materials provided
+* with the distribution.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+*/
+
+#ifndef __QCAMERA3HARDWAREINTERFACE_H__
+#define __QCAMERA3HARDWAREINTERFACE_H__
+
+// System dependencies
+#include <camera/CameraMetadata.h>
+#include <pthread.h>
+#include <utils/KeyedVector.h>
+#include <utils/List.h>
+
+// Camera dependencies
+#include "camera3.h"
+#include "QCamera3Channel.h"
+#include "QCamera3CropRegionMapper.h"
+#include "QCamera3HALHeader.h"
+#include "QCamera3Mem.h"
+#include "QCameraPerf.h"
+#include "QCameraCommon.h"
+
+extern "C" {
+#include "mm_camera_interface.h"
+#include "mm_jpeg_interface.h"
+}
+
+using namespace android;
+
+namespace qcamera {
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+/* Time related macros */
+typedef int64_t nsecs_t;
+#define NSEC_PER_SEC 1000000000LLU
+#define NSEC_PER_USEC 1000LLU
+#define NSEC_PER_33MSEC 33000000LLU
+
+typedef enum {
+ SET_ENABLE,
+ SET_CONTROLENABLE,
+ SET_RELOAD_CHROMATIX,
+ SET_STATUS,
+} optype_t;
+
+#define MODULE_ALL 0
+
+extern volatile uint32_t gCamHal3LogLevel;
+
+class QCamera3MetadataChannel;
+class QCamera3PicChannel;
+class QCamera3HeapMemory;
+class QCamera3Exif;
+
+typedef struct {
+ camera3_stream_t *stream;
+ camera3_stream_buffer_set_t buffer_set;
+ stream_status_t status;
+ int registered;
+ QCamera3ProcessingChannel *channel;
+} stream_info_t;
+
+typedef struct {
+ // Stream handle
+ camera3_stream_t *stream;
+ // Buffer handle
+ buffer_handle_t *buffer;
+} PendingBufferInfo;
+
+typedef struct {
+ // Frame number corresponding to request
+ uint32_t frame_number;
+ // Time when request queued into system
+ nsecs_t timestamp;
+ List<PendingBufferInfo> mPendingBufferList;
+} PendingBuffersInRequest;
+
+class PendingBuffersMap {
+public:
+ // Number of outstanding buffers at flush
+ uint32_t numPendingBufsAtFlush;
+ // List of pending buffers per request
+ List<PendingBuffersInRequest> mPendingBuffersInRequest;
+ uint32_t get_num_overall_buffers();
+ void removeBuf(buffer_handle_t *buffer);
+};
+
+
+class QCamera3HardwareInterface {
+public:
+ /* static variable and functions accessed by camera service */
+ static camera3_device_ops_t mCameraOps;
+ //Id of each session in bundle/link
+ static uint32_t sessionId[MM_CAMERA_MAX_NUM_SENSORS];
+ static int initialize(const struct camera3_device *,
+ const camera3_callback_ops_t *callback_ops);
+ static int configure_streams(const struct camera3_device *,
+ camera3_stream_configuration_t *stream_list);
+ static const camera_metadata_t* construct_default_request_settings(
+ const struct camera3_device *, int type);
+ static int process_capture_request(const struct camera3_device *,
+ camera3_capture_request_t *request);
+
+ static void dump(const struct camera3_device *, int fd);
+ static int flush(const struct camera3_device *);
+ static int close_camera_device(struct hw_device_t* device);
+
+public:
+ QCamera3HardwareInterface(uint32_t cameraId,
+ const camera_module_callbacks_t *callbacks);
+ virtual ~QCamera3HardwareInterface();
+ static void camEvtHandle(uint32_t camera_handle, mm_camera_event_t *evt,
+ void *user_data);
+ int openCamera(struct hw_device_t **hw_device);
+ camera_metadata_t* translateCapabilityToMetadata(int type);
+
+ static int getCamInfo(uint32_t cameraId, struct camera_info *info);
+ static int initCapabilities(uint32_t cameraId);
+ static int initStaticMetadata(uint32_t cameraId);
+ static void makeTable(cam_dimension_t *dimTable, size_t size,
+ size_t max_size, int32_t *sizeTable);
+ static void makeFPSTable(cam_fps_range_t *fpsTable, size_t size,
+ size_t max_size, int32_t *fpsRangesTable);
+ static void makeOverridesList(cam_scene_mode_overrides_t *overridesTable,
+ size_t size, size_t max_size, uint8_t *overridesList,
+ uint8_t *supported_indexes, uint32_t camera_id);
+ static size_t filterJpegSizes(int32_t *jpegSizes, int32_t *processedSizes,
+ size_t processedSizesCnt, size_t maxCount, cam_rect_t active_array_size,
+ uint8_t downscale_factor);
+ static void convertToRegions(cam_rect_t rect, int32_t* region, int weight);
+ static void convertFromRegions(cam_area_t &roi, const camera_metadata_t *settings,
+ uint32_t tag);
+ static bool resetIfNeededROI(cam_area_t* roi, const cam_crop_region_t* scalerCropRegion);
+ static void convertLandmarks(cam_face_landmarks_info_t face, int32_t* landmarks);
+ static int32_t getSensorSensitivity(int32_t iso_mode);
+
+ double computeNoiseModelEntryS(int32_t sensitivity);
+ double computeNoiseModelEntryO(int32_t sensitivity);
+
+ static void captureResultCb(mm_camera_super_buf_t *metadata,
+ camera3_stream_buffer_t *buffer, uint32_t frame_number,
+ bool isInputBuffer, void *userdata);
+
+ int initialize(const camera3_callback_ops_t *callback_ops);
+ int configureStreams(camera3_stream_configuration_t *stream_list);
+ int configureStreamsPerfLocked(camera3_stream_configuration_t *stream_list);
+ int processCaptureRequest(camera3_capture_request_t *request);
+ void dump(int fd);
+ int flushPerf();
+
+ int setFrameParameters(camera3_capture_request_t *request,
+ cam_stream_ID_t streamID, int blob_request, uint32_t snapshotStreamId);
+ int32_t setReprocParameters(camera3_capture_request_t *request,
+ metadata_buffer_t *reprocParam, uint32_t snapshotStreamId);
+ int translateToHalMetadata(const camera3_capture_request_t *request,
+ metadata_buffer_t *parm, uint32_t snapshotStreamId);
+ camera_metadata_t* translateCbUrgentMetadataToResultMetadata (
+ metadata_buffer_t *metadata);
+ camera_metadata_t* translateFromHalMetadata(metadata_buffer_t *metadata,
+ nsecs_t timestamp, int32_t request_id,
+ const CameraMetadata& jpegMetadata, uint8_t pipeline_depth,
+ uint8_t capture_intent, bool pprocDone, uint8_t fwk_cacMode);
+ camera_metadata_t* saveRequestSettings(const CameraMetadata& jpegMetadata,
+ camera3_capture_request_t *request);
+ int initParameters();
+ void deinitParameters();
+ QCamera3ReprocessChannel *addOfflineReprocChannel(const reprocess_config_t &config,
+ QCamera3ProcessingChannel *inputChHandle);
+ bool needRotationReprocess();
+ bool needJpegExifRotation();
+ bool needReprocess(cam_feature_mask_t postprocess_mask);
+ bool needJpegRotation();
+ cam_denoise_process_type_t getWaveletDenoiseProcessPlate();
+ cam_denoise_process_type_t getTemporalDenoiseProcessPlate();
+
+ void captureResultCb(mm_camera_super_buf_t *metadata,
+ camera3_stream_buffer_t *buffer, uint32_t frame_number,
+ bool isInputBuffer);
+ cam_dimension_t calcMaxJpegDim();
+ bool needOnlineRotation();
+ uint32_t getJpegQuality();
+ QCamera3Exif *getExifData();
+ mm_jpeg_exif_params_t get3AExifParams();
+ uint8_t getMobicatMask();
+ static void getFlashInfo(const int cameraId,
+ bool& hasFlash,
+ char (&flashNode)[QCAMERA_MAX_FILEPATH_LENGTH]);
+ const char *getEepromVersionInfo();
+ const uint32_t *getLdafCalib();
+ void get3AVersion(cam_q3a_version_t &swVersion);
+
+ // Get dual camera related info
+ bool isDeviceLinked() {return mIsDeviceLinked;}
+ bool isMainCamera() {return mIsMainCamera;}
+ uint32_t getSensorMountAngle();
+ const cam_related_system_calibration_data_t *getRelatedCalibrationData();
+
+ template <typename fwkType, typename halType> struct QCameraMap {
+ fwkType fwk_name;
+ halType hal_name;
+ };
+
+ typedef struct {
+ const char *const desc;
+ cam_cds_mode_type_t val;
+ } QCameraPropMap;
+
+
+private:
+
+ // State transition conditions:
+ // "\" means not applicable
+ // "x" means not valid
+ // +------------+----------+----------+-------------+------------+---------+-------+--------+
+ // | | CLOSED | OPENED | INITIALIZED | CONFIGURED | STARTED | ERROR | DEINIT |
+ // +------------+----------+----------+-------------+------------+---------+-------+--------+
+ // | CLOSED | \ | open | x | x | x | x | x |
+ // +------------+----------+----------+-------------+------------+---------+-------+--------+
+ // | OPENED | close | \ | initialize | x | x | error | x |
+ // +------------+----------+----------+-------------+------------+---------+-------+--------+
+ // |INITIALIZED | close | x | \ | configure | x | error | x |
+ // +------------+----------+----------+-------------+------------+---------+-------+--------+
+ // | CONFIGURED | close | x | x | configure | request | error | x |
+ // +------------+----------+----------+-------------+------------+---------+-------+--------+
+ // | STARTED | close | x | x | configure | \ | error | x |
+ // +------------+----------+----------+-------------+------------+---------+-------+--------+
+ // | ERROR | close | x | x | x | x | \ | any |
+ // +------------+----------+----------+-------------+------------+---------+-------+--------+
+ // | DEINIT | close | x | x | x | x | x | \ |
+ // +------------+----------+----------+-------------+------------+---------+-------+--------+
+
+ typedef enum {
+ CLOSED,
+ OPENED,
+ INITIALIZED,
+ CONFIGURED,
+ STARTED,
+ ERROR,
+ DEINIT
+ } State;
+
+ int openCamera();
+ int closeCamera();
+ int flush(bool restartChannels);
+ static size_t calcMaxJpegSize(uint32_t camera_id);
+ cam_dimension_t getMaxRawSize(uint32_t camera_id);
+ static void addStreamConfig(Vector<int32_t> &available_stream_configs,
+ int32_t scalar_format, const cam_dimension_t &dim,
+ int32_t config_type);
+
+ int validateCaptureRequest(camera3_capture_request_t *request);
+ int validateStreamDimensions(camera3_stream_configuration_t *streamList);
+ int validateStreamRotations(camera3_stream_configuration_t *streamList);
+ void deriveMinFrameDuration();
+ void handleBuffersDuringFlushLock(camera3_stream_buffer_t *buffer);
+ int32_t handlePendingReprocResults(uint32_t frame_number);
+ int64_t getMinFrameDuration(const camera3_capture_request_t *request);
+ void handleMetadataWithLock(mm_camera_super_buf_t *metadata_buf,
+ bool free_and_bufdone_meta_buf);
+ void handleBatchMetadata(mm_camera_super_buf_t *metadata_buf,
+ bool free_and_bufdone_meta_buf);
+ void handleBufferWithLock(camera3_stream_buffer_t *buffer,
+ uint32_t frame_number);
+ void handleInputBufferWithLock(uint32_t frame_number);
+ void unblockRequestIfNecessary();
+ void dumpMetadataToFile(tuning_params_t &meta, uint32_t &dumpFrameCount,
+ bool enabled, const char *type, uint32_t frameNumber);
+ static void getLogLevel();
+
+ void cleanAndSortStreamInfo();
+ void extractJpegMetadata(CameraMetadata& jpegMetadata,
+ const camera3_capture_request_t *request);
+
+ bool isSupportChannelNeeded(camera3_stream_configuration_t *streamList,
+ cam_stream_size_info_t stream_config_info);
+ int32_t setMobicat();
+
+ int32_t getSensorOutputSize(cam_dimension_t &sensor_dim);
+ int32_t setHalFpsRange(const CameraMetadata &settings,
+ metadata_buffer_t *hal_metadata);
+ int32_t extractSceneMode(const CameraMetadata &frame_settings, uint8_t metaMode,
+ metadata_buffer_t *hal_metadata);
+ int32_t numOfSizesOnEncoder(const camera3_stream_configuration_t *streamList,
+ const cam_dimension_t &maxViewfinderSize);
+
+ void addToPPFeatureMask(int stream_format, uint32_t stream_idx);
+ void updateFpsInPreviewBuffer(metadata_buffer_t *metadata, uint32_t frame_number);
+
+ void enablePowerHint();
+ void disablePowerHint();
+ int32_t dynamicUpdateMetaStreamInfo();
+ int32_t startAllChannels();
+ int32_t stopAllChannels();
+ int32_t notifyErrorForPendingRequests();
+ void notifyError(uint32_t frameNumber,
+ camera3_error_msg_code_t errorCode);
+ int32_t getReprocessibleOutputStreamId(uint32_t &id);
+ int32_t handleCameraDeviceError();
+
+ bool isOnEncoder(const cam_dimension_t max_viewfinder_size,
+ uint32_t width, uint32_t height);
+ void hdrPlusPerfLock(mm_camera_super_buf_t *metadata_buf);
+
+ static bool supportBurstCapture(uint32_t cameraId);
+ int32_t setBundleInfo();
+
+ static void setPAAFSupport(cam_feature_mask_t& feature_mask,
+ cam_stream_type_t stream_type,
+ cam_color_filter_arrangement_t filter_arrangement);
+
+ camera3_device_t mCameraDevice;
+ uint32_t mCameraId;
+ mm_camera_vtbl_t *mCameraHandle;
+ bool mCameraInitialized;
+ camera_metadata_t *mDefaultMetadata[CAMERA3_TEMPLATE_COUNT];
+ const camera3_callback_ops_t *mCallbackOps;
+
+ QCamera3MetadataChannel *mMetadataChannel;
+ QCamera3PicChannel *mPictureChannel;
+ QCamera3RawChannel *mRawChannel;
+ QCamera3SupportChannel *mSupportChannel;
+ QCamera3SupportChannel *mAnalysisChannel;
+ QCamera3RawDumpChannel *mRawDumpChannel;
+ QCamera3RegularChannel *mDummyBatchChannel;
+ QCameraPerfLock m_perfLock;
+ QCameraCommon mCommon;
+
+ uint32_t mChannelHandle;
+
+ void saveExifParams(metadata_buffer_t *metadata);
+ mm_jpeg_exif_params_t mExifParams;
+
+ //First request yet to be processed after configureStreams
+ bool mFirstConfiguration;
+ bool mFlush;
+ bool mFlushPerf;
+ bool mEnableRawDump;
+ QCamera3HeapMemory *mParamHeap;
+ metadata_buffer_t* mParameters;
+ metadata_buffer_t* mPrevParameters;
+ CameraMetadata mCurJpegMeta;
+ bool m_bIsVideo;
+ bool m_bIs4KVideo;
+ bool m_bEisSupportedSize;
+ bool m_bEisEnable;
+ typedef struct {
+ cam_dimension_t dim;
+ int format;
+ uint32_t usage;
+ } InputStreamInfo;
+
+ InputStreamInfo mInputStreamInfo;
+ uint8_t m_MobicatMask;
+ uint8_t m_bTnrEnabled;
+ int8_t mSupportedFaceDetectMode;
+ uint8_t m_bTnrPreview;
+ uint8_t m_bTnrVideo;
+
+ /* Data structure to store pending request */
+ typedef struct {
+ camera3_stream_t *stream;
+ camera3_stream_buffer_t *buffer;
+ // metadata needs to be consumed by the corresponding stream
+ // in order to generate the buffer.
+ bool need_metadata;
+ } RequestedBufferInfo;
+ typedef struct {
+ uint32_t frame_number;
+ uint32_t num_buffers;
+ int32_t request_id;
+ List<RequestedBufferInfo> buffers;
+ int blob_request;
+ uint8_t bUrgentReceived;
+ nsecs_t timestamp;
+ camera3_stream_buffer_t *input_buffer;
+ const camera_metadata_t *settings;
+ CameraMetadata jpegMetadata;
+ uint8_t pipeline_depth;
+ uint32_t partial_result_cnt;
+ uint8_t capture_intent;
+ uint8_t fwkCacMode;
+ bool shutter_notified;
+ } PendingRequestInfo;
+ typedef struct {
+ uint32_t frame_number;
+ uint32_t stream_ID;
+ } PendingFrameDropInfo;
+
+ typedef struct {
+ camera3_notify_msg_t notify_msg;
+ camera3_stream_buffer_t buffer;
+ uint32_t frame_number;
+ } PendingReprocessResult;
+
+ typedef KeyedVector<uint32_t, Vector<PendingBufferInfo> > FlushMap;
+ typedef List<QCamera3HardwareInterface::PendingRequestInfo>::iterator
+ pendingRequestIterator;
+ typedef List<QCamera3HardwareInterface::RequestedBufferInfo>::iterator
+ pendingBufferIterator;
+
+ List<PendingReprocessResult> mPendingReprocessResultList;
+ List<PendingRequestInfo> mPendingRequestsList;
+ List<PendingFrameDropInfo> mPendingFrameDropList;
+ /* Use last frame number of the batch as key and first frame number of the
+ * batch as value for that key */
+ KeyedVector<uint32_t, uint32_t> mPendingBatchMap;
+
+ PendingBuffersMap mPendingBuffersMap;
+ pthread_cond_t mRequestCond;
+ uint32_t mPendingLiveRequest;
+ bool mWokenUpByDaemon;
+ int32_t mCurrentRequestId;
+ cam_stream_size_info_t mStreamConfigInfo;
+
+ //mutex for serialized access to camera3_device_ops_t functions
+ pthread_mutex_t mMutex;
+
+ //condition used to signal flush after buffers have returned
+ pthread_cond_t mBuffersCond;
+
+ List<stream_info_t*> mStreamInfo;
+
+ int64_t mMinProcessedFrameDuration;
+ int64_t mMinJpegFrameDuration;
+ int64_t mMinRawFrameDuration;
+
+ uint32_t mMetaFrameCount;
+ bool mUpdateDebugLevel;
+ const camera_module_callbacks_t *mCallbacks;
+
+ uint8_t mCaptureIntent;
+ uint8_t mCacMode;
+ metadata_buffer_t mReprocMeta; //scratch meta buffer
+ /* 0: Not batch, non-zero: Number of image buffers in a batch */
+ uint8_t mBatchSize;
+ // Used only in batch mode
+ uint8_t mToBeQueuedVidBufs;
+ // Fixed video fps
+ float mHFRVideoFps;
+ uint8_t mOpMode;
+ uint32_t mFirstFrameNumberInBatch;
+ camera3_stream_t mDummyBatchStream;
+ bool mNeedSensorRestart;
+
+ /* sensor output size with current stream configuration */
+ QCamera3CropRegionMapper mCropRegionMapper;
+
+ /* Ldaf calibration data */
+ bool mLdafCalibExist;
+ uint32_t mLdafCalib[2];
+ bool mPowerHintEnabled;
+ int32_t mLastCustIntentFrmNum;
+
+ static const QCameraMap<camera_metadata_enum_android_control_effect_mode_t,
+ cam_effect_mode_type> EFFECT_MODES_MAP[];
+ static const QCameraMap<camera_metadata_enum_android_control_awb_mode_t,
+ cam_wb_mode_type> WHITE_BALANCE_MODES_MAP[];
+ static const QCameraMap<camera_metadata_enum_android_control_scene_mode_t,
+ cam_scene_mode_type> SCENE_MODES_MAP[];
+ static const QCameraMap<camera_metadata_enum_android_control_af_mode_t,
+ cam_focus_mode_type> FOCUS_MODES_MAP[];
+ static const QCameraMap<camera_metadata_enum_android_color_correction_aberration_mode_t,
+ cam_aberration_mode_t> COLOR_ABERRATION_MAP[];
+ static const QCameraMap<camera_metadata_enum_android_control_ae_antibanding_mode_t,
+ cam_antibanding_mode_type> ANTIBANDING_MODES_MAP[];
+ static const QCameraMap<camera_metadata_enum_android_lens_state_t,
+ cam_af_lens_state_t> LENS_STATE_MAP[];
+ static const QCameraMap<camera_metadata_enum_android_control_ae_mode_t,
+ cam_flash_mode_t> AE_FLASH_MODE_MAP[];
+ static const QCameraMap<camera_metadata_enum_android_flash_mode_t,
+ cam_flash_mode_t> FLASH_MODES_MAP[];
+ static const QCameraMap<camera_metadata_enum_android_statistics_face_detect_mode_t,
+ cam_face_detect_mode_t> FACEDETECT_MODES_MAP[];
+ static const QCameraMap<camera_metadata_enum_android_lens_info_focus_distance_calibration_t,
+ cam_focus_calibration_t> FOCUS_CALIBRATION_MAP[];
+ static const QCameraMap<camera_metadata_enum_android_sensor_test_pattern_mode_t,
+ cam_test_pattern_mode_t> TEST_PATTERN_MAP[];
+ static const QCameraMap<camera_metadata_enum_android_sensor_reference_illuminant1_t,
+ cam_illuminat_t> REFERENCE_ILLUMINANT_MAP[];
+ static const QCameraMap<int32_t,
+ cam_hfr_mode_t> HFR_MODE_MAP[];
+
+ static const QCameraPropMap CDS_MAP[];
+
+ pendingRequestIterator erasePendingRequest(pendingRequestIterator i);
+ //GPU library to read buffer padding details.
+ void *lib_surface_utils;
+ int (*LINK_get_surface_pixel_alignment)();
+ uint32_t mSurfaceStridePadding;
+
+ State mState;
+ //Dual camera related params
+ bool mIsDeviceLinked;
+ bool mIsMainCamera;
+ uint8_t mLinkedCameraId;
+ QCamera3HeapMemory *m_pRelCamSyncHeap;
+ cam_sync_related_sensors_event_info_t *m_pRelCamSyncBuf;
+ cam_sync_related_sensors_event_info_t m_relCamSyncInfo;
+
+};
+
+}; // namespace qcamera
+
+#endif /* __QCAMERA2HARDWAREINTERFACE_H__ */