| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- /* SPDX-License-Identifier: Apache-2.0 */
- /*
- ** Copyright 2008, The Android Open-Source Project
- **
- */
- #ifndef ANDROID_RESAMPLER_H
- #define ANDROID_RESAMPLER_H
- #include <stdint.h>
- #include <sys/time.h>
- __BEGIN_DECLS
- #define RESAMPLER_QUALITY_MAX 10
- #define RESAMPLER_QUALITY_MIN 0
- #define RESAMPLER_QUALITY_DEFAULT 4
- #define RESAMPLER_QUALITY_VOIP 3
- #define RESAMPLER_QUALITY_DESKTOP 5
- struct resampler_buffer {
- union {
- void* raw;
- short* i16;
- int8_t* i8;
- };
- size_t frame_count;
- };
- /* call back interface used by the resampler to get new data */
- struct resampler_buffer_provider
- {
- /**
- * get a new buffer of data:
- * as input: buffer->frame_count is the number of frames requested
- * as output: buffer->frame_count is the number of frames returned
- * buffer->raw points to data returned
- */
- int (*get_next_buffer)(struct resampler_buffer_provider *provider,
- struct resampler_buffer *buffer);
- /**
- * release a consumed buffer of data:
- * as input: buffer->frame_count is the number of frames released
- * buffer->raw points to data released
- */
- void (*release_buffer)(struct resampler_buffer_provider *provider,
- struct resampler_buffer *buffer);
- };
- /* resampler interface */
- struct resampler_itfe {
- /**
- * reset resampler state
- */
- void (*reset)(struct resampler_itfe *resampler);
- /**
- * resample input from buffer provider and output at most *outFrameCount to out buffer.
- * *outFrameCount is updated with the actual number of frames produced.
- */
- int (*resample_from_provider)(struct resampler_itfe *resampler,
- int16_t *out,
- size_t *outFrameCount);
- /**
- * resample at most *inFrameCount frames from in buffer and output at most
- * *outFrameCount to out buffer. *inFrameCount and *outFrameCount are updated respectively
- * with the number of frames remaining in input and written to output.
- */
- int (*resample_from_input)(struct resampler_itfe *resampler,
- int16_t *in,
- size_t *inFrameCount,
- int16_t *out,
- size_t *outFrameCount);
- /**
- * return the latency introduced by the resampler in ns.
- */
- int32_t (*delay_ns)(struct resampler_itfe *resampler);
- };
- /**
- * create a resampler according to input parameters passed.
- * If resampler_buffer_provider is not NULL only resample_from_provider() can be called.
- * If resampler_buffer_provider is NULL only resample_from_input() can be called.
- */
- int create_resampler(uint32_t inSampleRate,
- uint32_t outSampleRate,
- uint32_t channelCount,
- uint32_t quality,
- struct resampler_buffer_provider *provider,
- struct resampler_itfe **);
- /**
- * release resampler resources.
- */
- void release_resampler(struct resampler_itfe *);
- __END_DECLS
- #endif // ANDROID_RESAMPLER_H
|