From e2a54bb1ca319652b8c742877a313e378b24e407 Mon Sep 17 00:00:00 2001 From: Paul B Mahol Date: Fri, 12 Aug 2016 19:29:13 +0200 Subject: audio/filter: remove delay audio filter Similar filter is available in libavfilter. --- DOCS/man/af.rst | 28 ------- audio/filter/af.c | 2 - audio/filter/af_delay.c | 194 ------------------------------------------------ wscript_build.py | 1 - 4 files changed, 225 deletions(-) delete mode 100644 audio/filter/af_delay.c diff --git a/DOCS/man/af.rst b/DOCS/man/af.rst index 8fe60250fb..c52c422299 100644 --- a/DOCS/man/af.rst +++ b/DOCS/man/af.rst @@ -312,34 +312,6 @@ Available filters are: ``mpv '--af=format=channels=5.1' '--audio-channels=5.1'`` would always force remixing audio to 5.1 and output it like this. -``delay[=[ch1,ch2,...]]`` - Delays the sound to the loudspeakers such that the sound from the - different channels arrives at the listening position simultaneously. It is - only useful if you have more than 2 loudspeakers. - - ``[ch1,ch2,...]`` - The delay in ms that should be imposed on each channel (floating point - number between 0 and 1000). - - To calculate the required delay for the different channels, do as follows: - - 1. Measure the distance to the loudspeakers in meters in relation to your - listening position, giving you the distances s1 to s5 (for a 5.1 - system). There is no point in compensating for the subwoofer (you will - not hear the difference anyway). - - 2. Subtract the distances s1 to s5 from the maximum distance, i.e. - ``s[i] = max(s) - s[i]; i = 1...5``. - - 3. Calculate the required delays in ms as ``d[i] = 1000*s[i]/342; i = - 1...5``. - - .. admonition:: Example - - ``mpv --af=delay=[10.5,10.5,0,0,7,0] media.avi`` - Would delay front left and right by 10.5 ms, the two rear channels - and the subwoofer by 0 ms and the center channel by 7 ms. - ``drc[=method:target]`` Applies dynamic range compression. This maximizes the volume by compressing the audio signal's dynamic range. (Formerly called ``volnorm``.) diff --git a/audio/filter/af.c b/audio/filter/af.c index d74e912500..a132965295 100644 --- a/audio/filter/af.c +++ b/audio/filter/af.c @@ -31,7 +31,6 @@ #include "af.h" // Static list of filters -extern const struct af_info af_info_delay; extern const struct af_info af_info_channels; extern const struct af_info af_info_format; extern const struct af_info af_info_volume; @@ -46,7 +45,6 @@ extern const struct af_info af_info_lavfi; extern const struct af_info af_info_rubberband; static const struct af_info *const filter_list[] = { - &af_info_delay, &af_info_channels, &af_info_format, &af_info_volume, diff --git a/audio/filter/af_delay.c b/audio/filter/af_delay.c deleted file mode 100644 index 8d1cca8a72..0000000000 --- a/audio/filter/af_delay.c +++ /dev/null @@ -1,194 +0,0 @@ -/* - * This audio filter delays the output signal for the different - * channels and can be used for simple position panning. - * An extension for this filter would be a reverb. - * - * Original author: Anders - * - * This file is part of mpv. - * - * mpv is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * mpv is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with mpv. If not, see . - */ - -#include -#include -#include -#include - -#include "common/common.h" -#include "af.h" - -#define L 65536 - -#define UPDATEQI(qi) qi=(qi+1)&(L-1) - -// Data for specific instances of this filter -typedef struct af_delay_s -{ - void* q[AF_NCH]; // Circular queues used for delaying audio signal - int wi[AF_NCH]; // Write index - int ri; // Read index - float d[AF_NCH]; // Delay [ms] - char *delaystr; -}af_delay_t; - -// Initialization and runtime control -static int control(struct af_instance* af, int cmd, void* arg) -{ - af_delay_t* s = af->priv; - switch(cmd){ - case AF_CONTROL_REINIT:{ - int i; - struct mp_audio *in = arg; - - if (in->bps != 1 && in->bps != 2 && in->bps != 4) { - MP_FATAL(af, "Sample format not supported\n"); - return AF_ERROR; - } - - // Free prevous delay queues - for(i=0;idata->nch;i++) - free(s->q[i]); - - mp_audio_force_interleaved_format(in); - mp_audio_copy_config(af->data, in); - - // Allocate new delay queues - for(i=0;idata->nch;i++){ - s->q[i] = calloc(L,af->data->bps); - if(NULL == s->q[i]) - MP_FATAL(af, "Out of memory\n"); - } - - if(AF_OK != af_from_ms(AF_NCH, s->d, s->wi, af->data->rate, 0.0, 1000.0)) - return AF_ERROR; - s->ri = 0; - for(i=0;id[i],0.0,1000.0)); - MP_TRACE(af, "Channel %i delayed by %i samples\n", - i,s->wi[i]); - } - return AF_OK; - } - } - return AF_UNKNOWN; -} - -// Deallocate memory -static void uninit(struct af_instance* af) -{ - int i; - - for(i=0;ipriv))->q[i]); -} - -static int filter_frame(struct af_instance *af, struct mp_audio *c) -{ - if (!c) - return 0; - af_delay_t* s = af->priv; // Setup for this instance - int nch = c->nch; // Number of channels - int len = mp_audio_psize(c)/c->bps; // Number of sample in data chunk - int ri = 0; - int ch,i; - if (af_make_writeable(af, c) < 0) { - talloc_free(c); - return -1; - } - for(ch=0;chbps){ - case 1:{ - int8_t* a = c->planes[0]; - int8_t* q = s->q[ch]; - int wi = s->wi[ch]; - ri = s->ri; - for(i=ch;iwi[ch] = wi; - break; - } - case 2:{ - int16_t* a = c->planes[0]; - int16_t* q = s->q[ch]; - int wi = s->wi[ch]; - ri = s->ri; - for(i=ch;iwi[ch] = wi; - break; - } - case 4:{ - int32_t* a = c->planes[0]; - int32_t* q = s->q[ch]; - int wi = s->wi[ch]; - ri = s->ri; - for(i=ch;iwi[ch] = wi; - break; - } - } - } - s->ri = ri; - af_add_output_frame(af, c); - return 0; -} - -// Allocate memory and set function pointers -static int af_open(struct af_instance* af){ - af->control=control; - af->uninit=uninit; - af->filter_frame = filter_frame; - af_delay_t *s = af->priv; - int n = 1; - int i = 0; - char* cl = s->delaystr; - while(cl && n && i < AF_NCH ){ - sscanf(cl,"%f%n",&s->d[i],&n); - if(n==0 || cl[n-1] == '\0') - break; - cl=&cl[n]; - if (*cl != ',') - break; - cl++; - i++; - } - return AF_OK; -} - -#define OPT_BASE_STRUCT af_delay_t -const struct af_info af_info_delay = { - .info = "Delay audio filter", - .name = "delay", - .open = af_open, - .priv_size = sizeof(af_delay_t), - .options = (const struct m_option[]) { - OPT_STRING("delays", delaystr, 0), - {0} - }, -}; diff --git a/wscript_build.py b/wscript_build.py index a637f79eea..9f30e741a5 100644 --- a/wscript_build.py +++ b/wscript_build.py @@ -110,7 +110,6 @@ def build(ctx): ( "audio/decode/dec_audio.c" ), ( "audio/filter/af.c" ), ( "audio/filter/af_channels.c" ), - ( "audio/filter/af_delay.c" ), ( "audio/filter/af_drc.c" ), ( "audio/filter/af_equalizer.c" ), ( "audio/filter/af_format.c" ), -- cgit v1.2.3