diff options
author | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-10-28 21:49:27 +0000 |
---|---|---|
committer | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-10-28 21:49:27 +0000 |
commit | 762f16995626eff862c41dcc307ddf1f8779e359 (patch) | |
tree | 93888bb17ef9068a1feb3c40b552a4d316472f3a | |
parent | dc1aa1ffdc495cfff0c483ac6056bc8b203ee3ff (diff) |
add API call to properly sum two frames of SLINEAR data
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@6883 f38db490-d61c-443f-a65b-d21fe96a405b
-rwxr-xr-x | frame.c | 22 | ||||
-rwxr-xr-x | include/asterisk/frame.h | 11 |
2 files changed, 33 insertions, 0 deletions
@@ -1271,3 +1271,25 @@ int ast_frame_adjust_volume(struct ast_frame *f, int adjustment) return 0; } + +int ast_frame_slinear_sum(struct ast_frame *f1, struct ast_frame *f2) +{ + int count; + short *data1, *data2; + + if ((f1->frametype != AST_FRAME_VOICE) || (f1->subclass != AST_FORMAT_SLINEAR)) + return -1; + + if ((f2->frametype != AST_FRAME_VOICE) || (f2->subclass != AST_FORMAT_SLINEAR)) + return -1; + + if (f1->samples != f2->samples) + return -1; + + for (count = 0, data1 = f1->data, data2 = f2->data; + count < f1->samples; + count++, data1++, data2++) + ast_slinear_saturated_add(data1, *data2); + + return 0; +} diff --git a/include/asterisk/frame.h b/include/asterisk/frame.h index c17e2eecb..551138005 100755 --- a/include/asterisk/frame.h +++ b/include/asterisk/frame.h @@ -427,6 +427,17 @@ static inline int ast_codec_interp_len(int format) */ int ast_frame_adjust_volume(struct ast_frame *f, int adjustment); +/*! + \brief Sums two frames of audio samples. + \param f1 The first frame (which will contain the result) + \param f2 The second frame + \return 0 for success, non-zero for an error + + The frames must be AST_FRAME_VOICE and must contain AST_FORMAT_SLINEAR samples, + and must contain the same number of samples. + */ +int ast_frame_slinear_sum(struct ast_frame *f1, struct ast_frame *f2); + #if defined(__cplusplus) || defined(c_plusplus) } #endif |