diff options
author | Jenkins2 <jenkins2@gerrit.asterisk.org> | 2017-04-27 17:29:02 -0500 |
---|---|---|
committer | Gerrit Code Review <gerrit2@gerrit.digium.api> | 2017-04-27 17:29:02 -0500 |
commit | 16089ae1c98e92156b1cc784a87d0d9d15535d0f (patch) | |
tree | ab4ab3abd9f6b406a14140403e087e16ac53f2c0 /main | |
parent | 066659a38327f988cba181c0ff23ec9073a7ddb8 (diff) | |
parent | 985a5fd7aac7a39cf9f9502f9e8e06ef216e1d35 (diff) |
Merge "frame: Better handle interpolated frames."
Diffstat (limited to 'main')
-rw-r--r-- | main/audiohook.c | 9 | ||||
-rw-r--r-- | main/translate.c | 6 |
2 files changed, 15 insertions, 0 deletions
diff --git a/main/audiohook.c b/main/audiohook.c index 986f11f84..2cba2de6e 100644 --- a/main/audiohook.c +++ b/main/audiohook.c @@ -945,6 +945,15 @@ static struct ast_frame *audio_audiohook_write_list(struct ast_channel *chan, st if (!(middle_frame = audiohook_list_translate_to_slin(audiohook_list, direction, start_frame))) { return frame; } + + /* If the translation resulted in an interpolated frame then immediately return as audiohooks + * rely on actual media being present to do things. + */ + if (!middle_frame->data.ptr) { + ast_frfree(middle_frame); + return start_frame; + } + samples = middle_frame->samples; /* diff --git a/main/translate.c b/main/translate.c index 168a72a4b..f2aa5886b 100644 --- a/main/translate.c +++ b/main/translate.c @@ -442,8 +442,14 @@ struct ast_frame *ast_trans_frameout(struct ast_trans_pvt *pvt, } if (datalen) { f->datalen = datalen; + f->data.ptr = pvt->outbuf.c; } else { f->datalen = pvt->datalen; + if (!f->datalen) { + f->data.ptr = NULL; + } else { + f->data.ptr = pvt->outbuf.c; + } pvt->datalen = 0; } |