[FFmpeg-devel] [PATCH] doc/examples: add scaling_video example

Stefano Sabatini stefasab at gmail.com
Fri Aug 24 16:25:32 CEST 2012


On date Thursday 2012-08-23 20:30:45 +0200, Michael Niedermayer encoded:
> On Tue, Aug 21, 2012 at 02:51:17PM +0200, Stefano Sabatini wrote:
> > This example should be useful to show the basic functionality of the
> > swscale API.
> > 
> > More advanced features (scaling options etc., colorspace tweaking) may be
> > added later.
> > 
> > Display code was borrowed from filtering_video.c display_picref() by
> > Nicolas George.
> [...]
> > +static int scale_image(uint8_t *dst_data[4], int dst_linesize[4],
> > +                       int dst_w, int dst_h, enum PixelFormat dst_pix_fmt,
> > +                       uint8_t * const src_data[4], int src_linesize[4],
> > +                       int src_w, int src_h, enum PixelFormat src_pix_fmt,
> > +                       void *log_ctx)
> > +{
> > +    int ret;
> > +    struct SwsContext *sws_ctx = sws_getContext(src_w, src_h, src_pix_fmt,
> > +                                                dst_w, dst_h, dst_pix_fmt,
> > +                                                SWS_BILINEAR, NULL, NULL, NULL);
> > +    if (!sws_ctx) {
> > +        av_log(log_ctx, AV_LOG_ERROR,
> > +               "Impossible to create scale context for the conversion "
> > +               "fmt:%s s:%dx%d -> fmt:%s s:%dx%d\n",
> > +               av_get_pix_fmt_name(src_pix_fmt), src_w, src_h,
> > +               av_get_pix_fmt_name(dst_pix_fmt), dst_w, dst_h);
> > +        ret = AVERROR(EINVAL);
> > +        goto end;
> > +    }
> > +
> > +    if ((ret = av_image_alloc(dst_data, dst_linesize, dst_w, dst_h, dst_pix_fmt, 16)) < 0)
> > +        goto end;
> > +    ret = 0;
> > +    sws_scale(sws_ctx, (const uint8_t * const*)src_data,
> > +              src_linesize, 0, src_h, dst_data, dst_linesize);
> > +
> > +end:
> > +    sws_freeContext(sws_ctx);
> > +    return ret;
> > +}
> 
> iam not sure init+allo+free for every scaleing is a good idea for an
> example, it could lead to the wrong impression on what has to be done
> per picture

OK.

So it might work this way:
- generate synthetic images
- convert/rescale them to GRAY8
- print to PGM files
-- 
FFmpeg = Friendly and Friendly Mastering Powered Extravagant Gangster


More information about the ffmpeg-devel mailing list