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