X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libswresample%2Fswresample.h;h=fad09358d5e0365336a7185200c010d847e8f3c3;hb=35f707abe1bd3b80b1951010539285d4c3a14dba;hp=05c4f6dc011c52fc3bf3abfe170a784600a744eb;hpb=b81f8880e010ccdef3604d9beb681d3c4c6a7bc0;p=ffmpeg diff --git a/libswresample/swresample.h b/libswresample/swresample.h index 05c4f6dc011..fad09358d5e 100644 --- a/libswresample/swresample.h +++ b/libswresample/swresample.h @@ -18,6 +18,11 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +/** + * @file + * libswresample public header + */ + #ifndef SWR_H #define SWR_H @@ -25,12 +30,12 @@ #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