annotate libmpcodecs/vf_uspp.c @ 24576:6704a924d4aa

According to MSDN a thread must call CoUninitialize once for each successful call it has made to CoInitialize or CoInitializeEx, including any call that returns S_FALSE. Only the CoUninitialize call corresponding to the CoInitialize or CoInitializeEx call that initialized the library can close it. patch by Gianluigi Tiesi, mplayer netfarm it
author diego
date Sun, 23 Sep 2007 20:37:33 +0000
parents fb2a176224ac
children 57545b63efec
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
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
7ba51e3ffca6 segfault fix
michael
parents: 18976
diff changeset
24 #include <assert.h>
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
25
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16946
diff changeset
26 #include "config.h"
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
27
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16946
diff changeset
28 #include "mp_msg.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16946
diff changeset
29 #include "cpudetect.h"
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
30
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16946
diff changeset
31 #include "libavcodec/avcodec.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16946
diff changeset
32 #include "libavcodec/dsputil.h"
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
33
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
34 #ifdef HAVE_MALLOC_H
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
35 #include <malloc.h>
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
36 #endif
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
37
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
38 #include "img_format.h"
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
39 #include "mp_image.h"
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
40 #include "vf.h"
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16946
diff changeset
41 #include "libvo/fastmemcpy.h"
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
42
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
43 #define XMIN(a,b) ((a) < (b) ? (a) : (b))
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
44
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
45 #define BLOCK 16
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
46
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
47 //===========================================================================//
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
48 static const uint8_t __attribute__((aligned(8))) dither[8][8]={
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
49 { 0*4, 48*4, 12*4, 60*4, 3*4, 51*4, 15*4, 63*4, },
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
50 { 32*4, 16*4, 44*4, 28*4, 35*4, 19*4, 47*4, 31*4, },
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
51 { 8*4, 56*4, 4*4, 52*4, 11*4, 59*4, 7*4, 55*4, },
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
52 { 40*4, 24*4, 36*4, 20*4, 43*4, 27*4, 39*4, 23*4, },
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
53 { 2*4, 50*4, 14*4, 62*4, 1*4, 49*4, 13*4, 61*4, },
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
54 { 34*4, 18*4, 46*4, 30*4, 33*4, 17*4, 45*4, 29*4, },
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
55 { 10*4, 58*4, 6*4, 54*4, 9*4, 57*4, 5*4, 53*4, },
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
56 { 42*4, 26*4, 38*4, 22*4, 41*4, 25*4, 37*4, 21*4, },
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
57 };
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
58
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
59 static const uint8_t offset[511][2]= {
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
60 { 0, 0},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
61 { 0, 0}, { 8, 8},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
62 { 0, 0}, { 4, 4}, {12, 8}, { 8,12},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
63 { 0, 0}, {10, 2}, { 4, 4}, {14, 6}, { 8, 8}, { 2,10}, {12,12}, { 6,14},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
64
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
65 { 0, 0}, {10, 2}, { 4, 4}, {14, 6}, { 8, 8}, { 2,10}, {12,12}, { 6,14},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
66 { 5, 1}, {15, 3}, { 9, 5}, { 3, 7}, {13, 9}, { 7,11}, { 1,13}, {11,15},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
67
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
68 { 0, 0}, { 8, 0}, { 0, 8}, { 8, 8}, { 5, 1}, {13, 1}, { 5, 9}, {13, 9},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
69 { 2, 2}, {10, 2}, { 2,10}, {10,10}, { 7, 3}, {15, 3}, { 7,11}, {15,11},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
70 { 4, 4}, {12, 4}, { 4,12}, {12,12}, { 1, 5}, { 9, 5}, { 1,13}, { 9,13},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
71 { 6, 6}, {14, 6}, { 6,14}, {14,14}, { 3, 7}, {11, 7}, { 3,15}, {11,15},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
72
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
73 { 0, 0}, { 8, 0}, { 0, 8}, { 8, 8}, { 4, 0}, {12, 0}, { 4, 8}, {12, 8},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
74 { 1, 1}, { 9, 1}, { 1, 9}, { 9, 9}, { 5, 1}, {13, 1}, { 5, 9}, {13, 9},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
75 { 3, 2}, {11, 2}, { 3,10}, {11,10}, { 7, 2}, {15, 2}, { 7,10}, {15,10},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
76 { 2, 3}, {10, 3}, { 2,11}, {10,11}, { 6, 3}, {14, 3}, { 6,11}, {14,11},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
77 { 0, 4}, { 8, 4}, { 0,12}, { 8,12}, { 4, 4}, {12, 4}, { 4,12}, {12,12},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
78 { 1, 5}, { 9, 5}, { 1,13}, { 9,13}, { 5, 5}, {13, 5}, { 5,13}, {13,13},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
79 { 3, 6}, {11, 6}, { 3,14}, {11,14}, { 7, 6}, {15, 6}, { 7,14}, {15,14},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
80 { 2, 7}, {10, 7}, { 2,15}, {10,15}, { 6, 7}, {14, 7}, { 6,15}, {14,15},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
81
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
82 { 0, 0}, { 8, 0}, { 0, 8}, { 8, 8}, { 0, 2}, { 8, 2}, { 0,10}, { 8,10},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
83 { 0, 4}, { 8, 4}, { 0,12}, { 8,12}, { 0, 6}, { 8, 6}, { 0,14}, { 8,14},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
84 { 1, 1}, { 9, 1}, { 1, 9}, { 9, 9}, { 1, 3}, { 9, 3}, { 1,11}, { 9,11},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
85 { 1, 5}, { 9, 5}, { 1,13}, { 9,13}, { 1, 7}, { 9, 7}, { 1,15}, { 9,15},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
86 { 2, 0}, {10, 0}, { 2, 8}, {10, 8}, { 2, 2}, {10, 2}, { 2,10}, {10,10},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
87 { 2, 4}, {10, 4}, { 2,12}, {10,12}, { 2, 6}, {10, 6}, { 2,14}, {10,14},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
88 { 3, 1}, {11, 1}, { 3, 9}, {11, 9}, { 3, 3}, {11, 3}, { 3,11}, {11,11},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
89 { 3, 5}, {11, 5}, { 3,13}, {11,13}, { 3, 7}, {11, 7}, { 3,15}, {11,15},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
90 { 4, 0}, {12, 0}, { 4, 8}, {12, 8}, { 4, 2}, {12, 2}, { 4,10}, {12,10},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
91 { 4, 4}, {12, 4}, { 4,12}, {12,12}, { 4, 6}, {12, 6}, { 4,14}, {12,14},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
92 { 5, 1}, {13, 1}, { 5, 9}, {13, 9}, { 5, 3}, {13, 3}, { 5,11}, {13,11},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
93 { 5, 5}, {13, 5}, { 5,13}, {13,13}, { 5, 7}, {13, 7}, { 5,15}, {13,15},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
94 { 6, 0}, {14, 0}, { 6, 8}, {14, 8}, { 6, 2}, {14, 2}, { 6,10}, {14,10},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
95 { 6, 4}, {14, 4}, { 6,12}, {14,12}, { 6, 6}, {14, 6}, { 6,14}, {14,14},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
96 { 7, 1}, {15, 1}, { 7, 9}, {15, 9}, { 7, 3}, {15, 3}, { 7,11}, {15,11},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
97 { 7, 5}, {15, 5}, { 7,13}, {15,13}, { 7, 7}, {15, 7}, { 7,15}, {15,15},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
98
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
99 { 0, 0}, { 8, 0}, { 0, 8}, { 8, 8}, { 4, 4}, {12, 4}, { 4,12}, {12,12}, { 0, 4}, { 8, 4}, { 0,12}, { 8,12}, { 4, 0}, {12, 0}, { 4, 8}, {12, 8}, { 2, 2}, {10, 2}, { 2,10}, {10,10}, { 6, 6}, {14, 6}, { 6,14}, {14,14}, { 2, 6}, {10, 6}, { 2,14}, {10,14}, { 6, 2}, {14, 2}, { 6,10}, {14,10}, { 0, 2}, { 8, 2}, { 0,10}, { 8,10}, { 4, 6}, {12, 6}, { 4,14}, {12,14}, { 0, 6}, { 8, 6}, { 0,14}, { 8,14}, { 4, 2}, {12, 2}, { 4,10}, {12,10}, { 2, 0}, {10, 0}, { 2, 8}, {10, 8}, { 6, 4}, {14, 4}, { 6,12}, {14,12}, { 2, 4}, {10, 4}, { 2,12}, {10,12}, { 6, 0}, {14, 0}, { 6, 8}, {14, 8}, { 1, 1}, { 9, 1}, { 1, 9}, { 9, 9}, { 5, 5}, {13, 5}, { 5,13}, {13,13}, { 1, 5}, { 9, 5}, { 1,13}, { 9,13}, { 5, 1}, {13, 1}, { 5, 9}, {13, 9}, { 3, 3}, {11, 3}, { 3,11}, {11,11}, { 7, 7}, {15, 7}, { 7,15}, {15,15}, { 3, 7}, {11, 7}, { 3,15}, {11,15}, { 7, 3}, {15, 3}, { 7,11}, {15,11}, { 1, 3}, { 9, 3}, { 1,11}, { 9,11}, { 5, 7}, {13, 7}, { 5,15}, {13,15}, { 1, 7}, { 9, 7}, { 1,15}, { 9,15}, { 5, 3}, {13, 3}, { 5,11}, {13,11}, { 3, 1}, {11, 1}, { 3, 9}, {11, 9}, { 7, 5}, {15, 5}, { 7,13}, {15,13}, { 3, 5}, {11, 5}, { 3,13}, {11,13}, { 7, 1}, {15, 1}, { 7, 9}, {15, 9}, { 0, 1}, { 8, 1}, { 0, 9}, { 8, 9}, { 4, 5}, {12, 5}, { 4,13}, {12,13}, { 0, 5}, { 8, 5}, { 0,13}, { 8,13}, { 4, 1}, {12, 1}, { 4, 9}, {12, 9}, { 2, 3}, {10, 3}, { 2,11}, {10,11}, { 6, 7}, {14, 7}, { 6,15}, {14,15}, { 2, 7}, {10, 7}, { 2,15}, {10,15}, { 6, 3}, {14, 3}, { 6,11}, {14,11}, { 0, 3}, { 8, 3}, { 0,11}, { 8,11}, { 4, 7}, {12, 7}, { 4,15}, {12,15}, { 0, 7}, { 8, 7}, { 0,15}, { 8,15}, { 4, 3}, {12, 3}, { 4,11}, {12,11}, { 2, 1}, {10, 1}, { 2, 9}, {10, 9}, { 6, 5}, {14, 5}, { 6,13}, {14,13}, { 2, 5}, {10, 5}, { 2,13}, {10,13}, { 6, 1}, {14, 1}, { 6, 9}, {14, 9}, { 1, 0}, { 9, 0}, { 1, 8}, { 9, 8}, { 5, 4}, {13, 4}, { 5,12}, {13,12}, { 1, 4}, { 9, 4}, { 1,12}, { 9,12}, { 5, 0}, {13, 0}, { 5, 8}, {13, 8}, { 3, 2}, {11, 2}, { 3,10}, {11,10}, { 7, 6}, {15, 6}, { 7,14}, {15,14}, { 3, 6}, {11, 6}, { 3,14}, {11,14}, { 7, 2}, {15, 2}, { 7,10}, {15,10}, { 1, 2}, { 9, 2}, { 1,10}, { 9,10}, { 5, 6}, {13, 6}, { 5,14}, {13,14}, { 1, 6}, { 9, 6}, { 1,14}, { 9,14}, { 5, 2}, {13, 2}, { 5,10}, {13,10}, { 3, 0}, {11, 0}, { 3, 8}, {11, 8}, { 7, 4}, {15, 4}, { 7,12}, {15,12}, { 3, 4}, {11, 4}, { 3,12}, {11,12}, { 7, 0}, {15, 0}, { 7, 8}, {15, 8},
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
100 };
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
101
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
102 struct vf_priv_s {
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
103 int log2_count;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
104 int qp;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
105 int mode;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
106 int mpeg2;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
107 int temp_stride[3];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
108 uint8_t *src[3];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
109 int16_t *temp[3];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
110 int outbuf_size;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
111 uint8_t *outbuf;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
112 AVCodecContext *avctx_enc[BLOCK*BLOCK];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
113 AVFrame *frame;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
114 AVFrame *frame_dec;
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
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
117 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
118 int y, x;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
119
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
120 #define STORE(pos) \
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
121 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
122 if(temp & 0x100) temp= ~(temp>>31);\
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
123 dst[x + y*dst_stride + pos]= temp;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
124
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
125 for(y=0; y<height; y++){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
126 const uint8_t *d= dither[y&7];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
127 for(x=0; x<width; x+=8){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
128 int temp;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
129 STORE(0);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
130 STORE(1);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
131 STORE(2);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
132 STORE(3);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
133 STORE(4);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
134 STORE(5);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
135 STORE(6);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
136 STORE(7);
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
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
141 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
142 int x, y, i, j;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
143 const int count= 1<<p->log2_count;
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 for(i=0; i<3; i++){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
146 int is_chroma= !!i;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
147 int w= width >>is_chroma;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
148 int h= height>>is_chroma;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
149 int stride= p->temp_stride[i];
17081
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
150 int block= BLOCK>>is_chroma;
16946
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 if (!src[i] || !dst[i])
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
153 continue; // HACK avoid crash for Y8 colourspace
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
154 for(y=0; y<h; y++){
17081
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
155 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
156 fast_memcpy(p->src[i] + index, src[i] + y*src_stride[i], w);
17081
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
157 for(x=0; x<block; x++){
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
158 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
159 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
160 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
161 }
17081
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
162 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
163 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
164 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
165 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
166
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
167 p->frame->linesize[i]= stride;
17081
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
168 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
169 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
170
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
171 if(p->qp)
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
172 p->frame->quality= p->qp * FF_QP2LAMBDA;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
173 else
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
174 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
175 // init per MB qscale stuff FIXME
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 for(i=0; i<count; i++){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
178 const int x1= offset[i+count-1][0];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
179 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
180 int offset, out_size;
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
181 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
182 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
183 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
184
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
185 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
186 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
187
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
188 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
189 //FIXME optimize
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
190 for(y=0; y<height; y++){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
191 for(x=0; x<width; x++){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
192 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
193 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
194 }
17081
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
195 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
196 for(y=0; y<height/2; y++){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
197 for(x=0; x<width/2; x++){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
198 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
199 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
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
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
204 for(j=0; j<3; j++){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
205 int is_chroma= !!j;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
206 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
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 static int config(struct vf_instance_s* vf,
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
211 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
212 unsigned int flags, unsigned int outfmt){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
213 int i;
17081
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
214 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
215
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
216 for(i=0; i<3; i++){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
217 int is_chroma= !!i;
17081
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
218 int w= ((width + 4*BLOCK-1) & (~(2*BLOCK-1)))>>is_chroma;
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
219 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
220
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
221 vf->priv->temp_stride[i]= w;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
222 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
223 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
224 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
225 for(i=0; i< (1<<vf->priv->log2_count); i++){
23748
fb2a176224ac remove unused variables
lorenm
parents: 23457
diff changeset
226 AVCodecContext *avctx_enc;
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
227
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
228 avctx_enc=
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
229 vf->priv->avctx_enc[i]= avcodec_alloc_context();
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
230 avctx_enc->width = width + BLOCK;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
231 avctx_enc->height = height + BLOCK;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
232 avctx_enc->time_base= (AVRational){1,25}; // meaningless
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
233 avctx_enc->gop_size = 300;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
234 avctx_enc->max_b_frames= 0;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
235 avctx_enc->pix_fmt = PIX_FMT_YUV420P;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
236 avctx_enc->flags = CODEC_FLAG_QSCALE | CODEC_FLAG_LOW_DELAY;
17081
f612d2cdb262 switch to snow
michael
parents: 17012
diff changeset
237 avctx_enc->strict_std_compliance = FF_COMPLIANCE_EXPERIMENTAL;
19569
7ba51e3ffca6 segfault fix
michael
parents: 18976
diff changeset
238 avctx_enc->global_quality= 123;
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
239 avcodec_open(avctx_enc, enc);
19569
7ba51e3ffca6 segfault fix
michael
parents: 18976
diff changeset
240 assert(avctx_enc->codec);
16946
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
241 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
242 vf->priv->frame= avcodec_alloc_frame();
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
243 vf->priv->frame_dec= avcodec_alloc_frame();
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
244
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
245 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
246 vf->priv->outbuf= malloc(vf->priv->outbuf_size);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
247
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
248 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
249 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
250
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
251 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
252 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
253 // 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
254 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
255 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
256 mpi->planes[0]=vf->dmpi->planes[0];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
257 mpi->stride[0]=vf->dmpi->stride[0];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
258 mpi->width=vf->dmpi->width;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
259 if(mpi->flags&MP_IMGFLAG_PLANAR){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
260 mpi->planes[1]=vf->dmpi->planes[1];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
261 mpi->planes[2]=vf->dmpi->planes[2];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
262 mpi->stride[1]=vf->dmpi->stride[1];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
263 mpi->stride[2]=vf->dmpi->stride[2];
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
264 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
265 mpi->flags|=MP_IMGFLAG_DIRECT;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
266 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
267
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17614
diff changeset
268 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
269 mp_image_t *dmpi;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
270
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
271 if(!(mpi->flags&MP_IMGFLAG_DIRECT)){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
272 // 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
273 dmpi=vf_get_image(vf->next,mpi->imgfmt,
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
274 MP_IMGTYPE_TEMP,
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
275 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
276 mpi->width,mpi->height);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
277 vf_clone_mpi_attributes(dmpi, mpi);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
278 }else{
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
279 dmpi=vf->dmpi;
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
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
282 vf->priv->mpeg2= mpi->qscale_type;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
283 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
284 if(mpi->qscale || vf->priv->qp){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
285 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
286 }else{
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
287 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
288 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
289 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
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
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
293 #ifdef HAVE_MMX
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
294 if(gCpuCaps.hasMMX) asm volatile ("emms\n\t");
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
295 #endif
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
296 #ifdef HAVE_MMX2
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
297 if(gCpuCaps.hasMMX2) asm volatile ("sfence\n\t");
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
298 #endif
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
299
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17614
diff changeset
300 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
301 }
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 static void uninit(struct vf_instance_s* vf){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
304 int i;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
305 if(!vf->priv) return;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
306
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
307 for(i=0; i<3; i++){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
308 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
309 vf->priv->temp[i]= NULL;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
310 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
311 vf->priv->src[i]= NULL;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
312 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
313 for(i=0; i<BLOCK*BLOCK; i++){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
314 av_freep(&vf->priv->avctx_enc[i]);
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
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
317 free(vf->priv);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
318 vf->priv=NULL;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
319 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
320
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
321 //===========================================================================//
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
322 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
323 switch(fmt){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
324 case IMGFMT_YV12:
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
325 case IMGFMT_I420:
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
326 case IMGFMT_IYUV:
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
327 case IMGFMT_Y800:
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
328 case IMGFMT_Y8:
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
329 return vf_next_query_format(vf,fmt);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
330 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
331 return 0;
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 static unsigned int fmt_list[]={
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
335 IMGFMT_YV12,
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
336 IMGFMT_I420,
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
337 IMGFMT_IYUV,
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
338 IMGFMT_Y800,
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
339 IMGFMT_Y8,
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
340 0
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
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
343 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
344 switch(request){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
345 case VFCTRL_QUERY_MAX_PP_LEVEL:
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
346 return 8;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
347 case VFCTRL_SET_PP_LEVEL:
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
348 vf->priv->log2_count= *((unsigned int*)data);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
349 //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
350 return CONTROL_TRUE;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
351 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
352 return vf_next_control(vf,request,data);
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
353 }
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 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
356
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
357 int log2c=-1;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
358
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
359 vf->config=config;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
360 vf->put_image=put_image;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
361 vf->get_image=get_image;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
362 vf->query_format=query_format;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
363 vf->uninit=uninit;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
364 vf->control= control;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
365 vf->priv=malloc(sizeof(struct vf_priv_s));
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
366 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
367
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
368 avcodec_init();
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
369 avcodec_register_all();
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 vf->priv->log2_count= 4;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
372
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
373 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
374
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
375 if( log2c >=0 && log2c <=8 )
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
376 vf->priv->log2_count = log2c;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
377
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
378 if(vf->priv->qp < 0)
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
379 vf->priv->qp = 0;
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 // #ifdef HAVE_MMX
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
382 // if(gCpuCaps.hasMMX){
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
383 // store_slice= store_slice_mmx;
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 // #endif
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
386
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
387 return 1;
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
388 }
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
389
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
390 vf_info_t vf_info_uspp = {
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
391 "ultra simple/slow postprocess",
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
392 "uspp",
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
393 "Michael Niedermayer",
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
394 "",
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
395 open,
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
396 NULL
47c5e9846cd3 ultra simple&slow pp filter, yes yet another spp like filter :)
michael
parents:
diff changeset
397 };