From 5c73645d91e6a91c849e08e0fc58bdeab9b7b76f Mon Sep 17 00:00:00 2001 From: Stefano Sabatini Date: Thu, 21 Mar 2013 11:48:28 +0100 Subject: [PATCH] lavu/samplefmt: add av_samples_alloc_array_and_pointers() --- doc/APIchanges | 3 +++ libavutil/samplefmt.c | 15 +++++++++++++++ libavutil/samplefmt.h | 13 +++++++++++++ libavutil/version.h | 2 +- 4 files changed, 32 insertions(+), 1 deletion(-) diff --git a/doc/APIchanges b/doc/APIchanges index bc4d4febca..01f7825edc 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -15,6 +15,9 @@ libavutil: 2012-10-22 API changes, most recent first: +2013-03-30 - xxxxxxx - lavu 52.24.100 - samplefmt.h + Add av_samples_alloc_array_and_samples(). + 2013-03-29 - xxxxxxx - lavf 55.1.100 - avformat.h Add av_guess_frame_rate() diff --git a/libavutil/samplefmt.c b/libavutil/samplefmt.c index 6f762df9b4..445009745c 100644 --- a/libavutil/samplefmt.c +++ b/libavutil/samplefmt.c @@ -207,6 +207,21 @@ int av_samples_alloc(uint8_t **audio_data, int *linesize, int nb_channels, #endif } +int av_samples_alloc_array_and_samples(uint8_t ***audio_data, int *linesize, int nb_channels, + int nb_samples, enum AVSampleFormat sample_fmt, int align) +{ + int ret, nb_planes = av_sample_fmt_is_planar(sample_fmt) ? nb_channels : 1; + + *audio_data = av_calloc(nb_planes, sizeof(*audio_data)); + if (!*audio_data) + return AVERROR(ENOMEM); + ret = av_samples_alloc(*audio_data, linesize, nb_channels, + nb_samples, sample_fmt, align); + if (ret < 0) + av_freep(audio_data); + return ret; +} + int av_samples_copy(uint8_t **dst, uint8_t * const *src, int dst_offset, int src_offset, int nb_samples, int nb_channels, enum AVSampleFormat sample_fmt) diff --git a/libavutil/samplefmt.h b/libavutil/samplefmt.h index 529711fc20..db17d43bcf 100644 --- a/libavutil/samplefmt.h +++ b/libavutil/samplefmt.h @@ -209,10 +209,23 @@ int av_samples_fill_arrays(uint8_t **audio_data, int *linesize, * @return >=0 on success or a negative error code on failure * @todo return the size of the allocated buffer in case of success at the next bump * @see av_samples_fill_arrays() + * @see av_samples_alloc_array_and_samples() */ int av_samples_alloc(uint8_t **audio_data, int *linesize, int nb_channels, int nb_samples, enum AVSampleFormat sample_fmt, int align); +/** + * Allocate a data pointers array, samples buffer for nb_samples + * samples, and fill data pointers and linesize accordingly. + * + * This is the same as av_samples_alloc(), but also allocates the data + * pointers array. + * + * @see av_samples_alloc() + */ +int av_samples_alloc_array_and_samples(uint8_t ***audio_data, int *linesize, int nb_channels, + int nb_samples, enum AVSampleFormat sample_fmt, int align); + /** * Copy samples from src to dst. * diff --git a/libavutil/version.h b/libavutil/version.h index 5bb3d0718b..af2540dee8 100644 --- a/libavutil/version.h +++ b/libavutil/version.h @@ -75,7 +75,7 @@ */ #define LIBAVUTIL_VERSION_MAJOR 52 -#define LIBAVUTIL_VERSION_MINOR 23 +#define LIBAVUTIL_VERSION_MINOR 24 #define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \