[FFmpeg-devel] [PATCH] Add pad filter

Michael Niedermayer michaelni
Fri Nov 27 02:42:59 CET 2009


On Fri, Nov 27, 2009 at 01:09:28AM +0100, Stefano Sabatini wrote:
[...]
> +static void draw_slice(AVFilterLink *link, int y, int h)
> +{
> +    PadContext *pad = link->dst->priv;
> +    AVFilterPicRef *pic = link->dst->outputs[0]->outpic;
> +    int i, y1, h1;
> +    uint8_t *p;
> +
> +    if (pad->is_packed_rgb) {
> +        /* draw top bar */
> +        if (y == 0) {
> +            p = pic->data[0];
> +            for (i = 0; i < pad->y; i++) {
> +                memcpy(p, pad->line, pad->w * pad->pix_step);
> +                p += pic->linesize[0];
> +            }
> +        }
> +
> +        /* draw side borders */
> +        if (y < link->h) {
> +            p = pic->data[0] + (pad->y + y) * pic->linesize[0];
> +
> +            for (i = 0; i < h; i++) {
> +                /* left border */
> +                memcpy(p, pad->line, pad->x * pad->pix_step);
> +
> +                /* right border */
> +                memcpy(p + (pad->x + link->w) * pad->pix_step, pad->line,
> +                       (pad->w - pad->x - link->w) * pad->pix_step);
> +                p += pic->linesize[0];
> +            }
> +        }
> +
> +        /* draw bottom bar */
> +        if ((y+h) >= link->h) {
> +            y1 = link->h + pad->y;
> +            h1 = pad->h - y1;
> +            p = pic->data[0] + y1 * pic->linesize[0];
> +            for (i = 0; i < h1; i++) {
> +                memcpy(p, pad->line, pad->w * pad->pix_step);
> +                p += pic->linesize[0];
> +            }
> +        }
> +    } else {
> +        int plane;
> +
> +        for (plane = 0; plane < 4 && pic->data[plane]; plane++) {
> +            int vsub = plane == 1 || plane == 2 ? pad->vsub : 0;
> +            int hsub = plane == 1 || plane == 2 ? pad->hsub : 0;
> +
> +            /* draw top bar */
> +            if (y == 0) {
> +                p = pic->data[plane];
> +                for (i = 0; i < (pad->y >> vsub); i++) {
> +                    memset(p, pad->color[plane], pad->w >> hsub);
> +                    p += pic->linesize[plane];
> +                }
> +            }
> +
> +            /* draw side borders */
> +            if (y < link->h) {
> +                p = pic->data[plane] + ((pad->y + y) >>vsub) * pic->linesize[plane];
> +
> +                for (i = 0; i < (h >> vsub); i++) {
> +                    /* left border */
> +                    memset(p, pad->color[plane], pad->x >> hsub);
> +
> +                    /* right border */
> +                    memset(p + ((pad->x + link->w) >> hsub), pad->color[plane],
> +                           (pad->w - pad->x - link->w) >> hsub);
> +                    p += pic->linesize[plane];
> +                }
> +            }
> +
> +            /* draw bottom bar */
> +            if ((y+h) >= link->h) {
> +                y1 = link->h + pad->y;
> +                h1 = pad->h - y1;
> +                p = pic->data[plane] + pic->linesize[plane] * (y1 >>vsub);
> +                for (i = 0; i < (h1 >> vsub); i++) {
> +                    memset(p, pad->color[plane], pad->w >> hsub);
> +                    p += pic->linesize[plane];
> +                }
> +            }
> +        }
> +    }

a draw_rectangle() function could simplify above


> +
> +    y1 = y == 0 ? 0 : y + pad->y;
> +    h1 = h;
> +    if (y == 0)
> +        h1 += pad->y;
> +    if (y+h >= link->h)
> +        h1 += pad->h - pad->y - link->h;
> +
> +    avfilter_draw_slice(link->dst->outputs[0], y1, h1);

this draw slice behaves quite odd, i would have expectd that slices didnt grow


[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

The misfortune of the wise is better than the prosperity of the fool.
-- Epicurus
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20091127/2a67bd93/attachment.pgp>



More information about the ffmpeg-devel mailing list