]> code.delx.au - pulseaudio/blob - src/pulsecore/resampler.h
remap: make the MMX code pretier
[pulseaudio] / src / pulsecore / resampler.h
1 #ifndef fooresamplerhfoo
2 #define fooresamplerhfoo
3
4 /***
5 This file is part of PulseAudio.
6
7 Copyright 2004-2006 Lennart Poettering
8
9 PulseAudio is free software; you can redistribute it and/or modify
10 it under the terms of the GNU Lesser General Public License as published
11 by the Free Software Foundation; either version 2.1 of the License,
12 or (at your option) any later version.
13
14 PulseAudio is distributed in the hope that it will be useful, but
15 WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 General Public License for more details.
18
19 You should have received a copy of the GNU Lesser General Public License
20 along with PulseAudio; if not, write to the Free Software
21 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
22 USA.
23 ***/
24
25 #include <pulse/sample.h>
26 #include <pulse/channelmap.h>
27 #include <pulsecore/memblock.h>
28 #include <pulsecore/memchunk.h>
29
30 typedef struct pa_resampler pa_resampler;
31
32 typedef enum pa_resample_method {
33 PA_RESAMPLER_INVALID = -1,
34 PA_RESAMPLER_SRC_SINC_BEST_QUALITY = 0, /* = SRC_SINC_BEST_QUALITY */
35 PA_RESAMPLER_SRC_SINC_MEDIUM_QUALITY = 1, /* = SRC_SINC_MEDIUM_QUALITY */
36 PA_RESAMPLER_SRC_SINC_FASTEST = 2, /* = SRC_SINC_FASTEST */
37 PA_RESAMPLER_SRC_ZERO_ORDER_HOLD = 3, /* = SRC_ZERO_ORDER_HOLD */
38 PA_RESAMPLER_SRC_LINEAR = 4, /* = SRC_LINEAR */
39 PA_RESAMPLER_TRIVIAL,
40 PA_RESAMPLER_SPEEX_FLOAT_BASE,
41 PA_RESAMPLER_SPEEX_FLOAT_MAX = PA_RESAMPLER_SPEEX_FLOAT_BASE + 10,
42 PA_RESAMPLER_SPEEX_FIXED_BASE,
43 PA_RESAMPLER_SPEEX_FIXED_MAX = PA_RESAMPLER_SPEEX_FIXED_BASE + 10,
44 PA_RESAMPLER_FFMPEG,
45 PA_RESAMPLER_AUTO, /* automatic select based on sample format */
46 PA_RESAMPLER_COPY,
47 PA_RESAMPLER_PEAKS,
48 PA_RESAMPLER_MAX
49 } pa_resample_method_t;
50
51 typedef enum pa_resample_flags {
52 PA_RESAMPLER_VARIABLE_RATE = 0x0001U,
53 PA_RESAMPLER_NO_REMAP = 0x0002U, /* implies NO_REMIX */
54 PA_RESAMPLER_NO_REMIX = 0x0004U,
55 PA_RESAMPLER_NO_LFE = 0x0008U
56 } pa_resample_flags_t;
57
58 pa_resampler* pa_resampler_new(
59 pa_mempool *pool,
60 const pa_sample_spec *a,
61 const pa_channel_map *am,
62 const pa_sample_spec *b,
63 const pa_channel_map *bm,
64 pa_resample_method_t resample_method,
65 pa_resample_flags_t flags);
66
67 void pa_resampler_free(pa_resampler *r);
68
69 /* Returns the size of an input memory block which is required to return the specified amount of output data */
70 size_t pa_resampler_request(pa_resampler *r, size_t out_length);
71
72 /* Inverse of pa_resampler_request() */
73 size_t pa_resampler_result(pa_resampler *r, size_t in_length);
74
75 /* Returns the maximum size of input blocks we can process without needing bounce buffers larger than the mempool tile size. */
76 size_t pa_resampler_max_block_size(pa_resampler *r);
77
78 /* Pass the specified memory chunk to the resampler and return the newly resampled data */
79 void pa_resampler_run(pa_resampler *r, const pa_memchunk *in, pa_memchunk *out);
80
81 /* Change the input rate of the resampler object */
82 void pa_resampler_set_input_rate(pa_resampler *r, uint32_t rate);
83
84 /* Change the output rate of the resampler object */
85 void pa_resampler_set_output_rate(pa_resampler *r, uint32_t rate);
86
87 /* Reinitialize state of the resampler, possibly due to seeking or other discontinuities */
88 void pa_resampler_reset(pa_resampler *r);
89
90 /* Return the resampling method of the resampler object */
91 pa_resample_method_t pa_resampler_get_method(pa_resampler *r);
92
93 /* Try to parse the resampler method */
94 pa_resample_method_t pa_parse_resample_method(const char *string);
95
96 /* return a human readable string for the specified resampling method. Inverse of pa_parse_resample_method() */
97 const char *pa_resample_method_to_string(pa_resample_method_t m);
98
99 /* Return 1 when the specified resampling method is supported */
100 int pa_resample_method_supported(pa_resample_method_t m);
101
102 const pa_channel_map* pa_resampler_input_channel_map(pa_resampler *r);
103 const pa_sample_spec* pa_resampler_input_sample_spec(pa_resampler *r);
104 const pa_channel_map* pa_resampler_output_channel_map(pa_resampler *r);
105 const pa_sample_spec* pa_resampler_output_sample_spec(pa_resampler *r);
106
107 #endif