Showing the changes to src/src_linear.c (1 of 3 files). Show all
Unified · Split
| @@ -43,6 +43,7 @@ static void linear_reset (SRC_PRIVATE *psrc) ; · 42 unmodified lines | |||
| 43 | typedef struct | 43 | typedef struct |
| 44 | { int linear_magic_marker ; | 44 | { int linear_magic_marker ; |
| 45 | int channels ; | 45 | int channels ; |
| 46 | int reset ; | ||
| 46 | long in_count, in_used ; | 47 | long in_count, in_used ; |
| 47 | long out_count, out_gen ; | 48 | long out_count, out_gen ; |
| 48 | float last_value [1] ; | 49 | float last_value [1] ; |
| @@ -62,6 +63,13 @@ linear_process (SRC_PRIVATE *psrc, SRC_DATA *data) · 13 unmodified lines | |||
| 62 | 63 | ||
| 63 | linear = (LINEAR_DATA*) psrc->private_data ; | 64 | linear = (LINEAR_DATA*) psrc->private_data ; |
| 64 | 65 | ||
| 66 | if (linear->reset) | ||
| 67 | { /* If we have just been reset, set the last_value data. */ | ||
| 68 | for (ch = 0 ; ch < linear->channels ; ch++) | ||
| 69 | linear->last_value [ch] = data->data_in [ch] ; | ||
| 70 | linear->reset = 0 ; | ||
| 71 | } ; | ||
| 72 | |||
| 65 | linear->in_count = data->input_frames * linear->channels ; | 73 | linear->in_count = data->input_frames * linear->channels ; |
| 66 | linear->out_count = data->output_frames * linear->channels ; | 74 | linear->out_count = data->output_frames * linear->channels ; |
| 67 | linear->in_used = linear->out_gen = 0 ; | 75 | linear->in_used = linear->out_gen = 0 ; |
| @@ -201,6 +209,9 @@ linear_reset (SRC_PRIVATE *psrc) · 133 unmodified lines | |||
| 201 | if (linear == NULL) | 209 | if (linear == NULL) |
| 202 | return ; | 210 | return ; |
| 203 | 211 | ||
| 212 | linear->channels = psrc->channels ; | ||
| 213 | linear->reset = 1 ; | ||
| 214 | |||
| 204 | memset (linear->last_value, 0, sizeof (linear->last_value [0]) * linear->channels) ; | 215 | memset (linear->last_value, 0, sizeof (linear->last_value [0]) * linear->channels) ; |
| 205 | } /* linear_reset */ | 216 | } /* linear_reset */ |
| 206 | /* | 217 | /* |