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

Reply via email to