]> code.delx.au - pulseaudio/blobdiff - src/pulsecore/resampler.h
Merge remote branch 'mkbosmans/rate-adjustment'
[pulseaudio] / src / pulsecore / resampler.h
index 8de8ad712f3c96beeac1197e12450a3287a5e762..742de6aff6abfbaa0238bd96a89b91d8eb94d80b 100644 (file)
@@ -1,8 +1,6 @@
 #ifndef fooresamplerhfoo
 #define fooresamplerhfoo
 
 #ifndef fooresamplerhfoo
 #define fooresamplerhfoo
 
-/* $Id$ */
-
 /***
   This file is part of PulseAudio.
 
 /***
   This file is part of PulseAudio.
 
@@ -10,7 +8,7 @@
 
   PulseAudio is free software; you can redistribute it and/or modify
   it under the terms of the GNU Lesser General Public License as published
 
   PulseAudio is free software; you can redistribute it and/or modify
   it under the terms of the GNU Lesser General Public License as published
-  by the Free Software Foundation; either version 2 of the License,
+  by the Free Software Foundation; either version 2.1 of the License,
   or (at your option) any later version.
 
   PulseAudio is distributed in the hope that it will be useful, but
   or (at your option) any later version.
 
   PulseAudio is distributed in the hope that it will be useful, but
@@ -46,9 +44,17 @@ typedef enum pa_resample_method {
     PA_RESAMPLER_FFMPEG,
     PA_RESAMPLER_AUTO, /* automatic select based on sample format */
     PA_RESAMPLER_COPY,
     PA_RESAMPLER_FFMPEG,
     PA_RESAMPLER_AUTO, /* automatic select based on sample format */
     PA_RESAMPLER_COPY,
+    PA_RESAMPLER_PEAKS,
     PA_RESAMPLER_MAX
 } pa_resample_method_t;
 
     PA_RESAMPLER_MAX
 } pa_resample_method_t;
 
+typedef enum pa_resample_flags {
+    PA_RESAMPLER_VARIABLE_RATE = 0x0001U,
+    PA_RESAMPLER_NO_REMAP      = 0x0002U,  /* implies NO_REMIX */
+    PA_RESAMPLER_NO_REMIX      = 0x0004U,
+    PA_RESAMPLER_NO_LFE        = 0x0008U
+} pa_resample_flags_t;
+
 pa_resampler* pa_resampler_new(
         pa_mempool *pool,
         const pa_sample_spec *a,
 pa_resampler* pa_resampler_new(
         pa_mempool *pool,
         const pa_sample_spec *a,
@@ -56,14 +62,17 @@ pa_resampler* pa_resampler_new(
         const pa_sample_spec *b,
         const pa_channel_map *bm,
         pa_resample_method_t resample_method,
         const pa_sample_spec *b,
         const pa_channel_map *bm,
         pa_resample_method_t resample_method,
-        int variable_rate);
+        pa_resample_flags_t flags);
 
 void pa_resampler_free(pa_resampler *r);
 
 /* Returns the size of an input memory block which is required to return the specified amount of output data */
 size_t pa_resampler_request(pa_resampler *r, size_t out_length);
 
 
 void pa_resampler_free(pa_resampler *r);
 
 /* Returns the size of an input memory block which is required to return the specified amount of output data */
 size_t pa_resampler_request(pa_resampler *r, size_t out_length);
 
-/* Requires the maximum size of input blocks we can process without needing bounce buffers larger than the mempool tile size. */
+/* Inverse of pa_resampler_request() */
+size_t pa_resampler_result(pa_resampler *r, size_t in_length);
+
+/* Returns the maximum size of input blocks we can process without needing bounce buffers larger than the mempool tile size. */
 size_t pa_resampler_max_block_size(pa_resampler *r);
 
 /* Pass the specified memory chunk to the resampler and return the newly resampled data */
 size_t pa_resampler_max_block_size(pa_resampler *r);
 
 /* Pass the specified memory chunk to the resampler and return the newly resampled data */
@@ -75,6 +84,9 @@ void pa_resampler_set_input_rate(pa_resampler *r, uint32_t rate);
 /* Change the output rate of the resampler object */
 void pa_resampler_set_output_rate(pa_resampler *r, uint32_t rate);
 
 /* Change the output rate of the resampler object */
 void pa_resampler_set_output_rate(pa_resampler *r, uint32_t rate);
 
+/* Reinitialize state of the resampler, possibly due to seeking or other discontinuities */
+void pa_resampler_reset(pa_resampler *r);
+
 /* Return the resampling method of the resampler object */
 pa_resample_method_t pa_resampler_get_method(pa_resampler *r);
 
 /* Return the resampling method of the resampler object */
 pa_resample_method_t pa_resampler_get_method(pa_resampler *r);
 
@@ -87,4 +99,9 @@ const char *pa_resample_method_to_string(pa_resample_method_t m);
 /* Return 1 when the specified resampling method is supported */
 int pa_resample_method_supported(pa_resample_method_t m);
 
 /* Return 1 when the specified resampling method is supported */
 int pa_resample_method_supported(pa_resample_method_t m);
 
+const pa_channel_map* pa_resampler_input_channel_map(pa_resampler *r);
+const pa_sample_spec* pa_resampler_input_sample_spec(pa_resampler *r);
+const pa_channel_map* pa_resampler_output_channel_map(pa_resampler *r);
+const pa_sample_spec* pa_resampler_output_sample_spec(pa_resampler *r);
+
 #endif
 #endif