summaryrefslogtreecommitdiff
path: root/pjmedia/src/pjmedia/stream.c
diff options
context:
space:
mode:
authorLiong Sauw Ming <ming@teluu.com>2016-02-04 06:11:58 +0000
committerLiong Sauw Ming <ming@teluu.com>2016-02-04 06:11:58 +0000
commit56f6e91963bbd507c300e4f2a806a8db2935566d (patch)
treee0ab33100a9c31f1c7872ddc22787011a04b64c3 /pjmedia/src/pjmedia/stream.c
parente6a13543eb90a73b095c4aa84038753d31ff2b39 (diff)
Fixed #1904: Support for Opus codec
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@5239 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia/src/pjmedia/stream.c')
-rw-r--r--pjmedia/src/pjmedia/stream.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/pjmedia/src/pjmedia/stream.c b/pjmedia/src/pjmedia/stream.c
index 1b66dd87..d799dfd4 100644
--- a/pjmedia/src/pjmedia/stream.c
+++ b/pjmedia/src/pjmedia/stream.c
@@ -2109,6 +2109,15 @@ PJ_DEF(pj_status_t) pjmedia_stream_create( pjmedia_endpt *endpt,
goto err_cleanup;
/* Open the codec. */
+
+ /* The clock rate for Opus codec is not static,
+ * it's negotiated in the SDP.
+ */
+ if (!pj_stricmp2(&info->fmt.encoding_name, "opus")) {
+ stream->codec_param.info.clock_rate = info->fmt.clock_rate;
+ stream->codec_param.info.channel_cnt = info->fmt.channel_cnt;
+ }
+
status = pjmedia_codec_open(stream->codec, &stream->codec_param);
if (status != PJ_SUCCESS)
goto err_cleanup;
@@ -2223,6 +2232,12 @@ PJ_DEF(pj_status_t) pjmedia_stream_create( pjmedia_endpt *endpt,
stream->has_g722_mpeg_bug = PJ_TRUE;
/* RTP clock rate = 1/2 real clock rate */
stream->rtp_tx_ts_len_per_pkt >>= 1;
+ } else if (!pj_stricmp2(&info->fmt.encoding_name, "opus")) {
+ unsigned opus_ts_modifier = 48000 / afd->clock_rate;
+ stream->rtp_rx_check_cnt = 0;
+ stream->has_g722_mpeg_bug = PJ_TRUE;
+ stream->rtp_tx_ts_len_per_pkt *= opus_ts_modifier;
+ stream->rtp_rx_ts_len_per_frame *= opus_ts_modifier;
}
#endif