[FFmpeg-devel] [PATCH] lavfi: port boxblur filter from libmpcodecs
Michael Niedermayer
michaelni at gmx.at
Sat Jul 9 23:33:22 CEST 2011
On Sat, Jul 09, 2011 at 06:41:44PM +0200, Stefano Sabatini wrote:
[...]
> +static inline void blur(uint8_t *dst, int dst_linesize, uint8_t *src, int src_linesize,
> + int w, int radius)
> +{
linesizes represent the size in bytes of a horizintal line everywhere
in ffmpeg.
here they dont, thus IMHO the original that used step is less confusing.
> + int x, sum = 0;
> + const int length = radius*2 + 1;
> + const int inv = ((1<<16) + length/2)/length;
> +
> + for (x = 0; x < radius; x++)
> + sum += src[x*src_linesize]<<1;
> + sum += src[radius*src_linesize];
> +
> + for (x = 0; x <= radius; x++) {
> + sum += src[(radius+x)*src_linesize] - src[(radius-x)*src_linesize];
> + dst[x*dst_linesize] = (sum*inv + (1<<15))>>16;
> + }
> +
> + for (; x < w-radius; x++) {
> + sum += src[(radius+x)*src_linesize] - src[(x-radius-1)*src_linesize];
> + dst[x*dst_linesize] = (sum*inv + (1<<15))>>16;
> + }
> +
> + for (; x < w; x++) {
> + sum += src[(2*w-radius-x-1)*src_linesize] - src[(x-radius-1)*src_linesize];
> + dst[x*dst_linesize] = (sum*inv + (1<<15))>>16;
> + }
> +}
> +
> +static inline void blur2(uint8_t *dst, int dst_linesize, uint8_t *src, int src_linesize,
> + int w, int radius, int power)
> +{
> + uint8_t temp[2][4096];
> + uint8_t *a = temp[0], *b = temp[1];
A Fixed 4096 looks like a stack overflow exploit here
but even if not, it may become an annoying limit
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
Why not whip the teacher when the pupil misbehaves? -- Diogenes of Sinope
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20110709/e7efd505/attachment.asc>
More information about the ffmpeg-devel
mailing list