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

Stefano Sabatini stefano.sabatini-lala at poste.it
Fri Jun 10 01:35:11 CEST 2011


On date Thursday 2011-06-09 20:17:55 +0200, Michael Niedermayer encoded:
> 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()

Note that it matters as the variables are locals.

> and someof the if() seem unneeded

Indeed.
-- 
FFmpeg = Free and Foolish MultiPurpose Ecletic God
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-lavfi-implement-avfilter_get_audio_buffer_ref_from_a.patch
Type: text/x-diff
Size: 3718 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20110610/0076526d/attachment.bin>


More information about the ffmpeg-devel mailing list