diff --git a/camera/aon/1.4/Android.bp b/camera/aon/1.4/Android.bp
new file mode 100644
index 0000000..36f3afd
--- /dev/null
+++ b/camera/aon/1.4/Android.bp
@@ -0,0 +1,18 @@
+hidl_interface {
+    name: "vendor.qti.hardware.camera.aon@1.4",
+    root: "vendor.qti.hardware.camera",
+    system_ext_specific: true,
+    srcs: [
+        "types.hal",
+        "IAONService.hal",
+        "IAONServiceCallBack.hal",
+    ],
+    interfaces: [
+        "vendor.qti.hardware.camera.aon@1.3",
+        "vendor.qti.hardware.camera.aon@1.2",
+        "vendor.qti.hardware.camera.aon@1.1",
+        "vendor.qti.hardware.camera.aon@1.0",
+        "android.hidl.base@1.0",
+    ],
+    gen_java: true,
+}
diff --git a/camera/aon/1.4/IAONService.hal b/camera/aon/1.4/IAONService.hal
new file mode 100644
index 0000000..13fe2a3
--- /dev/null
+++ b/camera/aon/1.4/IAONService.hal
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2020-2021 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.
+ */
+
+/*
+ * Changes from Qualcomm Innovation Center are provided under the following license:
+ * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted (subject to the limitations in the
+ * disclaimer below) 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 Qualcomm Innovation Center, Inc. nor the names of its
+ *      contributors may be used to endorse or promote products derived
+ *      from this software without specific prior written permission.
+ *
+ * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
+ * GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
+ * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER 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.
+ */
+
+package vendor.qti.hardware.camera.aon@1.4;
+
+import vendor.qti.hardware.camera.aon@1.0;
+import vendor.qti.hardware.camera.aon@1.3;
+import @1.4::types;
+import @1.4::IAONServiceCallBack;
+
+interface IAONService extends @1.3::IAONService{
+    /**
+     * Get a list of AONSensorInfo which describes supported AON sensors and corresponding capability information.
+     *
+     * @return sensorInfoList   An output list of AONSensorInfo
+     */
+    GetAONSensorInfoList() generates (vec<AONSensorInfo> sensorInfoList);
+
+    /**
+     * Register to an AON sensor for a specific AONServiceType
+     *
+     * @param  callback            Object passed by HIDL client which has callback function that got called for AON events
+     * @param  regInfo             Register information filled by client
+     * @return status              Returns status of function. Returns 0 in case of success; non-zero otherwise
+     * @return clientHandle        AON Service return a valid client handle upon success return NULL in case of failure
+     */
+    RegisterClient(IAONServiceCallBack callback, AONRegisterInfo regInfo)
+                   generates (Status status, uint64_t clientHandle);
+};
diff --git a/camera/aon/1.4/IAONServiceCallBack.hal b/camera/aon/1.4/IAONServiceCallBack.hal
new file mode 100644
index 0000000..3c00af3
--- /dev/null
+++ b/camera/aon/1.4/IAONServiceCallBack.hal
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2020-2021 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.
+ */
+
+/*
+ * Changes from Qualcomm Innovation Center are provided under the following license:
+ * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted (subject to the limitations in the
+ * disclaimer below) 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 Qualcomm Innovation Center, Inc. nor the names of its
+ *      contributors may be used to endorse or promote products derived
+ *      from this software without specific prior written permission.
+ *
+ * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
+ * GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
+ * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER 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.
+ */
+
+package vendor.qti.hardware.camera.aon@1.4;
+
+import vendor.qti.hardware.camera.aon@1.3;
+import @1.4::types;
+
+/** AON Service callback interface.
+ *  This callback will be invoked when any client registers for AON Service
+ *  and specific AON event triggered by hardware/lower layers */
+interface IAONServiceCallBack extends @1.3::IAONServiceCallBack{
+    NotifyAONCallbackEvent(uint64_t clientHandle, AONCallBackEvent cbEvt);
+};
diff --git a/camera/aon/1.4/types.hal b/camera/aon/1.4/types.hal
new file mode 100644
index 0000000..e60a0cd
--- /dev/null
+++ b/camera/aon/1.4/types.hal
@@ -0,0 +1,490 @@
+/*
+ * Copyright (c) 2020-2021 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.
+ */
+
+/*
+ * Changes from Qualcomm Innovation Center are provided under the following license:
+ * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted (subject to the limitations in the
+ * disclaimer below) 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 Qualcomm Innovation Center, Inc. nor the names of its
+ *      contributors may be used to endorse or promote products derived
+ *      from this software without specific prior written permission.
+ *
+ * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
+ * GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
+ * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER 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.
+ */
+
+package vendor.qti.hardware.camera.aon@1.4;
+
+import vendor.qti.hardware.camera.aon@1.3;
+
+enum AONServiceType : @1.3::AONServiceType
+{
+    // No new ServiceType is added in 1.4
+};
+
+/**
+ * Position type of an AON sensor.
+ */
+enum PositionType : uint32_t
+{
+    /**
+     * Rear main camera.
+     */
+    REAR        = 0,
+
+    /**
+     * Front main camera.
+     */
+    FRONT       = 1
+};
+
+/**
+ * The delivery mode of event detection
+ */
+enum DeliveryMode : uint32_t
+{
+    /**
+     * Detection is triggered to run based on motion detected by sensor.
+     */
+    MotionBased     = 0,
+
+    /**
+     * Detection is triggered to run periodically according to
+     * the value of deliveryPeriodMs set by client during RegisterClient.
+     */
+    TimeBased       = 1
+};
+
+/**
+ * The event type supported by FaceDetect and FaceDetectPro.
+ * These are bit values for client to assign to the fdEvtTypeMask in FDRegisterInfo during RegisterClient
+ * and to check the fdEvtTypeMask in FDEvtInfo when receiving the AONCallBackEvent.
+ */
+enum FDEvtType : uint32_t
+{
+    /**
+     * This indicates that face detection was performed and a face is detected.
+     */
+    FaceDetected    = 1,
+
+    /**
+     * This indicates that face detection was performed and a face is not detected.
+     */
+    FaceNotDetected = 2,
+
+    /**
+     * This indicates that face detection was performed and an eye gaze is detected.
+     */
+    GazeDetected    = 4,
+
+    /**
+     * This indicates that face detection was performed and an eye gaze is not detected.
+     */
+    GazeNotDetected = 8,
+};
+
+/**
+ * The event type supported by QRCode.
+ * These are bit values for client to assign to the qrEvtTypeMask in QRRegisterInfo during RegisterClient
+ * and to check the qrEvtTypeMask in QREvtInfo when receiving the AONCallBackEvent.
+ */
+enum QREvtType : uint32_t
+{
+    /**
+     * This indicates that QRCode detection was performed and a QRCode is detected.
+     */
+    QRCodeDetected    = 1,
+
+    /**
+     * This indicates that QRCode detection was performed and a QRCode is not detected.
+     */
+    QRCodeNotDetected = 2,
+};
+
+/**
+ * The underlying engine type of the algorithm
+ */
+enum FDEngineType : uint32_t
+{
+    /**
+     * CADL engine (Lower power, lower memory usage engine).
+     */
+    EngineCADL     = 0,
+
+    /**
+     * eNPU engine (Higher power, higher memory usage engine).
+     */
+    EngineENPU     = 1
+};
+
+/**
+ * The information of the FD algorithm mode
+ */
+struct FDAlgoMode {
+    /**
+     * Image resolution used for algo processing in this algo mode.
+     */
+    uint32_t width;
+
+    /**
+     * Image resolution used for algo processing in this algo mode.
+     */
+    uint32_t height;
+
+    /**
+     * Indiates whether this FD algo mode is island-capable.
+     */
+    bool isIslandModeCapable;
+
+    /**
+     * Indicates what the supporting engine is.
+     */
+    FDEngineType fdEngine;
+
+    /**
+     * A bit-mask indicating which FDEvtType are supported
+     * in this FDAlgoMode. If both FaceDetected & GazeDetected are
+     * supported, the supportedFDEvtTypeMask will be 0x5(0x1|0x4)
+     */
+    uint32_t supportedFDEvtTypeMask;
+};
+
+/**
+ * The FD register information filled by client.
+ * Only applicable when service type is FaceDetect or FaceDetectPro
+ */
+struct FDRegisterInfo {
+    /**
+     * Indicate which FDEvtType the client is interested in.
+     * If client need both FaceDetected & GazeDetected,
+     * the fdEvtTypeMask should be assigned as 0x5(0x1|0x4)
+     */
+    uint32_t fdEvtTypeMask;
+
+    /**
+     * Index to the algoModes described in AONSensorCap which returned in GetAONSensorInfoList
+     */
+    uint32_t fdAlgoModeIdx;
+
+    /**
+     * To configure the delivery mode of the detection callback event
+     * Since one AON sensor can only be configured one delivery mode at a time,
+     * AON service will take the value of the latest registered client as the final configuration.
+     */
+    DeliveryMode deliveryMode;
+
+    /**
+     * Period in ms of detection callback event.
+     * The value should be positive and only applicable when delivery mode is TimeBased.
+     * Since one AON sensor can only be configured one delivery mode at a time,
+     * AON service will take the value of the latest registered client as the final configuration.
+     */
+    uint32_t deliveryPeriodMs;
+
+    /**
+     * Number of times detections are performed per delivery
+     * Applicable for both deliveryMode - MotionBased & TimeBased
+     * If deliveryMode is MotionBased:
+     * This is the number of detections that will be performed each
+     * time a motion is detected.
+     * If deliveryMode is TimeBased:
+     * At the specified delivery periodicity, detection will be
+     * performed consecutively at the native streaming rate of the image sensor.
+     */
+    uint32_t detectionPerDelivery;
+};
+
+/**
+ * The QRCode register information filled by client.
+ * Only applicable when service type is QRCode
+ */
+struct QRRegisterInfo {
+    /**
+     * Indicate which QREvtType  the client is interested in.
+     * If client need both QRCodeDetected & QRCodeNotDetected,
+     * the qrEvtTypeMask should be assigned as 0x3(0x1|0x2)
+     */
+    uint32_t qrEvtTypeMask;
+
+    /**
+     * To configure the delivery mode of the detection callback event
+     * Since one AON sensor can only be configured one delivery mode at a time,
+     * AON service will take the value of the latest registered client as the final configuration.
+     */
+    DeliveryMode deliveryMode;
+
+    /**
+     * Period in ms of detection callback event.
+     * The value should be positive and only applicable when delivery mode is TimeBased.
+     * Since one AON sensor can only be configured one delivery mode at a time,
+     * AON service will take the value of the latest registered client as the final configuration.
+     */
+    uint32_t deliveryPeriodMs;
+
+    /**
+     * Number of times detections are performed per delivery
+     * Applicable for both deliveryMode - MotionBased & TimeBased
+     * If deliveryMode is MotionBased:
+     * This is the number of detections that will be performed each
+     * time a motion is detected.
+     * If deliveryMode is TimeBased:
+     * At the specified delivery periodicity, detection will be
+     * performed consecutively at the native streaming rate of the image sensor.
+     */
+    uint32_t detectionPerDelivery;
+};
+
+/**
+ * The register information filled by client
+ */
+struct AONRegisterInfo {
+    /**
+     * Index of to the sensorInfoList returned in GetAONSensorInfoList
+     * Indicate which aon sensor the client would like to register
+     */
+    uint32_t aonIdx;
+
+    /**
+     * Indicate which AONServiceType the client would like to register after knowing
+     * the capability of each AON sensor by parsing the AONSensorCap in sensorInfoList
+     */
+    AONServiceType srvType;
+
+    /**
+     * The FD register information filled by client.
+     * Only applicable when service type is FaceDetect or FaceDetectPro
+     */
+    FDRegisterInfo fdRegInfo;
+
+    /**
+     * The QRCode register information filled by client.
+     * Only applicable when service type is QRCode
+     */
+    QRRegisterInfo qrRegInfo;
+};
+
+/**
+ * The AONServiceType and corresponding algo mode list supported by AON sensor
+ */
+struct AONSensorCap {
+    /**
+     * Supported AONServiceType by AON sensor
+     */
+    AONServiceType srvType;
+
+    /**
+     * The supported fdAlgoMode list. Only applicable when srvType is FaceDetect or FaceDetectPro
+     */
+    vec<FDAlgoMode> fdAlgoModes;
+};
+
+/**
+ * The information of an AON sensor
+ */
+struct AONSensorInfo {
+    /**
+     * Position type of AON sensor
+     */
+    PositionType position;
+
+    /**
+     * List of supported AONServiceType by AON sensor
+     */
+    vec<AONSensorCap> sensorCaps;
+};
+
+/**
+ * The information passed from the event of FaceDetectPro service type
+ */
+struct FacePosType {
+    /**
+     * X coordinate of a position
+     * It is relative to the frame dimension width (exposed in FaceInfoPro)
+     * It can be negative (e.g. a facial part can be estimated to be outside of the
+     * frame boundary)
+     */
+    int32_t x;
+
+    /**
+     * Y coordinate of a position
+     * It is relative to the frame dimension height (exposed in FaceInfoPro)
+     * It can be negative (e.g. a facial part can be estimated to be outside of the
+     * frame boundary)
+     */
+    int32_t y;
+};
+
+/**
+ * The information per face passed from the event of FaceDetectPro service type
+ */
+struct FaceInfoProPerFace {
+    /**
+     * Indicates the roll (or rotate) angle of the face
+     * Valid values: -180 through 179, where a positive value means the face is
+     * rotated clockwise in-plane
+     */
+    int32_t angleRoll;
+
+    /**
+     * Indicates the left/right direction of the face
+     * Valid values: -180 through 179, where a positive value means the face is
+     * facing right
+     */
+    int32_t angleYaw;
+
+    /**
+     * Width of the face in the frame
+     */
+    uint32_t width;
+
+    /**
+     * height of the face in the frame
+     */
+    uint32_t height;
+
+    /**
+     * Position of the center of the face in the frame
+     */
+    FacePosType center;
+
+    /**
+     * Whether an eye gaze is detected
+     * Only applicable when the bit of GazeDetected or GazeNotDetected
+     * is set to 1 by client in RegisterClient.
+     */
+    bool isGazeDetected;
+};
+
+/**
+ * The information passed from the event of FaceDetectPro service type
+ */
+struct FaceInfoPro {
+    /**
+     * The frame dimension where the reported face ROI/Parts Coordinates will be based on
+     */
+    uint32_t frameDimWidth;
+    uint32_t frameDimHeight;
+
+    /**
+     * A vector of the per face information
+     */
+    vec<FaceInfoProPerFace>  perFace;
+};
+
+/**
+ * The event callback from AON service to client
+ */
+struct AONCallBackEvent {
+    /**
+     * Service type of the callback event.
+     */
+    AONServiceType srvType;
+
+    /**
+     * The event information for FaceDetect.
+     * Only applicable when srvType is FaceDetect.
+     */
+    FDEvtInfo fdEvtInfo;
+
+    /**
+     * The event information for FaceDetectPro.
+     * Only applicable when srvType is FaceDetectPro.
+     */
+    FDProEvtInfo fdProEvtInfo;
+
+    /**
+     * The event information for QRCode.
+     * Only applicable when srvType is QRCode.
+     */
+    QREvtInfo qrEvtInfo;
+};
+
+/**
+ * The event information for FaceDetect AONServiceType
+ */
+struct FDEvtInfo {
+    /**
+     * Bit Mask to indicate the FDEvtTypes of this event.
+     * If fdEvtTypeMask is 0x5(0x1|0x4), that means both
+     * face & gaze are detected by AONService
+     */
+    uint32_t fdEvtTypeMask;
+};
+
+/**
+ * The event information for FaceDetectPro AONServiceType
+ */
+struct FDProEvtInfo {
+    /**
+     * Bit Mask to indicate the FDEvtTypes of this event.
+     * If fdEvtTypeMask is 0x5(0x1|0x4), that means both
+     * face & gaze are detected by AONService
+     */
+    uint32_t fdEvtTypeMask;
+
+    /**
+     * Face information of detected faces or gazes.
+     * Only applicable when the BIT of FaceDetected or GazeDetected
+     * in fdEvtTypeMask is being set by AONService.
+     */
+    FaceInfoPro faceInfo;
+};
+
+/**
+ * The event information for QRCode AONServiceType
+ */
+struct QREvtInfo {
+    /**
+     * Bit Mask to indicate the QREvtTypes of this event.
+     */
+    uint32_t qrEvtTypeMask;
+};
\ No newline at end of file
diff --git a/camera/current.txt b/camera/current.txt
index d141215..641ca2a 100644
--- a/camera/current.txt
+++ b/camera/current.txt
@@ -46,4 +46,8 @@
 
 54dd29871acf91ca52acdd3d95e92b4a9ec90a5d9af4ddea83f589d2613982c0 vendor.qti.hardware.camera.aon@1.3::types
 614adcae054e8f6486e0c1fbe9fc6502d210bdba646e3079f5b61ea130eeec1f vendor.qti.hardware.camera.aon@1.3::IAONService
-e07e6264400f6cfd226c7a95287c56a23f1deaaf07b51b8c4b605982760906ff vendor.qti.hardware.camera.aon@1.3::IAONServiceCallBack
\ No newline at end of file
+e07e6264400f6cfd226c7a95287c56a23f1deaaf07b51b8c4b605982760906ff vendor.qti.hardware.camera.aon@1.3::IAONServiceCallBack
+
+e0837fce33d8d9f3f4ba56f103bef9b72e82d65d008b0001a4f6f45ef760f461 vendor.qti.hardware.camera.aon@1.4::types
+0453e7525f949a3438caa19390b33def5034a559041c8cabe5b5915d869b8351 vendor.qti.hardware.camera.aon@1.4::IAONService
+4a45fc2603820d0e2e31f1554f1b1ac2d204c48ce7ee2ee0717a7b7f347e853b vendor.qti.hardware.camera.aon@1.4::IAONServiceCallBack
\ No newline at end of file
