[FFmpeg-devel] [PATCH] vsrc_buffer: simplify interface

Michael Niedermayer michaelni at gmx.at
Mon May 2 12:32:21 CEST 2011


On Mon, May 02, 2011 at 10:06:34AM +0200, Stefano Sabatini wrote:
> On date Monday 2011-05-02 02:18:21 +0200, Stefano Sabatini encoded:
> > ---
> >  ffmpeg.c                  |   18 ++++++++---
> >  libavfilter/vsrc_buffer.c |   68 ++++++++++++---------------------------------
> >  libavfilter/vsrc_buffer.h |    7 +---
> >  3 files changed, 33 insertions(+), 60 deletions(-)
> > 
> > diff --git a/ffmpeg.c b/ffmpeg.c
> > index e36b3e5..98fdbae 100644
> > --- a/ffmpeg.c
> > +++ b/ffmpeg.c
> > @@ -42,6 +42,7 @@
> >  #include "libavutil/colorspace.h"
> >  #include "libavutil/fifo.h"
> >  #include "libavutil/intreadwrite.h"
> > +#include "libavutil/imgutils.h"
> >  #include "libavutil/pixdesc.h"
> >  #include "libavutil/avstring.h"
> >  #include "libavutil/libm.h"
> > @@ -1632,13 +1633,20 @@ static int output_packet(AVInputStream *ist, int ist_index,
> >              for(i=0;i<nb_ostreams;i++) {
> >                  ost = ost_table[i];
> >                  if (ost->input_video_filter && ost->source_index == ist_index) {
> > +                    // fetch a frame from the filterchain, and buffer it
> > +                    AVFilterLink *inlink = ost->input_video_filter->outputs[0];
> > +                    AVFilterBufferRef *picref =
> > +                        avfilter_get_video_buffer(inlink, AV_PERM_WRITE, picture.width, picture.height);
> > +
> >                      if (!picture.sample_aspect_ratio.num)
> >                          picture.sample_aspect_ratio = ist->st->sample_aspect_ratio;
> > -                    // add it to be filtered
> > -                    av_vsrc_buffer_add_frame2(ost->input_video_filter, &picture,
> > -                                             ist->pts,
> > -                                             ist->st->codec->width, ist->st->codec->height,
> > -                                             ist->st->codec->pix_fmt, ""); //TODO user setable params
> > +                    av_image_copy(picref->data, picref->linesize,
> > +                                  picture.data, picture.linesize,
> > +                                  picref->format, picref->video->w, picref->video->h);
> > +                    avfilter_copy_frame_props(picref, &picture);
> > +                    picref->pts = ist->pts;
> > +
> > +                    av_vsrc_buffer_add_frame2(ost->input_video_filter, picref, "");  //TODO user setable params
> 
> Unfortunately this can't work in case the source buffer format differs
> from the picture format (e.g. in case of mid-stream format change).
> 
> Updated patch (which passes AVFrame instead).

if this has been tested with changing sizes and multiple outputs from
ffmpeg then LGTM

[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Democracy is the form of government in which you can choose your dictator
-------------- 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/20110502/36063098/attachment.asc>


More information about the ffmpeg-devel mailing list