[FFmpeg-devel] [PATCH 1/2] Bink version 'b' video decoder

Peter Ross pross
Thu Feb 10 05:26:25 CET 2011


On Wed, Feb 09, 2011 at 09:54:00PM +0100, Vitor Sessak wrote:
> On 02/09/2011 01:04 PM, Peter Ross wrote:
> >Based on original patch by Kostya Shishkov
> >---
> >  libavcodec/bink.c     |  340 ++++++++++++++++++++++++++++++++++++++++++++++---
> >  libavcodec/binkdata.h |   41 ++++++
> >  2 files changed, 364 insertions(+), 17 deletions(-)
> >
> >diff --git a/libavcodec/bink.c b/libavcodec/bink.c
> >index 64a10b7..32330fe 100644
> 
> [...]
> 
> >+/**
> >+ * Caclulate quantization tables for version b
> >+ */
> >+static av_cold void binkb_calc_quant()
> >+{
> >+    float s[64];
> >+    int i, j;
> >+
> >+    for (j = 0; j<  8; j++) {
> >+        for (i = 0; i<  8; i++) {
> >+            if (j&&  j != 4)
> >+               if (i&&  i != 4)
> >+                   s[j*8 + i] = cos(j * M_PI/16.0f) * cos(i * M_PI/16.0f) * 2.0f;
> >+               else
> >+                   s[j*8 + i] = cos(j * M_PI/16.0f) * sqrt(2.0f);
> >+            else
> >+               if (i&&  i != 4)
> >+                   s[j*8 + i] = cos(i * M_PI/16.0f) * sqrt(2.0f);
> >+               else
> >+                   s[j*8 + i] = 1.0f;
> >+        }
> >+    }
> >+
> >+    for (j = 0; j<  16; j++) {
> >+        for (i = 0; i<  64; i++) {
> >+            binkb_intra_quant[j][i] = (1L<<12) * binkb_intra_seed[i] * binkb_num[j]/(float)binkb_den[j] * s[i];
> >+            binkb_inter_quant[j][i] = (1L<<12) * binkb_inter_seed[i] * binkb_num[j]/(float)binkb_den[j] * s[i];
> >+        }
> >+    }
> >+}
> 
> Can you run the following test:
> 
> 
>     for (j = 0; j<  16; j++) {
>         for (i = 0; i<  64; i++) {
>             int x = ( 1 + (1<<20))/((float)(1<<20))) * (1L<<12) *
> binkb_intra_seed[i] * binkb_num[j]/(float)binkb_den[j] * s[i];
>             int y = (-1 + (1<<20))/((float)(1<<20))) * (1L<<12) *
> binkb_intra_seed[i] * binkb_num[j]/(float)binkb_den[j] * s[i];
>             if (i != y)
>                 av_log(NULL, "%d %d\n", i, j);
>         }
>    }
> 
> and analogously for binkb_inter_quant? If there are any values that
> are not stable to fp rounding, it is enough to hardcode them...

Hard coding the quant tables will add 8k to libavcodec. Anyway heres the output:

av_log(0,0, "intra\n");
for (j = 0; j < 16; j++) {
    for (i = 0; i < 64; i++) {
        int x = ( 1 + (1<<20))/((float)(1<<20)) * (1L<<12) * binkb_intra_seed[i] * binkb_num[j]/(float)binkb_den[j] * s[i];
        int y = (-1 + (1<<20))/((float)(1<<20)) * (1L<<12) * binkb_intra_seed[i] * binkb_num[j]/(float)binkb_den[j] * s[i];
        if (x != y)
            av_log(0, 0, "%d %d\n", i, j);
    }
}

av_log(0,0, "inter\n");
for (j = 0; j < 16; j++) {
    for (i = 0; i < 64; i++) {
        int x = ( 1 + (1<<20))/((float)(1<<20)) * (1L<<12) * binkb_inter_seed[i] * binkb_num[j]/(float)binkb_den[j] * s[i];
        int y = (-1 + (1<<20))/((float)(1<<20)) * (1L<<12) * binkb_inter_seed[i] * binkb_num[j]/(float)binkb_den[j] * s[i];
        if (x != y)
            av_log(0, 0, "%d %d\n", i, j);
    }
}

intra
0 0
1 0
4 0
8 0
10 0
17 0
18 0
21 0
22 0
25 0
28 0
32 0
33 0
36 0
37 0
42 0
43 0
8 1
9 1
15 1
17 1
18 1
20 1
24 1
26 1
28 1
29 1
35 1
37 1
44 1
45 1
3 2
8 2
9 2
10 2
11 2
13 2
17 2
18 2
19 2
26 2
27 2
30 2
33 2
37 2
44 2
46 2
51 2
0 3
1 3
4 3
8 3
9 3
10 3
11 3
14 3
16 3
17 3
18 3
21 3
22 3
24 3
25 3
26 3
28 3
32 3
33 3
34 3
35 3
36 3
37 3
42 3
43 3
45 3
58 3
63 3
2 4
7 4
8 4
11 4
14 4
16 4
17 4
18 4
19 4
20 4
21 4
25 4
27 4
28 4
29 4
30 4
31 4
33 4
34 4
36 4
37 4
41 4
42 4
50 4
52 4
53 4
57 4
58 4
61 4
1 5
8 5
9 5
10 5
11 5
13 5
15 5
16 5
17 5
18 5
20 5
24 5
25 5
26 5
27 5
28 5
29 5
33 5
34 5
35 5
36 5
37 5
41 5
43 5
44 5
45 5
46 5
47 5
0 6
1 6
3 6
4 6
8 6
9 6
10 6
11 6
12 6
16 6
17 6
18 6
19 6
20 6
21 6
22 6
24 6
25 6
26 6
27 6
28 6
30 6
31 6
32 6
33 6
34 6
35 6
36 6
37 6
39 6
40 6
41 6
42 6
43 6
44 6
47 6
49 6
50 6
51 6
55 6
57 6
60 6
0 7
2 7
4 7
6 7
8 7
9 7
10 7
11 7
12 7
13 7
15 7
16 7
17 7
18 7
19 7
20 7
21 7
25 7
26 7
27 7
28 7
29 7
31 7
32 7
33 7
34 7
36 7
38 7
40 7
41 7
42 7
43 7
44 7
45 7
46 7
49 7
50 7
51 7
54 7
57 7
58 7
61 7
0 8
1 8
4 8
6 8
8 8
9 8
10 8
11 8
12 8
13 8
14 8
15 8
16 8
17 8
18 8
19 8
20 8
21 8
22 8
23 8
24 8
25 8
26 8
27 8
28 8
29 8
30 8
32 8
33 8
34 8
35 8
36 8
37 8
41 8
42 8
43 8
44 8
45 8
49 8
58 8
60 8
63 8
0 9
1 9
2 9
3 9
4 9
6 9
8 9
9 9
10 9
11 9
12 9
13 9
14 9
16 9
17 9
18 9
19 9
20 9
21 9
24 9
25 9
26 9
27 9
28 9
29 9
30 9
32 9
33 9
34 9
35 9
36 9
37 9
38 9
39 9
40 9
41 9
42 9
43 9
44 9
45 9
47 9
49 9
50 9
51 9
54 9
55 9
58 9
59 9
60 9
62 9
0 10
1 10
3 10
4 10
8 10
9 10
10 10
11 10
12 10
13 10
16 10
17 10
18 10
19 10
20 10
21 10
22 10
24 10
25 10
26 10
27 10
28 10
29 10
30 10
32 10
33 10
34 10
35 10
36 10
37 10
38 10
40 10
41 10
42 10
43 10
44 10
46 10
49 10
50 10
51 10
54 10
61 10
62 10
0 11
1 11
2 11
3 11
4 11
7 11
8 11
9 11
10 11
11 11
12 11
13 11
14 11
16 11
17 11
18 11
19 11
20 11
21 11
22 11
24 11
25 11
26 11
27 11
28 11
29 11
30 11
31 11
32 11
33 11
34 11
35 11
36 11
37 11
38 11
39 11
40 11
41 11
42 11
43 11
44 11
45 11
46 11
47 11
48 11
49 11
50 11
51 11
52 11
53 11
54 11
55 11
56 11
57 11
58 11
60 11
61 11
62 11
63 11
0 12
1 12
2 12
3 12
4 12
6 12
7 12
8 12
9 12
10 12
11 12
12 12
13 12
14 12
15 12
16 12
17 12
18 12
19 12
20 12
21 12
22 12
23 12
24 12
25 12
26 12
27 12
28 12
29 12
30 12
31 12
32 12
33 12
34 12
35 12
36 12
37 12
38 12
39 12
40 12
41 12
42 12
43 12
44 12
45 12
46 12
48 12
49 12
50 12
51 12
52 12
53 12
54 12
56 12
57 12
58 12
60 12
61 12
0 13
1 13
2 13
3 13
4 13
5 13
6 13
8 13
9 13
10 13
11 13
12 13
13 13
14 13
15 13
16 13
17 13
18 13
19 13
20 13
21 13
22 13
23 13
24 13
25 13
26 13
27 13
28 13
29 13
30 13
32 13
33 13
34 13
35 13
36 13
37 13
38 13
40 13
41 13
42 13
43 13
44 13
45 13
46 13
47 13
48 13
49 13
50 13
51 13
52 13
53 13
54 13
56 13
57 13
58 13
59 13
60 13
61 13
63 13
0 14
1 14
2 14
3 14
4 14
5 14
6 14
8 14
9 14
10 14
11 14
12 14
13 14
14 14
16 14
17 14
18 14
19 14
20 14
21 14
22 14
23 14
24 14
25 14
26 14
27 14
28 14
29 14
30 14
31 14
32 14
33 14
34 14
35 14
36 14
37 14
38 14
39 14
40 14
41 14
42 14
43 14
44 14
45 14
46 14
47 14
48 14
49 14
50 14
51 14
52 14
53 14
54 14
55 14
56 14
57 14
58 14
59 14
60 14
61 14
62 14
0 15
1 15
2 15
3 15
4 15
5 15
6 15
8 15
9 15
10 15
11 15
12 15
13 15
14 15
15 15
16 15
17 15
18 15
19 15
20 15
21 15
22 15
24 15
25 15
26 15
27 15
28 15
29 15
30 15
31 15
32 15
33 15
34 15
35 15
36 15
37 15
38 15
39 15
40 15
41 15
42 15
43 15
44 15
45 15
46 15
48 15
49 15
50 15
51 15
52 15
53 15
54 15
56 15
57 15
58 15
59 15
60 15
61 15
62 15
63 15

inter
0 0
3 0
4 0
8 0
9 0
10 0
17 0
26 0
30 0
32 0
36 0
37 0
40 0
42 0
49 0
52 0
4 1
5 1
9 1
16 1
17 1
20 1
25 1
26 1
30 1
31 1
33 1
36 1
41 1
51 1
58 1
2 2
4 2
7 2
9 2
10 2
11 2
16 2
17 2
18 2
19 2
20 2
22 2
26 2
28 2
30 2
34 2
35 2
36 2
50 2
0 3
3 3
4 3
8 3
9 3
10 3
11 3
17 3
18 3
24 3
25 3
26 3
30 3
32 3
36 3
37 3
40 3
42 3
48 3
49 3
51 3
52 3
60 3
62 3
1 4
4 4
9 4
12 4
17 4
18 4
21 4
23 4
24 4
26 4
27 4
29 4
30 4
33 4
34 4
36 4
42 4
44 4
46 4
47 4
1 5
4 5
5 5
9 5
10 5
16 5
17 5
18 5
19 5
20 5
21 5
25 5
26 5
27 5
28 5
30 5
31 5
33 5
35 5
36 5
41 5
44 5
49 5
51 5
53 5
58 5
59 5
0 6
1 6
2 6
3 6
4 6
5 6
8 6
9 6
10 6
11 6
12 6
13 6
16 6
17 6
20 6
21 6
25 6
26 6
27 6
30 6
32 6
33 6
34 6
36 6
37 6
40 6
41 6
42 6
43 6
44 6
46 6
49 6
50 6
52 6
54 6
56 6
0 7
1 7
2 7
4 7
5 7
9 7
10 7
11 7
12 7
16 7
17 7
18 7
19 7
20 7
21 7
22 7
24 7
25 7
26 7
27 7
28 7
29 7
30 7
32 7
33 7
35 7
36 7
38 7
42 7
44 7
45 7
46 7
47 7
50 7
52 7
59 7
0 8
3 8
4 8
5 8
8 8
9 8
10 8
11 8
12 8
16 8
17 8
18 8
19 8
20 8
22 8
24 8
25 8
26 8
27 8
30 8
31 8
32 8
33 8
34 8
36 8
37 8
38 8
40 8
41 8
42 8
43 8
45 8
48 8
49 8
51 8
52 8
58 8
60 8
62 8
0 9
1 9
2 9
3 9
4 9
9 9
10 9
11 9
12 9
13 9
15 9
16 9
17 9
18 9
19 9
20 9
21 9
23 9
24 9
25 9
26 9
27 9
28 9
29 9
30 9
32 9
33 9
34 9
35 9
36 9
37 9
38 9
40 9
41 9
42 9
43 9
44 9
45 9
48 9
49 9
51 9
52 9
54 9
58 9
59 9
0 10
1 10
2 10
3 10
4 10
7 10
8 10
9 10
10 10
11 10
12 10
13 10
16 10
17 10
18 10
19 10
20 10
21 10
22 10
24 10
25 10
26 10
27 10
28 10
29 10
30 10
32 10
33 10
34 10
35 10
36 10
37 10
40 10
41 10
42 10
43 10
44 10
45 10
49 10
50 10
51 10
52 10
53 10
57 10
58 10
0 11
1 11
2 11
3 11
4 11
5 11
8 11
9 11
10 11
11 11
12 11
13 11
14 11
16 11
17 11
18 11
19 11
20 11
21 11
22 11
24 11
25 11
26 11
27 11
28 11
29 11
30 11
32 11
33 11
34 11
35 11
36 11
37 11
40 11
41 11
42 11
43 11
44 11
46 11
48 11
49 11
50 11
51 11
52 11
54 11
56 11
57 11
59 11
60 11
62 11
0 12
1 12
2 12
3 12
4 12
5 12
8 12
9 12
10 12
11 12
12 12
13 12
14 12
16 12
17 12
18 12
19 12
20 12
21 12
22 12
23 12
24 12
25 12
26 12
27 12
28 12
29 12
30 12
31 12
32 12
33 12
34 12
35 12
36 12
37 12
38 12
40 12
41 12
42 12
43 12
44 12
45 12
46 12
47 12
49 12
50 12
51 12
52 12
55 12
59 12
0 13
1 13
2 13
3 13
4 13
5 13
8 13
9 13
10 13
11 13
12 13
13 13
14 13
15 13
16 13
17 13
18 13
19 13
20 13
21 13
22 13
24 13
25 13
26 13
27 13
28 13
29 13
30 13
31 13
32 13
33 13
34 13
35 13
36 13
37 13
38 13
40 13
41 13
42 13
43 13
44 13
45 13
48 13
49 13
50 13
51 13
52 13
53 13
56 13
58 13
59 13
60 13
62 13
0 14
1 14
2 14
3 14
4 14
5 14
8 14
9 14
10 14
11 14
12 14
13 14
14 14
15 14
16 14
17 14
18 14
19 14
20 14
21 14
22 14
23 14
24 14
25 14
26 14
27 14
28 14
29 14
30 14
32 14
33 14
34 14
35 14
36 14
37 14
38 14
39 14
40 14
41 14
42 14
43 14
44 14
45 14
46 14
47 14
48 14
49 14
50 14
51 14
52 14
54 14
56 14
57 14
58 14
59 14
0 15
1 15
2 15
3 15
4 15
5 15
7 15
8 15
9 15
10 15
11 15
12 15
13 15
14 15
15 15
16 15
17 15
18 15
19 15
20 15
21 15
22 15
24 15
25 15
26 15
27 15
28 15
29 15
30 15
31 15
32 15
33 15
34 15
35 15
36 15
37 15
38 15
39 15
40 15
41 15
42 15
43 15
44 15
45 15
46 15
48 15
49 15
50 15
51 15
52 15
53 15
55 15
57 15
58 15
60 15
62 15

-- Peter
(A907 E02F A6E5 0CD2 34CD 20D2 6760 79C5 AC40 DD6B)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20110210/131855bb/attachment.pgp>



More information about the ffmpeg-devel mailing list