xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/aiq_core/MessageBus.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 
2 /*
3  * MessageBus.h
4  *
5  *  Copyright (c) 2019 Rockchip Corporation
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  */
20 
21 #ifndef _RK_MESSAGEBUS_H_
22 #define _RK_MESSAGEBUS_H_
23 
24 #include "xcam_thread.h"
25 #include "safe_list.h"
26 
27 using namespace XCam;
28 namespace RkCam {
29 
30 enum XCamMessageType {
31     XCAM_MESSAGE_SOF_INFO_OK,
32     XCAM_MESSAGE_ISP_STATS_OK,
33     XCAM_MESSAGE_ISPP_STATS_OK,
34     XCAM_MESSAGE_ISP_POLL_SP_OK,
35     XCAM_MESSAGE_ISP_POLL_TX_OK,
36     XCAM_MESSAGE_ISP_GAIN_OK,
37     XCAM_MESSAGE_ISPP_GAIN_KG_OK,
38     XCAM_MESSAGE_NR_IMG_OK,
39     XCAM_MESSAGE_AWB_PROC_RES_OK,
40     XCAM_MESSAGE_AE_PROC_RES_OK,
41     XCAM_MESSAGE_AF_PROC_RES_OK,
42     XCAM_MESSAGE_AEC_STATS_OK,
43     XCAM_MESSAGE_AWB_STATS_OK,
44     XCAM_MESSAGE_AF_STATS_OK,
45     XCAM_MESSAGE_ATMO_STATS_OK,
46     XCAM_MESSAGE_ADEHAZE_STATS_OK,
47     XCAM_MESSAGE_ISPP_GAIN_WR_OK,
48     XCAM_MESSAGE_AMD_PROC_RES_OK,
49     XCAM_MESSAGE_AE_PRE_RES_OK,
50     XCAM_MESSAGE_PDAF_STATS_OK,
51     XCAM_MESSAGE_ORB_STATS_OK,
52     XCAM_MESSAGE_BLC_PROC_RES_OK,
53     XCAM_MESSAGE_BLC_V32_PROC_RES_OK,
54     XCAM_MESSAGE_YNR_V3_PROC_RES_OK,
55     XCAM_MESSAGE_YNR_V22_PROC_RES_OK,
56     XCAM_MESSAGE_VICAP_POLL_SCL_OK,
57 };
58 
59 #if defined(__GNUC__) && !defined(__clang__)
60 #pragma GCC diagnostic push
61 #pragma GCC diagnostic ignored "-Wpedantic"
62 #endif
63 static const char* MessageType2Str[64] = {
64     [XCAM_MESSAGE_SOF_INFO_OK]         = "SOF_INFO",
65     [XCAM_MESSAGE_ISP_STATS_OK]        = "ISP_STATS",
66     [XCAM_MESSAGE_ISPP_STATS_OK]       = "ISPP_STATS",
67     [XCAM_MESSAGE_ISP_POLL_SP_OK]      = "ISP_SP",
68     [XCAM_MESSAGE_ISP_POLL_TX_OK]      = "ISP_TX",
69     [XCAM_MESSAGE_ISP_GAIN_OK]         = "ISP_GAIN",
70     [XCAM_MESSAGE_ISPP_GAIN_KG_OK]     = "ISPP_KG_GAIN",
71     [XCAM_MESSAGE_NR_IMG_OK]           = "NR_IMG",
72     [XCAM_MESSAGE_AWB_PROC_RES_OK]     = "AWB_PROC_RES",
73     [XCAM_MESSAGE_AE_PROC_RES_OK]      = "AE_PROC_RES",
74     [XCAM_MESSAGE_AF_PROC_RES_OK]      = "AF_PROC_RES",
75     [XCAM_MESSAGE_AEC_STATS_OK]        = "AEC_STATS",
76     [XCAM_MESSAGE_AWB_STATS_OK]        = "AWB_STATS",
77     [XCAM_MESSAGE_AF_STATS_OK]         = "AF_STATS",
78     [XCAM_MESSAGE_ATMO_STATS_OK]       = "ATMO_STATS",
79     [XCAM_MESSAGE_ADEHAZE_STATS_OK]    = "ADHAZ_STATS",
80     [XCAM_MESSAGE_ISPP_GAIN_WR_OK]     = "ISPP_WR_GAIN",
81     [XCAM_MESSAGE_AMD_PROC_RES_OK]     = "AMD_PROC_RES",
82     [XCAM_MESSAGE_AE_PRE_RES_OK]       = "AE_PRE_RES",
83     [XCAM_MESSAGE_PDAF_STATS_OK]       = "PDAF_STATS",
84     [XCAM_MESSAGE_ORB_STATS_OK]        = "ORB_STATS",
85     [XCAM_MESSAGE_BLC_PROC_RES_OK]     = "BLC_PROC_RES",
86     [XCAM_MESSAGE_BLC_V32_PROC_RES_OK] = "BLC_V32_PROC_RES",
87     [XCAM_MESSAGE_YNR_V3_PROC_RES_OK]  = "YNR_V3_PROC_RES",
88     [XCAM_MESSAGE_YNR_V22_PROC_RES_OK] = "YNR_V22_PROC_RES",
89     [XCAM_MESSAGE_VICAP_POLL_SCL_OK]   = "VICAP_POLL_SCL",
90 };
91 #if defined(__GNUC__) && !defined(__clang__)
92 #pragma GCC diagnostic pop
93 #endif
94 
95 struct XCamMessage {
96     XCamMessageType  msg_id;
97     unsigned frame_id;
98 
XCamMessageXCamMessage99     XCamMessage () {};
XCamMessageXCamMessage100     XCamMessage (XCamMessageType type, unsigned id)
101         : msg_id (type)
102         , frame_id (id) {};
~XCamMessageXCamMessage103     virtual ~XCamMessage () {};
104 
105 };
106 
107 class RkAiqCore;
108 class MessageThread
109     : public Thread
110 {
111 public:
MessageThread(RkAiqCore * rkAiqCore)112     explicit MessageThread (RkAiqCore *rkAiqCore)
113         : Thread ("MessageThread")
114         , mRkAiqCore(rkAiqCore)
115     {}
116 
triger_stop()117     void triger_stop() {
118         mMsgQueue.pause_pop ();
119     };
120 
triger_start()121     void triger_start() {
122         mMsgQueue.clear ();
123         mMsgQueue.resume_pop ();
124     };
125 
push_msg(const SmartPtr<XCamMessage> & msg)126     bool push_msg (const SmartPtr<XCamMessage> &msg) {
127         mMsgQueue.push (msg);
128         return true;
129     };
130 
131 protected:
132     //virtual bool started ();
stopped()133     virtual void stopped () {
134         mMsgQueue.clear ();
135     };
136     virtual bool loop ();
137 
138 private:
139     RkAiqCore* mRkAiqCore;
140     SafeList<XCamMessage> mMsgQueue;
141 };
142 
143 }
144 #endif //_RK_MESSAGEBUS_H_
145