bool SipPhone::init_pjmedia() { #if 0 Logger::debug("SipPhone::init_pjmedia..."); #define CLOCK_RATE 8000 #define CHANNEL_COUNT 1 #define SAMPLES_PER_FRAME ((CLOCK_RATE * CHANNEL_COUNT * PJSUA_DEFAULT_AUDIO_FRAME_PTIME) / 1000) pj_status_t status = pjmedia_null_port_create(m_Pool, CLOCK_RATE, 1, SAMPLES_PER_FRAME, 16, &m_mediaPortSilence); if (status != PJ_SUCCESS) { Logger::error("pjmedia_null_port_create() failed (%s)", Helper::getPjStatusAsString(status).c_str()); return false; } status = pjsua_conf_add_port(m_Pool, m_mediaPortSilence, &m_mediaConfSilenceId); if (status != PJ_SUCCESS) { Logger::error("pjsua_conf_add_port() failed (%s)", Helper::getPjStatusAsString(status).c_str()); return false; } #endif return true; }
int main() { pj_caching_pool cp; pjmedia_endpt *med_endpt; pj_pool_t *pool; pjmedia_conf *conf; int i; pjmedia_port *sine_port[SINE_COUNT], *null_port, *conf_port; pjmedia_port *nulls[NULL_COUNT]; unsigned null_slots[NULL_COUNT]; pjmedia_master_port *master_port; pj_status_t status; pj_log_set_level(3); status = pj_init(); PJ_ASSERT_RETURN(status == PJ_SUCCESS, 1); pj_caching_pool_init(&cp, &pj_pool_factory_default_policy, 0); pool = pj_pool_create( &cp.factory, /* pool factory */ "wav", /* pool name. */ 4000, /* init size */ 4000, /* increment size */ NULL /* callback on error */ ); status = pjmedia_endpt_create(&cp.factory, NULL, 1, &med_endpt); PJ_ASSERT_RETURN(status == PJ_SUCCESS, 1); status = pjmedia_conf_create( pool, PORT_COUNT, CLOCK_RATE, 1, SAMPLES_PER_FRAME, 16, PJMEDIA_CONF_NO_DEVICE, &conf); if (status != PJ_SUCCESS) { app_perror(THIS_FILE, "Unable to create conference bridge", status); return 1; } printf("Resampling is %s\n", (HAS_RESAMPLE?"active":"disabled")); /* Create Null ports */ printf("Creating %d null ports..\n", NULL_COUNT); for (i=0; i<NULL_COUNT; ++i) { status = pjmedia_null_port_create(pool, CLOCK_RATE, 1, SAMPLES_PER_FRAME*2, 16, &nulls[i]); PJ_ASSERT_RETURN(status == PJ_SUCCESS, 1); status = pjmedia_conf_add_port(conf, pool, nulls[i], NULL, &null_slots[i]); PJ_ASSERT_RETURN(status == PJ_SUCCESS, 1); } /* Create sine ports. */ printf("Creating %d sine generator ports..\n", SINE_COUNT); for (i=0; i<SINE_COUNT; ++i) { unsigned j, slot; /* Load the WAV file to file port. */ status = create_sine_port(pool, SINE_CLOCK, 1, &sine_port[i]); PJ_ASSERT_RETURN(status == PJ_SUCCESS, 1); /* Add the file port to conference bridge */ status = pjmedia_conf_add_port( conf, /* The bridge */ pool, /* pool */ sine_port[i], /* port to connect */ NULL, /* Use port's name */ &slot /* ptr for slot # */ ); if (status != PJ_SUCCESS) { app_perror(THIS_FILE, "Unable to add conference port", status); return 1; } status = pjmedia_conf_connect_port(conf, slot, 0, 0); PJ_ASSERT_RETURN(status == PJ_SUCCESS, 1); for (j=0; j<NULL_COUNT; ++j) { status = pjmedia_conf_connect_port(conf, slot, null_slots[j], 0); PJ_ASSERT_RETURN(status == PJ_SUCCESS, 1); } } /* Create idle ports */ printf("Creating %d idle ports..\n", IDLE_COUNT); for (i=0; i<IDLE_COUNT; ++i) { pjmedia_port *dummy; status = pjmedia_null_port_create(pool, CLOCK_RATE, 1, SAMPLES_PER_FRAME, 16, &dummy); PJ_ASSERT_RETURN(status == PJ_SUCCESS, 1); status = pjmedia_conf_add_port(conf, pool, dummy, NULL, NULL); PJ_ASSERT_RETURN(status == PJ_SUCCESS, 1); } /* Create null port */ status = pjmedia_null_port_create(pool, CLOCK_RATE, 1, SAMPLES_PER_FRAME, 16, &null_port); PJ_ASSERT_RETURN(status == PJ_SUCCESS, 1); conf_port = pjmedia_conf_get_master_port(conf); /* Create master port */ status = pjmedia_master_port_create(pool, null_port, conf_port, 0, &master_port); pjmedia_master_port_start(master_port); puts("Waiting to settle.."); fflush(stdout); pj_thread_sleep(5000); benchmark(); /* Done. */ return 0; }