summaryrefslogtreecommitdiff
path: root/pjsip/src
diff options
context:
space:
mode:
authorRiza Sulistyo <riza@teluu.com>2015-08-21 06:00:46 +0000
committerRiza Sulistyo <riza@teluu.com>2015-08-21 06:00:46 +0000
commit8c6f78c4426aae98c9d72b14afd010a3458a662d (patch)
tree80fb8c2c54bccfda1464c3571e76fd961cf79c2f /pjsip/src
parent110c26a8ca47442eba6c625646b034be97002823 (diff)
Re #1879:
- Implement set video codec param in PJSUA2 API - Fix bug in videoCodecEnum and updateCodecInfoList git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@5165 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip/src')
-rw-r--r--pjsip/src/pjsua2/endpoint.cpp41
-rw-r--r--pjsip/src/pjsua2/media.cpp55
2 files changed, 82 insertions, 14 deletions
diff --git a/pjsip/src/pjsua2/endpoint.cpp b/pjsip/src/pjsua2/endpoint.cpp
index 7eed8138..137dadf0 100644
--- a/pjsip/src/pjsua2/endpoint.cpp
+++ b/pjsip/src/pjsua2/endpoint.cpp
@@ -1683,7 +1683,7 @@ void Endpoint::updateCodecInfoList(pjsua_codec_info pj_codec[], unsigned count,
CodecInfo *codec_info = new CodecInfo;
codec_info->fromPj(pj_codec[i]);
- codecInfoList.push_back(codec_info);
+ codec_list.push_back(codec_info);
}
pj_leave_critical_section();
}
@@ -1698,7 +1698,7 @@ const CodecInfoVector &Endpoint::videoCodecEnum() throw(Error)
updateCodecInfoList(pj_codec, count, videoCodecInfoList);
#endif
- return codecInfoList;
+ return videoCodecInfoList;
}
void Endpoint::videoCodecSetPriority(const string &codec_id,
@@ -1713,31 +1713,44 @@ void Endpoint::videoCodecSetPriority(const string &codec_id,
#endif
}
-CodecParam Endpoint::videoCodecGetParam(const string &codec_id) const
- throw(Error)
-{
- pjmedia_vid_codec_param *pj_param = NULL;
+VidCodecParam Endpoint::getVideoCodecParam(const string &codec_id) const
+ throw(Error)
+{
+ VidCodecParam codec_param;
#if PJSUA_HAS_VIDEO
- pj_str_t codec_str = str2Pj(codec_id);
+ pjmedia_vid_codec_param pj_param;
+ pj_str_t codec_str = str2Pj(codec_id);
- PJSUA2_CHECK_EXPR(pjsua_vid_codec_get_param(&codec_str, pj_param));
+ PJSUA2_CHECK_EXPR(pjsua_vid_codec_get_param(&codec_str, &pj_param));
+ codec_param.fromPj(pj_param);
#else
PJ_UNUSED_ARG(codec_id);
#endif
- return pj_param;
+ return codec_param;
}
-void Endpoint::videoCodecSetParam(const string &codec_id,
- const CodecParam param) throw(Error)
+void Endpoint::setVideoCodecParam(const string &codec_id,
+ const VidCodecParam &param) throw(Error)
{
#if PJSUA_HAS_VIDEO
pj_str_t codec_str = str2Pj(codec_id);
- pjmedia_vid_codec_param *pj_param = (pjmedia_vid_codec_param*)param;
-
- PJSUA2_CHECK_EXPR(pjsua_vid_codec_set_param(&codec_str, pj_param));
+ pjmedia_vid_codec_param pj_param = param.toPj();
+
+ PJSUA2_CHECK_EXPR(pjsua_vid_codec_set_param(&codec_str, &pj_param));
#else
PJ_UNUSED_ARG(codec_id);
PJ_UNUSED_ARG(param);
#endif
}
+void Endpoint::resetVideoCodecParam(const string &codec_id) throw(Error)
+{
+#if PJSUA_HAS_VIDEO
+ pj_str_t codec_str = str2Pj(codec_id);
+
+ PJSUA2_CHECK_EXPR(pjsua_vid_codec_set_param(&codec_str, NULL));
+#else
+ PJ_UNUSED_ARG(codec_id);
+ PJ_UNUSED_ARG(param);
+#endif
+}
diff --git a/pjsip/src/pjsua2/media.cpp b/pjsip/src/pjsua2/media.cpp
index ba443703..b6b73ea3 100644
--- a/pjsip/src/pjsua2/media.cpp
+++ b/pjsip/src/pjsua2/media.cpp
@@ -1506,3 +1506,58 @@ void CodecInfo::fromPj(const pjsua_codec_info &codec_info)
priority = codec_info.priority;
desc = pj2Str(codec_info.desc);
}
+
+void VidCodecParam::fromPj(const pjmedia_vid_codec_param &param)
+{
+ dir = param.dir;
+ packing = param.packing;
+ ignoreFmtp = param.ignore_fmtp;
+ encMtu = param.enc_mtu;
+ encFmt.fromPj(param.enc_fmt);
+ decFmt.fromPj(param.dec_fmt);
+ setCodecFmtp(param.enc_fmtp, encFmtp);
+ setCodecFmtp(param.dec_fmtp, decFmtp);
+}
+
+pjmedia_vid_codec_param VidCodecParam::toPj() const
+{
+ pjmedia_vid_codec_param param;
+ pj_bzero(&param, sizeof(param));
+ param.dir = dir;
+ param.packing = packing;
+ param.ignore_fmtp = ignoreFmtp;
+ param.enc_mtu = encMtu;
+ param.enc_fmt = encFmt.toPj();
+ param.dec_fmt = decFmt.toPj();
+ getCodecFmtp(encFmtp, param.enc_fmtp);
+ getCodecFmtp(decFmtp, param.dec_fmtp);
+ return param;
+}
+
+void VidCodecParam::setCodecFmtp(const pjmedia_codec_fmtp &in_fmtp,
+ CodecFmtpVector &out_fmtp)
+{
+ unsigned i = 0;
+ for ( ; i<in_fmtp.cnt; ++i) {
+ CodecFmtp fmtp;
+ fmtp.name = pj2Str(in_fmtp.param[i].name);
+ fmtp.val = pj2Str(in_fmtp.param[i].val);
+
+ out_fmtp.push_back(fmtp);
+ }
+}
+
+void VidCodecParam::getCodecFmtp(const CodecFmtpVector &in_fmtp,
+ pjmedia_codec_fmtp &out_fmtp) const
+{
+ CodecFmtpVector::const_iterator i;
+ out_fmtp.cnt = 0;
+ for (i=in_fmtp.begin(); i!=in_fmtp.end();++i) {
+ if (out_fmtp.cnt >= PJMEDIA_CODEC_MAX_FMTP_CNT) {
+ break;
+ }
+ out_fmtp.param[out_fmtp.cnt].name = str2Pj((*i).name);
+ out_fmtp.param[out_fmtp.cnt].val = str2Pj((*i).val);
+ ++out_fmtp.cnt;
+ }
+}