resampler.h 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. /* SPDX-License-Identifier: Apache-2.0 */
  2. /*
  3. ** Copyright 2008, The Android Open-Source Project
  4. **
  5. */
  6. #ifndef ANDROID_RESAMPLER_H
  7. #define ANDROID_RESAMPLER_H
  8. #include <stdint.h>
  9. #include <sys/time.h>
  10. __BEGIN_DECLS
  11. #define RESAMPLER_QUALITY_MAX 10
  12. #define RESAMPLER_QUALITY_MIN 0
  13. #define RESAMPLER_QUALITY_DEFAULT 4
  14. #define RESAMPLER_QUALITY_VOIP 3
  15. #define RESAMPLER_QUALITY_DESKTOP 5
  16. struct resampler_buffer {
  17. union {
  18. void* raw;
  19. short* i16;
  20. int8_t* i8;
  21. };
  22. size_t frame_count;
  23. };
  24. /* call back interface used by the resampler to get new data */
  25. struct resampler_buffer_provider
  26. {
  27. /**
  28. * get a new buffer of data:
  29. * as input: buffer->frame_count is the number of frames requested
  30. * as output: buffer->frame_count is the number of frames returned
  31. * buffer->raw points to data returned
  32. */
  33. int (*get_next_buffer)(struct resampler_buffer_provider *provider,
  34. struct resampler_buffer *buffer);
  35. /**
  36. * release a consumed buffer of data:
  37. * as input: buffer->frame_count is the number of frames released
  38. * buffer->raw points to data released
  39. */
  40. void (*release_buffer)(struct resampler_buffer_provider *provider,
  41. struct resampler_buffer *buffer);
  42. };
  43. /* resampler interface */
  44. struct resampler_itfe {
  45. /**
  46. * reset resampler state
  47. */
  48. void (*reset)(struct resampler_itfe *resampler);
  49. /**
  50. * resample input from buffer provider and output at most *outFrameCount to out buffer.
  51. * *outFrameCount is updated with the actual number of frames produced.
  52. */
  53. int (*resample_from_provider)(struct resampler_itfe *resampler,
  54. int16_t *out,
  55. size_t *outFrameCount);
  56. /**
  57. * resample at most *inFrameCount frames from in buffer and output at most
  58. * *outFrameCount to out buffer. *inFrameCount and *outFrameCount are updated respectively
  59. * with the number of frames remaining in input and written to output.
  60. */
  61. int (*resample_from_input)(struct resampler_itfe *resampler,
  62. int16_t *in,
  63. size_t *inFrameCount,
  64. int16_t *out,
  65. size_t *outFrameCount);
  66. /**
  67. * return the latency introduced by the resampler in ns.
  68. */
  69. int32_t (*delay_ns)(struct resampler_itfe *resampler);
  70. };
  71. /**
  72. * create a resampler according to input parameters passed.
  73. * If resampler_buffer_provider is not NULL only resample_from_provider() can be called.
  74. * If resampler_buffer_provider is NULL only resample_from_input() can be called.
  75. */
  76. int create_resampler(uint32_t inSampleRate,
  77. uint32_t outSampleRate,
  78. uint32_t channelCount,
  79. uint32_t quality,
  80. struct resampler_buffer_provider *provider,
  81. struct resampler_itfe **);
  82. /**
  83. * release resampler resources.
  84. */
  85. void release_resampler(struct resampler_itfe *);
  86. __END_DECLS
  87. #endif // ANDROID_RESAMPLER_H