[FFmpeg-devel] [PATCH] lavfi: implement avfilter_get_audio_buffer_ref_from_arrays()

Michael Niedermayer michaelni at gmx.at
Thu Jun 9 20:17:55 CEST 2011


On Thu, Jun 09, 2011 at 10:37:41AM +0200, Stefano Sabatini wrote:
> ---
>  libavfilter/avfilter.c |   44 ++++++++++++++++++++++++++++++++++++++++++++
>  libavfilter/avfilter.h |   18 ++++++++++++++++++
>  2 files changed, 62 insertions(+), 0 deletions(-)
> 
> diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c
> index 6d55350..acab816 100644
> --- a/libavfilter/avfilter.c
> +++ b/libavfilter/avfilter.c
> @@ -421,6 +421,50 @@ AVFilterBufferRef *avfilter_get_audio_buffer(AVFilterLink *link, int perms,
>      return ret;
>  }
>  
> +AVFilterBufferRef *
> +avfilter_get_audio_buffer_ref_from_arrays(uint8_t *data[8], int linesize[8], int perms,
> +                                          int nb_samples, enum AVSampleFormat sample_fmt,
> +                                          int64_t channel_layout, int planar)
> +{
> +    AVFilterBuffer *samples = av_mallocz(sizeof(AVFilterBuffer));
> +    AVFilterBufferRef *samplesref = av_mallocz(sizeof(AVFilterBufferRef));
> +
> +    if (!samples || !samplesref)
> +        goto fail;
> +
> +    samplesref->buf = samples;
> +    samplesref->buf->free = ff_avfilter_default_free_buffer;
> +    if (!(samplesref->audio = av_mallocz(sizeof(AVFilterBufferRefAudioProps))))
> +        goto fail;
> +
> +    samplesref->audio->nb_samples     = nb_samples;
> +    samplesref->audio->channel_layout = channel_layout;
> +    samplesref->audio->planar         = planar;
> +
> +    /* make sure the buffer gets read permission or it's useless for output */
> +    samplesref->perms = perms | AV_PERM_READ;
> +
> +    samples->refcount = 1;
> +    samplesref->type = AVMEDIA_TYPE_AUDIO;
> +    samplesref->format = sample_fmt;
> +
> +    memcpy(samples->data,        data,     sizeof(samples->data));
> +    memcpy(samples->linesize,    linesize, sizeof(samples->linesize));
> +    memcpy(samplesref->data,     data,     sizeof(samplesref->data));
> +    memcpy(samplesref->linesize, linesize, sizeof(samplesref->linesize));
> +
> +    return samplesref;
> +
> +fail:
> +    if (samplesref) {
> +        if (samplesref->audio)
> +            av_free(samplesref->audio);
> +        av_free(samplesref);
> +    }
> +    if (samples) av_free(samples);

av_freep()
and someof the if() seem unneeded

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

DNS cache poisoning attacks, popular search engine, Google internet authority
dont be evil, please
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20110609/97526959/attachment.asc>


More information about the ffmpeg-devel mailing list