Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
BC
public
liblinphone
Commits
26aa7123
Commit
26aa7123
authored
Nov 28, 2016
by
Ghislain MARY
Browse files
Build linphone-daemon on Windows.
parent
e5d1749c
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
126 additions
and
60 deletions
+126
-60
CMakeLists.txt
CMakeLists.txt
+1
-1
coreapi/private.h
coreapi/private.h
+3
-3
daemon/commands/adaptive-jitter-compensation.cc
daemon/commands/adaptive-jitter-compensation.cc
+4
-4
daemon/commands/netsim.cc
daemon/commands/netsim.cc
+5
-5
daemon/daemon-pipetest.c
daemon/daemon-pipetest.c
+42
-8
daemon/daemon.cc
daemon/daemon.cc
+52
-20
daemon/daemon.h
daemon/daemon.h
+2
-2
include/linphone/core_utils.h
include/linphone/core_utils.h
+17
-17
No files found.
CMakeLists.txt
View file @
26aa7123
...
...
@@ -40,7 +40,7 @@ option(ENABLE_SHARED "Build shared library." YES)
option
(
ENABLE_STATIC
"Build static library."
YES
)
option
(
ENABLE_CONSOLE_UI
"Turn on or off compilation of console interface."
YES
)
option
(
ENABLE_DATE
"Use build date in internal version number."
NO
)
cmake_dependent_
option
(
ENABLE_DAEMON
"Enable the linphone daemon interface."
YES
"NOT WIN32"
NO
)
option
(
ENABLE_DAEMON
"Enable the linphone daemon interface."
YES
)
option
(
ENABLE_DOC
"Enable documentation generation with Doxygen."
YES
)
option
(
ENABLE_JAVADOC
"Add a target to generate documentation for Java API"
NO
)
option
(
ENABLE_GTK_UI
"Turn on or off compilation of gtk interface."
YES
)
...
...
coreapi/private.h
View file @
26aa7123
...
...
@@ -528,7 +528,7 @@ int linphone_core_gather_ice_candidates(LinphoneCore *lc, LinphoneCall *call);
LINPHONE_PUBLIC
void
linphone_core_enable_forced_ice_relay
(
LinphoneCore
*
lc
,
bool_t
enable
);
LINPHONE_PUBLIC
void
linphone_core_enable_short_turn_refresh
(
LinphoneCore
*
lc
,
bool_t
enable
);
void
linphone_core_update_ice_state_in_call_stats
(
LinphoneCall
*
call
);
void
linphone_call_stats_fill
(
LinphoneCallStats
*
stats
,
MediaStream
*
ms
,
OrtpEvent
*
ev
);
LINPHONE_PUBLIC
void
linphone_call_stats_fill
(
LinphoneCallStats
*
stats
,
MediaStream
*
ms
,
OrtpEvent
*
ev
);
void
linphone_call_stop_ice_for_inactive_streams
(
LinphoneCall
*
call
,
SalMediaDescription
*
result
);
void
_update_local_media_description_from_ice
(
SalMediaDescription
*
desc
,
IceSession
*
session
,
bool_t
use_nortpproxy
);
void
linphone_call_update_local_media_description_from_ice_or_upnp
(
LinphoneCall
*
call
);
...
...
@@ -587,7 +587,7 @@ void linphone_core_notify_incoming_call(LinphoneCore *lc, LinphoneCall *call);
bool_t
linphone_core_incompatible_security
(
LinphoneCore
*
lc
,
SalMediaDescription
*
md
);
extern
SalCallbacks
linphone_sal_callbacks
;
LINPHONE_PUBLIC
bool_t
linphone_core_rtcp_enabled
(
const
LinphoneCore
*
lc
);
bool_t
linphone_core_symmetric_rtp_enabled
(
LinphoneCore
*
lc
);
LINPHONE_PUBLIC
bool_t
linphone_core_symmetric_rtp_enabled
(
LinphoneCore
*
lc
);
void
linphone_core_queue_task
(
LinphoneCore
*
lc
,
belle_sip_source_func_t
task_fun
,
void
*
data
,
const
char
*
task_description
);
...
...
@@ -1165,7 +1165,7 @@ int _linphone_core_pause_call(LinphoneCore *lc, LinphoneCall *call);
void
_post_configure_audio_stream
(
AudioStream
*
st
,
LinphoneCore
*
lc
,
bool_t
muted
);
bool_t
linphone_core_sound_resources_available
(
LinphoneCore
*
lc
);
void
linphone_core_notify_refer_state
(
LinphoneCore
*
lc
,
LinphoneCall
*
referer
,
LinphoneCall
*
newcall
);
unsigned
int
linphone_core_get_audio_features
(
LinphoneCore
*
lc
);
LINPHONE_PUBLIC
unsigned
int
linphone_core_get_audio_features
(
LinphoneCore
*
lc
);
void
_linphone_core_codec_config_write
(
LinphoneCore
*
lc
);
...
...
daemon/commands/adaptive-jitter-compensation.cc
View file @
26aa7123
...
...
@@ -40,17 +40,17 @@ AdaptiveBufferCompensationResponse::AdaptiveBufferCompensationResponse(LinphoneC
ostringstream
ost
;
switch
(
type
)
{
case
AudioStream
:
enabled
=
linphone_core_audio_adaptive_jittcomp_enabled
(
core
);
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
);
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
);
enabled
=
linphone_core_audio_adaptive_jittcomp_enabled
(
core
)
?
true
:
false
;
outputAdaptiveBufferCompensation
(
core
,
ost
,
"Audio"
,
enabled
);
enabled
=
linphone_core_video_adaptive_jittcomp_enabled
(
core
);
enabled
=
linphone_core_video_adaptive_jittcomp_enabled
(
core
)
?
true
:
false
;
outputAdaptiveBufferCompensation
(
core
,
ost
,
"Video"
,
enabled
);
break
;
}
...
...
daemon/commands/netsim.cc
View file @
26aa7123
...
...
@@ -87,25 +87,25 @@ void NetsimCommand::exec(Daemon* app, const char* args){
char
value
[
128
]
=
{
0
};
ist
>>
parameters
;
if
(
fmtp_get_value
(
parameters
.
c_str
(),
"max_bandwidth"
,
value
,
sizeof
(
value
))){
params
.
max_bandwidth
=
atoi
(
value
);
params
.
max_bandwidth
=
(
float
)
atoi
(
value
);
}
if
(
fmtp_get_value
(
parameters
.
c_str
(),
"max_buffer_size"
,
value
,
sizeof
(
value
))){
params
.
max_buffer_size
=
atoi
(
value
);
}
if
(
fmtp_get_value
(
parameters
.
c_str
(),
"loss_rate"
,
value
,
sizeof
(
value
))){
params
.
loss_rate
=
atoi
(
value
);
params
.
loss_rate
=
(
float
)
atoi
(
value
);
}
if
(
fmtp_get_value
(
parameters
.
c_str
(),
"latency"
,
value
,
sizeof
(
value
))){
params
.
latency
=
atoi
(
value
);
}
if
(
fmtp_get_value
(
parameters
.
c_str
(),
"consecutive_loss_probability"
,
value
,
sizeof
(
value
))){
params
.
consecutive_loss_probability
=
atof
(
value
);
params
.
consecutive_loss_probability
=
(
float
)
atof
(
value
);
}
if
(
fmtp_get_value
(
parameters
.
c_str
(),
"jitter_burst_density"
,
value
,
sizeof
(
value
))){
params
.
jitter_burst_density
=
atof
(
value
);
params
.
jitter_burst_density
=
(
float
)
atof
(
value
);
}
if
(
fmtp_get_value
(
parameters
.
c_str
(),
"jitter_strength"
,
value
,
sizeof
(
value
))){
params
.
jitter_strength
=
atof
(
value
);
params
.
jitter_strength
=
(
float
)
atof
(
value
);
}
if
(
fmtp_get_value
(
parameters
.
c_str
(),
"mode"
,
value
,
sizeof
(
value
))){
OrtpNetworkSimulatorMode
mode
=
ortp_network_simulator_mode_from_string
(
value
);
...
...
daemon/daemon-pipetest.c
View file @
26aa7123
...
...
@@ -19,8 +19,11 @@ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#define _GNU_SOURCE
#include <fcntl.h>
#include <stdio.h>
#ifndef _WIN32
#include <poll.h>
#endif
...
...
@@ -29,9 +32,8 @@ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
static
int
running
=
1
;
int
main
(
int
argc
,
char
*
argv
[]){
struct
pollfd
pfds
[
2
]
=
{{
0
}};
char
buf
[
4096
];
int
fd
;
char
buf
[
32768
];
ortp_pipe_t
fd
;
/* handle args */
if
(
argc
<
2
)
{
...
...
@@ -39,21 +41,51 @@ int main(int argc, char *argv[]){
return
1
;
}
fd
=
ortp_client_pipe_connect
(
argv
[
1
]);
ortp_init
();
ortp_set_log_level_mask
(
NULL
,
ORTP_MESSAGE
|
ORTP_WARNING
|
ORTP_ERROR
|
ORTP_FATAL
);
if
(
fd
==-
1
){
ortp_set_log_level_mask
(
NULL
,
ORTP_MESSAGE
|
ORTP_WARNING
|
ORTP_ERROR
|
ORTP_FATAL
);
fd
=
ortp_client_pipe_connect
(
argv
[
1
]);
if
(
fd
==
(
ortp_pipe_t
)
-
1
){
ortp_error
(
"Could not connect to control pipe: %s"
,
strerror
(
errno
));
return
-
1
;
}
#ifdef _WIN32
DWORD
fdwMode
,
fdwOldMode
;
HANDLE
hin
=
GetStdHandle
(
STD_INPUT_HANDLE
);
HANDLE
hout
=
GetStdHandle
(
STD_OUTPUT_HANDLE
);
GetConsoleMode
(
hin
,
&
fdwOldMode
);
fdwMode
=
fdwOldMode
^
ENABLE_MOUSE_INPUT
^
ENABLE_WINDOW_INPUT
;
SetConsoleMode
(
hin
,
fdwMode
);
FlushConsoleInputBuffer
(
hin
);
while
(
running
)
{
DWORD
read
=
0
;
DWORD
written
=
0
;
ReadFile
(
hin
,
buf
,
sizeof
(
buf
),
&
read
,
NULL
);
if
(
read
>
2
)
{
buf
[
read
-
2
]
=
'\0'
;
// Remove ending '\r\n'
if
(
ortp_pipe_write
(
fd
,
(
uint8_t
*
)
buf
,
strlen
(
buf
))
<
0
)
{
running
=
0
;
}
else
{
read
=
ortp_pipe_read
(
fd
,
(
uint8_t
*
)
buf
,
sizeof
(
buf
));
if
(
read
>
0
)
{
WriteFile
(
hout
,
buf
,
read
,
&
written
,
NULL
);
}
else
{
running
=
0
;
}
}
}
}
SetConsoleMode
(
hin
,
fdwOldMode
);
#else
struct
pollfd
pfds
[
2
]
=
{
{
0
}
};
int
bytes
;
pfds
[
0
].
fd
=
fd
;
pfds
[
0
].
events
=
POLLIN
;
pfds
[
1
].
fd
=
1
;
pfds
[
1
].
events
=
POLLIN
;
while
(
running
){
int
err
;
int
bytes
;
err
=
poll
(
pfds
,
2
,
-
1
);
if
(
err
>
0
){
/*splice to stdout*/
...
...
@@ -81,6 +113,8 @@ int main(int argc, char *argv[]){
}
}
}
#endif
return
0
;
}
daemon/daemon.cc
View file @
26aa7123
...
...
@@ -18,18 +18,23 @@ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <cstdio>
#ifndef _WIN32
#include <sys/ioctl.h>
#endif
#include <iostream>
#include <iomanip>
#include <sstream>
#include <algorithm>
#include <functional>
#ifdef HAVE_READLINE
#include <readline/readline.h>
#include <readline/history.h>
#endif
#ifndef _WIN32
#include <poll.h>
#endif
#include "daemon.h"
#include "commands/adaptive-jitter-compensation.h"
...
...
@@ -315,8 +320,8 @@ bool DaemonCommand::matches(const char *name) const {
Daemon
::
Daemon
(
const
char
*
config_path
,
const
char
*
factory_config_path
,
const
char
*
log_file
,
const
char
*
pipe_name
,
bool
display_video
,
bool
capture_video
)
:
mLSD
(
0
),
mLogFile
(
NULL
),
mAutoVideo
(
0
),
mCallIds
(
0
),
mProxyIds
(
0
),
mAudioStreamIds
(
0
)
{
ms_mutex_init
(
&
mMutex
,
NULL
);
mServerFd
=
-
1
;
mChildFd
=
-
1
;
mServerFd
=
(
ortp_pipe_t
)
-
1
;
mChildFd
=
(
ortp_pipe_t
)
-
1
;
if
(
pipe_name
==
NULL
)
{
#ifdef HAVE_READLINE
const
char
*
homedir
=
getenv
(
"HOME"
);
...
...
@@ -329,8 +334,12 @@ Daemon::Daemon(const char *config_path, const char *factory_config_path, const c
#endif
}
else
{
mServerFd
=
ortp_server_pipe_create
(
pipe_name
);
#ifndef _WIN32
listen
(
mServerFd
,
2
);
fprintf
(
stdout
,
"Server unix socket created, name=%s fd=%i
\n
"
,
pipe_name
,
mServerFd
);
fprintf
(
stdout
,
"Server unix socket created, name=%s fd=%i
\n
"
,
pipe_name
,
(
int
)
mServerFd
);
#else
fprintf
(
stdout
,
"Named pipe created, name=%s fd=%i
\n
"
,
pipe_name
,
(
int
)
mServerFd
);
#endif
}
if
(
log_file
!=
NULL
)
{
...
...
@@ -566,7 +575,7 @@ void Daemon::iterateStreamStats() {
void
Daemon
::
iterate
()
{
linphone_core_iterate
(
mLc
);
iterateStreamStats
();
if
(
mChildFd
==
-
1
)
{
if
(
mChildFd
==
(
ortp_pipe_t
)
-
1
)
{
if
(
!
mEventQueue
.
empty
())
{
Response
*
r
=
mEventQueue
.
front
();
mEventQueue
.
pop
();
...
...
@@ -595,8 +604,8 @@ void Daemon::sendResponse(const Response &resp) {
char
buf
[
4096
]
=
{
0
};
int
size
;
size
=
resp
.
toBuf
(
buf
,
sizeof
(
buf
));
if
(
mChildFd
!=
-
1
)
{
if
(
write
(
mChildFd
,
buf
,
size
)
==
-
1
)
{
if
(
mChildFd
!=
(
ortp_pipe_t
)
-
1
)
{
if
(
ortp_pipe_
write
(
mChildFd
,
(
uint8_t
*
)
buf
,
size
)
==
-
1
)
{
ms_error
(
"Fail to write to pipe: %s"
,
strerror
(
errno
));
}
}
else
{
...
...
@@ -606,43 +615,64 @@ void Daemon::sendResponse(const Response &resp) {
}
char
*
Daemon
::
readPipe
(
char
*
buffer
,
int
buflen
)
{
#ifdef _WIN32
if
(
mChildFd
==
(
ortp_pipe_t
)
-
1
)
{
mChildFd
=
ortp_server_pipe_accept_client
(
mServerFd
);
ms_message
(
"Client accepted"
);
}
if
(
mChildFd
!=
(
ortp_pipe_t
)
-
1
)
{
int
ret
=
ortp_pipe_read
(
mChildFd
,
(
uint8_t
*
)
buffer
,
buflen
);
if
(
ret
==
-
1
)
{
ms_error
(
"Fail to read from pipe: %s"
,
strerror
(
errno
));
mChildFd
=
(
ortp_pipe_t
)
-
1
;
}
else
{
if
(
ret
==
0
)
{
ms_message
(
"Client disconnected"
);
mChildFd
=
(
ortp_pipe_t
)
-
1
;
return
NULL
;
}
buffer
[
ret
]
=
0
;
return
buffer
;
}
}
#else
struct
pollfd
pfd
[
2
];
int
nfds
=
1
;
memset
(
&
pfd
[
0
],
0
,
sizeof
(
pfd
));
if
(
mServerFd
!=
-
1
)
{
if
(
mServerFd
!=
(
ortp_pipe_t
)
-
1
)
{
pfd
[
0
].
events
=
POLLIN
;
pfd
[
0
].
fd
=
mServerFd
;
}
if
(
mChildFd
!=
-
1
)
{
if
(
mChildFd
!=
(
ortp_pipe_t
)
-
1
)
{
pfd
[
1
].
events
=
POLLIN
;
pfd
[
1
].
fd
=
mChildFd
;
nfds
++
;
}
int
err
=
poll
(
pfd
,
nfds
,
50
);
if
(
err
>
0
)
{
if
(
mServerFd
!=
-
1
&&
(
pfd
[
0
].
revents
&
POLLIN
))
{
if
(
mServerFd
!=
(
ortp_pipe_t
)
-
1
&&
(
pfd
[
0
].
revents
&
POLLIN
))
{
struct
sockaddr_storage
addr
;
socklen_t
addrlen
=
sizeof
(
addr
);
int
childfd
=
accept
(
mServerFd
,
(
struct
sockaddr
*
)
&
addr
,
&
addrlen
);
if
(
childfd
!=
-
1
)
{
if
(
mChildFd
!=
-
1
)
{
if
(
mChildFd
!=
(
ortp_pipe_t
)
-
1
)
{
ms_error
(
"Cannot accept two client at the same time"
);
close
(
childfd
);
}
else
{
mChildFd
=
childfd
;
mChildFd
=
(
ortp_pipe_t
)
childfd
;
return
NULL
;
}
}
}
if
(
mChildFd
!=
-
1
&&
(
pfd
[
1
].
revents
&
POLLIN
))
{
if
(
mChildFd
!=
(
ortp_pipe_t
)
-
1
&&
(
pfd
[
1
].
revents
&
POLLIN
))
{
int
ret
;
if
((
ret
=
read
(
mChildFd
,
buffer
,
buflen
))
==
-
1
)
{
if
((
ret
=
ortp_pipe_
read
(
mChildFd
,
(
uint8_t
*
)
buffer
,
buflen
))
==
-
1
)
{
ms_error
(
"Fail to read from pipe: %s"
,
strerror
(
errno
));
}
else
{
if
(
ret
==
0
)
{
ms_message
(
"Client disconnected"
);
close
(
mChildFd
);
mChildFd
=
-
1
;
ortp_server_pipe_close_client
(
mChildFd
);
mChildFd
=
(
ortp_pipe_t
)
-
1
;
return
NULL
;
}
buffer
[
ret
]
=
0
;
...
...
@@ -650,6 +680,7 @@ char *Daemon::readPipe(char *buffer, int buflen) {
}
}
}
#endif
return
NULL
;
}
...
...
@@ -780,7 +811,7 @@ int Daemon::run() {
startThread
();
while
(
mRunning
)
{
bool
eof
=
false
;
if
(
mServerFd
==
-
1
)
{
if
(
mServerFd
==
(
ortp_pipe_t
)
-
1
)
{
ret
=
readLine
(
line
,
&
eof
);
if
(
ret
&&
ret
[
0
]
!=
'\0'
)
{
#ifdef HAVE_READLINE
...
...
@@ -793,7 +824,7 @@ int Daemon::run() {
if
(
ret
&&
ret
[
0
]
!=
'\0'
)
{
execCommand
(
ret
);
}
if
(
mServerFd
==
-
1
&&
ret
!=
NULL
)
{
if
(
mServerFd
==
(
ortp_pipe_t
)
-
1
&&
ret
!=
NULL
)
{
free
(
ret
);
}
if
(
eof
&&
mRunning
)
{
...
...
@@ -836,10 +867,10 @@ Daemon::~Daemon() {
enableLSD
(
false
);
linphone_core_destroy
(
mLc
);
if
(
mChildFd
!=
-
1
)
{
close
(
mChildFd
);
if
(
mChildFd
!=
(
ortp_pipe_t
)
-
1
)
{
ortp_server_pipe_close_client
(
mChildFd
);
}
if
(
mServerFd
!=
-
1
)
{
if
(
mServerFd
!=
(
ortp_pipe_t
)
-
1
)
{
ortp_server_pipe_close
(
mServerFd
);
}
if
(
mLogFile
!=
NULL
)
{
...
...
@@ -884,6 +915,7 @@ int main(int argc, char *argv[]) {
return
-
1
;
}
pipe_name
=
argv
[
++
i
];
stats_enabled
=
false
;
}
else
if
(
strcmp
(
argv
[
i
],
"--factory-config"
)
==
0
)
{
if
(
i
+
1
>=
argc
)
{
fprintf
(
stderr
,
"no file specify after --factory-config
\n
"
);
...
...
daemon/daemon.h
View file @
26aa7123
...
...
@@ -264,8 +264,8 @@ private:
LinphoneSoundDaemon
*
mLSD
;
std
::
list
<
DaemonCommand
*>
mCommands
;
std
::
queue
<
Response
*>
mEventQueue
;
in
t
mServerFd
;
in
t
mChildFd
;
ortp_pipe_
t
mServerFd
;
ortp_pipe_
t
mChildFd
;
std
::
string
mHistfile
;
bool
mRunning
;
bool
mUseStatsEvents
;
...
...
include/linphone/core_utils.h
View file @
26aa7123
...
...
@@ -30,23 +30,23 @@ typedef struct _LinphoneSoundDaemon LinphoneSoundDaemon;
typedef
void
(
*
LsdEndOfPlayCallback
)(
LsdPlayer
*
p
);
void
lsd_player_set_callback
(
LsdPlayer
*
p
,
LsdEndOfPlayCallback
cb
);
void
lsd_player_set_user_pointer
(
LsdPlayer
*
p
,
void
*
up
);
void
*
lsd_player_get_user_pointer
(
const
LsdPlayer
*
p
);
int
lsd_player_play
(
LsdPlayer
*
p
,
const
char
*
filename
);
int
lsd_player_stop
(
LsdPlayer
*
p
);
void
lsd_player_enable_loop
(
LsdPlayer
*
p
,
bool_t
loopmode
);
bool_t
lsd_player_loop_enabled
(
const
LsdPlayer
*
p
);
void
lsd_player_set_gain
(
LsdPlayer
*
p
,
float
gain
);
LinphoneSoundDaemon
*
lsd_player_get_daemon
(
const
LsdPlayer
*
p
);
LinphoneSoundDaemon
*
linphone_sound_daemon_new
(
MSFactory
*
factory
,
const
char
*
cardname
,
int
rate
,
int
nchannels
);
LsdPlayer
*
linphone_sound_daemon_get_player
(
LinphoneSoundDaemon
*
lsd
);
void
linphone_sound_daemon_release_player
(
LinphoneSoundDaemon
*
lsd
,
LsdPlayer
*
lsdplayer
);
void
linphone_sound_daemon_stop_all_players
(
LinphoneSoundDaemon
*
obj
);
void
linphone_sound_daemon_release_all_players
(
LinphoneSoundDaemon
*
obj
);
void
linphone_core_use_sound_daemon
(
LinphoneCore
*
lc
,
LinphoneSoundDaemon
*
lsd
);
void
linphone_sound_daemon_destroy
(
LinphoneSoundDaemon
*
obj
);
LINPHONE_PUBLIC
void
lsd_player_set_callback
(
LsdPlayer
*
p
,
LsdEndOfPlayCallback
cb
);
LINPHONE_PUBLIC
void
lsd_player_set_user_pointer
(
LsdPlayer
*
p
,
void
*
up
);
LINPHONE_PUBLIC
void
*
lsd_player_get_user_pointer
(
const
LsdPlayer
*
p
);
LINPHONE_PUBLIC
int
lsd_player_play
(
LsdPlayer
*
p
,
const
char
*
filename
);
LINPHONE_PUBLIC
int
lsd_player_stop
(
LsdPlayer
*
p
);
LINPHONE_PUBLIC
void
lsd_player_enable_loop
(
LsdPlayer
*
p
,
bool_t
loopmode
);
LINPHONE_PUBLIC
bool_t
lsd_player_loop_enabled
(
const
LsdPlayer
*
p
);
LINPHONE_PUBLIC
void
lsd_player_set_gain
(
LsdPlayer
*
p
,
float
gain
);
LINPHONE_PUBLIC
LinphoneSoundDaemon
*
lsd_player_get_daemon
(
const
LsdPlayer
*
p
);
LINPHONE_PUBLIC
LinphoneSoundDaemon
*
linphone_sound_daemon_new
(
MSFactory
*
factory
,
const
char
*
cardname
,
int
rate
,
int
nchannels
);
LINPHONE_PUBLIC
LsdPlayer
*
linphone_sound_daemon_get_player
(
LinphoneSoundDaemon
*
lsd
);
LINPHONE_PUBLIC
void
linphone_sound_daemon_release_player
(
LinphoneSoundDaemon
*
lsd
,
LsdPlayer
*
lsdplayer
);
LINPHONE_PUBLIC
void
linphone_sound_daemon_stop_all_players
(
LinphoneSoundDaemon
*
obj
);
LINPHONE_PUBLIC
void
linphone_sound_daemon_release_all_players
(
LinphoneSoundDaemon
*
obj
);
LINPHONE_PUBLIC
void
linphone_core_use_sound_daemon
(
LinphoneCore
*
lc
,
LinphoneSoundDaemon
*
lsd
);
LINPHONE_PUBLIC
void
linphone_sound_daemon_destroy
(
LinphoneSoundDaemon
*
obj
);
/**
* Enum describing the result of the echo canceller calibration process.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment