/* * MessageBus.h * * Copyright (c) 2019 Rockchip Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ #ifndef _RK_MESSAGEBUS_H_ #define _RK_MESSAGEBUS_H_ #include "xcam_thread.h" #include "safe_list.h" using namespace XCam; namespace RkCam { enum XCamMessageType { XCAM_MESSAGE_SOF_INFO_OK, XCAM_MESSAGE_ISP_STATS_OK, XCAM_MESSAGE_ISPP_STATS_OK, XCAM_MESSAGE_ISP_POLL_SP_OK, XCAM_MESSAGE_ISP_POLL_TX_OK, XCAM_MESSAGE_ISP_GAIN_OK, XCAM_MESSAGE_ISPP_GAIN_KG_OK, XCAM_MESSAGE_NR_IMG_OK, XCAM_MESSAGE_AWB_PROC_RES_OK, XCAM_MESSAGE_AE_PROC_RES_OK, XCAM_MESSAGE_AF_PROC_RES_OK, XCAM_MESSAGE_AEC_STATS_OK, XCAM_MESSAGE_AWB_STATS_OK, XCAM_MESSAGE_AF_STATS_OK, XCAM_MESSAGE_ATMO_STATS_OK, XCAM_MESSAGE_ADEHAZE_STATS_OK, XCAM_MESSAGE_ISPP_GAIN_WR_OK, XCAM_MESSAGE_AMD_PROC_RES_OK, XCAM_MESSAGE_AE_PRE_RES_OK, XCAM_MESSAGE_ORB_STATS_OK, }; static const char* MessageType2Str[64] = { [XCAM_MESSAGE_SOF_INFO_OK] = "SOF_INFO", [XCAM_MESSAGE_ISP_STATS_OK] = "ISP_STATS", [XCAM_MESSAGE_ISPP_STATS_OK] = "ISPP_STATS", [XCAM_MESSAGE_ISP_POLL_SP_OK] = "ISP_SP", [XCAM_MESSAGE_ISP_POLL_TX_OK] = "ISP_TX", [XCAM_MESSAGE_ISP_GAIN_OK] = "ISP_GAIN", [XCAM_MESSAGE_ISPP_GAIN_KG_OK] = "ISPP_KG_GAIN", [XCAM_MESSAGE_NR_IMG_OK] = "NR_IMG", [XCAM_MESSAGE_AWB_PROC_RES_OK] = "AWB_PROC_RES", [XCAM_MESSAGE_AE_PROC_RES_OK] = "AE_PROC_RES", [XCAM_MESSAGE_AF_PROC_RES_OK] = "AF_PROC_RES", [XCAM_MESSAGE_AEC_STATS_OK] = "AEC_STATS", [XCAM_MESSAGE_AWB_STATS_OK] = "AWB_STATS", [XCAM_MESSAGE_AF_STATS_OK] = "AF_STATS", [XCAM_MESSAGE_ATMO_STATS_OK] = "ATMO_STATS", [XCAM_MESSAGE_ADEHAZE_STATS_OK] = "ADHAZ_STATS", [XCAM_MESSAGE_ISPP_GAIN_WR_OK] = "ISPP_WR_GAIN", [XCAM_MESSAGE_AMD_PROC_RES_OK] = "AMD_PROC_RES", [XCAM_MESSAGE_AE_PRE_RES_OK] = "AE_PRE_RES", }; struct XCamMessage { XCamMessageType msg_id; unsigned frame_id; XCamMessage (XCamMessageType type, unsigned id) : msg_id (type) , frame_id (id) {}; virtual ~XCamMessage () {}; }; class RkAiqCore; class MessageThread : public Thread { public: explicit MessageThread (RkAiqCore *rkAiqCore) : Thread ("MessageThread") , mRkAiqCore(rkAiqCore) {} void triger_stop() { mMsgQueue.pause_pop (); }; void triger_start() { mMsgQueue.clear (); mMsgQueue.resume_pop (); }; bool push_msg (const SmartPtr &msg) { mMsgQueue.push (msg); return true; }; protected: //virtual bool started (); virtual void stopped () { mMsgQueue.clear (); }; virtual bool loop (); private: RkAiqCore* mRkAiqCore; SafeList mMsgQueue; }; }; #endif //_RK_MESSAGEBUS_H_