[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