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