Bundle libsamplerate
[audio-libsamplerate.git] / libsamplerate / src / samplerate.h
CommitLineData
8529da43
MG
1/*
2** Copyright (c) 2002-2016, Erik de Castro Lopo <erikd@mega-nerd.com>
3** All rights reserved.
4**
5** This code is released under 2-clause BSD license. Please see the
6** file at : https://github.com/erikd/libsamplerate/blob/master/COPYING
7*/
8
9/*
10** API documentation is available here:
11** http://www.mega-nerd.com/SRC/api.html
12*/
13
14#ifndef SAMPLERATE_H
15#define SAMPLERATE_H
16
17#ifdef __cplusplus
18extern "C" {
19#endif /* __cplusplus */
20
21
22/* Opaque data type SRC_STATE. */
23typedef struct SRC_STATE_tag SRC_STATE ;
24
25/* SRC_DATA is used to pass data to src_simple() and src_process(). */
26typedef struct
27{ const float *data_in ;
28 float *data_out ;
29
30 long input_frames, output_frames ;
31 long input_frames_used, output_frames_gen ;
32
33 int end_of_input ;
34
35 double src_ratio ;
36} SRC_DATA ;
37
38/*
39** User supplied callback function type for use with src_callback_new()
40** and src_callback_read(). First parameter is the same pointer that was
41** passed into src_callback_new(). Second parameter is pointer to a
42** pointer. The user supplied callback function must modify *data to
43** point to the start of the user supplied float array. The user supplied
44** function must return the number of frames that **data points to.
45*/
46
47typedef long (*src_callback_t) (void *cb_data, float **data) ;
48
49/*
50** Standard initialisation function : return an anonymous pointer to the
51** internal state of the converter. Choose a converter from the enums below.
52** Error returned in *error.
53*/
54
55SRC_STATE* src_new (int converter_type, int channels, int *error) ;
56
57/*
58** Initilisation for callback based API : return an anonymous pointer to the
59** internal state of the converter. Choose a converter from the enums below.
60** The cb_data pointer can point to any data or be set to NULL. Whatever the
61** value, when processing, user supplied function "func" gets called with
62** cb_data as first parameter.
63*/
64
65SRC_STATE* src_callback_new (src_callback_t func, int converter_type, int channels,
66 int *error, void* cb_data) ;
67
68/*
69** Cleanup all internal allocations.
70** Always returns NULL.
71*/
72
73SRC_STATE* src_delete (SRC_STATE *state) ;
74
75/*
76** Standard processing function.
77** Returns non zero on error.
78*/
79
80int src_process (SRC_STATE *state, SRC_DATA *data) ;
81
82/*
83** Callback based processing function. Read up to frames worth of data from
84** the converter int *data and return frames read or -1 on error.
85*/
86long src_callback_read (SRC_STATE *state, double src_ratio, long frames, float *data) ;
87
88/*
89** Simple interface for performing a single conversion from input buffer to
90** output buffer at a fixed conversion ratio.
91** Simple interface does not require initialisation as it can only operate on
92** a single buffer worth of audio.
93*/
94
95int src_simple (SRC_DATA *data, int converter_type, int channels) ;
96
97/*
98** This library contains a number of different sample rate converters,
99** numbered 0 through N.
100**
101** Return a string giving either a name or a more full description of each
102** sample rate converter or NULL if no sample rate converter exists for
103** the given value. The converters are sequentially numbered from 0 to N.
104*/
105
106const char *src_get_name (int converter_type) ;
107const char *src_get_description (int converter_type) ;
108const char *src_get_version (void) ;
109
110/*
111** Set a new SRC ratio. This allows step responses
112** in the conversion ratio.
113** Returns non zero on error.
114*/
115
116int src_set_ratio (SRC_STATE *state, double new_ratio) ;
117
118/*
119** Get the current channel count.
120** Returns negative on error, positive channel count otherwise
121*/
122
123int src_get_channels (SRC_STATE *state) ;
124
125/*
126** Reset the internal SRC state.
127** Does not modify the quality settings.
128** Does not free any memory allocations.
129** Returns non zero on error.
130*/
131
132int src_reset (SRC_STATE *state) ;
133
134/*
135** Return TRUE if ratio is a valid conversion ratio, FALSE
136** otherwise.
137*/
138
139int src_is_valid_ratio (double ratio) ;
140
141/*
142** Return an error number.
143*/
144
145int src_error (SRC_STATE *state) ;
146
147/*
148** Convert the error number into a string.
149*/
150const char* src_strerror (int error) ;
151
152/*
153** The following enums can be used to set the interpolator type
154** using the function src_set_converter().
155*/
156
157enum
158{
159 SRC_SINC_BEST_QUALITY = 0,
160 SRC_SINC_MEDIUM_QUALITY = 1,
161 SRC_SINC_FASTEST = 2,
162 SRC_ZERO_ORDER_HOLD = 3,
163 SRC_LINEAR = 4,
164} ;
165
166/*
167** Extra helper functions for converting from short to float and
168** back again.
169*/
170
171void src_short_to_float_array (const short *in, float *out, int len) ;
172void src_float_to_short_array (const float *in, short *out, int len) ;
173
174void src_int_to_float_array (const int *in, float *out, int len) ;
175void src_float_to_int_array (const float *in, int *out, int len) ;
176
177
178#ifdef __cplusplus
179} /* extern "C" */
180#endif /* __cplusplus */
181
182#endif /* SAMPLERATE_H */
183
This page took 0.020845 seconds and 4 git commands to generate.