annotate libmpcodecs/vf_uspp.c @ 17135:d2bafb1e217c

Every contribution deserves to be listed on the "about" window of the gui. Change the way this list is done by following the layout of AUTHORS
author gpoirier
date Wed, 07 Dec 2005 21:17:29 +0000
parents f612d2cdb262
children 401b440a6d76
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
16 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
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>
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
24
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16946
diff changeset
25 #include "config.h"
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
26
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
27 #ifdef USE_LIBAVCODEC
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
28
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16946
diff changeset
29 #include "mp_msg.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16946
diff changeset
30 #include "cpudetect.h"
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
31
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
32 #ifdef USE_LIBAVCODEC_SO
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
33 #include <ffmpeg/avcodec.h>
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
34 #include <ffmpeg/dsputil.h>
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
35 #else
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16946
diff changeset
36 #include "libavcodec/avcodec.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16946
diff changeset
37 #include "libavcodec/dsputil.h"
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
38 #endif
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
39
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
40 #ifdef HAVE_MALLOC_H
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
41 #include <malloc.h>
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
42 #endif
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
43
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
44 #include "img_format.h"
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
45 #include "mp_image.h"
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
46 #include "vf.h"
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16946
diff changeset
47 #include "libvo/fastmemcpy.h"
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
48
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
49 #define XMIN(a,b) ((a) < (b) ? (a) : (b))
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
50
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
51 #define BLOCK 16
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
52
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
53 //===========================================================================//
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
54 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
55 { 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
56 { 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
57 { 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
58 { 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
59 { 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
60 { 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
61 { 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
62 { 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
63 };
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 static const uint8_t offset[511][2]= {
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
66 { 0, 0},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
67 { 0, 0}, { 8, 8},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
68 { 0, 0}, { 4, 4}, {12, 8}, { 8,12},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
69 { 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
70
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
71 { 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
72 { 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
73
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
74 { 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
75 { 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
76 { 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
77 { 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
78
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
79 { 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
80 { 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
81 { 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
82 { 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
83 { 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
84 { 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
85 { 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
86 { 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
87
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
88 { 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
89 { 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
90 { 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
91 { 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
92 { 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
93 { 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
94 { 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
95 { 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
96 { 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
97 { 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
98 { 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
99 { 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
100 { 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
101 { 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
102 { 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
103 { 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
104
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
105 { 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
106 };
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
107
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
108 struct vf_priv_s {
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
109 int log2_count;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
110 int qp;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
111 int mode;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
112 int mpeg2;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
113 int temp_stride[3];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
114 uint8_t *src[3];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
115 int16_t *temp[3];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
116 int outbuf_size;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
117 uint8_t *outbuf;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
118 AVCodecContext *avctx_enc[BLOCK*BLOCK];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
119 AVCodecContext *avctx_dec[BLOCK*BLOCK];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
120 AVFrame *frame;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
121 AVFrame *frame_dec;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
122 };
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
123
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
124 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
125 int y, x;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
126
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
127 #define STORE(pos) \
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
128 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
129 if(temp & 0x100) temp= ~(temp>>31);\
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
130 dst[x + y*dst_stride + pos]= temp;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
131
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
132 for(y=0; y<height; y++){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
133 const uint8_t *d= dither[y&7];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
134 for(x=0; x<width; x+=8){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
135 int temp;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
136 STORE(0);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
137 STORE(1);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
138 STORE(2);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
139 STORE(3);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
140 STORE(4);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
141 STORE(5);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
142 STORE(6);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
143 STORE(7);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
144 }
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 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
147
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
148 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
149 int x, y, i, j;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
150 const int count= 1<<p->log2_count;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
151
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
152 for(i=0; i<3; i++){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
153 int is_chroma= !!i;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
154 int w= width >>is_chroma;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
155 int h= height>>is_chroma;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
156 int stride= p->temp_stride[i];
17081
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
157 int block= BLOCK>>is_chroma;
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
158
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
159 if (!src[i] || !dst[i])
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
160 continue; // HACK avoid crash for Y8 colourspace
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
161 for(y=0; y<h; y++){
17081
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
162 int index= block + block*stride + y*stride;
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
163 memcpy(p->src[i] + index, src[i] + y*src_stride[i], w);
17081
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
164 for(x=0; x<block; x++){
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
165 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
166 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
167 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
168 }
17081
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
169 for(y=0; y<block; y++){
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
170 memcpy(p->src[i] + ( block-1-y)*stride, p->src[i] + ( y+block )*stride, stride);
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
171 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
172 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
173
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
174 p->frame->linesize[i]= stride;
17081
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
175 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
176 }
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 if(p->qp)
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
179 p->frame->quality= p->qp * FF_QP2LAMBDA;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
180 else
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
181 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
182 // init per MB qscale stuff FIXME
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
183
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
184 for(i=0; i<count; i++){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
185 const int x1= offset[i+count-1][0];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
186 const int y1= offset[i+count-1][1];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
187 int offset, out_size, got_picture;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
188 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
189 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
190 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
191
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
192 out_size = avcodec_encode_video(p->avctx_enc[i], p->outbuf, p->outbuf_size, p->frame);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
193 avcodec_decode_video(p->avctx_dec[i], p->frame_dec, &got_picture, p->outbuf, out_size);
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 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
196 //FIXME optimize
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
197 for(y=0; y<height; y++){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
198 for(x=0; x<width; x++){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
199 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
200 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
201 }
17081
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
202 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
203 for(y=0; y<height/2; y++){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
204 for(x=0; x<width/2; x++){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
205 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
206 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
207 }
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 for(j=0; j<3; j++){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
212 int is_chroma= !!j;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
213 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
214 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
215 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
216
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
217 static int config(struct vf_instance_s* vf,
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
218 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
219 unsigned int flags, unsigned int outfmt){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
220 int i;
17081
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
221 AVCodec *dec= avcodec_find_decoder(CODEC_ID_SNOW);
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
222 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
223
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
224 for(i=0; i<3; i++){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
225 int is_chroma= !!i;
17081
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
226 int w= ((width + 4*BLOCK-1) & (~(2*BLOCK-1)))>>is_chroma;
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
227 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
228
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
229 vf->priv->temp_stride[i]= w;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
230 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
231 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
232 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
233 for(i=0; i< (1<<vf->priv->log2_count); i++){
17081
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
234 AVCodecContext *avctx_enc, *avctx_dec;
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
235
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
236 avctx_enc=
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
237 vf->priv->avctx_enc[i]= avcodec_alloc_context();
17081
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
238 avctx_dec=
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
239 vf->priv->avctx_dec[i]= avcodec_alloc_context();
17081
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
240 avctx_dec->width =
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
241 avctx_enc->width = width + BLOCK;
17081
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
242 avctx_dec->height =
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
243 avctx_enc->height = height + BLOCK;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
244 avctx_enc->time_base= (AVRational){1,25}; // meaningless
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
245 avctx_enc->gop_size = 300;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
246 avctx_enc->max_b_frames= 0;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
247 avctx_enc->pix_fmt = PIX_FMT_YUV420P;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
248 avctx_enc->flags = CODEC_FLAG_QSCALE | CODEC_FLAG_LOW_DELAY;
17081
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
249 avctx_enc->strict_std_compliance = FF_COMPLIANCE_EXPERIMENTAL;
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
250 avcodec_open(avctx_enc, enc);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
251 avcodec_open(vf->priv->avctx_dec[i], dec);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
252
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
253 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
254 vf->priv->frame= avcodec_alloc_frame();
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
255 vf->priv->frame_dec= avcodec_alloc_frame();
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 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
258 vf->priv->outbuf= malloc(vf->priv->outbuf_size);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
259
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
260 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
261 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
262
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
263 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
264 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
265 // 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
266 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
267 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
268 mpi->planes[0]=vf->dmpi->planes[0];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
269 mpi->stride[0]=vf->dmpi->stride[0];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
270 mpi->width=vf->dmpi->width;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
271 if(mpi->flags&MP_IMGFLAG_PLANAR){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
272 mpi->planes[1]=vf->dmpi->planes[1];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
273 mpi->planes[2]=vf->dmpi->planes[2];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
274 mpi->stride[1]=vf->dmpi->stride[1];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
275 mpi->stride[2]=vf->dmpi->stride[2];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
276 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
277 mpi->flags|=MP_IMGFLAG_DIRECT;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
278 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
279
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
280 static int put_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
281 mp_image_t *dmpi;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
282
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
283 if(!(mpi->flags&MP_IMGFLAG_DIRECT)){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
284 // 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
285 dmpi=vf_get_image(vf->next,mpi->imgfmt,
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
286 MP_IMGTYPE_TEMP,
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
287 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
288 mpi->width,mpi->height);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
289 vf_clone_mpi_attributes(dmpi, mpi);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
290 }else{
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
291 dmpi=vf->dmpi;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
292 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
293
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
294 vf->priv->mpeg2= mpi->qscale_type;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
295 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
296 if(mpi->qscale || vf->priv->qp){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
297 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
298 }else{
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
299 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
300 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
301 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
302 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
303 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
304
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
305 #ifdef HAVE_MMX
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
306 if(gCpuCaps.hasMMX) asm volatile ("emms\n\t");
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
307 #endif
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
308 #ifdef HAVE_MMX2
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
309 if(gCpuCaps.hasMMX2) asm volatile ("sfence\n\t");
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
310 #endif
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
311
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
312 return vf_next_put_image(vf,dmpi);
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
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
315 static void uninit(struct vf_instance_s* vf){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
316 int i;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
317 if(!vf->priv) return;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
318
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
319 for(i=0; i<3; i++){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
320 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
321 vf->priv->temp[i]= NULL;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
322 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
323 vf->priv->src[i]= NULL;
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 for(i=0; i<BLOCK*BLOCK; i++){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
326 av_freep(&vf->priv->avctx_enc[i]);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
327 av_freep(&vf->priv->avctx_dec[i]);
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 free(vf->priv);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
331 vf->priv=NULL;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
332 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
333
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
334 //===========================================================================//
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
335 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
336 switch(fmt){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
337 case IMGFMT_YV12:
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
338 case IMGFMT_I420:
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
339 case IMGFMT_IYUV:
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
340 case IMGFMT_Y800:
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
341 case IMGFMT_Y8:
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
342 return vf_next_query_format(vf,fmt);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
343 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
344 return 0;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
345 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
346
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
347 static unsigned int fmt_list[]={
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
348 IMGFMT_YV12,
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
349 IMGFMT_I420,
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
350 IMGFMT_IYUV,
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
351 IMGFMT_Y800,
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
352 IMGFMT_Y8,
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
353 0
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
354 };
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
355
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
356 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
357 switch(request){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
358 case VFCTRL_QUERY_MAX_PP_LEVEL:
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
359 return 8;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
360 case VFCTRL_SET_PP_LEVEL:
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
361 vf->priv->log2_count= *((unsigned int*)data);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
362 //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
363 return CONTROL_TRUE;
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 return vf_next_control(vf,request,data);
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
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
368 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
369
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
370 int log2c=-1;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
371
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
372 vf->config=config;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
373 vf->put_image=put_image;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
374 vf->get_image=get_image;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
375 vf->query_format=query_format;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
376 vf->uninit=uninit;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
377 vf->control= control;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
378 vf->priv=malloc(sizeof(struct vf_priv_s));
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
379 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
380
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
381 avcodec_init();
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
382 avcodec_register_all();
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
383
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
384 vf->priv->log2_count= 4;
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 (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
387
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
388 if( log2c >=0 && log2c <=8 )
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
389 vf->priv->log2_count = log2c;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
390
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
391 if(vf->priv->qp < 0)
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
392 vf->priv->qp = 0;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
393
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
394 // #ifdef HAVE_MMX
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
395 // if(gCpuCaps.hasMMX){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
396 // store_slice= store_slice_mmx;
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 // #endif
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
399
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
400 return 1;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
401 }
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 vf_info_t vf_info_uspp = {
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
404 "ultra simple/slow postprocess",
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
405 "uspp",
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
406 "Michael Niedermayer",
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
407 "",
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
408 open,
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
409 NULL
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
410 };
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
411
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
412 #endif //USE_LIBAVCODEC