aboutsummaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/app_chanspy.c18
-rw-r--r--apps/app_meetme.c15
-rw-r--r--apps/app_mixmonitor.c13
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);
}