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