From f8f80f0a7599a2ef88ab3fac46aa4bb7c99c7646 Mon Sep 17 00:00:00 2001
From: Eloi BAIL <eloi.bail@savoirfairelinux.com>
Date: Fri, 4 Dec 2015 17:04:03 -0500
Subject: [PATCH] media/video: put adapative algorithm configurable

Add codec properties accessible by client and LRC to enable or
disable adaptative algorithm

Change-Id: Ia1baaad8a4fec6713e9657af4759ffe071be4ab5
Tuleap: #215
---
 src/dring/account_const.h             | 1 +
 src/media/media_codec.cpp             | 8 +++++++-
 src/media/media_codec.h               | 1 +
 src/media/video/video_rtp_session.cpp | 6 +++++-
 4 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/src/dring/account_const.h b/src/dring/account_const.h
index cce6bc9679..6c03dcebf8 100644
--- a/src/dring/account_const.h
+++ b/src/dring/account_const.h
@@ -227,6 +227,7 @@ constexpr static const char QUALITY            [] = "CodecInfo.quality";
 constexpr static const char MIN_QUALITY        [] = "CodecInfo.min_quality";
 constexpr static const char MAX_QUALITY        [] = "CodecInfo.max_quality";
 constexpr static const char CHANNEL_NUMBER     [] = "CodecInfo.channelNumber";
+constexpr static const char AUTO_QUALITY_ENABLED [] = "CodecInfo.autoQualityEnabled";
 
 } //namespace DRing::Account::ConfProperties::CodecInfo
 
diff --git a/src/media/media_codec.cpp b/src/media/media_codec.cpp
index 5e98b1c997..6af478e776 100644
--- a/src/media/media_codec.cpp
+++ b/src/media/media_codec.cpp
@@ -23,6 +23,7 @@
 #include "account_const.h"
 
 #include "string_utils.h"
+#include "logger.h"
 
 #include <string>
 #include <sstream>
@@ -202,7 +203,8 @@ AccountVideoCodecInfo::getCodecSpecifications()
         {DRing::Account::ConfProperties::CodecInfo::QUALITY, to_string(quality)},
         {DRing::Account::ConfProperties::CodecInfo::MAX_QUALITY, to_string(systemCodecInfo.maxQuality)},
         {DRing::Account::ConfProperties::CodecInfo::MIN_QUALITY, to_string(systemCodecInfo.minQuality)},
-        {DRing::Account::ConfProperties::CodecInfo::FRAME_RATE, to_string(frameRate)}
+        {DRing::Account::ConfProperties::CodecInfo::FRAME_RATE, to_string(frameRate)},
+        {DRing::Account::ConfProperties::CodecInfo::AUTO_QUALITY_ENABLED, bool_to_str(isAutoQualityEnabled)}
         };
 }
 
@@ -220,6 +222,10 @@ AccountVideoCodecInfo::setCodecSpecifications(const std::map<std::string, std::s
     it = details.find(DRing::Account::ConfProperties::CodecInfo::QUALITY);
     if (it != details.end())
         quality = ring::stoi(it->second);
+
+    it = details.find(DRing::Account::ConfProperties::CodecInfo::AUTO_QUALITY_ENABLED);
+    if (it != details.end())
+        isAutoQualityEnabled = (it->second == TRUE_STR) ? true : false;
 }
 
 AccountVideoCodecInfo::~AccountVideoCodecInfo()
diff --git a/src/media/media_codec.h b/src/media/media_codec.h
index aa5e339d12..8b7aeae099 100644
--- a/src/media/media_codec.h
+++ b/src/media/media_codec.h
@@ -191,6 +191,7 @@ struct AccountVideoCodecInfo : AccountCodecInfo
     unsigned frameRate;
     unsigned profileId;
     std::string parameters;
+    bool isAutoQualityEnabled{true};
 };
 bool operator== (SystemCodecInfo codec1, SystemCodecInfo codec2);
 
diff --git a/src/media/video/video_rtp_session.cpp b/src/media/video/video_rtp_session.cpp
index 02abf7bf1f..c09b5f3551 100644
--- a/src/media/video/video_rtp_session.cpp
+++ b/src/media/video/video_rtp_session.cpp
@@ -104,8 +104,12 @@ void VideoRtpSession::startSender()
             RING_ERR("%s", e.what());
             send_.enabled = false;
         }
-        if (not rtcpCheckerThread_.isRunning())
+        auto codecVideo = std::static_pointer_cast<ring::AccountVideoCodecInfo>(send_.codec);
+        auto isAutoQualityEnabledStr = codecVideo->getCodecSpecifications()[DRing::Account::ConfProperties::CodecInfo::AUTO_QUALITY_ENABLED];
+        if ((not rtcpCheckerThread_.isRunning()) && (isAutoQualityEnabledStr.compare(TRUE_STR) == 0))
             rtcpCheckerThread_.start();
+        else if ((rtcpCheckerThread_.isRunning()) && (isAutoQualityEnabledStr.compare(FALSE_STR) == 0))
+            rtcpCheckerThread_.join();
     }
 }
 
-- 
GitLab