Загрузка данных
/* Init conference bridge. */
status = pjmedia_conf_create2(pjsua_var.pool, ¶m, &pjsua_var.mconf);
PJ_DEF(pj_status_t) pjmedia_conf_create2(pj_pool_t *pool,const pjmedia_conf_param *param, pjmedia_conf **p_conf)
{
PJ_ASSERT_RETURN(param, PJ_EINVAL);
return pjmedia_conf_create(pool, param->max_slots, param->sampling_rate, param->channel_count, param->samples_per_frame,
param->bits_per_sample, param->options, p_conf);
}
/*
* Create conference bridge.
*/
PJ_DEF(pj_status_t) pjmedia_conf_create( pj_pool_t *pool_,unsigned max_ports, unsigned clock_rate,unsigned channel_count,
unsigned samples_per_frame,unsigned bits_per_sample, unsigned options,pjmedia_conf **p_conf )
{
pj_pool_t *pool;
pjmedia_conf *conf;
const pj_str_t name = { "Conf", 4 };
pj_status_t status;
PJ_ASSERT_RETURN(samples_per_frame > 0, PJ_EINVAL);
/* Can only accept 16bits per sample, for now.. */
PJ_ASSERT_RETURN(bits_per_sample == 16, PJ_EINVAL);
PJ_LOG(5,(THIS_FILE, "Creating conference bridge with %d ports",
max_ports));
/* Create own pool */
pool = pj_pool_create(pool_->factory, name.ptr, 512, 512, NULL);
if (!pool) {
PJ_PERROR(1, (THIS_FILE, PJ_ENOMEM, "Create failed in alloc"));
return PJ_ENOMEM;
}
/* Create and init conf structure. */
conf = PJ_POOL_ZALLOC_T(pool, pjmedia_conf);
PJ_ASSERT_RETURN(conf, PJ_ENOMEM);
conf->pool = pool;
conf->ports = (struct conf_port**) pj_pool_zalloc(pool, max_ports*sizeof(void*));
PJ_ASSERT_RETURN(conf->ports, PJ_ENOMEM);
conf->options = options;
conf->max_ports = max_ports;
conf->clock_rate = clock_rate;
conf->channel_count = channel_count;
conf->samples_per_frame = samples_per_frame;
conf->bits_per_sample = bits_per_sample;
printf("%s(%d) clock_rate=%u samples_per_frame=%u\n",__FUNCTION__,__LINE__,conf->clock_rate,conf->samples_per_frame);
/* Create and initialize the master port interface. */
conf->master_port = PJ_POOL_ZALLOC_T(pool, pjmedia_port);
PJ_ASSERT_RETURN(conf->master_port, PJ_ENOMEM);
pjmedia_port_info_init(&conf->master_port->info, &name, SIGNATURE, clock_rate, channel_count, bits_per_sample,samples_per_frame);
conf->master_port->port_data.pdata = conf;
conf->master_port->port_data.ldata = 0;
conf->master_port->get_frame = &get_frame;
conf->master_port->put_frame = &put_frame;
conf->master_port->on_destroy = &destroy_port;
/* Create port zero for sound device. */
status = create_sound_port(pool, conf);
if (status != PJ_SUCCESS) {
pjmedia_conf_destroy(conf);
return status;
}
/* Create mutex. */
status = pj_mutex_create_recursive(pool, "conf", &conf->mutex);
if (status != PJ_SUCCESS) {
pjmedia_conf_destroy(conf);
return status;
}
/* If sound device was created, connect sound device to the
* master port.
*/
if (conf->snd_dev_port) {
status = pjmedia_snd_port_connect( conf->snd_dev_port,
conf->master_port );
if (status != PJ_SUCCESS) {
pjmedia_conf_destroy(conf);
return status;
}
}
/* Allocate synchronized operation queues */
conf->op_queue = PJ_POOL_ZALLOC_T(pool, op_entry);
conf->op_queue_free = PJ_POOL_ZALLOC_T(pool, op_entry);
if (!conf->op_queue || !conf->op_queue_free) {
PJ_PERROR(1, (THIS_FILE, PJ_ENOMEM, "Create failed in create queues"));
pjmedia_conf_destroy(conf);
return PJ_ENOMEM;
}
pj_list_init(conf->op_queue);
pj_list_init(conf->op_queue_free);
/* Done */
*p_conf = conf;
return PJ_SUCCESS;
}
Надо переинициализировать pjsua_var.mconf