aboutsummaryrefslogtreecommitdiffstats
path: root/libavutil
diff options
context:
space:
mode:
authorStefano Sabatini <stefasab@gmail.com>2013-03-21 11:48:28 +0100
committerStefano Sabatini <stefasab@gmail.com>2013-03-31 18:00:44 +0200
commit5c73645d91e6a91c849e08e0fc58bdeab9b7b76f (patch)
tree986d39f92a94a7334cce88ceae79a6c6d7e841ee /libavutil
parent39aad4346562e208ad494093e2995d9bc8fb3410 (diff)
downloadffmpeg-5c73645d91e6a91c849e08e0fc58bdeab9b7b76f.tar.gz
lavu/samplefmt: add av_samples_alloc_array_and_pointers()
Diffstat (limited to 'libavutil')
-rw-r--r--libavutil/samplefmt.c15
-rw-r--r--libavutil/samplefmt.h13
-rw-r--r--libavutil/version.h2
3 files changed, 29 insertions, 1 deletions
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,11 +209,24 @@ 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.
*
* @param dst destination array of pointers to data planes
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, \