[FFmpeg-soc] [PATCH] updated! vf_overlay alpha patch and watermarking using PNG with alpha

Vitor Sessak vitor1001 at gmail.com
Tue Dec 8 19:37:48 CET 2009


Stefano Sabatini wrote:
> On date Tuesday 2009-12-01 00:57:59 +0100, Stefano Sabatini encoded:
>> On date Tuesday 2009-12-01 00:50:50 +0100, Vitor Sessak encoded:
> [...]
>> I'm fine with committing the patch to soc if tested, even better would
>> be to try to push the filter to the main repo. Does someone want to
>> volunteer for this?
> 
> A somehow tinied-up version which can be used as a base for SVN
> inclusion,

Nice work!

> I believe we should get rid of the blend parameter, also
> the expression evaluation may stay in a successive commit.

Do you have any idea of how to get rid of it? Are you planning to 
implement Michael's suggestion of calling swscale to convert one of the 
inputs to the right pixel format?

A few comments...


 > static int query_formats(AVFilterContext *ctx)
 > {
 >     OverlayContext *over = ctx->priv;
 >
 >     if (over->blend) {
 >         enum PixelFormat pix_fmts1[] = { PIX_FMT_YUV420P, 
PIX_FMT_NONE };
 >         enum PixelFormat pix_fmts2[] = { PIX_FMT_YUVA420P, 
PIX_FMT_NONE };

these can be const.

 >     } else {
 >         avfilter_default_query_formats(ctx);

Are all lavfi formats supported?

 >
 > static void copy_blended(      uint8_t   *out, int   out_linesize,
 >                          const uint8_t    *in, int    in_linesize,
 >                          const uint8_t *alpha, int alpha_linesize,
 >                          int w, int h, int hsub, int vsub)
 > {
 >     int x, y;
 >
 >     for (y = 0; y < h; y++) {
 >         uint8_t       *outp   = out   +  y        *   out_linesize;
 >         const uint8_t *inp    = in    +  y        *    in_linesize;
 >         const uint8_t *alphap = alpha + (y<<vsub) * alpha_linesize;
 >
 >         for (x = 0; x < w; x++) {
 >             *outp = (*outp * (0xff - *alphap) + *inp * *alphap) >> 8;

Looks like some rounding could be useful.

Also, one thing that bothers me is that this filter copies the whole 
picture for overlaying a 10x10 picture into a 1024x1024 picture. I think 
it could simply draw the input #2 over input #1 (like vf_drawbox does 
with its box).

-Vitor


More information about the FFmpeg-soc mailing list