PJ_DEF(pj_status_t) pjmedia_endpt_dump(pjmedia_endpt *endpt) { #if PJ_LOG_MAX_LEVEL >= 3 unsigned i, count; pjmedia_codec_info codec_info[32]; unsigned prio[32]; PJ_LOG(3,(THIS_FILE, "Dumping PJMEDIA capabilities:")); count = PJ_ARRAY_SIZE(codec_info); if (pjmedia_codec_mgr_enum_codecs(&endpt->codec_mgr, &count, codec_info, prio) != PJ_SUCCESS) { PJ_LOG(3,(THIS_FILE, " -error: failed to enum codecs")); return PJ_SUCCESS; } PJ_LOG(3,(THIS_FILE, " Total number of installed codecs: %d", count)); for (i=0; i<count; ++i) { const char *type; pjmedia_codec_param param; char bps[32]; switch (codec_info[i].type) { case PJMEDIA_TYPE_AUDIO: type = "Audio"; break; case PJMEDIA_TYPE_VIDEO: type = "Video"; break; default: type = "Unknown type"; break; } if (pjmedia_codec_mgr_get_default_param(&endpt->codec_mgr, &codec_info[i], ¶m) != PJ_SUCCESS) { pj_bzero(¶m, sizeof(pjmedia_codec_param)); } PJ_LOG(3,(THIS_FILE, " %s codec #%2d: pt=%d (%.*s @%dKHz/%d, %sbps, %dms%s%s%s%s%s)", type, i, codec_info[i].pt, (int)codec_info[i].encoding_name.slen, codec_info[i].encoding_name.ptr, codec_info[i].clock_rate/1000, codec_info[i].channel_cnt, good_number(bps, param.info.avg_bps), param.info.frm_ptime * param.setting.frm_per_pkt, (param.setting.vad ? " vad" : ""), (param.setting.cng ? " cng" : ""), (param.setting.plc ? " plc" : ""), (param.setting.penh ? " penh" : ""), (prio[i]==PJMEDIA_CODEC_PRIO_DISABLED?" disabled":""))); } #endif return PJ_SUCCESS; }
void list_codecs(pjmedia_endpt *ep) { unsigned int count = 100; int i; char buffer[100]; pjmedia_codec_mgr *mgr = 0; pjmedia_codec_info codec[20]; mgr = pjmedia_endpt_get_codec_mgr(ep); pjmedia_codec_mgr_enum_codecs(mgr, &count, codec, NULL); PJ_LOG(3, (__FILE__, "THERE ARE %d codecs", count)); for ( i = 0; i < count; i++ ) { pj_bzero(buffer, sizeof(buffer)); pjmedia_codec_info_to_id(&codec[i], buffer, sizeof(buffer)); PJ_LOG(3, (__FILE__, "Codec : %s", buffer)); } }