diff --git a/daemon/src/client/Makefile.am b/daemon/src/client/Makefile.am index b84213ff3996e05c588d48bc20f32c727aefe5ad..45b07835138a07e22937c1c76f325ec44f454127 100644 --- a/daemon/src/client/Makefile.am +++ b/daemon/src/client/Makefile.am @@ -13,6 +13,7 @@ noinst_HEADERS += presencemanager.h endif if SFL_VIDEO +VIDEO_SRC = videomanager.cpp VIDEO_STUB = videomanager_stub.cpp noinst_HEADERS += videomanager.h endif @@ -32,6 +33,7 @@ endif libclient_la_SOURCES = callmanager.cpp \ configurationmanager.cpp \ $(PRESENCE_SRC) \ + $(VIDEO_SRC) \ $(STUB_SRC) libclient_la_CXXFLAGS = -I./ \ diff --git a/daemon/src/client/dbus/videomanager_dbus.cpp b/daemon/src/client/dbus/videomanager_dbus.cpp index 5f8021612ab877e334d36e5cb507a6f6b0b1c5d6..59ab8839862d38c8b5e2f791c369ac115ee8f1c4 100644 --- a/daemon/src/client/dbus/videomanager_dbus.cpp +++ b/daemon/src/client/dbus/videomanager_dbus.cpp @@ -33,183 +33,13 @@ #include "videomanager.h" #include "video/libav_utils.h" #include "video/video_input_selector.h" -#include "account.h" -#include "logger.h" -#include "manager.h" - -namespace { -const char * const SERVER_PATH = "/org/sflphone/SFLphone/VideoManager"; -} +#include "video/video_preferences.h" VideoManager::VideoManager(DBus::Connection& connection) : - DBus::ObjectAdaptor(connection, SERVER_PATH) + DBus::ObjectAdaptor(connection, "/org/sflphone/SFLphone/VideoManager") , videoInputSelector_() , videoPreference_() { // initialize libav libraries libav_utils::sfl_avcodec_init(); } - -VideoPreference & -VideoManager::getVideoPreferences() -{ - return videoPreference_; -} - -std::vector<std::map<std::string, std::string> > -VideoManager::getCodecs(const std::string &accountID) -{ - Account *acc = Manager::instance().getAccount(accountID); - - if (acc != NULL) - return acc->getAllVideoCodecs(); - else - return std::vector<std::map<std::string, std::string> >(); -} - -void -VideoManager::setCodecs(const std::string& accountID, - const std::vector<std::map<std::string, std::string> > &details) -{ - Account *acc = Manager::instance().getAccount(accountID); - if (acc != NULL) { - acc->setVideoCodecs(details); - Manager::instance().saveConfig(); - } -} - -std::vector<std::string> -VideoManager::getDeviceList() -{ - return videoPreference_.getDeviceList(); -} - -std::vector<std::string> -VideoManager::getDeviceChannelList(const std::string &dev) -{ - return videoPreference_.getChannelList(dev); -} - -std::vector<std::string> -VideoManager::getDeviceSizeList(const std::string &dev, const std::string &channel) -{ - return videoPreference_.getSizeList(dev, channel); -} - -std::vector<std::string> -VideoManager::getDeviceRateList(const std::string &dev, const std::string &channel, const std::string &size) -{ - return videoPreference_.getRateList(dev, channel, size); -} - -std::string -VideoManager::getActiveDevice() -{ - return videoPreference_.getDevice(); -} - -std::string -VideoManager::getActiveDeviceChannel() -{ - return videoPreference_.getChannel(); -} - -std::string -VideoManager::getActiveDeviceSize() -{ - return videoPreference_.getSize(); -} - -std::string -VideoManager::getActiveDeviceRate() -{ - return videoPreference_.getRate(); -} - -void -VideoManager::setActiveDevice(const std::string &device) -{ - DEBUG("Setting device to %s", device.c_str()); - videoPreference_.setDevice(device); -} - -void -VideoManager::setActiveDeviceChannel(const std::string &channel) -{ - videoPreference_.setChannel(channel); -} - -void -VideoManager::setActiveDeviceSize(const std::string &size) -{ - videoPreference_.setSize(size); -} - -void -VideoManager::setActiveDeviceRate(const std::string &rate) -{ - videoPreference_.setRate(rate); -} - -std::map<std::string, std::string> -VideoManager::getSettingsFor(const std::string& device) { - return videoPreference_.getSettingsFor(device); -} - -std::map<std::string, std::string> -VideoManager::getSettings() { - return videoPreference_.getSettings(); -} - -void -VideoManager::startCamera() -{ - if (hasCameraStarted()) { - WARN("Video preview was already started!"); - return; - } - - const std::string device = "v4l2://" + videoPreference_.getDevice(); - videoInputSelector_.reset(new sfl_video::VideoInputSelector(device)); -} - -void -VideoManager::stopCamera() -{ - if (not hasCameraStarted()) { - WARN("Video preview was already stopped"); - return; - } - - videoInputSelector_.reset(); -} - -bool -VideoManager::switchInput(const std::string &resource) -{ - if (not hasCameraStarted()) { - ERROR("Input selector not initialized"); - return false; - } - - return videoInputSelector_->switchInput(resource); -} - -std::weak_ptr<sfl_video::VideoFrameActiveWriter> -VideoManager::getVideoCamera() -{ - return videoInputSelector_; -} - -bool -VideoManager::hasCameraStarted() -{ - // see http://stackoverflow.com/a/7580064/21185 - return static_cast<bool>(videoInputSelector_); -} - -std::string -VideoManager::getCurrentCodecName(const std::string & /*callID*/) -{ - return ""; -} diff --git a/daemon/src/client/videomanager.cpp b/daemon/src/client/videomanager.cpp new file mode 100644 index 0000000000000000000000000000000000000000..9e61e364607d4266b89f3680b618198db55f16af --- /dev/null +++ b/daemon/src/client/videomanager.cpp @@ -0,0 +1,203 @@ +/* + * Copyright (C) 2004-2013 Savoir-Faire Linux Inc. + * Author: Pierre-Luc Beaudoin <pierre-luc.beaudoin@savoirfairelinux.com> + * Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> + * Author: Guillaume Carmel-Archambault <guillaume.carmel-archambault@savoirfairelinux.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Additional permission under GNU GPL version 3 section 7: + * + * If you modify this program, or any covered work, by linking or + * combining it with the OpenSSL project's OpenSSL library (or a + * modified version of that library), containing parts covered by the + * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc. + * grants you additional permission to convey the resulting work. + * Corresponding Source for a non-source form of such a combination + * shall include the source code for the parts of OpenSSL used as well + * as that of the covered work. + */ + +#include "videomanager.h" +#include "video/libav_utils.h" +#include "video/video_input_selector.h" +#include "video/video_preferences.h" +#include "account.h" +#include "logger.h" +#include "manager.h" + +VideoPreference & +VideoManager::getVideoPreferences() +{ + return videoPreference_; +} + +std::vector<std::map<std::string, std::string> > +VideoManager::getCodecs(const std::string &accountID) +{ + Account *acc = Manager::instance().getAccount(accountID); + + if (acc != NULL) + return acc->getAllVideoCodecs(); + else + return std::vector<std::map<std::string, std::string> >(); +} + +void +VideoManager::setCodecs(const std::string& accountID, + const std::vector<std::map<std::string, std::string> > &details) +{ + Account *acc = Manager::instance().getAccount(accountID); + if (acc != NULL) { + acc->setVideoCodecs(details); + Manager::instance().saveConfig(); + } +} + +std::vector<std::string> +VideoManager::getDeviceList() +{ + return videoPreference_.getDeviceList(); +} + +std::vector<std::string> +VideoManager::getDeviceChannelList(const std::string &dev) +{ + return videoPreference_.getChannelList(dev); +} + +std::vector<std::string> +VideoManager::getDeviceSizeList(const std::string &dev, const std::string &channel) +{ + return videoPreference_.getSizeList(dev, channel); +} + +std::vector<std::string> +VideoManager::getDeviceRateList(const std::string &dev, const std::string &channel, const std::string &size) +{ + return videoPreference_.getRateList(dev, channel, size); +} + +std::string +VideoManager::getActiveDevice() +{ + return videoPreference_.getDevice(); +} + +std::string +VideoManager::getActiveDeviceChannel() +{ + return videoPreference_.getChannel(); +} + +std::string +VideoManager::getActiveDeviceSize() +{ + return videoPreference_.getSize(); +} + +std::string +VideoManager::getActiveDeviceRate() +{ + return videoPreference_.getRate(); +} + +void +VideoManager::setActiveDevice(const std::string &device) +{ + DEBUG("Setting device to %s", device.c_str()); + videoPreference_.setDevice(device); +} + +void +VideoManager::setActiveDeviceChannel(const std::string &channel) +{ + videoPreference_.setChannel(channel); +} + +void +VideoManager::setActiveDeviceSize(const std::string &size) +{ + videoPreference_.setSize(size); +} + +void +VideoManager::setActiveDeviceRate(const std::string &rate) +{ + videoPreference_.setRate(rate); +} + +std::map<std::string, std::string> +VideoManager::getSettingsFor(const std::string& device) { + return videoPreference_.getSettingsFor(device); +} + +std::map<std::string, std::string> +VideoManager::getSettings() { + return videoPreference_.getSettings(); +} + +void +VideoManager::startCamera() +{ + if (hasCameraStarted()) { + WARN("Video preview was already started!"); + return; + } + + const std::string device = "v4l2://" + videoPreference_.getDevice(); + videoInputSelector_.reset(new sfl_video::VideoInputSelector(device)); +} + +void +VideoManager::stopCamera() +{ + if (not hasCameraStarted()) { + WARN("Video preview was already stopped"); + return; + } + + videoInputSelector_.reset(); +} + +bool +VideoManager::switchInput(const std::string &resource) +{ + if (not hasCameraStarted()) { + ERROR("Input selector not initialized"); + return false; + } + + return videoInputSelector_->switchInput(resource); +} + +std::weak_ptr<sfl_video::VideoFrameActiveWriter> +VideoManager::getVideoCamera() +{ + return videoInputSelector_; +} + +bool +VideoManager::hasCameraStarted() +{ + // see http://stackoverflow.com/a/7580064/21185 + return static_cast<bool>(videoInputSelector_); +} + +std::string +VideoManager::getCurrentCodecName(const std::string & /*callID*/) +{ + return ""; +}