diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/app_chanspy.c | 18 | ||||
-rw-r--r-- | apps/app_meetme.c | 15 | ||||
-rw-r--r-- | apps/app_mixmonitor.c | 13 |
3 files changed, 31 insertions, 15 deletions
diff --git a/apps/app_chanspy.c b/apps/app_chanspy.c index 03f3b3100..0ea0c369b 100644 --- a/apps/app_chanspy.c +++ b/apps/app_chanspy.c @@ -361,7 +361,7 @@ static void spy_release(struct ast_channel *chan, void *data) static int spy_generate(struct ast_channel *chan, void *data, int len, int samples) { struct chanspy_translation_helper *csth = data; - struct ast_frame *f = NULL; + struct ast_frame *f, *cur; ast_audiohook_lock(&csth->spy_audiohook); if (csth->spy_audiohook.status != AST_AUDIOHOOK_STATUS_RUNNING) { @@ -377,14 +377,16 @@ static int spy_generate(struct ast_channel *chan, void *data, int len, int sampl if (!f) return 0; - if (ast_write(chan, f)) { - ast_frfree(f); - return -1; - } + for (cur = f; cur; cur = AST_LIST_NEXT(cur, frame_list)) { + if (ast_write(chan, cur)) { + ast_frfree(f); + return -1; + } - if (csth->fd) { - if (write(csth->fd, f->data.ptr, f->datalen) < 0) { - ast_log(LOG_WARNING, "write() failed: %s\n", strerror(errno)); + if (csth->fd) { + if (write(csth->fd, cur->data.ptr, cur->datalen) < 0) { + ast_log(LOG_WARNING, "write() failed: %s\n", strerror(errno)); + } } } diff --git a/apps/app_meetme.c b/apps/app_meetme.c index 60f0724b6..c2c6f3e75 100644 --- a/apps/app_meetme.c +++ b/apps/app_meetme.c @@ -3195,9 +3195,18 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, int c } } if (conf->transframe[idx]) { - if (conf->transframe[idx]->frametype != AST_FRAME_NULL) { - if (can_write(chan, confflags) && ast_write(chan, conf->transframe[idx])) { - ast_log(LOG_WARNING, "Unable to write frame to channel %s\n", chan->name); + if ((conf->transframe[idx]->frametype != AST_FRAME_NULL) && + can_write(chan, confflags)) { + struct ast_frame *cur; + + /* the translator may have returned a list of frames, so + write each one onto the channel + */ + for (cur = conf->transframe[idx]; cur; cur = AST_LIST_NEXT(cur, frame_list)) { + if (ast_write(chan, cur)) { + ast_log(LOG_WARNING, "Unable to write frame to channel %s\n", chan->name); + break; + } } } } else { diff --git a/apps/app_mixmonitor.c b/apps/app_mixmonitor.c index 725b6a958..aa81f49dd 100644 --- a/apps/app_mixmonitor.c +++ b/apps/app_mixmonitor.c @@ -270,10 +270,15 @@ static void *mixmonitor_thread(void *obj) errflag = 1; } } - - /* Write out frame */ - if (fs) - ast_writestream(fs, fr); + + /* Write out the frame(s) */ + if (fs) { + struct ast_frame *cur; + + for (cur = fr; cur; cur = AST_LIST_NEXT(cur, frame_list)) { + ast_writestream(fs, cur); + } + } } else { ast_mutex_unlock(&mixmonitor->mixmonitor_ds->lock); } |