summaryrefslogtreecommitdiffstats
path: root/audio/filter/af_channels.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2017-11-29 20:13:28 +0100
committerwm4 <wm4@nowhere>2017-11-29 21:30:51 +0100
commit3d27a0792b603b749ac546b62ed58cb76ffc5ee9 (patch)
treefeb4769093cd18275ab275f7d8f94437eb6f112e /audio/filter/af_channels.c
parent23d9dc5457c52408533c498c685ad9dd6fd2cee0 (diff)
downloadmpv-3d27a0792b603b749ac546b62ed58cb76ffc5ee9.tar.bz2
mpv-3d27a0792b603b749ac546b62ed58cb76ffc5ee9.tar.xz
af: remove deprecated audio filters
These couldn't be relicensed, and won't survive the LGPL transition. The other existing filters are mostly LGPL (except libaf glue code). This remove the deprecated pan option. I guess it could be restored by inserting a libavfilter filter (if there's one), but for now let it be gone. This temporarily breaks volume control (and things related to it, like replaygain).
Diffstat (limited to 'audio/filter/af_channels.c')
-rw-r--r--audio/filter/af_channels.c255
1 files changed, 0 insertions, 255 deletions
diff --git a/audio/filter/af_channels.c b/audio/filter/af_channels.c
deleted file mode 100644
index 7cd7810d08..0000000000
--- a/audio/filter/af_channels.c
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- * Audio filter that adds and removes channels, according to the
- * command line parameter channels. It is stupid and can only add
- * silence or copy channels, not mix or filter.
- *
- * 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 <http://www.gnu.org/licenses/>.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <inttypes.h>
-
-#include "common/common.h"
-#include "af.h"
-
-#define FR 0
-#define TO 1
-
-typedef struct af_channels_s{
- int route[AF_NCH][2];
- int nch, nr;
- int router;
- char *routes;
-}af_channels_t;
-
-// Local function for copying data
-static void copy(struct af_instance *af, void* in, void* out,
- int ins, int inos,int outs, int outos, int len, int bps)
-{
- switch(bps){
- case 1:{
- int8_t* tin = (int8_t*)in;
- int8_t* tout = (int8_t*)out;
- tin += inos;
- tout += outos;
- len = len/ins;
- while(len--){
- *tout=*tin;
- tin +=ins;
- tout+=outs;
- }
- break;
- }
- case 2:{
- int16_t* tin = (int16_t*)in;
- int16_t* tout = (int16_t*)out;
- tin += inos;
- tout += outos;
- len = len/(2*ins);
- while(len--){
- *tout=*tin;
- tin +=ins;
- tout+=outs;
- }
- break;
- }
- case 3:{
- int8_t* tin = (int8_t*)in;
- int8_t* tout = (int8_t*)out;
- tin += 3 * inos;
- tout += 3 * outos;
- len = len / ( 3 * ins);
- while (len--) {
- tout[0] = tin[0];
- tout[1] = tin[1];
- tout[2] = tin[2];
- tin += 3 * ins;
- tout += 3 * outs;
- }
- break;
- }
- case 4:{
- int32_t* tin = (int32_t*)in;
- int32_t* tout = (int32_t*)out;
- tin += inos;
- tout += outos;
- len = len/(4*ins);
- while(len--){
- *tout=*tin;
- tin +=ins;
- tout+=outs;
- }
- break;
- }
- case 8:{
- int64_t* tin = (int64_t*)in;
- int64_t* tout = (int64_t*)out;
- tin += inos;
- tout += outos;
- len = len/(8*ins);
- while(len--){
- *tout=*tin;
- tin +=ins;
- tout+=outs;
- }
- break;
- }
- default:
- MP_ERR(af, "Unsupported number of bytes/sample: %i"
- " please report this error on the MPlayer mailing list. \n",bps);
- }
-}
-
-// Make sure the routes are sane
-static int check_routes(struct af_instance *af, int nin, int nout)
-{
- af_channels_t* s = af->priv;
- int i;
- if((s->nr < 1) || (s->nr > AF_NCH)){
- MP_ERR(af, "The number of routing pairs must be"
- " between 1 and %i. Current value is %i\n",AF_NCH,s->nr);
- return AF_ERROR;
- }
-
- for(i=0;i<s->nr;i++){
- if((s->route[i][FR] >= nin) || (s->route[i][TO] >= nout)){
- MP_ERR(af, "Invalid routing in pair nr. %i.\n", i);
- return AF_ERROR;
- }
- }
- return AF_OK;
-}
-
-// Initialization and runtime control
-static int control(struct af_instance* af, int cmd, void* arg)
-{
- af_channels_t* s = af->priv;
- switch(cmd){
- case AF_CONTROL_REINIT: ;
-
- struct mp_chmap chmap;
- mp_chmap_set_unknown(&chmap, s->nch);
- mp_audio_set_channels(af->data, &chmap);
-
- // Set default channel assignment
- if(!s->router){
- int i;
- // Make sure this filter isn't redundant
- if(af->data->nch == ((struct mp_audio*)arg)->nch)
- return AF_DETACH;
-
- // If mono: fake stereo
- if(((struct mp_audio*)arg)->nch == 1){
- s->nr = MPMIN(af->data->nch,2);
- for(i=0;i<s->nr;i++){
- s->route[i][FR] = 0;
- s->route[i][TO] = i;
- }
- }
- else{
- s->nr = MPMIN(af->data->nch, ((struct mp_audio*)arg)->nch);
- for(i=0;i<s->nr;i++){
- s->route[i][FR] = i;
- s->route[i][TO] = i;
- }
- }
- }
-
- af->data->rate = ((struct mp_audio*)arg)->rate;
- mp_audio_force_interleaved_format((struct mp_audio*)arg);
- mp_audio_set_format(af->data, ((struct mp_audio*)arg)->format);
- return check_routes(af,((struct mp_audio*)arg)->nch,af->data->nch);
- }
- return AF_UNKNOWN;
-}
-
-static int filter_frame(struct af_instance *af, struct mp_audio *c)
-{
- af_channels_t* s = af->priv;
- int i;
-
- if (!c)
- return 0;
-
- struct mp_audio *l = mp_audio_pool_get(af->out_pool, &af->fmt_out, c->samples);
- if (!l) {
- talloc_free(c);
- return -1;
- }
- mp_audio_copy_attributes(l, c);
-
- // Reset unused channels
- memset(l->planes[0],0,mp_audio_psize(c) / c->nch * l->nch);
-
- if(AF_OK == check_routes(af,c->nch,l->nch))
- for(i=0;i<s->nr;i++)
- copy(af, c->planes[0],l->planes[0],c->nch,s->route[i][FR],
- l->nch,s->route[i][TO],mp_audio_psize(c),c->bps);
-
- talloc_free(c);
- af_add_output_frame(af, l);
- return 0;
-}
-
-// Allocate memory and set function pointers
-static int af_open(struct af_instance* af){
- af->control=control;
- af->filter_frame = filter_frame;
- af_channels_t *s = af->priv;
-
- MP_WARN(af, "This filter is deprecated (no replacement).\n");
-
- // If router scan commandline for routing pairs
- if(s->routes && s->routes[0]){
- char* cp = s->routes;
- int ch = 0;
- // Scan for pairs on commandline
- do {
- int n = 0;
- if (ch >= AF_NCH) {
- MP_FATAL(af, "Can't have more than %d routes.\n", AF_NCH);
- return AF_ERROR;
- }
- sscanf(cp, "%i-%i%n" ,&s->route[ch][FR], &s->route[ch][TO], &n);
- MP_VERBOSE(af, "Routing from channel %i to"
- " channel %i\n",s->route[ch][FR],s->route[ch][TO]);
- cp = &cp[n];
- ch++;
- } while(*cp == ',' && *(cp++));
- s->nr = ch;
- if (s->nr > 0)
- s->router = 1;
- }
-
- return AF_OK;
-}
-
-#define OPT_BASE_STRUCT af_channels_t
-const struct af_info af_info_channels = {
- .info = "Insert or remove channels",
- .name = "channels",
- .open = af_open,
- .priv_size = sizeof(af_channels_t),
- .options = (const struct m_option[]) {
- OPT_INTRANGE("nch", nch, 0, 1, AF_NCH, OPTDEF_INT(2)),
- OPT_STRING("routes", routes, 0),
- {0}
- },
-};