[FFmpeg-devel] [PATCH] Transpose filter

Stefano Sabatini stefano.sabatini-lala
Tue Oct 12 20:51:46 CEST 2010


On date Tuesday 2010-10-12 02:28:09 +0200, Michael Niedermayer encoded:
> On Mon, Oct 11, 2010 at 03:25:54PM +0200, Stefano Sabatini wrote:
> > On date Sunday 2010-10-10 12:03:11 +0200, Stefano Sabatini encoded:
> > [...]
> [...]
> > +static void end_frame(AVFilterLink *inlink)
> > +{
> > +    TransContext *trans = inlink->dst->priv;
> > +    AVFilterBufferRef *in  = inlink->cur_buf;
> > +    AVFilterBufferRef *out = inlink->dst->outputs[0]->out_buf;
> > +    AVFilterLink *outlink = inlink->dst->outputs[0];
> > +    int i, j, plane;
> > +
> > +    for (plane = 0; plane < trans->nb_planes; plane++) {
> > +        int hsub = plane == 1 || plane == 2 ? trans->hsub : 0;
> > +        int vsub = plane == 1 || plane == 2 ? trans->vsub : 0;
> > +        int pixstep = trans->pixsteps[plane];
> > +        for (i = 0; i < out->video->h>>vsub; i++) {
> > +            uint8_t *pout = out->data[plane] + i * out->linesize[plane];
> > +            for (j = 0; j < out->video->w>>hsub; j++, pout += pixstep) {
> > +                uint8_t *pin = in ->data[plane] + j * in ->linesize[plane] + i * pixstep;
> > +                int32_t v;
> > +
> > +                switch (pixstep) {
> > +                case 1:
> > +                    *pout = *pin;
> > +                    break;
> > +                case 2:
> > +                    *((uint16_t *)pout) = *((uint16_t *)pin);
> > +                    break;
> > +                case 3:
> > +                    v = AV_RB24(pin);
> > +                    AV_WB24(pout, v);
> > +                    break;
> > +                case 4:
> > +                    *((uint32_t *)pout) = *((uint32_t *)pin);
> > +                    break;
> > +                }
> > +            }
> 
> The filter in soc is much more efficient




More information about the ffmpeg-devel mailing list