FFmpeg  1.2.4
swresample_internal.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2011-2013 Michael Niedermayer (michaelni@gmx.at)
3  *
4  * This file is part of libswresample
5  *
6  * libswresample is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * libswresample is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with libswresample; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 #ifndef SWR_INTERNAL_H
22 #define SWR_INTERNAL_H
23 
24 #include "swresample.h"
25 #include "libavutil/channel_layout.h"
26 #include "config.h"
27 
28 #define SQRT3_2 1.22474487139158904909 /* sqrt(3/2) */
29 
30 #define NS_TAPS 20
31 
32 #if ARCH_X86_64
33 typedef int64_t integer;
34 #else
35 typedef int integer;
36 #endif
37 
38 typedef void (mix_1_1_func_type)(void *out, const void *in, void *coeffp, integer index, integer len);
39 typedef void (mix_2_1_func_type)(void *out, const void *in1, const void *in2, void *coeffp, integer index1, integer index2, integer len);
40 
41 typedef void (mix_any_func_type)(uint8_t **out, const uint8_t **in1, void *coeffp, integer len);
42 
43 typedef struct AudioData{
45  uint8_t *data;
46  int ch_count;
47  int bps;
48  int count;
49  int planar;
51 } AudioData;
52 
53 struct DitherContext {
55  int noise_pos;
56  float scale;
57  float noise_scale;
58  int ns_taps;
59  float ns_scale;
60  float ns_scale_1;
61  int ns_pos;
62  float ns_coeffs[NS_TAPS];
67 };
68 
69 struct SwrContext {
70  const AVClass *av_class;
72  void *log_ctx;
76  int64_t in_ch_layout;
77  int64_t out_ch_layout;
80  int flags;
81  float slev;
82  float clev;
83  float lfe_mix_level;
86  const int *channel_map;
89 
91 
95  double cutoff;
98  double precision;
99  int cheby;
105  float async;
107 
109  int rematrix;
111 
123  int flushed;
124  int64_t outpts;
125  int64_t firstpts;
127 
132  struct Resampler const *resampler;
133 
142 
145 
147 
148  /* TODO: callbacks for ASM optimizations */
149 };
150 
151 typedef struct ResampleContext * (* resample_init_func)(struct ResampleContext *c, int out_rate, int in_rate, int filter_size, int phase_shift, int linear,
152  double cutoff, enum AVSampleFormat format, enum SwrFilterType filter_type, int kaiser_beta, double precision, int cheby);
153 typedef void (* resample_free_func)(struct ResampleContext **c);
154 typedef int (* multiple_resample_func)(struct ResampleContext *c, AudioData *dst, int dst_size, AudioData *src, int src_size, int *consumed);
155 typedef int (* resample_flush_func)(struct SwrContext *c);
156 typedef int (* set_compensation_func)(struct ResampleContext *c, int sample_delta, int compensation_distance);
157 typedef int64_t (* get_delay_func)(struct SwrContext *s, int64_t base);
158 
159 struct Resampler {
166 };
167 
168 extern struct Resampler const swri_resampler;
169 
170 int swri_realloc_audio(AudioData *a, int count);
171 int swri_resample_int16(struct ResampleContext *c, int16_t *dst, const int16_t *src, int *consumed, int src_size, int dst_size, int update_ctx);
172 int swri_resample_int32(struct ResampleContext *c, int32_t *dst, const int32_t *src, int *consumed, int src_size, int dst_size, int update_ctx);
173 int swri_resample_float(struct ResampleContext *c, float *dst, const float *src, int *consumed, int src_size, int dst_size, int update_ctx);
174 int swri_resample_double(struct ResampleContext *c,double *dst, const double *src, int *consumed, int src_size, int dst_size, int update_ctx);
175 
176 void swri_noise_shaping_int16 (SwrContext *s, AudioData *dsts, const AudioData *srcs, const AudioData *noises, int count);
177 void swri_noise_shaping_int32 (SwrContext *s, AudioData *dsts, const AudioData *srcs, const AudioData *noises, int count);
178 void swri_noise_shaping_float (SwrContext *s, AudioData *dsts, const AudioData *srcs, const AudioData *noises, int count);
179 void swri_noise_shaping_double(SwrContext *s, AudioData *dsts, const AudioData *srcs, const AudioData *noises, int count);
180 
183 int swri_rematrix(SwrContext *s, AudioData *out, AudioData *in, int len, int mustcopy);
184 void swri_rematrix_init_x86(struct SwrContext *s);
185 
186 void swri_get_dither(SwrContext *s, void *dst, int len, unsigned seed, enum AVSampleFormat noise_fmt);
187 int swri_dither_init(SwrContext *s, enum AVSampleFormat out_fmt, enum AVSampleFormat in_fmt);
188 
190  enum AVSampleFormat out_fmt,
191  enum AVSampleFormat in_fmt,
192  int channels);
194  enum AVSampleFormat out_fmt,
195  enum AVSampleFormat in_fmt,
196  int channels);
197 #endif