diff options
-rwxr-xr-x | frame.c | 10 | ||||
-rwxr-xr-x | include/asterisk/utils.h | 12 |
2 files changed, 13 insertions, 9 deletions
@@ -1257,15 +1257,19 @@ int ast_frame_adjust_volume(struct ast_frame *f, int adjustment) { int count; short *fdata = f->data; + short adjust_value = abs(adjustment); if ((f->frametype != AST_FRAME_VOICE) || (f->subclass != AST_FORMAT_SLINEAR)) return -1; + if (!adjustment) + return 0; + for (count = 0; count < f->samples; count++) { if (adjustment > 0) { - ast_slinear_saturated_multiply(&fdata[count], abs(adjustment)); + ast_slinear_saturated_multiply(&fdata[count], &adjust_value); } else if (adjustment < 0) { - ast_slinear_saturated_divide(&fdata[count], abs(adjustment)); + ast_slinear_saturated_divide(&fdata[count], &adjust_value); } } @@ -1289,7 +1293,7 @@ int ast_frame_slinear_sum(struct ast_frame *f1, struct ast_frame *f2) for (count = 0, data1 = f1->data, data2 = f2->data; count < f1->samples; count++, data1++, data2++) - ast_slinear_saturated_add(data1, *data2); + ast_slinear_saturated_add(data1, data2); return 0; } diff --git a/include/asterisk/utils.h b/include/asterisk/utils.h index 2f603a77a..92a228aae 100755 --- a/include/asterisk/utils.h +++ b/include/asterisk/utils.h @@ -169,11 +169,11 @@ char *ast_uri_encode(char *string, char *outbuf, int buflen, int doreserved); */ void ast_uri_decode(char *s); -static inline void ast_slinear_saturated_add(short *input, short value) +static inline void ast_slinear_saturated_add(short *input, short *value) { int res; - res = (int) *input + value; + res = (int) *input + *value; if (res > 32767) *input = 32767; else if (res < -32767) @@ -182,11 +182,11 @@ static inline void ast_slinear_saturated_add(short *input, short value) *input = (short) res; } -static inline void ast_slinear_saturated_multiply(short *input, short value) +static inline void ast_slinear_saturated_multiply(short *input, short *value) { int res; - res = (int) *input * value; + res = (int) *input * *value; if (res > 32767) *input = 32767; else if (res < -32767) @@ -195,9 +195,9 @@ static inline void ast_slinear_saturated_multiply(short *input, short value) *input = (short) res; } -static inline void ast_slinear_saturated_divide(short *input, short value) +static inline void ast_slinear_saturated_divide(short *input, short *value) { - *input /= value; + *input /= *value; } extern int test_for_thread_safety(void); |