/* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef LINEAR_RESAMPLER_H_ #define LINEAR_RESAMPLER_H_ struct linear_resampler; /* Creates a linear resampler. * Args: * num_channels - The number of channels in each frames. * format_bytes - The length of one frame in bytes. * src_rate - The source rate to resample from. * dst_rate - The destination rate to resample to. */ struct linear_resampler *linear_resampler_create(unsigned int num_channels, unsigned int format_bytes, float src_rate, float dst_rate); /* Sets the rates for the linear resampler. * Args: * from - The rate to resample from. * to - The rate to resample to. */ void linear_resampler_set_rates(struct linear_resampler *lr, float from, float to); /* Converts the frames count from output rate to input rate. */ unsigned int linear_resampler_out_frames_to_in(struct linear_resampler *lr, unsigned int frames); /* Converts the frames count from input rate to output rate. */ unsigned int linear_resampler_in_frames_to_out(struct linear_resampler *lr, unsigned int frames); /* Returns true if SRC is needed, otherwise return false. */ int linear_resampler_needed(struct linear_resampler *lr); /* Run linear resample for audio samples. * Args: * lr - The linear resampler. * src - The input buffer. * src_frames - The number of frames of input buffer. * dst - The output buffer. * dst_frames - The number of frames of output buffer. */ unsigned int linear_resampler_resample(struct linear_resampler *lr, uint8_t *src, unsigned int *src_frames, uint8_t *dst, unsigned dst_frames); /* Destroy a linear resampler. */ void linear_resampler_destroy(struct linear_resampler *lr); #endif /* LINEAR_RESAMPLER_H_ */