summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2006-04-27 22:37:08 +0000
committerBenny Prijono <bennylp@teluu.com>2006-04-27 22:37:08 +0000
commitccc07a592e872946cd1e07677cd767f7448bc979 (patch)
tree2b44b0cbfccb86e5f1e6efa6874a87b75643b697
parent4bab78a009cbfc57426066ebb5070e7609d4be04 (diff)
Initial support for stereo codecs, and added L16 codecs. Also better handling for case remote media is restarted
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@412 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r--pjsip-apps/build/Samples-vc.mak4
-rw-r--r--pjsip-apps/src/samples/confsample.c5
-rw-r--r--pjsip-apps/src/samples/level.c5
-rw-r--r--pjsip-apps/src/samples/playfile.c8
-rw-r--r--pjsip-apps/src/samples/playsine.c6
-rw-r--r--pjsip-apps/src/samples/recfile.c4
-rw-r--r--pjsip-apps/src/samples/resampleplay.c10
-rw-r--r--pjsip-apps/src/samples/simpleua.c10
-rw-r--r--pjsip-apps/src/samples/siprtp.c2
-rw-r--r--pjsip-apps/src/samples/sndinfo.c26
-rw-r--r--pjsip-apps/src/samples/streamutil.c110
-rw-r--r--pjsip/src/pjsua-lib/pjsua_core.c36
-rw-r--r--pjsip/src/pjsua-lib/pjsua_settings.c2
13 files changed, 145 insertions, 83 deletions
diff --git a/pjsip-apps/build/Samples-vc.mak b/pjsip-apps/build/Samples-vc.mak
index 1aa5d9ac..857f0c15 100644
--- a/pjsip-apps/build/Samples-vc.mak
+++ b/pjsip-apps/build/Samples-vc.mak
@@ -5,9 +5,9 @@ CC_NAME = vc6-$(BUILD_MODE)
LIBEXT = .lib
!if "$(BUILD_MODE)" == "debug"
-BUILD_FLAGS = /MTd /Od /Zi
+BUILD_FLAGS = /MTd /Od /Zi /W4
!else
-BUILD_FLAGS = /Ox /MD /DNDEBUG
+BUILD_FLAGS = /Ox /MD /DNDEBUG /W4
!endif
PJLIB_LIB = ..\..\pjlib\lib\pjlib-$(MACHINE_NAME)-$(OS_NAME)-$(CC_NAME)$(LIBEXT)
diff --git a/pjsip-apps/src/samples/confsample.c b/pjsip-apps/src/samples/confsample.c
index 843b99fa..539a2c05 100644
--- a/pjsip-apps/src/samples/confsample.c
+++ b/pjsip-apps/src/samples/confsample.c
@@ -184,7 +184,7 @@ int main(int argc, char *argv[])
}
#if RECORDER
- status = pjmedia_file_writer_port_create( pool, "confrecord.wav",
+ status = pjmedia_wav_writer_port_create( pool, "confrecord.wav",
clock_rate, channel_count,
samples_per_frame,
bits_per_sample, 0, 0, NULL,
@@ -204,9 +204,10 @@ int main(int argc, char *argv[])
for (i=0; i<file_count; ++i) {
/* Load the WAV file to file port. */
- status = pjmedia_file_player_port_create(
+ status = pjmedia_wav_player_port_create(
pool, /* pool. */
argv[i+pj_optind], /* filename */
+ 0, /* use default ptime */
0, /* flags */
0, /* buf size */
NULL, /* user data */
diff --git a/pjsip-apps/src/samples/level.c b/pjsip-apps/src/samples/level.c
index 8723d62f..e2169841 100644
--- a/pjsip-apps/src/samples/level.c
+++ b/pjsip-apps/src/samples/level.c
@@ -45,6 +45,8 @@ static int app_perror( const char *sender, const char *title,
{
char errmsg[PJ_ERR_MSG_SIZE];
+ PJ_UNUSED_ARG(sender);
+
pj_strerror(status, errmsg, sizeof(errmsg));
printf("%s: %s [code=%d]\n", title, errmsg, status);
@@ -96,8 +98,9 @@ int main(int argc, char *argv[])
);
/* Create file media port from the WAV file */
- status = pjmedia_file_player_port_create( pool, /* memory pool */
+ status = pjmedia_wav_player_port_create( pool, /* memory pool */
argv[1], /* file to play */
+ 0, /* use default ptime*/
0, /* flags */
0, /* default buffer */
NULL, /* user data */
diff --git a/pjsip-apps/src/samples/playfile.c b/pjsip-apps/src/samples/playfile.c
index 1ae9a6cf..06f4c1f2 100644
--- a/pjsip-apps/src/samples/playfile.c
+++ b/pjsip-apps/src/samples/playfile.c
@@ -76,6 +76,9 @@ int main(int argc, char *argv[])
pj_status_t status;
+ PJ_UNUSED_ARG(argc);
+
+
/* Must init PJLIB first: */
status = pj_init();
PJ_ASSERT_RETURN(status == PJ_SUCCESS, 1);
@@ -99,8 +102,9 @@ int main(int argc, char *argv[])
);
/* Create file media port from the WAV file */
- status = pjmedia_file_player_port_create( pool, /* memory pool */
+ status = pjmedia_wav_player_port_create( pool, /* memory pool */
argv[1], /* file to play */
+ 20, /* ptime. */
0, /* flags */
0, /* default buffer */
NULL, /* user data */
@@ -115,7 +119,7 @@ int main(int argc, char *argv[])
status = pjmedia_snd_port_create_player(
pool, /* pool */
-1, /* use default dev. */
- file_port->info.sample_rate, /* clock rate. */
+ file_port->info.clock_rate, /* clock rate. */
file_port->info.channel_count, /* # of channels. */
file_port->info.samples_per_frame, /* samples per frame. */
file_port->info.bits_per_sample, /* bits per sample. */
diff --git a/pjsip-apps/src/samples/playsine.c b/pjsip-apps/src/samples/playsine.c
index 2e83221d..931f9123 100644
--- a/pjsip-apps/src/samples/playsine.c
+++ b/pjsip-apps/src/samples/playsine.c
@@ -48,6 +48,8 @@ static int app_perror( const char *sender, const char *title,
{
char errmsg[PJ_ERR_MSG_SIZE];
+ PJ_UNUSED_ARG(sender);
+
pj_strerror(status, errmsg, sizeof(errmsg));
printf("%s: %s [code=%d]\n", title, errmsg, status);
@@ -127,7 +129,7 @@ static pj_status_t create_sine_port(pj_pool_t *pool,
port->info.name = pj_str("sine generator");
port->info.need_info = 0;
port->info.pt = 0xFF;
- port->info.sample_rate = sampling_rate;
+ port->info.clock_rate = sampling_rate;
port->info.samples_per_frame = sampling_rate * 20 / 1000 * channel_count;
port->info.bytes_per_frame = port->info.samples_per_frame * 2;
port->info.type = PJMEDIA_TYPE_AUDIO;
@@ -229,7 +231,7 @@ int main(int argc, char *argv[])
status = pjmedia_snd_port_create_player(
pool, /* pool */
-1, /* use default dev. */
- sine_port->info.sample_rate, /* clock rate. */
+ sine_port->info.clock_rate, /* clock rate. */
sine_port->info.channel_count, /* # of channels. */
sine_port->info.samples_per_frame, /* samples per frame. */
sine_port->info.bits_per_sample, /* bits per sample. */
diff --git a/pjsip-apps/src/samples/recfile.c b/pjsip-apps/src/samples/recfile.c
index 3fd96125..2236dcad 100644
--- a/pjsip-apps/src/samples/recfile.c
+++ b/pjsip-apps/src/samples/recfile.c
@@ -104,7 +104,7 @@ int main(int argc, char *argv[])
);
/* Create WAVE file writer port. */
- status = pjmedia_file_writer_port_create( pool, argv[1],
+ status = pjmedia_wav_writer_port_create( pool, argv[1],
CLOCK_RATE,
NCHANNELS,
SAMPLES_PER_FRAME,
@@ -120,7 +120,7 @@ int main(int argc, char *argv[])
status = pjmedia_snd_port_create_rec(
pool, /* pool */
-1, /* use default dev. */
- file_port->info.sample_rate, /* clock rate. */
+ file_port->info.clock_rate, /* clock rate. */
file_port->info.channel_count, /* # of channels. */
file_port->info.samples_per_frame, /* samples per frame. */
file_port->info.bits_per_sample, /* bits per sample. */
diff --git a/pjsip-apps/src/samples/resampleplay.c b/pjsip-apps/src/samples/resampleplay.c
index 62b6761d..e4440e15 100644
--- a/pjsip-apps/src/samples/resampleplay.c
+++ b/pjsip-apps/src/samples/resampleplay.c
@@ -108,8 +108,8 @@ int main(int argc, char *argv[])
);
/* Create the file port. */
- status = pjmedia_file_player_port_create( pool, argv[pj_optind], 0,
- 0, 0, &file_port);
+ status = pjmedia_wav_player_port_create( pool, argv[pj_optind], 0, 0,
+ 0, 0, &file_port);
if (status != PJ_SUCCESS) {
app_perror(THIS_FILE, "Unable to open file", status);
return 1;
@@ -128,12 +128,12 @@ int main(int argc, char *argv[])
/* Create the resample port. */
status = pjmedia_resample_port_create( pool, 1, 1,
- file_port->info.sample_rate,
+ file_port->info.clock_rate,
sampling_rate,
channel_count,
(unsigned)(
samples_per_frame * 1.0 *
- file_port->info.sample_rate /
+ file_port->info.clock_rate /
sampling_rate),
&resample_port);
if (status != PJ_SUCCESS) {
@@ -186,7 +186,7 @@ int main(int argc, char *argv[])
printf("Playing %s at sampling rate %d (original file sampling rate=%d)\n",
- argv[pj_optind], sampling_rate, file_port->info.sample_rate);
+ argv[pj_optind], sampling_rate, file_port->info.clock_rate);
puts("");
puts("Press <ENTER> to stop playing and quit");
diff --git a/pjsip-apps/src/samples/simpleua.c b/pjsip-apps/src/samples/simpleua.c
index 8079225d..59991af7 100644
--- a/pjsip-apps/src/samples/simpleua.c
+++ b/pjsip-apps/src/samples/simpleua.c
@@ -419,6 +419,8 @@ int main(int argc, char *argv[])
static void call_on_state_changed( pjsip_inv_session *inv,
pjsip_event *e)
{
+ PJ_UNUSED_ARG(e);
+
if (inv->state == PJSIP_INV_STATE_DISCONNECTED) {
PJ_LOG(3,(THIS_FILE, "Call DISCONNECTED [reason=%d (%s)]",
@@ -441,6 +443,8 @@ static void call_on_state_changed( pjsip_inv_session *inv,
static void call_on_forked(pjsip_inv_session *inv, pjsip_event *e)
{
/* To be done... */
+ PJ_UNUSED_ARG(inv);
+ PJ_UNUSED_ARG(e);
}
@@ -633,7 +637,7 @@ static void call_on_media_update( pjsip_inv_session *inv,
status = pjmedia_snd_port_create_player(
inv->pool, /* pool */
-1, /* sound dev id */
- media_port->info.sample_rate, /* clock rate */
+ media_port->info.clock_rate, /* clock rate */
media_port->info.channel_count, /* channel count */
media_port->info.samples_per_frame, /* samples per frame*/
media_port->info.bits_per_sample, /* bits per sample */
@@ -642,7 +646,7 @@ static void call_on_media_update( pjsip_inv_session *inv,
if (status != PJ_SUCCESS) {
app_perror( THIS_FILE, "Unable to create sound player", status);
PJ_LOG(3,(THIS_FILE, "%d %d %d %d",
- media_port->info.sample_rate, /* clock rate */
+ media_port->info.clock_rate, /* clock rate */
media_port->info.channel_count, /* channel count */
media_port->info.samples_per_frame, /* samples per frame*/
media_port->info.bits_per_sample /* bits per sample */
@@ -659,7 +663,7 @@ static void call_on_media_update( pjsip_inv_session *inv,
status = pjmedia_snd_port_create_rec(
inv->pool, /* pool */
-1, /* sound dev id */
- media_port->info.sample_rate, /* clock rate */
+ media_port->info.clock_rate, /* clock rate */
media_port->info.channel_count, /* channel count */
media_port->info.samples_per_frame, /* samples per frame*/
media_port->info.bits_per_sample, /* bits per sample */
diff --git a/pjsip-apps/src/samples/siprtp.c b/pjsip-apps/src/samples/siprtp.c
index ed14154f..6d1b1dcc 100644
--- a/pjsip-apps/src/samples/siprtp.c
+++ b/pjsip-apps/src/samples/siprtp.c
@@ -1238,7 +1238,7 @@ static void call_on_media_update( pjsip_inv_session *inv,
}
}
- audio->clock_rate = audio->si.fmt.sample_rate;
+ audio->clock_rate = audio->si.fmt.clock_rate;
audio->samples_per_frame = audio->clock_rate * codec_desc->ptime / 1000;
audio->bytes_per_frame = codec_desc->bit_rate * codec_desc->ptime / 1000 / 8;
diff --git a/pjsip-apps/src/samples/sndinfo.c b/pjsip-apps/src/samples/sndinfo.c
index ee9a385c..3a184164 100644
--- a/pjsip-apps/src/samples/sndinfo.c
+++ b/pjsip-apps/src/samples/sndinfo.c
@@ -73,10 +73,10 @@ static void enum_devices(void)
puts("Run with -h to get more options");
}
-static int clock_rate;
-static int play_counter;
-static int rec_counter;
-static int min_delay = 0xFFFF, max_delay;
+static unsigned clock_rate;
+static unsigned play_counter;
+static unsigned rec_counter;
+static unsigned min_delay = 0xFFFF, max_delay;
static char play_delays[1000];
static pj_uint32_t last_play_timestamp, last_rec_timestamp;
@@ -85,6 +85,12 @@ static pj_status_t play_cb(void *user_data, pj_uint32_t timestamp,
{
static pj_timestamp last_cb;
+
+ PJ_UNUSED_ARG(user_data);
+ PJ_UNUSED_ARG(output);
+ PJ_UNUSED_ARG(size);
+
+
++play_counter;
last_play_timestamp = timestamp;
@@ -92,7 +98,7 @@ static pj_status_t play_cb(void *user_data, pj_uint32_t timestamp,
pj_get_timestamp(&last_cb);
} else if (play_counter <= PJ_ARRAY_SIZE(play_delays)) {
pj_timestamp now;
- int delay;
+ unsigned delay;
pj_get_timestamp(&now);
@@ -104,7 +110,7 @@ static pj_status_t play_cb(void *user_data, pj_uint32_t timestamp,
last_cb = now;
- play_delays[play_counter-1] = delay;
+ play_delays[play_counter-1] = (char)delay;
}
return PJ_SUCCESS;
@@ -113,6 +119,12 @@ static pj_status_t play_cb(void *user_data, pj_uint32_t timestamp,
static pj_status_t rec_cb(void *user_data, pj_uint32_t timestamp,
const void *input, unsigned size)
{
+
+ PJ_UNUSED_ARG(size);
+ PJ_UNUSED_ARG(input);
+ PJ_UNUSED_ARG(user_data);
+
+
++rec_counter;
if (timestamp - last_rec_timestamp >= clock_rate) {
@@ -248,7 +260,7 @@ int main(int argc, char *argv[])
} else if (argc == 6) {
int dev_id;
- pjmedia_dir dir;
+ pjmedia_dir dir = PJMEDIA_DIR_NONE;
int nchannel;
int bits;
diff --git a/pjsip-apps/src/samples/streamutil.c b/pjsip-apps/src/samples/streamutil.c
index 8c412c83..686a2efe 100644
--- a/pjsip-apps/src/samples/streamutil.c
+++ b/pjsip-apps/src/samples/streamutil.c
@@ -31,9 +31,7 @@ static const char *desc =
"\n"
"\n"
" Options:\n"
- " --codec=CODEC Set the codec name. Valid codec names are: \n"
- " pcma, pcmu, gsm, speexnb, speexwb, speexuwb. \n"
- " (default: pcma). \n"
+ " --codec=CODEC Set the codec name. \n"
" --local-port=PORT Set local RTP port (default=4000) \n"
" --remote=IP:PORT Set the remote peer. If this option is set, \n"
" the program will transmit RTP audio to the \n"
@@ -64,22 +62,6 @@ static const char *desc =
#define THIS_FILE "stream.c"
-struct codec
-{
- char *name;
- char *encoding_name;
- int pt;
- int clock_rate;
-} codec[] =
-{
- { "pcma", "pcma", PJMEDIA_RTP_PT_PCMA, 8000 },
- { "pcmu", "pcmu", PJMEDIA_RTP_PT_PCMU, 8000 },
- { "gsm", "gsm", PJMEDIA_RTP_PT_GSM, 8000 },
- { "speexnb", "speex", 120, 8000 },
- { "speexwb", "speex", 121, 16000 },
- { "speexuwb", "speex", 122, 32000 },
-};
-
/* Prototype */
static void print_stream_stat(pjmedia_stream *stream);
@@ -101,6 +83,9 @@ static pj_status_t init_codecs(pjmedia_endpt *med_endpt)
status = pjmedia_codec_speex_init(med_endpt, 0, -1, -1);
PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
+ status = pjmedia_codec_l16_init(med_endpt, 0);
+ PJ_ASSERT_RETURN(status == PJ_SUCCESS, status);
+
return PJ_SUCCESS;
}
@@ -110,7 +95,7 @@ static pj_status_t init_codecs(pjmedia_endpt *med_endpt)
*/
static pj_status_t create_stream( pj_pool_t *pool,
pjmedia_endpt *med_endpt,
- unsigned codec_index,
+ const pjmedia_codec_info *codec_info,
pjmedia_dir dir,
pj_uint16_t local_port,
const pj_sockaddr_in *rem_addr,
@@ -127,11 +112,8 @@ static pj_status_t create_stream( pj_pool_t *pool,
/* Initialize stream info formats */
info.type = PJMEDIA_TYPE_AUDIO;
info.dir = dir;
- info.fmt.encoding_name = pj_str(codec[codec_index].encoding_name);
- info.fmt.type = PJMEDIA_TYPE_AUDIO;
- info.fmt.sample_rate = codec[codec_index].clock_rate;
- info.fmt.pt = codec[codec_index].pt;
- info.tx_pt = codec[codec_index].pt;
+ pj_memcpy(&info.fmt, codec_info, sizeof(pjmedia_codec_info));
+ info.tx_pt = codec_info->pt;
info.ssrc = pj_rand();
@@ -200,6 +182,14 @@ static pj_status_t create_stream( pj_pool_t *pool,
/*
+ * usage()
+ */
+static void usage()
+{
+ puts(desc);
+}
+
+/*
* main()
*/
int main(int argc, char *argv[])
@@ -217,10 +207,11 @@ int main(int argc, char *argv[])
/* Default values */
- int codec_index = 0;
+ const pjmedia_codec_info *codec_info;
pjmedia_dir dir = PJMEDIA_DIR_DECODING;
pj_sockaddr_in remote_addr;
pj_uint16_t local_port = 4000;
+ char *codec_id = NULL;
char *rec_file = NULL;
char *play_file = NULL;
@@ -233,6 +224,7 @@ int main(int argc, char *argv[])
OPT_SEND_RECV = 'b',
OPT_SEND_ONLY = 's',
OPT_RECV_ONLY = 'i',
+ OPT_HELP = 'h',
};
struct pj_getopt_option long_options[] = {
@@ -244,6 +236,7 @@ int main(int argc, char *argv[])
{ "send-recv", 0, 0, OPT_SEND_RECV },
{ "send-only", 0, 0, OPT_SEND_ONLY },
{ "recv-only", 0, 0, OPT_RECV_ONLY },
+ { "help", 0, 0, OPT_HELP },
{ NULL, 0, 0, 0 },
};
@@ -261,25 +254,11 @@ int main(int argc, char *argv[])
/* Parse arguments */
pj_optind = 0;
- while((c=pj_getopt_long(argc,argv, "", long_options, &option_index))!=-1) {
+ while((c=pj_getopt_long(argc,argv, "h", long_options, &option_index))!=-1) {
switch (c) {
case OPT_CODEC:
- {
- unsigned i;
- for (i=0; i<PJ_ARRAY_SIZE(codec); ++i) {
- if (pj_ansi_stricmp(pj_optarg, codec[i].name)==0) {
- break;
- }
- }
-
- if (i == PJ_ARRAY_SIZE(codec)) {
- printf("Error: unknown codec %s\n", pj_optarg);
- return 1;
- }
-
- codec_index = i;
- }
+ codec_id = pj_optarg;
break;
case OPT_LOCAL_PORT:
@@ -323,6 +302,10 @@ int main(int argc, char *argv[])
dir = PJMEDIA_DIR_DECODING;
break;
+ case OPT_HELP:
+ usage();
+ return 1;
+
default:
printf("Invalid options %s\n", argv[pj_optind]);
return 1;
@@ -369,8 +352,26 @@ int main(int argc, char *argv[])
PJ_ASSERT_RETURN(status == PJ_SUCCESS, 1);
+ /* Find which codec to use. */
+ if (codec_id) {
+ unsigned count = 1;
+ pj_str_t str_codec_id = pj_str(codec_id);
+ pjmedia_codec_mgr *codec_mgr = pjmedia_endpt_get_codec_mgr(med_endpt);
+ status = pjmedia_codec_mgr_find_codecs_by_id( codec_mgr,
+ &str_codec_id, &count,
+ &codec_info, NULL);
+ if (status != PJ_SUCCESS) {
+ printf("Error: unable to find codec %s\n", codec_id);
+ return 1;
+ }
+ } else {
+ /* Default to pcmu */
+ pjmedia_codec_mgr_get_codec_info( pjmedia_endpt_get_codec_mgr(med_endpt),
+ 0, &codec_info);
+ }
+
/* Create stream based on program arguments */
- status = create_stream(pool, med_endpt, codec_index, dir, local_port,
+ status = create_stream(pool, med_endpt, codec_info, dir, local_port,
&remote_addr, &stream);
if (status != PJ_SUCCESS)
goto on_exit;
@@ -382,9 +383,12 @@ int main(int argc, char *argv[])
if (play_file) {
+ unsigned wav_ptime;
- status = pjmedia_file_player_port_create(pool, play_file, 0,
- -1, NULL, &play_file_port);
+ wav_ptime = stream_port->info.samples_per_frame * 1000 /
+ stream_port->info.clock_rate;
+ status = pjmedia_wav_player_port_create(pool, play_file, wav_ptime,
+ 0, -1, NULL, &play_file_port);
if (status != PJ_SUCCESS) {
app_perror(THIS_FILE, "Unable to use file", status);
goto on_exit;
@@ -409,21 +413,21 @@ int main(int argc, char *argv[])
/* Create sound device port. */
if (dir == PJMEDIA_DIR_ENCODING_DECODING)
status = pjmedia_snd_port_create(pool, -1, -1,
- stream_port->info.sample_rate,
+ stream_port->info.clock_rate,
stream_port->info.channel_count,
stream_port->info.samples_per_frame,
stream_port->info.bits_per_sample,
0, &snd_port);
else if (dir == PJMEDIA_DIR_ENCODING)
status = pjmedia_snd_port_create_rec(pool, -1,
- stream_port->info.sample_rate,
+ stream_port->info.clock_rate,
stream_port->info.channel_count,
stream_port->info.samples_per_frame,
stream_port->info.bits_per_sample,
0, &snd_port);
else
status = pjmedia_snd_port_create_player(pool, -1,
- stream_port->info.sample_rate,
+ stream_port->info.clock_rate,
stream_port->info.channel_count,
stream_port->info.samples_per_frame,
stream_port->info.bits_per_sample,
@@ -576,12 +580,12 @@ static void print_stream_stat(pjmedia_stream *stream)
printf(" Info: audio %.*s@%dHz, %dms/frame, %sB/s (%sB/s +IP hdr)\n",
(int)port->info.encoding_name.slen,
port->info.encoding_name.ptr,
- port->info.sample_rate,
- port->info.samples_per_frame * 1000 / port->info.sample_rate,
- good_number(bps, port->info.bytes_per_frame * port->info.sample_rate /
- port->info.sample_rate),
+ port->info.clock_rate,
+ port->info.samples_per_frame * 1000 / port->info.clock_rate,
+ good_number(bps, port->info.bytes_per_frame * port->info.clock_rate /
+ port->info.samples_per_frame),
good_number(ipbps, (port->info.bytes_per_frame+32) *
- port->info.sample_rate / port->info.sample_rate));
+ port->info.clock_rate / port->info.clock_rate));
if (stat.rx.update_cnt == 0)
strcpy(last_update, "never");
diff --git a/pjsip/src/pjsua-lib/pjsua_core.c b/pjsip/src/pjsua-lib/pjsua_core.c
index 461aebb3..0bfb062c 100644
--- a/pjsip/src/pjsua-lib/pjsua_core.c
+++ b/pjsip/src/pjsua-lib/pjsua_core.c
@@ -662,6 +662,21 @@ static pj_status_t init_media(void)
pjsua.codec_cnt++;
#endif /* PJMEDIA_HAS_GSM_CODEC */
+#if PJMEDIA_HAS_L16_CODEC
+ /* Register L16 */
+ status = pjmedia_codec_l16_init(pjsua.med_endpt, 0);
+ if (status != PJ_SUCCESS) {
+ pjsua_perror(THIS_FILE, "Error initializing L16 codec",
+ status);
+ return status;
+ }
+
+ pjsua.codec_arg[pjsua.codec_cnt] = pj_str("l16");
+ pjsua.codec_deinit[pjsua.codec_cnt] = &pjmedia_codec_l16_deinit;
+ pjsua.codec_cnt++;
+#endif /* PJMEDIA_HAS_L16_CODEC */
+
+
#if PJMEDIA_HAS_G711_CODEC
/* Register PCMA and PCMU */
status = pjmedia_codec_g711_init(pjsua.med_endpt);
@@ -731,6 +746,23 @@ static pj_status_t init_media(void)
}
#endif /* PJMEDIA_HAS_GSM_CODEC */
+#if PJMEDIA_HAS_L16_CODEC
+ /* Is it l16? */
+ else if (!pj_stricmp2(&pjsua.codec_arg[i], "l16")) {
+
+ status = pjmedia_codec_l16_init(pjsua.med_endpt, 0);
+ if (status != PJ_SUCCESS) {
+ pjsua_perror(THIS_FILE, "Error initializing L16 codec",
+ status);
+ return status;
+ }
+
+ pjsua.codec_deinit[i] = &pjmedia_codec_l16_deinit;
+
+ pjsua.clock_rate = 44100;
+ }
+#endif /* PJMEDIA_HAS_L16_CODEC */
+
#if PJMEDIA_HAS_G711_CODEC
/* Is it pcma/pcmu? */
else if (!pj_stricmp2(&pjsua.codec_arg[i], "pcmu") ||
@@ -794,8 +826,8 @@ static pj_status_t init_media(void)
pj_str_t port_name;
/* Create the file player port. */
- status = pjmedia_file_player_port_create( pjsua.pool, pjsua.wav_file,
- 0, -1, NULL,
+ status = pjmedia_wav_player_port_create( pjsua.pool, pjsua.wav_file,
+ 0, 0, -1, NULL,
&pjsua.file_port);
if (status != PJ_SUCCESS) {
pjsua_perror(THIS_FILE,
diff --git a/pjsip/src/pjsua-lib/pjsua_settings.c b/pjsip/src/pjsua-lib/pjsua_settings.c
index 4a02ca11..d811f288 100644
--- a/pjsip/src/pjsua-lib/pjsua_settings.c
+++ b/pjsip/src/pjsua-lib/pjsua_settings.c
@@ -675,7 +675,7 @@ static void dump_media_session(pjmedia_session *session)
i,
info.stream_info[i].fmt.encoding_name.slen,
info.stream_info[i].fmt.encoding_name.ptr,
- info.stream_info[i].fmt.sample_rate / 1000,
+ info.stream_info[i].fmt.clock_rate / 1000,
dir,
rem_addr, rem_port));