duckstation

duckstation, but archived from the revision just before upstream changed it to a proprietary software project, this version is the libre one
git clone https://git.neptards.moe/u3shit/duckstation.git
Log | Files | Refs | README | LICENSE

cubeb_resampler.h (3046B)


      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 #if defined(__cplusplus)
     88 }
     89 #endif
     90 
     91 #endif /* CUBEB_RESAMPLER_H */