]> git.sesse.net Git - ffmpeg/blobdiff - libswresample/swresample.h
Merge remote-tracking branch 'qatar/master'
[ffmpeg] / libswresample / swresample.h
index 05c4f6dc011c52fc3bf3abfe170a784600a744eb..fad09358d5e0365336a7185200c010d847e8f3c3 100644 (file)
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+/**
+ * @file
+ * libswresample public header
+ */
+
 #ifndef SWR_H
 #define SWR_H
 
 #include "libavutil/samplefmt.h"
 
 #define LIBSWRESAMPLE_VERSION_MAJOR 0
-#define LIBSWRESAMPLE_VERSION_MINOR 0
+#define LIBSWRESAMPLE_VERSION_MINOR 5
 #define LIBSWRESAMPLE_VERSION_MICRO 0
 
-#define SWR_CH_MAX 16
+#define SWR_CH_MAX 16   ///< Maximum number of channels
 
-#define SWR_FLAG_RESAMPLE 1///< Force resampling even if equal sample rate
+#define SWR_FLAG_RESAMPLE 1 ///< Force resampling even if equal sample rate
 //TODO use int resample ?
 //long term TODO can we enable this dynamically?
 
@@ -39,41 +44,82 @@ struct SwrContext;
 
 /**
  * Allocate SwrContext.
- * @see swr_init(),swr_free()
- * @return NULL on error
+ *
+ * If you use this function you will need to set the parameters (manually or
+ * with swr_alloc_set_opts()) before calling swr_init().
+ *
+ * @see swr_alloc_set_opts(), swr_init(), swr_free()
+ * @return NULL on error, allocated context otherwise
  */
 struct SwrContext *swr_alloc(void);
 
 /**
  * Initialize context after user parameters have been set.
- * @return negativo n error
+ *
+ * @return AVERROR error code in case of failure.
  */
 int swr_init(struct SwrContext *s);
 
 /**
- * Allocate SwrContext.
- * @see swr_init(),swr_free()
- * @return NULL on error
+ * Allocate SwrContext if needed and set/reset common parameters.
+ *
+ * This function does not require s to be allocated with swr_alloc(). On the
+ * other hand, swr_alloc() can use swr_alloc_set_opts() to set the parameters
+ * on the allocated context.
+ *
+ * @param s               Swr context, can be NULL
+ * @param out_ch_layout   output channel layout (AV_CH_LAYOUT_*)
+ * @param out_sample_fmt  output sample format (AV_SAMPLE_FMT_*).
+ * @param out_sample_rate output sample rate (frequency in Hz)
+ * @param in_ch_layout    input channel layout (AV_CH_LAYOUT_*)
+ * @param in_sample_fmt   input sample format (AV_SAMPLE_FMT_*).
+ * @param in_sample_rate  input sample rate (frequency in Hz)
+ * @param log_offset      logging level offset
+ * @param log_ctx         parent logging context, can be NULL
+ *
+ * @see swr_init(), swr_free()
+ * @return NULL on error, allocated context otherwise
  */
-struct SwrContext *swr_alloc2(struct SwrContext *s, int64_t out_ch_layout, enum AVSampleFormat out_sample_fmt, int out_sample_rate,
-                              int64_t  in_ch_layout, enum AVSampleFormat  in_sample_fmt, int  in_sample_rate,
-                              int log_offset, void *log_ctx);
+struct SwrContext *swr_alloc_set_opts(struct SwrContext *s,
+                                      int64_t out_ch_layout, enum AVSampleFormat out_sample_fmt, int out_sample_rate,
+                                      int64_t  in_ch_layout, enum AVSampleFormat  in_sample_fmt, int  in_sample_rate,
+                                      int log_offset, void *log_ctx);
 
 /**
- * Free the given SwrContext.
- * And set the pointer to NULL
+ * Free the given SwrContext and set the pointer to NULL.
  */
 void swr_free(struct SwrContext **s);
 
 /**
  * Convert audio.
- * @param  in_count Number of input samples available in one channel.
- * @param out_count Amount of space available for output in samples per channel.
+ *
+ * in and in_count can be set to 0 to flush the last few samples out at the
+ * end.
+ *
+ * @param s         allocated Swr context, with parameters set
+ * @param out       output buffers, only the first one need be set in case of packed audio
+ * @param out_count amount of space available for output in samples per channel
+ * @param in        input buffers, only the first one need to be set in case of packed audio
+ * @param in_count  number of input samples available in one channel
+ *
  * @return number of samples output per channel
  */
 int swr_convert(struct SwrContext *s, uint8_t *out[SWR_CH_MAX], int out_count,
                                 const uint8_t *in [SWR_CH_MAX], int in_count);
 
+/**
+ * Activate resampling compensation.
+ */
 void swr_compensate(struct SwrContext *s, int sample_delta, int compensation_distance);
 
+/**
+ * Set a customized input channel mapping.
+ *
+ * @param s           allocated Swr context, not yet initialized
+ * @param channel_map customized input channel mapping (array of channel
+ *                    indexes, -1 for a muted channel)
+ * @return AVERROR error code in case of failure.
+ */
+int swr_set_channel_mapping(struct SwrContext *s, const int *channel_map);
+
 #endif