[FFmpeg-devel] [PATCH] vf_lut: fix draw_slice() for dealing with non packed RGB data

Stefano Sabatini stefano.sabatini-lala at poste.it
Mon Jun 27 11:47:06 CEST 2011


On date Sunday 2011-06-26 20:00:03 +0200, Stefano Sabatini encoded:
> The previous code was erroneously assuming that linesize was always
> equivalent to width*pixel_step, which is not always true.
> ---
>  libavfilter/vf_lut.c |   10 +++++++---
>  1 files changed, 7 insertions(+), 3 deletions(-)
> 
> diff --git a/libavfilter/vf_lut.c b/libavfilter/vf_lut.c
> index c457972..fdab694 100644
> --- a/libavfilter/vf_lut.c
> +++ b/libavfilter/vf_lut.c
> @@ -306,21 +306,25 @@ static void draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)
>      AVFilterLink *outlink = ctx->outputs[0];
>      AVFilterBufferRef *inpic  = inlink ->cur_buf;
>      AVFilterBufferRef *outpic = outlink->out_buf;
> -    uint8_t *inrow, *outrow;
> +    uint8_t *inrow, *outrow, *inrow0, *outrow0;
>      int i, j, k, plane;
>  
>      if (lut->is_rgb) {
>          /* packed */
> -        inrow  = inpic ->data[0] + y * inpic ->linesize[0];
> -        outrow = outpic->data[0] + y * outpic->linesize[0];
> +        inrow0  = inpic ->data[0] + y * inpic ->linesize[0];
> +        outrow0 = outpic->data[0] + y * outpic->linesize[0];
>  
>          for (i = 0; i < h; i ++) {
> +            inrow  = inrow0;
> +            outrow = outrow0;
>              for (j = 0; j < inlink->w; j++) {
>                  for (k = 0; k < lut->step; k++)
>                      outrow[k] = lut->lut[lut->rgba_map[k]][inrow[k]];
>                  outrow += lut->step;
>                  inrow  += lut->step;
>              }
> +            inrow0  += inpic ->linesize[0];
> +            outrow0 += outpic->linesize[0];
>          }
>      } else {
>          /* planar */

Pushed.
-- 
FFmpeg = Faithful and Fucking Mortal Powerful Experimenting Gnome


More information about the ffmpeg-devel mailing list