From 92060d3fb5be09fee9b3c8a1f7ca50fcf80bc08c Mon Sep 17 00:00:00 2001 From: Guillaume Roguez <guillaume.roguez@savoirfairelinux.com> Date: Thu, 8 Oct 2015 10:54:39 -0400 Subject: [PATCH] sink: prevent DecodingStopped signal if not started Arbitrate DRing::VideoSignal::DecodingStopped signal to not emitting it if not previously started. This prevents client troubles if they don't handle well this behavior. Issue: #81116 Change-Id: Ib08801d2f62795550238bc91810e6bf139376553 --- src/media/video/sinkclient.cpp | 4 +++- src/media/video/sinkclient.h | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/media/video/sinkclient.cpp b/src/media/video/sinkclient.cpp index 22b39207fe..84d13c78a7 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 53577d6443..b446422fa9 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 -- GitLab