On 05/09/2012 10:39 AM, Anton Khirnov wrote:
> ---
> libavutil/samplefmt.c | 19 +++++++++++++++++++
> libavutil/samplefmt.h | 15 +++++++++++++++
> 2 files changed, 34 insertions(+)
>
> diff --git a/libavutil/samplefmt.c b/libavutil/samplefmt.c
> index 711afac..1caddf9 100644
> --- a/libavutil/samplefmt.c
> +++ b/libavutil/samplefmt.c
> @@ -185,3 +185,22 @@ int av_samples_alloc(uint8_t **audio_data, int
> *linesize, int nb_channels,
> }
> return 0;
> }
> +
> +int av_samples_copy(uint8_t **dst, const uint8_t * const *src, int
> dst_offset,
> + int src_offset, int nb_samples, int nb_channels,
> + enum AVSampleFormat sample_fmt)
> +{
> + int planar = av_sample_fmt_is_planar(sample_fmt);
> + int planes = planar ? nb_channels : 1;
> + int bps = av_get_bytes_per_sample(sample_fmt);
> + int data_size = bps * nb_samples * (planar ? 1 : nb_channels);
> + int i;
> +
> + dst_offset *= bps * (planar ? 1 : nb_channels);
> + src_offset *= bps * (planar ? 1 : nb_channels);
> +
> + for (i = 0; i < planes; i++)
> + memcpy(dst[i] + dst_offset, src[i] + src_offset, data_size);
> +
> + return 0;
> +}
> diff --git a/libavutil/samplefmt.h b/libavutil/samplefmt.h
> index 1cb01a3..910fe76 100644
> --- a/libavutil/samplefmt.h
> +++ b/libavutil/samplefmt.h
> @@ -194,4 +194,19 @@ int av_samples_fill_arrays(uint8_t **audio_data, int
> *linesize,
> int av_samples_alloc(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
> + * @param src source array of pointers to data planes
> + * @param dst_offset offset in samples at which the data will be written to
> dst
> + * @param src_offset offset in samples at which the data will be read from
> src
> + * @param nb_samples number of samples to be copied
> + * @param nb_channels number of audio channels
> + * @param sample_fmt audio sample format
> + */
> +int av_samples_copy(uint8_t **dst, const uint8_t * const *src, int
> dst_offset,
> + int src_offset, int nb_samples, int nb_channels,
> + enum AVSampleFormat sample_fmt);
> +
> #endif /* AVUTIL_SAMPLEFMT_H */
LGTM
-Justin
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel