00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef MPD_PCM_RESAMPLE_H
00021 #define MPD_PCM_RESAMPLE_H
00022
00023 #include "pcm_buffer.h"
00024 #include "config.h"
00025
00026 #include <stdint.h>
00027 #include <stddef.h>
00028 #include <stdbool.h>
00029
00030 #ifdef HAVE_LIBSAMPLERATE
00031 #include <samplerate.h>
00032 #endif
00033
00038 struct pcm_resample_state {
00039 #ifdef HAVE_LIBSAMPLERATE
00040 SRC_STATE *state;
00041 SRC_DATA data;
00042
00043 struct pcm_buffer in, out;
00044
00045 struct {
00046 unsigned src_rate;
00047 unsigned dest_rate;
00048 uint8_t channels;
00049 } prev;
00050
00051 bool error;
00052 #endif
00053
00054 struct pcm_buffer buffer;
00055 };
00056
00060 void pcm_resample_init(struct pcm_resample_state *state);
00061
00066 void pcm_resample_deinit(struct pcm_resample_state *state);
00067
00080 const int16_t *
00081 pcm_resample_16(struct pcm_resample_state *state,
00082 uint8_t channels,
00083 unsigned src_rate,
00084 const int16_t *src_buffer, size_t src_size,
00085 unsigned dest_rate,
00086 size_t *dest_size_r);
00087
00100 const int32_t *
00101 pcm_resample_32(struct pcm_resample_state *state,
00102 uint8_t channels,
00103 unsigned src_rate,
00104 const int32_t *src_buffer, size_t src_size,
00105 unsigned dest_rate,
00106 size_t *dest_size_r);
00107
00120 static inline const int32_t *
00121 pcm_resample_24(struct pcm_resample_state *state,
00122 uint8_t channels,
00123 unsigned src_rate,
00124 const int32_t *src_buffer, size_t src_size,
00125 unsigned dest_rate,
00126 size_t *dest_size_r)
00127 {
00128
00129
00130 return pcm_resample_32(state, channels,
00131 src_rate, src_buffer, src_size,
00132 dest_rate, dest_size_r);
00133 }
00134
00135 #endif