diff options
Diffstat (limited to 'apps/app_meetme.c')
-rw-r--r-- | apps/app_meetme.c | 53 |
1 files changed, 36 insertions, 17 deletions
diff --git a/apps/app_meetme.c b/apps/app_meetme.c index 18b1e1100..ae60cfb90 100644 --- a/apps/app_meetme.c +++ b/apps/app_meetme.c @@ -1189,6 +1189,8 @@ static struct ast_conference *build_conf(const char *confno, const char *pin, struct ast_conference *cnf; struct dahdi_confinfo dahdic = { 0, }; int confno_int = 0; + struct ast_format_cap *cap_slin = ast_format_cap_alloc_nolock(); + struct ast_format tmp_fmt; AST_LIST_LOCK(&confs); @@ -1197,9 +1199,10 @@ static struct ast_conference *build_conf(const char *confno, const char *pin, break; } - if (cnf || (!make && !dynamic)) + if (cnf || (!make && !dynamic) || !cap_slin) goto cnfout; + ast_format_cap_add(cap_slin, ast_format_set(&tmp_fmt, AST_FORMAT_SLINEAR, 0)); /* Make a new one */ if (!(cnf = ast_calloc(1, sizeof(*cnf))) || !(cnf->usercontainer = ao2_container_alloc(1, NULL, user_no_cmp))) { @@ -1245,10 +1248,10 @@ static struct ast_conference *build_conf(const char *confno, const char *pin, cnf->dahdiconf = dahdic.confno; /* Setup a new channel for playback of audio files */ - cnf->chan = ast_request("DAHDI", AST_FORMAT_SLINEAR, chan, "pseudo", NULL); + cnf->chan = ast_request("DAHDI", cap_slin, chan, "pseudo", NULL); if (cnf->chan) { - ast_set_read_format(cnf->chan, AST_FORMAT_SLINEAR); - ast_set_write_format(cnf->chan, AST_FORMAT_SLINEAR); + ast_set_read_format_by_id(cnf->chan, AST_FORMAT_SLINEAR); + ast_set_write_format_by_id(cnf->chan, AST_FORMAT_SLINEAR); dahdic.chan = 0; dahdic.confno = cnf->dahdiconf; dahdic.confmode = DAHDI_CONF_CONFANN | DAHDI_CONF_CONFANNMON; @@ -1284,6 +1287,7 @@ static struct ast_conference *build_conf(const char *confno, const char *pin, conf_map[confno_int] = 1; cnfout: + cap_slin = ast_format_cap_destroy(cap_slin); if (cnf) ast_atomic_fetchadd_int(&cnf->refcount, refcount); @@ -2260,9 +2264,16 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, struc int setusercount = 0; int confsilence = 0, totalsilence = 0; char *mailbox, *context; + struct ast_format_cap *cap_slin = ast_format_cap_alloc_nolock(); + struct ast_format tmpfmt; + + if (!cap_slin) { + goto conf_run_cleanup; + } + ast_format_cap_add(cap_slin, ast_format_set(&tmpfmt, AST_FORMAT_SLINEAR, 0)); if (!(user = ao2_alloc(sizeof(*user), NULL))) { - return ret; + goto conf_run_cleanup; } /* Possible timeout waiting for marked user */ @@ -2372,9 +2383,9 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, struc ast_mutex_lock(&conf->recordthreadlock); if ((conf->recordthread == AST_PTHREADT_NULL) && ast_test_flag64(confflags, CONFFLAG_RECORDCONF) && - ((conf->lchan = ast_request("DAHDI", AST_FORMAT_SLINEAR, chan, "pseudo", NULL)))) { - ast_set_read_format(conf->lchan, AST_FORMAT_SLINEAR); - ast_set_write_format(conf->lchan, AST_FORMAT_SLINEAR); + ((conf->lchan = ast_request("DAHDI", cap_slin, chan, "pseudo", NULL)))) { + ast_set_read_format_by_id(conf->lchan, AST_FORMAT_SLINEAR); + ast_set_write_format_by_id(conf->lchan, AST_FORMAT_SLINEAR); dahdic.chan = 0; dahdic.confno = conf->dahdiconf; dahdic.confmode = DAHDI_CONF_CONFANN | DAHDI_CONF_CONFANNMON; @@ -2601,12 +2612,12 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, struc ast_indicate(chan, -1); } - if (ast_set_write_format(chan, AST_FORMAT_SLINEAR) < 0) { + if (ast_set_write_format_by_id(chan, AST_FORMAT_SLINEAR) < 0) { ast_log(LOG_WARNING, "Unable to set '%s' to write linear mode\n", chan->name); goto outrun; } - if (ast_set_read_format(chan, AST_FORMAT_SLINEAR) < 0) { + if (ast_set_read_format_by_id(chan, AST_FORMAT_SLINEAR) < 0) { ast_log(LOG_WARNING, "Unable to set '%s' to read linear mode\n", chan->name); goto outrun; } @@ -3167,7 +3178,7 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, struc dtmfstr[1] = '\0'; } - if ((f->frametype == AST_FRAME_VOICE) && (f->subclass.codec == AST_FORMAT_SLINEAR)) { + if ((f->frametype == AST_FRAME_VOICE) && (f->subclass.format.id == AST_FORMAT_SLINEAR)) { if (user->talk.actual) { ast_frame_adjust_volume(f, user->talk.actual); } @@ -3339,9 +3350,9 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, struc } ast_mutex_lock(&conf->recordthreadlock); - if ((conf->recordthread == AST_PTHREADT_NULL) && ast_test_flag64(confflags, CONFFLAG_RECORDCONF) && ((conf->lchan = ast_request("DAHDI", AST_FORMAT_SLINEAR, chan, "pseudo", NULL)))) { - ast_set_read_format(conf->lchan, AST_FORMAT_SLINEAR); - ast_set_write_format(conf->lchan, AST_FORMAT_SLINEAR); + if ((conf->recordthread == AST_PTHREADT_NULL) && ast_test_flag64(confflags, CONFFLAG_RECORDCONF) && ((conf->lchan = ast_request("DAHDI", cap_slin, chan, "pseudo", NULL)))) { + ast_set_read_format_by_id(conf->lchan, AST_FORMAT_SLINEAR); + ast_set_write_format_by_id(conf->lchan, AST_FORMAT_SLINEAR); dahdic.chan = 0; dahdic.confno = conf->dahdiconf; dahdic.confmode = DAHDI_CONF_CONFANN | DAHDI_CONF_CONFANNMON; @@ -3627,7 +3638,7 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, struc if (res > 0) { memset(&fr, 0, sizeof(fr)); fr.frametype = AST_FRAME_VOICE; - fr.subclass.codec = AST_FORMAT_SLINEAR; + ast_format_set(&fr.subclass.format, AST_FORMAT_SLINEAR, 0); fr.datalen = res; fr.samples = res / 2; fr.data.ptr = buf; @@ -3639,7 +3650,7 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, struc )) { int idx; for (idx = 0; idx < AST_FRAME_BITS; idx++) { - if (chan->rawwriteformat & (1 << idx)) { + if (ast_format_to_old_bitfield(&chan->rawwriteformat) & (1 << idx)) { break; } } @@ -3654,7 +3665,11 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, struc mohtempstopped = 1; } if (!conf->transpath[idx]) { - conf->transpath[idx] = ast_translator_build_path((1 << idx), AST_FORMAT_SLINEAR); + struct ast_format src; + struct ast_format dst; + ast_format_set(&src, AST_FORMAT_SLINEAR, 0); + ast_format_from_old_bitfield(&dst, (1 << idx)); + conf->transpath[idx] = ast_translator_build_path(&dst, &src); } if (conf->transpath[idx]) { conf->transframe[idx] = ast_translate(conf->transpath[idx], conf->origframe, 0); @@ -3821,6 +3836,10 @@ bailoutandtrynormal: ao2_ref(user, -1); AST_LIST_UNLOCK(&confs); + +conf_run_cleanup: + cap_slin = ast_format_cap_destroy(cap_slin); + return ret; } |