[FFmpeg-devel] [PATCH] Remove swscale_internal.h:fmt_depth()
Stefano Sabatini
stefano.sabatini-lala
Mon Jan 18 01:17:46 CET 2010
On date Sunday 2010-01-17 23:36:26 +0100, Stefano Sabatini encoded:
> On date Sunday 2010-01-17 22:04:47 +0100, Michael Niedermayer encoded:
> > On Sun, Jan 17, 2010 at 06:46:40PM +0100, Stefano Sabatini wrote:
> > > On date Saturday 2010-01-16 17:08:48 -0200, Ramiro Polla encoded:
> > > > Hi,
> > > >
> > > > On Sat, Jan 16, 2010 at 4:59 PM, Stefano Sabatini
> > > > <stefano.sabatini-lala at poste.it> wrote:
> > > > > Hi, I'm aware this patch introduces a slow-down, an idea would be to
> > > > > initialize a ff_bits_per_pixel array during the init phase, and then
> > > > > use a function of the kind:
> > > > >
> > > > > static inline int fmt_depth(int fmt)
> > > > > {
> > > > > ? ?return ff_bits_per_pixel[fmt];
> > > > > }
> > > > >
> > > > > Would be that acceptable?
> > > > > In this case can you suggest where to initialize stuff?
> > > >
> > > > I think all code that uses fmt_depth currently should eventually be
> > > > moved to some init code that's only run once, and so a small slow-down
> > > > wouldn't be a problem.
> > >
> > > Check the attached: smaller, more extensible, faster, the price is a
> > > little more bloat in the context.
> > >
> >
> > > Regression test passed.
> >
> > if(regression == swscale_example) patch ok
> > else not ok
>
> I had to hack swscale-example since the recent change in pixfmt.h
> broke it (BTW does it ever worked with big-endian system?), anyway
> what should I test with swscale-example?
>
> I tried to run swscale-example first and before the patch, and then
> many times with the same binary, each time I got some small differences
> in the outputs, for example (two runs with the same binary):
>
> stefano at geppetto ~/s/f/libswscale> diff -u swscale-example2.out swscale-example3.out
> --- swscale-example2.out 2010-01-17 23:23:35.000000000 +0100
> +++ swscale-example3.out 2010-01-17 23:29:15.000000000 +0100
> @@ -50514,12 +50514,12 @@
> argb 96x96 -> rgba 96x 64 flags= 8 SSD= 6, 0, 0, 1
> argb 96x96 -> rgba 96x 64 flags=16 SSD= 12, 0, 0, 16
> argb 96x96 -> rgba 96x 64 flags=32 SSD= 9, 1, 2, 1
> - argb 96x96 -> rgba 96x 96 flags= 1 SSD= 1729, 1202, 729, 4513
> - argb 96x96 -> rgba 96x 96 flags= 2 SSD= 1729, 1180, 720, 4513
> - argb 96x96 -> rgba 96x 96 flags= 4 SSD= 1729, 1202, 730, 4513
> - argb 96x96 -> rgba 96x 96 flags= 8 SSD= 1729, 1190, 724, 4513
> - argb 96x96 -> rgba 96x 96 flags=16 SSD= 1729, 1234, 755, 4513
> - argb 96x96 -> rgba 96x 96 flags=32 SSD= 1729, 1202, 729, 4513
> + argb 96x96 -> rgba 96x 96 flags= 1 SSD= 1728, 1202, 729, 4513
> + argb 96x96 -> rgba 96x 96 flags= 2 SSD= 1728, 1180, 720, 4513
> + argb 96x96 -> rgba 96x 96 flags= 4 SSD= 1728, 1202, 729, 4513
> + argb 96x96 -> rgba 96x 96 flags= 8 SSD= 1728, 1189, 724, 4513
> + argb 96x96 -> rgba 96x 96 flags=16 SSD= 1728, 1234, 755, 4513
> + argb 96x96 -> rgba 96x 96 flags=32 SSD= 1728, 1202, 729, 4513
> argb 96x96 -> rgba 96x 128 flags= 1 SSD= 8, 1, 2, 0
> argb 96x96 -> rgba 96x 128 flags= 2 SSD= 8, 1, 1, 0
> argb 96x96 -> rgba 96x 128 flags= 4 SSD= 5, 0, 0, 0
> @@ -55282,12 +55282,12 @@
> abgr 96x96 -> bgra 96x 64 flags= 8 SSD= 6, 0, 0, 1
> abgr 96x96 -> bgra 96x 64 flags=16 SSD= 12, 0, 0, 16
> abgr 96x96 -> bgra 96x 64 flags=32 SSD= 9, 1, 2, 1
> - abgr 96x96 -> bgra 96x 96 flags= 1 SSD= 1729, 1196, 724, 4513
> - abgr 96x96 -> bgra 96x 96 flags= 2 SSD= 1729, 1174, 716, 4513
> - abgr 96x96 -> bgra 96x 96 flags= 4 SSD= 1729, 1197, 725, 4513
> - abgr 96x96 -> bgra 96x 96 flags= 8 SSD= 1729, 1183, 719, 4513
> - abgr 96x96 -> bgra 96x 96 flags=16 SSD= 1729, 1229, 751, 4513
> - abgr 96x96 -> bgra 96x 96 flags=32 SSD= 1729, 1196, 724, 4513
> + abgr 96x96 -> bgra 96x 96 flags= 1 SSD= 1728, 1196, 724, 4513
> + abgr 96x96 -> bgra 96x 96 flags= 2 SSD= 1728, 1174, 716, 4513
> + abgr 96x96 -> bgra 96x 96 flags= 4 SSD= 1728, 1197, 725, 4513
> + abgr 96x96 -> bgra 96x 96 flags= 8 SSD= 1728, 1183, 719, 4513
> + abgr 96x96 -> bgra 96x 96 flags=16 SSD= 1728, 1229, 751, 4513
> + abgr 96x96 -> bgra 96x 96 flags=32 SSD= 1728, 1196, 724, 4513
> abgr 96x96 -> bgra 96x 128 flags= 1 SSD= 8, 1, 2, 0
> abgr 96x96 -> bgra 96x 128 flags= 2 SSD= 8, 1, 1, 0
> abgr 96x96 -> bgra 96x 128 flags= 4 SSD= 5, 0, 0, 0
>
> which I found very strange and still cannot explain (where is the
> random source, lfg in swscale-example.c uses always the same seed).
argb -> bgra
abgr -> bgra
both are not supported, so the scaler doesn't write nothing in output
and this explains the high SSD value and the randomicity of the
output.
Time to fix rgb2rgbWrapper!
--
FFmpeg = Faithless and Faboulous Merciless Powerful Eretic Geisha
More information about the ffmpeg-devel
mailing list