diff options
Diffstat (limited to 'frame.c')
-rwxr-xr-x | frame.c | 10 |
1 files changed, 7 insertions, 3 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; } |