From f2660c0a29b649a3d60f190da65c17223c813517 Mon Sep 17 00:00:00 2001 From: wm4 Date: Sat, 26 Oct 2013 12:59:33 +0200 Subject: af_volume: uncrustify Also, use more C99 and remove "register" keywords. --- audio/filter/af_volume.c | 179 ++++++++++++++++++++++------------------------- 1 file changed, 85 insertions(+), 94 deletions(-) (limited to 'audio') diff --git a/audio/filter/af_volume.c b/audio/filter/af_volume.c index 876b1136ce..ab5e448b05 100644 --- a/audio/filter/af_volume.c +++ b/audio/filter/af_volume.c @@ -31,123 +31,114 @@ // Data for specific instances of this filter typedef struct af_volume_s { - float level[AF_NCH]; // Gain level for each channel - int soft; // Enable/disable soft clipping - int fast; // Use fix-point volume control -}af_volume_t; + float level[AF_NCH]; // Gain level for each channel + int soft; // Enable/disable soft clipping + int fast; // Use fix-point volume control +} af_volume_t; // Initialization and runtime control -static int control(struct af_instance* af, int cmd, void* arg) +static int control(struct af_instance *af, int cmd, void *arg) { - af_volume_t* s = (af_volume_t*)af->setup; + af_volume_t *s = (af_volume_t *)af->setup; - switch(cmd){ - case AF_CONTROL_REINIT: - // Sanity check - if(!arg) return AF_ERROR; + switch (cmd) { + case AF_CONTROL_REINIT: + // Sanity check + if (!arg) + return AF_ERROR; - mp_audio_copy_config(af->data, (struct mp_audio*)arg); + mp_audio_copy_config(af->data, (struct mp_audio *)arg); - if(s->fast && (((struct mp_audio*)arg)->format != (AF_FORMAT_FLOAT_NE))){ - mp_audio_set_format(af->data, AF_FORMAT_S16_NE); + if (s->fast && (((struct mp_audio *)arg)->format != (AF_FORMAT_FLOAT_NE))) + mp_audio_set_format(af->data, AF_FORMAT_S16_NE); + else { + // Cutoff set to 10Hz for forgetting factor + mp_audio_set_format(af->data, AF_FORMAT_FLOAT_NE); + } + return af_test_output(af, (struct mp_audio *)arg); + case AF_CONTROL_COMMAND_LINE: { + float v = 1000.0; + float vol[AF_NCH]; + int i; + sscanf((char *)arg, "%f:%i:%i", &v, &s->soft, &s->fast); + float dest = 0.0; + if (v < 1000) + af_from_dB(1, &v, &dest, 20.0, -200.0, 60.0); + for (i = 0; i < AF_NCH; i++) + vol[i] = dest; + return control(af, AF_CONTROL_VOLUME_LEVEL | AF_CONTROL_SET, vol); } - else{ - // Cutoff set to 10Hz for forgetting factor - mp_audio_set_format(af->data, AF_FORMAT_FLOAT_NE); + case AF_CONTROL_VOLUME_LEVEL | AF_CONTROL_SET: + memcpy(s->level, arg, sizeof(float) * AF_NCH); + return AF_OK; + case AF_CONTROL_VOLUME_LEVEL | AF_CONTROL_GET: + memcpy(arg, s->level, sizeof(float) * AF_NCH); + return AF_OK; } - return af_test_output(af,(struct mp_audio*)arg); - case AF_CONTROL_COMMAND_LINE:{ - float v=1000.0; - float vol[AF_NCH]; - int i; - sscanf((char*)arg,"%f:%i:%i", &v, &s->soft, &s->fast); - float dest = 0.0; - if (v < 1000) - af_from_dB(1,&v,&dest,20.0,-200.0,60.0); - for(i=0;ilevel, arg, sizeof(float) * AF_NCH); - return AF_OK; - case AF_CONTROL_VOLUME_LEVEL | AF_CONTROL_GET: - memcpy(arg, s->level, sizeof(float) * AF_NCH); - return AF_OK; - } - return AF_UNKNOWN; + return AF_UNKNOWN; } // Deallocate memory -static void uninit(struct af_instance* af) +static void uninit(struct af_instance *af) { free(af->data); free(af->setup); } // Filter data through filter -static struct mp_audio* play(struct af_instance* af, struct mp_audio* data) +static struct mp_audio *play(struct af_instance *af, struct mp_audio *data) { - struct mp_audio* c = data; // Current working data - af_volume_t* s = (af_volume_t*)af->setup; // Setup for this instance - register int nch = c->nch; // Number of channels - register int i = 0; + struct mp_audio *c = data; // Current working data + af_volume_t *s = (af_volume_t *)af->setup; // Setup for this instance + int nch = c->nch; // Number of channels - // Basic operation volume control only (used on slow machines) - if(af->data->format == (AF_FORMAT_S16_NE)){ - int16_t* a = (int16_t*)c->audio; // Audio data - int len = c->len/2; // Number of samples - for (int ch = 0; ch < nch; ch++) { - int vol = 256.0 * s->level[ch]; - if (vol != 256) { - for(i=ch;i> 8; - a[i]=clamp(x,SHRT_MIN,SHRT_MAX); - } - } + if (af->data->format == AF_FORMAT_S16_NE) { + int16_t *a = (int16_t *)c->audio; // Audio data + int len = c->len / 2; // Number of samples + for (int ch = 0; ch < nch; ch++) { + int vol = 256.0 * s->level[ch]; + if (vol != 256) { + for (int i = ch; i < len; i += nch) { + int x = (a[i] * vol) >> 8; + a[i] = clamp(x, SHRT_MIN, SHRT_MAX); + } + } + } + } else if (af->data->format == AF_FORMAT_FLOAT_NE) { + float *a = (float *)c->audio; // Audio data + int len = c->len / 4; // Number of samples + for (int ch = 0; ch < nch; ch++) { + // Volume control (fader) + if (s->level[ch] != 1.0) { + for (int i = ch; i < len; i += nch) { + float x = a[i]; + // Set volume + x *= s->level[ch]; + /* Soft clipping, the sound of a dream, thanks to Jon Wattes + post to Musicdsp.org */ + a[i] = s->soft ? af_softclip(x) : clamp(x, -1.0, 1.0); + } + } + } } - } - // Machine is fast and data is floating point - else if(af->data->format == (AF_FORMAT_FLOAT_NE)){ - float* a = (float*)c->audio; // Audio data - int len = c->len/4; // Number of samples - for (int ch = 0; ch < nch; ch++) { - // Volume control (fader) - if (s->level[ch] != 1.0) { - for(i=ch;ilevel[ch]; - /* Soft clipping, the sound of a dream, thanks to Jon Wattes - post to Musicdsp.org */ - if(s->soft) - x=af_softclip(x); - // Hard clipping - else - x=clamp(x,-1.0,1.0); - a[i] = x; - } - } - } - } - return c; + return c; } // Allocate memory and set function pointers -static int af_open(struct af_instance* af){ - int i = 0; - af->control=control; - af->uninit=uninit; - af->play=play; - af->mul=1; - af->data=calloc(1,sizeof(struct mp_audio)); - af->setup=calloc(1,sizeof(af_volume_t)); - if(af->data == NULL || af->setup == NULL) - return AF_ERROR; - // Enable volume control and set initial volume to 0dB. - for(i=0;isetup)->level[i] = 1.0; - } - return AF_OK; +static int af_open(struct af_instance *af) +{ + af->control = control; + af->uninit = uninit; + af->play = play; + af->mul = 1; + af->data = calloc(1, sizeof(struct mp_audio)); + af->setup = calloc(1, sizeof(af_volume_t)); + if (af->data == NULL || af->setup == NULL) + return AF_ERROR; + // Enable volume control and set initial volume to 0dB. + for (int i = 0; i < AF_NCH; i++) + ((af_volume_t *)af->setup)->level[i] = 1.0; + return AF_OK; } // Description of this filter -- cgit v1.2.3