1/* 2 * This file is part of FFmpeg. 3 * 4 * FFmpeg is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2.1 of the License, or (at your option) any later version. 8 * 9 * FFmpeg is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with FFmpeg; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 17 */ 18 19/** 20 * @file 21 * audio volume filter 22 */ 23 24#ifndef AVFILTER_AF_VOLUME_H 25#define AVFILTER_AF_VOLUME_H 26 27#include "libavutil/common.h" 28#include "libavutil/eval.h" 29#include "libavutil/float_dsp.h" 30#include "libavutil/opt.h" 31#include "libavutil/samplefmt.h" 32 33enum PrecisionType { 34 PRECISION_FIXED = 0, 35 PRECISION_FLOAT, 36 PRECISION_DOUBLE, 37}; 38 39enum EvalMode { 40 EVAL_MODE_ONCE, 41 EVAL_MODE_FRAME, 42 EVAL_MODE_NB 43}; 44 45enum VolumeVarName { 46 VAR_N, 47 VAR_NB_CHANNELS, 48 VAR_NB_CONSUMED_SAMPLES, 49 VAR_NB_SAMPLES, 50 VAR_POS, 51 VAR_PTS, 52 VAR_SAMPLE_RATE, 53 VAR_STARTPTS, 54 VAR_STARTT, 55 VAR_T, 56 VAR_TB, 57 VAR_VOLUME, 58 VAR_VARS_NB 59}; 60 61enum ReplayGainType { 62 REPLAYGAIN_DROP, 63 REPLAYGAIN_IGNORE, 64 REPLAYGAIN_TRACK, 65 REPLAYGAIN_ALBUM, 66}; 67 68typedef struct VolumeContext { 69 const AVClass *class; 70 AVFloatDSPContext fdsp; 71 enum PrecisionType precision; 72 enum EvalMode eval_mode; 73 const char *volume_expr; 74 AVExpr *volume_pexpr; 75 double var_values[VAR_VARS_NB]; 76 77 enum ReplayGainType replaygain; 78 double replaygain_preamp; 79 int replaygain_noclip; 80 double volume; 81 int volume_i; 82 int channels; 83 int planes; 84 enum AVSampleFormat sample_fmt; 85 86 void (*scale_samples)(uint8_t *dst, const uint8_t *src, int nb_samples, 87 int volume); 88 int samples_align; 89} VolumeContext; 90 91void ff_volume_init_x86(VolumeContext *vol); 92 93#endif /* AVFILTER_AF_VOLUME_H */ 94