diff --git a/frame.c b/frame.c index 5952b1d747f704f4599da74ee6681e08fc9b8c88..63c6c8c9cd45826cb1ad68e91cea6677d7f1cf7b 100755 --- a/frame.c +++ b/frame.c @@ -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 2f603a77a26c5bfad779f5f97bd781988e5818aa..92a228aae870aa05b79bc4e940c427b3ed83c243 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);