mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-01-22 05:38:14 +00:00
135 lines
4.9 KiB
C++
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));
|
|
}
|