mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
swr: general doxy text about swr and example code.
Based on doxy from avr Reviewed-by: Clément Bœsch Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
4293464705
commit
7cca237ddd
@ -18,13 +18,79 @@
|
|||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef SWRESAMPLE_SWRESAMPLE_H
|
||||||
|
#define SWRESAMPLE_SWRESAMPLE_H
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file
|
* @file
|
||||||
* libswresample public header
|
* libswresample public header
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef SWRESAMPLE_SWRESAMPLE_H
|
/**
|
||||||
#define SWRESAMPLE_SWRESAMPLE_H
|
* @defgroup lswr Libswresample
|
||||||
|
* @{
|
||||||
|
*
|
||||||
|
* Libswresample (lswr) is a library that handles audio resampling, sample
|
||||||
|
* format conversion and mixing.
|
||||||
|
*
|
||||||
|
* Interaction with lswr is done through SwrContext, which is
|
||||||
|
* allocated with swr_alloc() or swr_alloc_set_opts(). It is opaque, so all parameters
|
||||||
|
* must be set with the @ref avoptions API.
|
||||||
|
*
|
||||||
|
* For example the following code will setup conversion from planar float sample
|
||||||
|
* format to interleaved signed 16-bit integer, downsampling from 48kHz to
|
||||||
|
* 44.1kHz and downmixing from 5.1 channels to stereo (using the default mixing
|
||||||
|
* matrix):
|
||||||
|
* @code
|
||||||
|
* SwrContext *swr = swr_alloc();
|
||||||
|
* av_opt_set_int(swr, "in_channel_layout", AV_CH_LAYOUT_5POINT1, 0);
|
||||||
|
* av_opt_set_int(swr, "out_channel_layout", AV_CH_LAYOUT_STEREO, 0);
|
||||||
|
* av_opt_set_int(swr, "in_sample_rate", 48000, 0);
|
||||||
|
* av_opt_set_int(swr, "out_sample_rate", 44100, 0);
|
||||||
|
* av_opt_set_int(swr, "in_sample_fmt", AV_SAMPLE_FMT_FLTP, 0);
|
||||||
|
* av_opt_set_int(swr, "out_sample_fmt, AV_SAMPLE_FMT_S16, 0);
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* Once all values have been set, it must be initialized with swr_init(). If
|
||||||
|
* you need to change the conversion parameters, you can change the parameters
|
||||||
|
* as described above, or by using swr_alloc_set_opts(), then call swr_init()
|
||||||
|
* again.
|
||||||
|
*
|
||||||
|
* The conversion itself is done by repeatedly calling swr_convert().
|
||||||
|
* Note that the samples may get buffered in swr if you provide insufficient
|
||||||
|
* output space or if sample rate conversion is done, which requires "future"
|
||||||
|
* samples. Samples that do not require future input can be retrieved at any
|
||||||
|
* time by using swr_convert() (in_count can be set to 0).
|
||||||
|
* At the end of conversion the resampling buffer can be flushed by calling
|
||||||
|
* swr_convert() with NULL in and 0 in_count.
|
||||||
|
*
|
||||||
|
* The delay between input and output, can at any time be found by using
|
||||||
|
* swr_get_delay().
|
||||||
|
*
|
||||||
|
* The following code demonstrates the conversion loop assuming the parameters
|
||||||
|
* from above and caller-defined functions get_input() and handle_output():
|
||||||
|
* @code
|
||||||
|
* uint8_t **input;
|
||||||
|
* int in_samples;
|
||||||
|
*
|
||||||
|
* while (get_input(&input, &in_samples)) {
|
||||||
|
* uint8_t *output
|
||||||
|
* int out_samples = av_rescale_rnd(swr_get_delay(swr, 48000) +
|
||||||
|
* in_samples, 44100, 48000, AV_ROUND_UP);
|
||||||
|
* av_samples_alloc(&output, NULL, 2, out_samples,
|
||||||
|
* AV_SAMPLE_FMT_S16, 0);
|
||||||
|
* out_samples = swr_convert(swr, &output, out_samples,
|
||||||
|
* input, in_samples);
|
||||||
|
* handle_output(output, out_samples);
|
||||||
|
* av_freep(&output);
|
||||||
|
* }
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* When the conversion is finished, the conversion
|
||||||
|
* context and everything associated with it must be freed with swr_free().
|
||||||
|
* There will be no memory leak if the data is not completely flushed before
|
||||||
|
* swr_free().
|
||||||
|
*/
|
||||||
|
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#include "libavutil/samplefmt.h"
|
#include "libavutil/samplefmt.h"
|
||||||
@ -217,4 +283,8 @@ const char *swresample_configuration(void);
|
|||||||
*/
|
*/
|
||||||
const char *swresample_license(void);
|
const char *swresample_license(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
#endif /* SWRESAMPLE_SWRESAMPLE_H */
|
#endif /* SWRESAMPLE_SWRESAMPLE_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user