From 78853fc347a3b90e2220171cb36a62abbfd6d239 Mon Sep 17 00:00:00 2001 From: Gonzalo Exequiel Pedone Date: Tue, 11 Feb 2025 19:42:19 -0300 Subject: [PATCH] Do not emit any event if no property were changed. --- cmio/VCamIPC/src/ipcbridge.cpp | 18 ++++++++++++++---- dshow/VCamIPC/src/ipcbridge.cpp | 16 +++++++++++++--- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/cmio/VCamIPC/src/ipcbridge.cpp b/cmio/VCamIPC/src/ipcbridge.cpp index 7dd141b..0eb5334 100644 --- a/cmio/VCamIPC/src/ipcbridge.cpp +++ b/cmio/VCamIPC/src/ipcbridge.cpp @@ -127,6 +127,8 @@ namespace AkVCam std::map m_broadcasts; std::mutex m_broadcastsMutex; std::map m_messageSlots; + std::vector m_devices; + std::string m_picture; explicit IpcBridgePrivate(IpcBridge *self); ~IpcBridgePrivate(); @@ -684,7 +686,10 @@ bool AkVCam::IpcBridgePrivate::devicesUpdated(const Message &message) for (size_t i = 0; i < nCameras; i++) devices.push_back(Preferences::cameraId(i)); - AKVCAM_EMIT(this->self, DevicesChanged, devices) + if (this->m_devices != devices) { + this->m_devices = devices; + AKVCAM_EMIT(this->self, DevicesChanged, devices) + } return this->m_messageSlots[AKVCAM_SERVICE_MSG_DEVICES_UPDATED].run; } @@ -693,7 +698,11 @@ bool AkVCam::IpcBridgePrivate::pictureUpdated(const Message &message) { AkLogFunction(); auto picture = MsgPictureUpdated(message).picture(); - AKVCAM_EMIT(this->self, PictureChanged, picture) + + if (this->m_picture != picture) { + this->m_picture = picture; + AKVCAM_EMIT(this->self, PictureChanged, picture) + } return this->m_messageSlots[AKVCAM_SERVICE_MSG_PICTURE_UPDATED].run; } @@ -715,9 +724,10 @@ bool AkVCam::IpcBridgePrivate::controlsUpdated(const Message &message) AkLogDebug() << control.id << ": " << controls[control.id] << std::endl; } - AKVCAM_EMIT(this->self, ControlsChanged, deviceId, controls) + if (!deviceId.empty() && !controls.empty()) + AKVCAM_EMIT(this->self, ControlsChanged, deviceId, controls) - return true; + return this->m_messageSlots[AKVCAM_SERVICE_MSG_CONTROLS_UPDATED].run; } bool AkVCam::IpcBridgePrivate::frameRequired(const std::string &deviceId, diff --git a/dshow/VCamIPC/src/ipcbridge.cpp b/dshow/VCamIPC/src/ipcbridge.cpp index e47717f..867c174 100644 --- a/dshow/VCamIPC/src/ipcbridge.cpp +++ b/dshow/VCamIPC/src/ipcbridge.cpp @@ -129,6 +129,8 @@ namespace AkVCam std::map m_broadcasts; std::mutex m_broadcastsMutex; std::map m_messageSlots; + std::vector m_devices; + std::string m_picture; explicit IpcBridgePrivate(IpcBridge *self); ~IpcBridgePrivate(); @@ -743,7 +745,10 @@ bool AkVCam::IpcBridgePrivate::devicesUpdated(const Message &message) for (size_t i = 0; i < nCameras; i++) devices.push_back(Preferences::cameraId(i)); - AKVCAM_EMIT(this->self, DevicesChanged, devices) + if (this->m_devices != devices) { + this->m_devices = devices; + AKVCAM_EMIT(this->self, DevicesChanged, devices) + } return this->m_messageSlots[AKVCAM_SERVICE_MSG_DEVICES_UPDATED].run; } @@ -752,7 +757,11 @@ bool AkVCam::IpcBridgePrivate::pictureUpdated(const Message &message) { AkLogFunction(); auto picture = MsgPictureUpdated(message).picture(); - AKVCAM_EMIT(this->self, PictureChanged, picture) + + if (this->m_picture != picture) { + this->m_picture = picture; + AKVCAM_EMIT(this->self, PictureChanged, picture) + } return this->m_messageSlots[AKVCAM_SERVICE_MSG_PICTURE_UPDATED].run; } @@ -774,7 +783,8 @@ bool AkVCam::IpcBridgePrivate::controlsUpdated(const Message &message) AkLogDebug() << control.id << ": " << controls[control.id] << std::endl; } - AKVCAM_EMIT(this->self, ControlsChanged, deviceId, controls) + if (!deviceId.empty() && !controls.empty()) + AKVCAM_EMIT(this->self, ControlsChanged, deviceId, controls) return this->m_messageSlots[AKVCAM_SERVICE_MSG_CONTROLS_UPDATED].run; }