tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

cubeb_resampler.h (3412B)


      1 /*
      2 * Copyright © 2014 Mozilla Foundation
      3 *
      4 * This program is made available under an ISC-style license.  See the
      5 * accompanying file LICENSE for details.
      6 */
      7 #ifndef CUBEB_RESAMPLER_H
      8 #define CUBEB_RESAMPLER_H
      9 
     10 #include "cubeb/cubeb.h"
     11 
     12 #if defined(__cplusplus)
     13 extern "C" {
     14 #endif
     15 
     16 typedef struct cubeb_resampler cubeb_resampler;
     17 
     18 typedef enum {
     19  CUBEB_RESAMPLER_QUALITY_VOIP,
     20  CUBEB_RESAMPLER_QUALITY_DEFAULT,
     21  CUBEB_RESAMPLER_QUALITY_DESKTOP
     22 } cubeb_resampler_quality;
     23 
     24 typedef enum {
     25  CUBEB_RESAMPLER_RECLOCK_NONE,
     26  CUBEB_RESAMPLER_RECLOCK_INPUT
     27 } cubeb_resampler_reclock;
     28 
     29 /**
     30 * Create a resampler to adapt the requested sample rate into something that
     31 * is accepted by the audio backend.
     32 * @param stream A cubeb_stream instance supplied to the data callback.
     33 * @param input_params Used to calculate bytes per frame and buffer size for
     34 * resampling of the input side of the stream. NULL if input should not be
     35 * resampled.
     36 * @param output_params Used to calculate bytes per frame and buffer size for
     37 * resampling of the output side of the stream. NULL if output should not be
     38 * resampled.
     39 * @param target_rate The sampling rate after resampling for the input side of
     40 * the stream, and/or the sampling rate prior to resampling of the output side
     41 * of the stream.
     42 * @param callback A callback to request data for resampling.
     43 * @param user_ptr User data supplied to the data callback.
     44 * @param quality Quality of the resampler.
     45 * @retval A non-null pointer if success.
     46 */
     47 cubeb_resampler *
     48 cubeb_resampler_create(cubeb_stream * stream,
     49                       cubeb_stream_params * input_params,
     50                       cubeb_stream_params * output_params,
     51                       unsigned int target_rate, cubeb_data_callback callback,
     52                       void * user_ptr, cubeb_resampler_quality quality,
     53                       cubeb_resampler_reclock reclock);
     54 
     55 /**
     56 * Fill the buffer with frames acquired using the data callback. Resampling will
     57 * happen if necessary.
     58 * @param resampler A cubeb_resampler instance.
     59 * @param input_buffer A buffer of input samples
     60 * @param input_frame_count The size of the buffer. Returns the number of frames
     61 * consumed.
     62 * @param output_buffer The buffer to be filled.
     63 * @param output_frames_needed Number of frames that should be produced.
     64 * @retval Number of frames that are actually produced.
     65 * @retval CUBEB_ERROR on error.
     66 */
     67 long
     68 cubeb_resampler_fill(cubeb_resampler * resampler, void * input_buffer,
     69                     long * input_frame_count, void * output_buffer,
     70                     long output_frames_needed);
     71 
     72 /**
     73 * Destroy a cubeb_resampler.
     74 * @param resampler A cubeb_resampler instance.
     75 */
     76 void
     77 cubeb_resampler_destroy(cubeb_resampler * resampler);
     78 
     79 /**
     80 * Returns the latency, in frames, of the resampler.
     81 * @param resampler A cubeb resampler instance.
     82 * @retval The latency, in frames, induced by the resampler.
     83 */
     84 long
     85 cubeb_resampler_latency(cubeb_resampler * resampler);
     86 
     87 /**
     88 * Test-only introspection API to ensure that there is no buffering
     89 * buildup when resampling.
     90 */
     91 typedef struct {
     92  size_t input_input_buffer_size;
     93  size_t input_output_buffer_size;
     94  size_t output_input_buffer_size;
     95  size_t output_output_buffer_size;
     96 } cubeb_resampler_stats;
     97 
     98 cubeb_resampler_stats
     99 cubeb_resampler_stats_get(cubeb_resampler * resampler);
    100 
    101 #if defined(__cplusplus)
    102 }
    103 #endif
    104 
    105 #endif /* CUBEB_RESAMPLER_H */