[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