diff --git a/src/media/video/sinkclient.cpp b/src/media/video/sinkclient.cpp index 22b39207feb71646eed86543a0cc233e92aa3a7c..84d13c78a7f4f4d686ac5cfa0ec51573ecd08f63 100644 --- a/src/media/video/sinkclient.cpp +++ b/src/media/video/sinkclient.cpp @@ -353,10 +353,12 @@ SinkClient::setFrameSize(int width, int height) RING_WARN("Start sink <%s / %s>, size=%dx%d, mixer=%u", getId().c_str(), openedName().c_str(), width, height, mixer_); emitSignal<DRing::VideoSignal::DecodingStarted>(getId(), openedName(), width, height, mixer_); - } else { + started_ = true; + } else if (started_) { RING_ERR("Stop sink <%s / %s>, mixer=%u", getId().c_str(), openedName().c_str(), mixer_); emitSignal<DRing::VideoSignal::DecodingStopped>(getId(), openedName(), mixer_); + started_ = false; } } diff --git a/src/media/video/sinkclient.h b/src/media/video/sinkclient.h index 53577d644370df1b47899791edda67471f432006..b446422fa9900c6d0cfddc1907df9f8c6abafddb 100644 --- a/src/media/video/sinkclient.h +++ b/src/media/video/sinkclient.h @@ -65,6 +65,7 @@ class SinkClient : public VideoFramePassiveReader private: const std::string id_; const bool mixer_; + bool started_ {false}; // used to arbitrate client's stop signal. std::function<void(int, int)> target_; std::vector<unsigned char>* targetData_ {nullptr}; // filled by registerTarget, user owned