Mercurial > mplayer.hg
annotate libmpcodecs/vf_uspp.c @ 24992:5701e23ebcb4
Better handling of win32 GUI thread:
1. Use _beginthreadex to create the GUI thread to avoid possible memory leak
when linked to MS CRT.
2. Terminate the GUI thread in an cleaner way using PostThreadMessage()
rather than the unrecommended TerminateThread().
author | zuxy |
---|---|
date | Sun, 11 Nov 2007 08:14:57 +0000 |
parents | aff04d7af1e1 |
children | 00fff9a3b735 |
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" |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
32 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
33 #ifdef HAVE_MALLOC_H |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
34 #include <malloc.h> |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
35 #endif |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
36 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
37 #include "img_format.h" |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
38 #include "mp_image.h" |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
39 #include "vf.h" |
17012 | 40 #include "libvo/fastmemcpy.h" |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
41 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
42 #define XMIN(a,b) ((a) < (b) ? (a) : (b)) |
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 #define BLOCK 16 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
45 |
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 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
|
48 { 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
|
49 { 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
|
50 { 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
|
51 { 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
|
52 { 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
|
53 { 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
|
54 { 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
|
55 { 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
|
56 }; |
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 static const uint8_t offset[511][2]= { |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
59 { 0, 0}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
60 { 0, 0}, { 8, 8}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
61 { 0, 0}, { 4, 4}, {12, 8}, { 8,12}, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
62 { 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
|
63 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
64 { 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
|
65 { 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
|
66 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
67 { 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
|
68 { 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
|
69 { 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
|
70 { 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
|
71 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
72 { 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
|
73 { 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
|
74 { 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
|
75 { 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
|
76 { 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
|
77 { 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
|
78 { 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
|
79 { 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
|
80 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
81 { 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
|
82 { 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
|
83 { 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
|
84 { 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
|
85 { 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
|
86 { 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
|
87 { 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
|
88 { 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
|
89 { 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
|
90 { 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
|
91 { 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
|
92 { 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
|
93 { 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
|
94 { 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
|
95 { 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
|
96 { 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
|
97 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
98 { 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
|
99 }; |
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 struct vf_priv_s { |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
102 int log2_count; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
103 int qp; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
104 int mode; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
105 int mpeg2; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
106 int temp_stride[3]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
107 uint8_t *src[3]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
108 int16_t *temp[3]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
109 int outbuf_size; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
110 uint8_t *outbuf; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
111 AVCodecContext *avctx_enc[BLOCK*BLOCK]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
112 AVFrame *frame; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
113 AVFrame *frame_dec; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
114 }; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
115 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
116 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
|
117 int y, x; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
118 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
119 #define STORE(pos) \ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
120 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
|
121 if(temp & 0x100) temp= ~(temp>>31);\ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
122 dst[x + y*dst_stride + pos]= temp; |
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 for(y=0; y<height; y++){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
125 const uint8_t *d= dither[y&7]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
126 for(x=0; x<width; x+=8){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
127 int temp; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
128 STORE(0); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
129 STORE(1); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
130 STORE(2); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
131 STORE(3); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
132 STORE(4); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
133 STORE(5); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
134 STORE(6); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
135 STORE(7); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
136 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
137 } |
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 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
|
141 int x, y, i, j; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
142 const int count= 1<<p->log2_count; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
143 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
144 for(i=0; i<3; i++){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
145 int is_chroma= !!i; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
146 int w= width >>is_chroma; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
147 int h= height>>is_chroma; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
148 int stride= p->temp_stride[i]; |
17081 | 149 int block= BLOCK>>is_chroma; |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
150 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
151 if (!src[i] || !dst[i]) |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
152 continue; // HACK avoid crash for Y8 colourspace |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
153 for(y=0; y<h; y++){ |
17081 | 154 int index= block + block*stride + y*stride; |
23457
a124f3abc1ec
Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents:
19569
diff
changeset
|
155 fast_memcpy(p->src[i] + index, src[i] + y*src_stride[i], w); |
17081 | 156 for(x=0; x<block; x++){ |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
157 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
|
158 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
|
159 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
160 } |
17081 | 161 for(y=0; y<block; y++){ |
23457
a124f3abc1ec
Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents:
19569
diff
changeset
|
162 fast_memcpy(p->src[i] + ( block-1-y)*stride, p->src[i] + ( y+block )*stride, stride); |
a124f3abc1ec
Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents:
19569
diff
changeset
|
163 fast_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
|
164 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
165 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
166 p->frame->linesize[i]= stride; |
17081 | 167 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
|
168 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
169 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
170 if(p->qp) |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
171 p->frame->quality= p->qp * FF_QP2LAMBDA; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
172 else |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
173 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
|
174 // init per MB qscale stuff FIXME |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
175 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
176 for(i=0; i<count; i++){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
177 const int x1= offset[i+count-1][0]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
178 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
|
179 int offset, out_size; |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
180 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
|
181 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
|
182 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
|
183 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
184 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
|
185 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
|
186 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
187 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
|
188 //FIXME optimize |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
189 for(y=0; y<height; y++){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
190 for(x=0; x<width; x++){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
191 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
|
192 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
193 } |
17081 | 194 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
|
195 for(y=0; y<height/2; y++){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
196 for(x=0; x<width/2; x++){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
197 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
|
198 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
|
199 } |
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 } |
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 for(j=0; j<3; j++){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
204 int is_chroma= !!j; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
205 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
|
206 } |
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 static int config(struct vf_instance_s* vf, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
210 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
|
211 unsigned int flags, unsigned int outfmt){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
212 int i; |
17081 | 213 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
|
214 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
215 for(i=0; i<3; i++){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
216 int is_chroma= !!i; |
17081 | 217 int w= ((width + 4*BLOCK-1) & (~(2*BLOCK-1)))>>is_chroma; |
218 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
|
219 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
220 vf->priv->temp_stride[i]= w; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
221 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
|
222 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
|
223 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
224 for(i=0; i< (1<<vf->priv->log2_count); i++){ |
23748 | 225 AVCodecContext *avctx_enc; |
16946
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 avctx_enc= |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
228 vf->priv->avctx_enc[i]= avcodec_alloc_context(); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
229 avctx_enc->width = width + BLOCK; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
230 avctx_enc->height = height + BLOCK; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
231 avctx_enc->time_base= (AVRational){1,25}; // meaningless |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
232 avctx_enc->gop_size = 300; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
233 avctx_enc->max_b_frames= 0; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
234 avctx_enc->pix_fmt = PIX_FMT_YUV420P; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
235 avctx_enc->flags = CODEC_FLAG_QSCALE | CODEC_FLAG_LOW_DELAY; |
17081 | 236 avctx_enc->strict_std_compliance = FF_COMPLIANCE_EXPERIMENTAL; |
19569 | 237 avctx_enc->global_quality= 123; |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
238 avcodec_open(avctx_enc, enc); |
19569 | 239 assert(avctx_enc->codec); |
16946
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
240 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
241 vf->priv->frame= avcodec_alloc_frame(); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
242 vf->priv->frame_dec= avcodec_alloc_frame(); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
243 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
244 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
|
245 vf->priv->outbuf= malloc(vf->priv->outbuf_size); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
246 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
247 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
|
248 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
249 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
250 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
|
251 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
|
252 // 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
|
253 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
|
254 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
|
255 mpi->planes[0]=vf->dmpi->planes[0]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
256 mpi->stride[0]=vf->dmpi->stride[0]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
257 mpi->width=vf->dmpi->width; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
258 if(mpi->flags&MP_IMGFLAG_PLANAR){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
259 mpi->planes[1]=vf->dmpi->planes[1]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
260 mpi->planes[2]=vf->dmpi->planes[2]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
261 mpi->stride[1]=vf->dmpi->stride[1]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
262 mpi->stride[2]=vf->dmpi->stride[2]; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
263 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
264 mpi->flags|=MP_IMGFLAG_DIRECT; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
265 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
266 |
17906
20aca9baf5d8
passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents:
17614
diff
changeset
|
267 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
|
268 mp_image_t *dmpi; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
269 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
270 if(!(mpi->flags&MP_IMGFLAG_DIRECT)){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
271 // 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
|
272 dmpi=vf_get_image(vf->next,mpi->imgfmt, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
273 MP_IMGTYPE_TEMP, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
274 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
|
275 mpi->width,mpi->height); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
276 vf_clone_mpi_attributes(dmpi, mpi); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
277 }else{ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
278 dmpi=vf->dmpi; |
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 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
281 vf->priv->mpeg2= mpi->qscale_type; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
282 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
|
283 if(mpi->qscale || vf->priv->qp){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
284 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
|
285 }else{ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
286 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
|
287 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
|
288 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
|
289 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
290 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
291 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
292 #ifdef HAVE_MMX |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
293 if(gCpuCaps.hasMMX) asm volatile ("emms\n\t"); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
294 #endif |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
295 #ifdef HAVE_MMX2 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
296 if(gCpuCaps.hasMMX2) asm volatile ("sfence\n\t"); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
297 #endif |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
298 |
17906
20aca9baf5d8
passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents:
17614
diff
changeset
|
299 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
|
300 } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
301 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
302 static void uninit(struct vf_instance_s* vf){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
303 int i; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
304 if(!vf->priv) return; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
305 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
306 for(i=0; i<3; i++){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
307 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
|
308 vf->priv->temp[i]= NULL; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
309 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
|
310 vf->priv->src[i]= NULL; |
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 for(i=0; i<BLOCK*BLOCK; i++){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
313 av_freep(&vf->priv->avctx_enc[i]); |
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 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
316 free(vf->priv); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
317 vf->priv=NULL; |
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 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
320 //===========================================================================// |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
321 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
|
322 switch(fmt){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
323 case IMGFMT_YV12: |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
324 case IMGFMT_I420: |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
325 case IMGFMT_IYUV: |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
326 case IMGFMT_Y800: |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
327 case IMGFMT_Y8: |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
328 return vf_next_query_format(vf,fmt); |
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 return 0; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
331 } |
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 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
|
334 switch(request){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
335 case VFCTRL_QUERY_MAX_PP_LEVEL: |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
336 return 8; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
337 case VFCTRL_SET_PP_LEVEL: |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
338 vf->priv->log2_count= *((unsigned int*)data); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
339 //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
|
340 return CONTROL_TRUE; |
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 return vf_next_control(vf,request,data); |
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 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
345 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
|
346 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
347 int log2c=-1; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
348 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
349 vf->config=config; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
350 vf->put_image=put_image; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
351 vf->get_image=get_image; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
352 vf->query_format=query_format; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
353 vf->uninit=uninit; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
354 vf->control= control; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
355 vf->priv=malloc(sizeof(struct vf_priv_s)); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
356 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
|
357 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
358 avcodec_init(); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
359 avcodec_register_all(); |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
360 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
361 vf->priv->log2_count= 4; |
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 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
|
364 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
365 if( log2c >=0 && log2c <=8 ) |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
366 vf->priv->log2_count = log2c; |
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 if(vf->priv->qp < 0) |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
369 vf->priv->qp = 0; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
370 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
371 // #ifdef HAVE_MMX |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
372 // if(gCpuCaps.hasMMX){ |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
373 // store_slice= store_slice_mmx; |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
374 // } |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
375 // #endif |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
376 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
377 return 1; |
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 |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
380 vf_info_t vf_info_uspp = { |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
381 "ultra simple/slow postprocess", |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
382 "uspp", |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
383 "Michael Niedermayer", |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
384 "", |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
385 open, |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
386 NULL |
47c5e9846cd3
ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff
changeset
|
387 }; |