From 406a0b523cc129bf9b8a6ad04a4ef98c02bd6529 Mon Sep 17 00:00:00 2001 From: Eloi BAIL <eloi.bail@savoirfairelinux.com> Date: Wed, 18 Mar 2015 16:50:16 -0400 Subject: [PATCH] daemon: add of dbus API setCodecDetails Refs #68805 Change-Id: Ic997485ff22c8cf9465b7ff661dc1c9bcbca2f9c --- .../dbus/configurationmanager-introspec.xml | 9 +++++ daemon/bin/dbus/dbusconfigurationmanager.cpp | 7 ++++ daemon/bin/dbus/dbusconfigurationmanager.h | 1 + daemon/src/client/configurationmanager.cpp | 34 +++++++++++++++++++ .../dring/configurationmanager_interface.h | 1 + daemon/src/media/media_codec.cpp | 28 +++++++++++++++ daemon/src/media/media_codec.h | 2 ++ 7 files changed, 82 insertions(+) diff --git a/daemon/bin/dbus/configurationmanager-introspec.xml b/daemon/bin/dbus/configurationmanager-introspec.xml index 1bebf00e83..ca19ba2646 100644 --- a/daemon/bin/dbus/configurationmanager-introspec.xml +++ b/daemon/bin/dbus/configurationmanager-introspec.xml @@ -382,6 +382,15 @@ </arg> </method> + <method name="setCodecDetails" tp:name-for-bindings="setCodecDetails"> + <arg type="b" name="result" direction="out"></arg> + <arg type="s" name="accountID" direction="in"></arg> + <arg type="u" name="codecId" direction="in"></arg> + <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="MapStringString"/> + <arg type="a{ss}" name="details" direction="in" tp:type="String_String_Map"> + </arg> + </method> + <method name="getActiveCodecList" tp:name-for-bindings="getActiveCodecList"> <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="VectorUInt"/> <arg type="s" name="accountID" direction="in"> diff --git a/daemon/bin/dbus/dbusconfigurationmanager.cpp b/daemon/bin/dbus/dbusconfigurationmanager.cpp index 5099912e05..0587b7251e 100644 --- a/daemon/bin/dbus/dbusconfigurationmanager.cpp +++ b/daemon/bin/dbus/dbusconfigurationmanager.cpp @@ -121,6 +121,13 @@ DBusConfigurationManager::getCodecDetails(const std::string& accountID, const un return DRing::getCodecDetails(accountID, codecId); } +auto +DBusConfigurationManager::setCodecDetails(const std::string& accountID, const unsigned& codecId, const std::map<std::string, std::string>& details) +-> decltype(DRing::setCodecDetails(accountID, codecId, details)) +{ + return DRing::setCodecDetails(accountID, codecId, details); +} + auto DBusConfigurationManager::getActiveCodecList(const std::string& accountID) -> decltype(DRing::getActiveCodecList(accountID)) { diff --git a/daemon/bin/dbus/dbusconfigurationmanager.h b/daemon/bin/dbus/dbusconfigurationmanager.h index 4ebba7a264..7368abb518 100644 --- a/daemon/bin/dbus/dbusconfigurationmanager.h +++ b/daemon/bin/dbus/dbusconfigurationmanager.h @@ -79,6 +79,7 @@ class DBusConfigurationManager : std::vector<unsigned> getCodecList(); std::vector<std::string> getSupportedTlsMethod(); std::map<std::string, std::string> getCodecDetails(const std::string& accountID, const unsigned& codecId); + bool setCodecDetails(const std::string& accountID, const unsigned& codecId, const std::map<std::string, std::string>& details); std::vector<unsigned> getActiveCodecList(const std::string& accountID); void setActiveCodecList(const std::string& accountID, const std::vector<unsigned>& list); std::vector<std::string> getAudioPluginList(); diff --git a/daemon/src/client/configurationmanager.cpp b/daemon/src/client/configurationmanager.cpp index 792b9c96fc..2fa897440d 100644 --- a/daemon/src/client/configurationmanager.cpp +++ b/daemon/src/client/configurationmanager.cpp @@ -289,6 +289,40 @@ getSupportedCiphers(const std::string& accountID) } +bool +setCodecDetails(const std::string& accountID, + const unsigned& codecId, + const std::map<std::string, std::string>& details) +{ + auto acc = ring::Manager::instance().getAccount(accountID); + if (!acc) { + RING_ERR("Could not find account %s. can not set codec details" + , accountID.c_str()); + return false; + } + + auto codec = acc->searchCodecById(codecId, ring::MEDIA_ALL); + if (!codec) { + RING_ERR("can not find codec %d", codecId); + return false; + + } + if (codec->systemCodecInfo.mediaType & ring::MEDIA_AUDIO) { + if (auto foundCodec = std::static_pointer_cast<ring::AccountAudioCodecInfo>(codec)) { + foundCodec->setCodecSpecifications(details); + return true; + } + } + + if (codec->systemCodecInfo.mediaType & ring::MEDIA_VIDEO) { + if (auto foundCodec = std::static_pointer_cast<ring::AccountVideoCodecInfo>(codec)) { + foundCodec->setCodecSpecifications(details); + return true; + } + } + return false; +} + std::map<std::string, std::string> getCodecDetails(const std::string& accountID, const unsigned& codecId) { diff --git a/daemon/src/dring/configurationmanager_interface.h b/daemon/src/dring/configurationmanager_interface.h index 71db74f5e7..9bdf42a2e4 100644 --- a/daemon/src/dring/configurationmanager_interface.h +++ b/daemon/src/dring/configurationmanager_interface.h @@ -63,6 +63,7 @@ std::vector<unsigned> getCodecList(); std::vector<std::string> getSupportedTlsMethod(); std::vector<std::string> getSupportedCiphers(const std::string& accountID); std::map<std::string, std::string> getCodecDetails(const std::string& accountID, const unsigned& codecId); +bool setCodecDetails(const std::string& accountID, const unsigned& codecId, const std::map<std::string, std::string>& details); std::vector<unsigned> getActiveCodecList(const std::string& accountID); void setActiveCodecList(const std::string& accountID, const std::vector<unsigned>& list); diff --git a/daemon/src/media/media_codec.cpp b/daemon/src/media/media_codec.cpp index e871734ab6..f870bc9407 100644 --- a/daemon/src/media/media_codec.cpp +++ b/daemon/src/media/media_codec.cpp @@ -165,6 +165,22 @@ AccountAudioCodecInfo::getCodecSpecifications() }; } +void +AccountAudioCodecInfo::setCodecSpecifications(const std::map<std::string, std::string>& details) +{ + auto it = details.find(DRing::Account::ConfProperties::CodecInfo::BITRATE); + if (it != details.end()) + bitrate = std::stoi(it->second); + + it = details.find(DRing::Account::ConfProperties::CodecInfo::SAMPLE_RATE); + if (it != details.end()) + audioformat.sample_rate = std::stoi(it->second); + + it = details.find(DRing::Account::ConfProperties::CodecInfo::CHANNEL_NUMBER); + if (it != details.end()) + audioformat.nb_channels = std::stoi(it->second); +} + bool AccountAudioCodecInfo::isPCMG722() const { @@ -192,6 +208,18 @@ AccountVideoCodecInfo::getCodecSpecifications() }; } +void +AccountVideoCodecInfo::setCodecSpecifications(const std::map<std::string, std::string>& details) +{ + auto it = details.find(DRing::Account::ConfProperties::CodecInfo::BITRATE); + if (it != details.end()) + bitrate = stoi(it->second); + + it = details.find(DRing::Account::ConfProperties::CodecInfo::FRAME_RATE); + if (it != details.end()) + frameRate = stoi(it->second); +} + AccountVideoCodecInfo::~AccountVideoCodecInfo() {} diff --git a/daemon/src/media/media_codec.h b/daemon/src/media/media_codec.h index 343b05a9d1..5b2de4e6c3 100644 --- a/daemon/src/media/media_codec.h +++ b/daemon/src/media/media_codec.h @@ -152,6 +152,7 @@ struct AccountAudioCodecInfo : AccountCodecInfo ~AccountAudioCodecInfo(); std::map<std::string, std::string> getCodecSpecifications(); + void setCodecSpecifications(const std::map<std::string, std::string>& details); /* account custom values */ AudioFormat audioformat {AudioFormat::NONE()}; @@ -163,6 +164,7 @@ struct AccountVideoCodecInfo : AccountCodecInfo AccountVideoCodecInfo(const SystemVideoCodecInfo& sysCodecInfo); ~AccountVideoCodecInfo(); + void setCodecSpecifications(const std::map<std::string, std::string>& details); std::map<std::string, std::string> getCodecSpecifications(); /* account custom values */ -- GitLab