linphone-iphone/daemon/commands/adaptive-jitter-compensation.cc

135 lines
4.9 KiB
C++

/*
adaptive-jitter-compensation.cc
Copyright (C) 2016 Belledonne Communications, Grenoble, France
This library is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or (at
your option) any later version.
This library 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 Lesser General Public
License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this library; if not, write to the Free Software Foundation,
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "adaptive-jitter-compensation.h"
using namespace std;
class AdaptiveBufferCompensationResponse : public Response {
public:
enum StreamType {
AudioStream,
VideoStream,
AllStreams
};
AdaptiveBufferCompensationResponse(LinphoneCore *core, StreamType type);
private:
void outputAdaptiveBufferCompensation(LinphoneCore *core, ostringstream &ost, const string& header, bool_t value);
};
AdaptiveBufferCompensationResponse::AdaptiveBufferCompensationResponse(LinphoneCore *core, StreamType type) : Response() {
bool enabled = false;
ostringstream ost;
switch (type) {
case AudioStream:
enabled = linphone_core_audio_adaptive_jittcomp_enabled(core) ? true : false;
outputAdaptiveBufferCompensation(core, ost, "Audio", enabled);
break;
case VideoStream:
enabled = linphone_core_video_adaptive_jittcomp_enabled(core) ? true : false;
outputAdaptiveBufferCompensation(core, ost, "Video", enabled);
break;
case AllStreams:
enabled = linphone_core_audio_adaptive_jittcomp_enabled(core) ? true : false;
outputAdaptiveBufferCompensation(core, ost, "Audio", enabled);
enabled = linphone_core_video_adaptive_jittcomp_enabled(core) ? true : false;
outputAdaptiveBufferCompensation(core, ost, "Video", enabled);
break;
}
setBody(ost.str());
}
void AdaptiveBufferCompensationResponse::outputAdaptiveBufferCompensation(LinphoneCore *core, ostringstream &ost, const string& header, bool_t value) {
ost << header << ": ";
if (value) {
ost << "enabled\n";
} else {
ost << "disabled\n";
}
}
AdaptiveBufferCompensationCommand::AdaptiveBufferCompensationCommand() :
DaemonCommand("adaptive-jitter-compensation", "adaptive-jitter-compensation [audio|video] [enable|disable]",
"Enable or disable adaptive buffer compensation respectively with the 'enable' and 'disable' parameters for the specified stream, "
"return the status of the use of adaptive buffer compensation without parameter.") {
addExample(new DaemonCommandExample("adaptive-jitter-compensation audio",
"Status: Ok\n\n"
"Audio: enabled"));
addExample(new DaemonCommandExample("adaptive-jitter-compensation video",
"Status: Ok\n\n"
"Video: disabled"));
addExample(new DaemonCommandExample("adaptive-jitter-compensation",
"Status: Ok\n\n"
"Audio: enabled\n"
"Video: disabled"));
addExample(new DaemonCommandExample("adaptive-jitter-compensation video enable",
"Status: Ok\n\n"
"Video: enabled"));
}
void AdaptiveBufferCompensationCommand::exec(Daemon *app, const string& args) {
string stream;
string state;
istringstream ist(args);
ist >> stream;
if (ist.fail()) {
app->sendResponse(AdaptiveBufferCompensationResponse(app->getCore(), AdaptiveBufferCompensationResponse::AllStreams));
return;
}
ist >> state;
if (ist.fail()) {
if (stream.compare("audio") == 0) {
app->sendResponse(AdaptiveBufferCompensationResponse(app->getCore(), AdaptiveBufferCompensationResponse::AudioStream));
} else if (stream.compare("video") == 0) {
app->sendResponse(AdaptiveBufferCompensationResponse(app->getCore(), AdaptiveBufferCompensationResponse::VideoStream));
} else {
app->sendResponse(Response("Incorrect stream parameter.", Response::Error));
}
return;
}
AdaptiveBufferCompensationResponse::StreamType type;
bool enabled;
if (stream.compare("audio") == 0) {
type = AdaptiveBufferCompensationResponse::AudioStream;
} else if (stream.compare("video") == 0) {
type = AdaptiveBufferCompensationResponse::VideoStream;
} else {
app->sendResponse(Response("Incorrect stream parameter.", Response::Error));
return;
}
if (state.compare("enable") == 0) {
enabled = TRUE;
} else if (state.compare("disable") == 0) {
enabled = FALSE;
} else {
app->sendResponse(Response("Incorrect parameter.", Response::Error));
return;
}
if (type == AdaptiveBufferCompensationResponse::AudioStream) {
linphone_core_enable_audio_adaptive_jittcomp(app->getCore(), enabled);
} else if (type == AdaptiveBufferCompensationResponse::VideoStream) {
linphone_core_enable_video_adaptive_jittcomp(app->getCore(), enabled);
}
app->sendResponse(AdaptiveBufferCompensationResponse(app->getCore(), AdaptiveBufferCompensationResponse::AllStreams));
}