Mercurial > mplayer.hg
annotate libmpcodecs/vf_uspp.c @ 19619:a83e5b8d2e63
Patch from Karolina Lindqvist <karolina.lindqvist@kramnet.se>
"There is a bug in the zoran -vo zr driver, that makes the output garbled
always. It also probably affects the zrmjpeg filter. This patch takes care of
the problem."
Patch tested and OK. And 10l to me, because this bug probably has existed for a
looong time.
author | rik |
---|---|
date | Fri, 01 Sep 2006 18:49:40 +0000 |
parents | 7ba51e3ffca6 |
children | a124f3abc1ec |
rev | line source |
---|---|
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
1 /* |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
2 Copyright (C) 2005 Michael Niedermayer <michaelni@gmx.at> |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
3 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
4 This program is free software; you can redistribute it and/or modify |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
5 it under the terms of the GNU General Public License as published by |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
6 the Free Software Foundation; either version 2 of the License, or |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
7 (at your option) any later version. |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
8 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
9 This program is distributed in the hope that it will be useful, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
10 but WITHOUT ANY WARRANTY; without even the implied warranty of |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
12 GNU General Public License for more details. |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
13 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
14 You should have received a copy of the GNU General Public License |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
15 along with this program; if not, write to the Free Software |
17367
401b440a6d76
Update licensing information: The FSF changed postal address.
diego
parents:
17081
diff
changeset
|
16 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
17 */ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
18 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
19 #include <stdio.h> |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
20 #include <stdlib.h> |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
21 #include <string.h> |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
22 #include <inttypes.h> |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
23 #include <math.h> |
19569 | 24 #include <assert.h> |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
25 |
17012 | 26 #include "config.h" |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
27 |
17012 | 28 #include "mp_msg.h" |
29 #include "cpudetect.h" | |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
30 |
17012 | 31 #include "libavcodec/avcodec.h" |
32 #include "libavcodec/dsputil.h" | |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
33 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
34 #ifdef HAVE_MALLOC_H |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
35 #include <malloc.h> |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
36 #endif |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
37 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
38 #include "img_format.h" |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
39 #include "mp_image.h" |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
40 #include "vf.h" |
17012 | 41 #include "libvo/fastmemcpy.h" |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
42 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
43 #define XMIN(a,b) ((a) < (b) ? (a) : (b)) |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
44 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
45 #define BLOCK 16 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
46 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
47 //===========================================================================// |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
48 static const uint8_t __attribute__((aligned(8))) dither[8][8]={ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
49 { 0*4, 48*4, 12*4, 60*4, 3*4, 51*4, 15*4, 63*4, }, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
50 { 32*4, 16*4, 44*4, 28*4, 35*4, 19*4, 47*4, 31*4, }, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
51 { 8*4, 56*4, 4*4, 52*4, 11*4, 59*4, 7*4, 55*4, }, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
52 { 40*4, 24*4, 36*4, 20*4, 43*4, 27*4, 39*4, 23*4, }, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
53 { 2*4, 50*4, 14*4, 62*4, 1*4, 49*4, 13*4, 61*4, }, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
54 { 34*4, 18*4, 46*4, 30*4, 33*4, 17*4, 45*4, 29*4, }, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
55 { 10*4, 58*4, 6*4, 54*4, 9*4, 57*4, 5*4, 53*4, }, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
56 { 42*4, 26*4, 38*4, 22*4, 41*4, 25*4, 37*4, 21*4, }, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
57 }; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
58 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
59 static const uint8_t offset[511][2]= { |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
60 { 0, 0}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
61 { 0, 0}, { 8, 8}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
62 { 0, 0}, { 4, 4}, {12, 8}, { 8,12}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
63 { 0, 0}, {10, 2}, { 4, 4}, {14, 6}, { 8, 8}, { 2,10}, {12,12}, { 6,14}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
64 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
65 { 0, 0}, {10, 2}, { 4, 4}, {14, 6}, { 8, 8}, { 2,10}, {12,12}, { 6,14}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
66 { 5, 1}, {15, 3}, { 9, 5}, { 3, 7}, {13, 9}, { 7,11}, { 1,13}, {11,15}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
67 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
68 { 0, 0}, { 8, 0}, { 0, 8}, { 8, 8}, { 5, 1}, {13, 1}, { 5, 9}, {13, 9}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
69 { 2, 2}, {10, 2}, { 2,10}, {10,10}, { 7, 3}, {15, 3}, { 7,11}, {15,11}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
70 { 4, 4}, {12, 4}, { 4,12}, {12,12}, { 1, 5}, { 9, 5}, { 1,13}, { 9,13}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
71 { 6, 6}, {14, 6}, { 6,14}, {14,14}, { 3, 7}, {11, 7}, { 3,15}, {11,15}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
72 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
73 { 0, 0}, { 8, 0}, { 0, 8}, { 8, 8}, { 4, 0}, {12, 0}, { 4, 8}, {12, 8}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
74 { 1, 1}, { 9, 1}, { 1, 9}, { 9, 9}, { 5, 1}, {13, 1}, { 5, 9}, {13, 9}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
75 { 3, 2}, {11, 2}, { 3,10}, {11,10}, { 7, 2}, {15, 2}, { 7,10}, {15,10}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
76 { 2, 3}, {10, 3}, { 2,11}, {10,11}, { 6, 3}, {14, 3}, { 6,11}, {14,11}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
77 { 0, 4}, { 8, 4}, { 0,12}, { 8,12}, { 4, 4}, {12, 4}, { 4,12}, {12,12}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
78 { 1, 5}, { 9, 5}, { 1,13}, { 9,13}, { 5, 5}, {13, 5}, { 5,13}, {13,13}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
79 { 3, 6}, {11, 6}, { 3,14}, {11,14}, { 7, 6}, {15, 6}, { 7,14}, {15,14}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
80 { 2, 7}, {10, 7}, { 2,15}, {10,15}, { 6, 7}, {14, 7}, { 6,15}, {14,15}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
81 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
82 { 0, 0}, { 8, 0}, { 0, 8}, { 8, 8}, { 0, 2}, { 8, 2}, { 0,10}, { 8,10}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
83 { 0, 4}, { 8, 4}, { 0,12}, { 8,12}, { 0, 6}, { 8, 6}, { 0,14}, { 8,14}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
84 { 1, 1}, { 9, 1}, { 1, 9}, { 9, 9}, { 1, 3}, { 9, 3}, { 1,11}, { 9,11}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
85 { 1, 5}, { 9, 5}, { 1,13}, { 9,13}, { 1, 7}, { 9, 7}, { 1,15}, { 9,15}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
86 { 2, 0}, {10, 0}, { 2, 8}, {10, 8}, { 2, 2}, {10, 2}, { 2,10}, {10,10}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
87 { 2, 4}, {10, 4}, { 2,12}, {10,12}, { 2, 6}, {10, 6}, { 2,14}, {10,14}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
88 { 3, 1}, {11, 1}, { 3, 9}, {11, 9}, { 3, 3}, {11, 3}, { 3,11}, {11,11}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
89 { 3, 5}, {11, 5}, { 3,13}, {11,13}, { 3, 7}, {11, 7}, { 3,15}, {11,15}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
90 { 4, 0}, {12, 0}, { 4, 8}, {12, 8}, { 4, 2}, {12, 2}, { 4,10}, {12,10}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
91 { 4, 4}, {12, 4}, { 4,12}, {12,12}, { 4, 6}, {12, 6}, { 4,14}, {12,14}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
92 { 5, 1}, {13, 1}, { 5, 9}, {13, 9}, { 5, 3}, {13, 3}, { 5,11}, {13,11}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
93 { 5, 5}, {13, 5}, { 5,13}, {13,13}, { 5, 7}, {13, 7}, { 5,15}, {13,15}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
94 { 6, 0}, {14, 0}, { 6, 8}, {14, 8}, { 6, 2}, {14, 2}, { 6,10}, {14,10}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
95 { 6, 4}, {14, 4}, { 6,12}, {14,12}, { 6, 6}, {14, 6}, { 6,14}, {14,14}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
96 { 7, 1}, {15, 1}, { 7, 9}, {15, 9}, { 7, 3}, {15, 3}, { 7,11}, {15,11}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
97 { 7, 5}, {15, 5}, { 7,13}, {15,13}, { 7, 7}, {15, 7}, { 7,15}, {15,15}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
98 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
99 { 0, 0}, { 8, 0}, { 0, 8}, { 8, 8}, { 4, 4}, {12, 4}, { 4,12}, {12,12}, { 0, 4}, { 8, 4}, { 0,12}, { 8,12}, { 4, 0}, {12, 0}, { 4, 8}, {12, 8}, { 2, 2}, {10, 2}, { 2,10}, {10,10}, { 6, 6}, {14, 6}, { 6,14}, {14,14}, { 2, 6}, {10, 6}, { 2,14}, {10,14}, { 6, 2}, {14, 2}, { 6,10}, {14,10}, { 0, 2}, { 8, 2}, { 0,10}, { 8,10}, { 4, 6}, {12, 6}, { 4,14}, {12,14}, { 0, 6}, { 8, 6}, { 0,14}, { 8,14}, { 4, 2}, {12, 2}, { 4,10}, {12,10}, { 2, 0}, {10, 0}, { 2, 8}, {10, 8}, { 6, 4}, {14, 4}, { 6,12}, {14,12}, { 2, 4}, {10, 4}, { 2,12}, {10,12}, { 6, 0}, {14, 0}, { 6, 8}, {14, 8}, { 1, 1}, { 9, 1}, { 1, 9}, { 9, 9}, { 5, 5}, {13, 5}, { 5,13}, {13,13}, { 1, 5}, { 9, 5}, { 1,13}, { 9,13}, { 5, 1}, {13, 1}, { 5, 9}, {13, 9}, { 3, 3}, {11, 3}, { 3,11}, {11,11}, { 7, 7}, {15, 7}, { 7,15}, {15,15}, { 3, 7}, {11, 7}, { 3,15}, {11,15}, { 7, 3}, {15, 3}, { 7,11}, {15,11}, { 1, 3}, { 9, 3}, { 1,11}, { 9,11}, { 5, 7}, {13, 7}, { 5,15}, {13,15}, { 1, 7}, { 9, 7}, { 1,15}, { 9,15}, { 5, 3}, {13, 3}, { 5,11}, {13,11}, { 3, 1}, {11, 1}, { 3, 9}, {11, 9}, { 7, 5}, {15, 5}, { 7,13}, {15,13}, { 3, 5}, {11, 5}, { 3,13}, {11,13}, { 7, 1}, {15, 1}, { 7, 9}, {15, 9}, { 0, 1}, { 8, 1}, { 0, 9}, { 8, 9}, { 4, 5}, {12, 5}, { 4,13}, {12,13}, { 0, 5}, { 8, 5}, { 0,13}, { 8,13}, { 4, 1}, {12, 1}, { 4, 9}, {12, 9}, { 2, 3}, {10, 3}, { 2,11}, {10,11}, { 6, 7}, {14, 7}, { 6,15}, {14,15}, { 2, 7}, {10, 7}, { 2,15}, {10,15}, { 6, 3}, {14, 3}, { 6,11}, {14,11}, { 0, 3}, { 8, 3}, { 0,11}, { 8,11}, { 4, 7}, {12, 7}, { 4,15}, {12,15}, { 0, 7}, { 8, 7}, { 0,15}, { 8,15}, { 4, 3}, {12, 3}, { 4,11}, {12,11}, { 2, 1}, {10, 1}, { 2, 9}, {10, 9}, { 6, 5}, {14, 5}, { 6,13}, {14,13}, { 2, 5}, {10, 5}, { 2,13}, {10,13}, { 6, 1}, {14, 1}, { 6, 9}, {14, 9}, { 1, 0}, { 9, 0}, { 1, 8}, { 9, 8}, { 5, 4}, {13, 4}, { 5,12}, {13,12}, { 1, 4}, { 9, 4}, { 1,12}, { 9,12}, { 5, 0}, {13, 0}, { 5, 8}, {13, 8}, { 3, 2}, {11, 2}, { 3,10}, {11,10}, { 7, 6}, {15, 6}, { 7,14}, {15,14}, { 3, 6}, {11, 6}, { 3,14}, {11,14}, { 7, 2}, {15, 2}, { 7,10}, {15,10}, { 1, 2}, { 9, 2}, { 1,10}, { 9,10}, { 5, 6}, {13, 6}, { 5,14}, {13,14}, { 1, 6}, { 9, 6}, { 1,14}, { 9,14}, { 5, 2}, {13, 2}, { 5,10}, {13,10}, { 3, 0}, {11, 0}, { 3, 8}, {11, 8}, { 7, 4}, {15, 4}, { 7,12}, {15,12}, { 3, 4}, {11, 4}, { 3,12}, {11,12}, { 7, 0}, {15, 0}, { 7, 8}, {15, 8}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
100 }; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
101 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
102 struct vf_priv_s { |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
103 int log2_count; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
104 int qp; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
105 int mode; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
106 int mpeg2; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
107 int temp_stride[3]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
108 uint8_t *src[3]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
109 int16_t *temp[3]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
110 int outbuf_size; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
111 uint8_t *outbuf; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
112 AVCodecContext *avctx_enc[BLOCK*BLOCK]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
113 AVCodecContext *avctx_dec[BLOCK*BLOCK]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
114 AVFrame *frame; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
115 AVFrame *frame_dec; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
116 }; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
117 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
118 static void store_slice_c(uint8_t *dst, int16_t *src, int dst_stride, int src_stride, int width, int height, int log2_scale){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
119 int y, x; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
120 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
121 #define STORE(pos) \ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
122 temp= ((src[x + y*src_stride + pos]<<log2_scale) + d[pos])>>8;\ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
123 if(temp & 0x100) temp= ~(temp>>31);\ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
124 dst[x + y*dst_stride + pos]= temp; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
125 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
126 for(y=0; y<height; y++){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
127 const uint8_t *d= dither[y&7]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
128 for(x=0; x<width; x+=8){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
129 int temp; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
130 STORE(0); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
131 STORE(1); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
132 STORE(2); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
133 STORE(3); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
134 STORE(4); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
135 STORE(5); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
136 STORE(6); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
137 STORE(7); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
138 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
139 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
140 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
141 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
142 static void filter(struct vf_priv_s *p, uint8_t *dst[3], uint8_t *src[3], int dst_stride[3], int src_stride[3], int width, int height, uint8_t *qp_store, int qp_stride){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
143 int x, y, i, j; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
144 const int count= 1<<p->log2_count; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
145 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
146 for(i=0; i<3; i++){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
147 int is_chroma= !!i; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
148 int w= width >>is_chroma; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
149 int h= height>>is_chroma; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
150 int stride= p->temp_stride[i]; |
17081 | 151 int block= BLOCK>>is_chroma; |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
152 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
153 if (!src[i] || !dst[i]) |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
154 continue; // HACK avoid crash for Y8 colourspace |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
155 for(y=0; y<h; y++){ |
17081 | 156 int index= block + block*stride + y*stride; |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
157 memcpy(p->src[i] + index, src[i] + y*src_stride[i], w); |
17081 | 158 for(x=0; x<block; x++){ |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
159 p->src[i][index - x - 1]= p->src[i][index + x ]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
160 p->src[i][index + w + x ]= p->src[i][index + w - x - 1]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
161 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
162 } |
17081 | 163 for(y=0; y<block; y++){ |
164 memcpy(p->src[i] + ( block-1-y)*stride, p->src[i] + ( y+block )*stride, stride); | |
165 memcpy(p->src[i] + (h+block +y)*stride, p->src[i] + (h-y+block-1)*stride, stride); | |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
166 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
167 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
168 p->frame->linesize[i]= stride; |
17081 | 169 memset(p->temp[i], 0, (h+2*block)*stride*sizeof(int16_t)); |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
170 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
171 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
172 if(p->qp) |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
173 p->frame->quality= p->qp * FF_QP2LAMBDA; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
174 else |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
175 p->frame->quality= (qp_store[0] * FF_QP2LAMBDA)>>p->mpeg2; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
176 // init per MB qscale stuff FIXME |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
177 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
178 for(i=0; i<count; i++){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
179 const int x1= offset[i+count-1][0]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
180 const int y1= offset[i+count-1][1]; |
18976
6a08d0dabca8
Remove unused variables, patch by Stefan Huehner, stefan ##at## huehner org.
diego
parents:
18131
diff
changeset
|
181 int offset, out_size; |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
182 p->frame->data[0]= p->src[0] + x1 + y1 * p->frame->linesize[0]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
183 p->frame->data[1]= p->src[1] + x1/2 + y1/2 * p->frame->linesize[1]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
184 p->frame->data[2]= p->src[2] + x1/2 + y1/2 * p->frame->linesize[2]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
185 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
186 out_size = avcodec_encode_video(p->avctx_enc[i], p->outbuf, p->outbuf_size, p->frame); |
17614
673a0ce6cfb6
lavc exposes the reconstructed picture, so no need to decode it again
lorenm
parents:
17523
diff
changeset
|
187 p->frame_dec = p->avctx_enc[i]->coded_frame; |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
188 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
189 offset= (BLOCK-x1) + (BLOCK-y1)*p->frame_dec->linesize[0]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
190 //FIXME optimize |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
191 for(y=0; y<height; y++){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
192 for(x=0; x<width; x++){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
193 p->temp[0][ x + y*p->temp_stride[0] ] += p->frame_dec->data[0][ x + y*p->frame_dec->linesize[0] + offset ]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
194 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
195 } |
17081 | 196 offset= (BLOCK/2-x1/2) + (BLOCK/2-y1/2)*p->frame_dec->linesize[1]; |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
197 for(y=0; y<height/2; y++){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
198 for(x=0; x<width/2; x++){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
199 p->temp[1][ x + y*p->temp_stride[1] ] += p->frame_dec->data[1][ x + y*p->frame_dec->linesize[1] + offset ]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
200 p->temp[2][ x + y*p->temp_stride[2] ] += p->frame_dec->data[2][ x + y*p->frame_dec->linesize[2] + offset ]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
201 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
202 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
203 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
204 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
205 for(j=0; j<3; j++){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
206 int is_chroma= !!j; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
207 store_slice_c(dst[j], p->temp[j], dst_stride[j], p->temp_stride[j], width>>is_chroma, height>>is_chroma, 8-p->log2_count); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
208 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
209 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
210 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
211 static int config(struct vf_instance_s* vf, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
212 int width, int height, int d_width, int d_height, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
213 unsigned int flags, unsigned int outfmt){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
214 int i; |
17081 | 215 AVCodec *dec= avcodec_find_decoder(CODEC_ID_SNOW); |
216 AVCodec *enc= avcodec_find_encoder(CODEC_ID_SNOW); | |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
217 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
218 for(i=0; i<3; i++){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
219 int is_chroma= !!i; |
17081 | 220 int w= ((width + 4*BLOCK-1) & (~(2*BLOCK-1)))>>is_chroma; |
221 int h= ((height + 4*BLOCK-1) & (~(2*BLOCK-1)))>>is_chroma; | |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
222 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
223 vf->priv->temp_stride[i]= w; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
224 vf->priv->temp[i]= malloc(vf->priv->temp_stride[i]*h*sizeof(int16_t)); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
225 vf->priv->src [i]= malloc(vf->priv->temp_stride[i]*h*sizeof(uint8_t)); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
226 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
227 for(i=0; i< (1<<vf->priv->log2_count); i++){ |
17081 | 228 AVCodecContext *avctx_enc, *avctx_dec; |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
229 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
230 avctx_enc= |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
231 vf->priv->avctx_enc[i]= avcodec_alloc_context(); |
17081 | 232 avctx_dec= |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
233 vf->priv->avctx_dec[i]= avcodec_alloc_context(); |
17081 | 234 avctx_dec->width = |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
235 avctx_enc->width = width + BLOCK; |
17081 | 236 avctx_dec->height = |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
237 avctx_enc->height = height + BLOCK; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
238 avctx_enc->time_base= (AVRational){1,25}; // meaningless |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
239 avctx_enc->gop_size = 300; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
240 avctx_enc->max_b_frames= 0; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
241 avctx_enc->pix_fmt = PIX_FMT_YUV420P; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
242 avctx_enc->flags = CODEC_FLAG_QSCALE | CODEC_FLAG_LOW_DELAY; |
17081 | 243 avctx_enc->strict_std_compliance = FF_COMPLIANCE_EXPERIMENTAL; |
19569 | 244 avctx_enc->global_quality= 123; |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
245 avcodec_open(avctx_enc, enc); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
246 avcodec_open(vf->priv->avctx_dec[i], dec); |
19569 | 247 assert(avctx_enc->codec); |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
248 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
249 vf->priv->frame= avcodec_alloc_frame(); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
250 vf->priv->frame_dec= avcodec_alloc_frame(); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
251 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
252 vf->priv->outbuf_size= (width + BLOCK)*(height + BLOCK)*10; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
253 vf->priv->outbuf= malloc(vf->priv->outbuf_size); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
254 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
255 return vf_next_config(vf,width,height,d_width,d_height,flags,outfmt); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
256 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
257 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
258 static void get_image(struct vf_instance_s* vf, mp_image_t *mpi){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
259 if(mpi->flags&MP_IMGFLAG_PRESERVE) return; // don't change |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
260 // ok, we can do pp in-place (or pp disabled): |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
261 vf->dmpi=vf_get_image(vf->next,mpi->imgfmt, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
262 mpi->type, mpi->flags | MP_IMGFLAG_READABLE, mpi->width, mpi->height); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
263 mpi->planes[0]=vf->dmpi->planes[0]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
264 mpi->stride[0]=vf->dmpi->stride[0]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
265 mpi->width=vf->dmpi->width; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
266 if(mpi->flags&MP_IMGFLAG_PLANAR){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
267 mpi->planes[1]=vf->dmpi->planes[1]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
268 mpi->planes[2]=vf->dmpi->planes[2]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
269 mpi->stride[1]=vf->dmpi->stride[1]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
270 mpi->stride[2]=vf->dmpi->stride[2]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
271 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
272 mpi->flags|=MP_IMGFLAG_DIRECT; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
273 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
274 |
17906
20aca9baf5d8
passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents:
17614
diff
changeset
|
275 static int put_image(struct vf_instance_s* vf, mp_image_t *mpi, double pts){ |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
276 mp_image_t *dmpi; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
277 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
278 if(!(mpi->flags&MP_IMGFLAG_DIRECT)){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
279 // no DR, so get a new image! hope we'll get DR buffer: |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
280 dmpi=vf_get_image(vf->next,mpi->imgfmt, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
281 MP_IMGTYPE_TEMP, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
282 MP_IMGFLAG_ACCEPT_STRIDE|MP_IMGFLAG_PREFER_ALIGNED_STRIDE, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
283 mpi->width,mpi->height); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
284 vf_clone_mpi_attributes(dmpi, mpi); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
285 }else{ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
286 dmpi=vf->dmpi; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
287 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
288 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
289 vf->priv->mpeg2= mpi->qscale_type; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
290 if(vf->priv->log2_count || !(mpi->flags&MP_IMGFLAG_DIRECT)){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
291 if(mpi->qscale || vf->priv->qp){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
292 filter(vf->priv, dmpi->planes, mpi->planes, dmpi->stride, mpi->stride, mpi->w, mpi->h, mpi->qscale, mpi->qstride); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
293 }else{ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
294 memcpy_pic(dmpi->planes[0], mpi->planes[0], mpi->w, mpi->h, dmpi->stride[0], mpi->stride[0]); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
295 memcpy_pic(dmpi->planes[1], mpi->planes[1], mpi->w>>mpi->chroma_x_shift, mpi->h>>mpi->chroma_y_shift, dmpi->stride[1], mpi->stride[1]); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
296 memcpy_pic(dmpi->planes[2], mpi->planes[2], mpi->w>>mpi->chroma_x_shift, mpi->h>>mpi->chroma_y_shift, dmpi->stride[2], mpi->stride[2]); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
297 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
298 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
299 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
300 #ifdef HAVE_MMX |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
301 if(gCpuCaps.hasMMX) asm volatile ("emms\n\t"); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
302 #endif |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
303 #ifdef HAVE_MMX2 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
304 if(gCpuCaps.hasMMX2) asm volatile ("sfence\n\t"); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
305 #endif |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
306 |
17906
20aca9baf5d8
passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents:
17614
diff
changeset
|
307 return vf_next_put_image(vf,dmpi, pts); |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
308 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
309 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
310 static void uninit(struct vf_instance_s* vf){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
311 int i; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
312 if(!vf->priv) return; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
313 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
314 for(i=0; i<3; i++){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
315 if(vf->priv->temp[i]) free(vf->priv->temp[i]); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
316 vf->priv->temp[i]= NULL; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
317 if(vf->priv->src[i]) free(vf->priv->src[i]); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
318 vf->priv->src[i]= NULL; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
319 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
320 for(i=0; i<BLOCK*BLOCK; i++){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
321 av_freep(&vf->priv->avctx_enc[i]); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
322 av_freep(&vf->priv->avctx_dec[i]); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
323 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
324 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
325 free(vf->priv); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
326 vf->priv=NULL; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
327 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
328 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
329 //===========================================================================// |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
330 static int query_format(struct vf_instance_s* vf, unsigned int fmt){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
331 switch(fmt){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
332 case IMGFMT_YV12: |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
333 case IMGFMT_I420: |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
334 case IMGFMT_IYUV: |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
335 case IMGFMT_Y800: |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
336 case IMGFMT_Y8: |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
337 return vf_next_query_format(vf,fmt); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
338 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
339 return 0; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
340 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
341 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
342 static unsigned int fmt_list[]={ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
343 IMGFMT_YV12, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
344 IMGFMT_I420, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
345 IMGFMT_IYUV, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
346 IMGFMT_Y800, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
347 IMGFMT_Y8, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
348 0 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
349 }; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
350 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
351 static int control(struct vf_instance_s* vf, int request, void* data){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
352 switch(request){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
353 case VFCTRL_QUERY_MAX_PP_LEVEL: |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
354 return 8; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
355 case VFCTRL_SET_PP_LEVEL: |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
356 vf->priv->log2_count= *((unsigned int*)data); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
357 //FIXME we have to realloc a few things here |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
358 return CONTROL_TRUE; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
359 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
360 return vf_next_control(vf,request,data); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
361 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
362 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
363 static int open(vf_instance_t *vf, char* args){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
364 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
365 int log2c=-1; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
366 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
367 vf->config=config; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
368 vf->put_image=put_image; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
369 vf->get_image=get_image; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
370 vf->query_format=query_format; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
371 vf->uninit=uninit; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
372 vf->control= control; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
373 vf->priv=malloc(sizeof(struct vf_priv_s)); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
374 memset(vf->priv, 0, sizeof(struct vf_priv_s)); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
375 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
376 avcodec_init(); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
377 avcodec_register_all(); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
378 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
379 vf->priv->log2_count= 4; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
380 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
381 if (args) sscanf(args, "%d:%d:%d", &log2c, &vf->priv->qp, &vf->priv->mode); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
382 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
383 if( log2c >=0 && log2c <=8 ) |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
384 vf->priv->log2_count = log2c; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
385 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
386 if(vf->priv->qp < 0) |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
387 vf->priv->qp = 0; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
388 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
389 // #ifdef HAVE_MMX |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
390 // if(gCpuCaps.hasMMX){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
391 // store_slice= store_slice_mmx; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
392 // } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
393 // #endif |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
394 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
395 return 1; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
396 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
397 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
398 vf_info_t vf_info_uspp = { |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
399 "ultra simple/slow postprocess", |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
400 "uspp", |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
401 "Michael Niedermayer", |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
402 "", |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
403 open, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
404 NULL |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
405 }; |