annotate libmpcodecs/vf_pp7.c @ 32972:fbaae7fe1a13

Fix several issues with Translate(). 1. The "Unsafe!" comment has been removed, because the strings passed to the function are strcpy'd. 2. The needless memsets (one of which with wrong size) have been removed in favor of a sufficiently simple initialization of trbuf. 3. The array indices are unsigned now, and the manual optimization of having strlen() outside the for loop has been removed in favor of optimization performed by the compiler. 4. There is a check now to prevent an out-of-bounds array access.
author ib
date Tue, 08 Mar 2011 20:56:51 +0000
parents d6bc33320ae0
children 578a69bbba40
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
1 /*
26727
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
2 * Copyright (C) 2005 Michael Niedermayer <michaelni@gmx.at>
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
3 *
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
4 * This file is part of MPlayer.
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
5 *
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
6 * MPlayer is free software; you can redistribute it and/or modify
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
7 * it under the terms of the GNU General Public License as published by
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
9 * (at your option) any later version.
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
10 *
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
11 * MPlayer is distributed in the hope that it will be useful,
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
14 * GNU General Public License for more details.
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
15 *
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
16 * You should have received a copy of the GNU General Public License along
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
17 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
19 */
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
20
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28594
diff changeset
21
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
22 #include <stdio.h>
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
23 #include <stdlib.h>
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
24 #include <string.h>
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
25 #include <inttypes.h>
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
26 #include <math.h>
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
27
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16018
diff changeset
28 #include "config.h"
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
29
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16018
diff changeset
30 #include "mp_msg.h"
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16018
diff changeset
31 #include "cpudetect.h"
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
32
28594
df67d03dde3b Convert HAVE_MALLOC_H into a 0/1 definition, fixes the warning:
diego
parents: 28290
diff changeset
33 #if HAVE_MALLOC_H
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
34 #include <malloc.h>
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
35 #endif
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
36
32748
d6bc33320ae0 Fix postprocessing and perspective filters on x86-64.
cehoyos
parents: 32747
diff changeset
37 #include "libavutil/mem.h"
d6bc33320ae0 Fix postprocessing and perspective filters on x86-64.
cehoyos
parents: 32747
diff changeset
38
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
39 #include "img_format.h"
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
40 #include "mp_image.h"
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
41 #include "vf.h"
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16018
diff changeset
42 #include "libvo/fastmemcpy.h"
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
43
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
44 #define XMIN(a,b) ((a) < (b) ? (a) : (b))
19165
7e4f5f62703d -vf pp7 overblurs still parts of the image, which
gpoirier
parents: 17906
diff changeset
45 #define XMAX(a,b) ((a) > (b) ? (a) : (b))
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
46
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
47 typedef short DCTELEM;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
48
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
49 //===========================================================================//
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
50 static const uint8_t __attribute__((aligned(8))) dither[8][8]={
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
51 { 0, 48, 12, 60, 3, 51, 15, 63, },
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
52 { 32, 16, 44, 28, 35, 19, 47, 31, },
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
53 { 8, 56, 4, 52, 11, 59, 7, 55, },
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
54 { 40, 24, 36, 20, 43, 27, 39, 23, },
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
55 { 2, 50, 14, 62, 1, 49, 13, 61, },
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
56 { 34, 18, 46, 30, 33, 17, 45, 29, },
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
57 { 10, 58, 6, 54, 9, 57, 5, 53, },
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
58 { 42, 26, 38, 22, 41, 25, 37, 21, },
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
59 };
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
60
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
61 struct vf_priv_s {
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
62 int qp;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
63 int mode;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
64 int mpeg2;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
65 int temp_stride;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
66 uint8_t *src;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
67 };
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
68 #if 0
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
69 static inline void dct7_c(DCTELEM *dst, int s0, int s1, int s2, int s3, int step){
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
70 int s, d;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
71 int dst2[64];
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
72 //#define S0 (1024/0.37796447300922719759)
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
73 #define C0 ((int)(1024*0.37796447300922719759+0.5)) //sqrt(1/7)
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
74 #define C1 ((int)(1024*0.53452248382484879308/6+0.5)) //sqrt(2/7)/6
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
75
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
76 #define C2 ((int)(1024*0.45221175985034745004/2+0.5))
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
77 #define C3 ((int)(1024*0.36264567479870879474/2+0.5))
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
78
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
79 //0.1962505182412941918 0.0149276808419397944-0.2111781990832339584
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
80 #define C4 ((int)(1024*0.1962505182412941918+0.5))
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
81 #define C5 ((int)(1024*0.0149276808419397944+0.5))
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
82 //#define C6 ((int)(1024*0.2111781990832339584+0.5))
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
83 #if 0
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
84 s= s0 + s1 + s2;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
85 dst[0*step] = ((s + s3)*C0 + 512) >> 10;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
86 s= (s - 6*s3)*C1 + 512;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
87 d= (s0-s2)*C4 + (s1-s2)*C5;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
88 dst[1*step] = (s + 2*d)>>10;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
89 s -= d;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
90 d= (s1-s0)*C2 + (s1-s2)*C3;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
91 dst[2*step] = (s + d)>>10;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
92 dst[3*step] = (s - d)>>10;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
93 #elif 1
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
94 s = s3+s3;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
95 s3= s-s0;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
96 s0= s+s0;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
97 s = s2+s1;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
98 s2= s2-s1;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
99 dst[0*step]= s0 + s;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
100 dst[2*step]= s0 - s;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
101 dst[1*step]= 2*s3 + s2;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
102 dst[3*step]= s3 - 2*s2;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
103 #else
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
104 int i,j,n=7;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
105 for(i=0; i<7; i+=2){
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
106 dst2[i*step/2]= 0;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
107 for(j=0; j<4; j++)
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
108 dst2[i*step/2] += src[j*step] * cos(i*M_PI/n*(j+0.5)) * sqrt((i?2.0:1.0)/n);
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
109 if(fabs(dst2[i*step/2] - dst[i*step/2]) > 20)
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
110 printf("%d %d %d (%d %d %d %d) -> (%d %d %d %d)\n", i,dst2[i*step/2], dst[i*step/2],src[0*step], src[1*step], src[2*step], src[3*step], dst[0*step], dst[1*step],dst[2*step],dst[3*step]);
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
111 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
112 #endif
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
113 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
114 #endif
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
115
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
116 static inline void dctA_c(DCTELEM *dst, uint8_t *src, int stride){
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
117 int i;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
118
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
119 for(i=0; i<4; i++){
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
120 int s0= src[0*stride] + src[6*stride];
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
121 int s1= src[1*stride] + src[5*stride];
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
122 int s2= src[2*stride] + src[4*stride];
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
123 int s3= src[3*stride];
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
124 int s= s3+s3;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
125 s3= s-s0;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
126 s0= s+s0;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
127 s = s2+s1;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
128 s2= s2-s1;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
129 dst[0]= s0 + s;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
130 dst[2]= s0 - s;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
131 dst[1]= 2*s3 + s2;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
132 dst[3]= s3 - 2*s2;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
133 src++;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
134 dst+=4;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
135 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
136 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
137
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
138 static void dctB_c(DCTELEM *dst, DCTELEM *src){
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
139 int i;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
140
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
141 for(i=0; i<4; i++){
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
142 int s0= src[0*4] + src[6*4];
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
143 int s1= src[1*4] + src[5*4];
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
144 int s2= src[2*4] + src[4*4];
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
145 int s3= src[3*4];
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
146 int s= s3+s3;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
147 s3= s-s0;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
148 s0= s+s0;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
149 s = s2+s1;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
150 s2= s2-s1;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
151 dst[0*4]= s0 + s;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
152 dst[2*4]= s0 - s;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
153 dst[1*4]= 2*s3 + s2;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
154 dst[3*4]= s3 - 2*s2;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
155 src++;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
156 dst++;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
157 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
158 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
159
28290
25337a2147e7 Lots and lots of #ifdef ARCH_... -> #if ARCH_...
reimar
parents: 27754
diff changeset
160 #if HAVE_MMX
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
161 static void dctB_mmx(DCTELEM *dst, DCTELEM *src){
27754
08d18fe9da52 Change all occurrences of asm and __asm to __asm__, same as was done for FFmpeg.
diego
parents: 26727
diff changeset
162 __asm__ volatile (
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
163 "movq (%0), %%mm0 \n\t"
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
164 "movq 1*4*2(%0), %%mm1 \n\t"
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
165 "paddw 6*4*2(%0), %%mm0 \n\t"
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
166 "paddw 5*4*2(%0), %%mm1 \n\t"
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
167 "movq 2*4*2(%0), %%mm2 \n\t"
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
168 "movq 3*4*2(%0), %%mm3 \n\t"
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
169 "paddw 4*4*2(%0), %%mm2 \n\t"
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
170 "paddw %%mm3, %%mm3 \n\t" //s
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
171 "movq %%mm3, %%mm4 \n\t" //s
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
172 "psubw %%mm0, %%mm3 \n\t" //s-s0
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
173 "paddw %%mm0, %%mm4 \n\t" //s+s0
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
174 "movq %%mm2, %%mm0 \n\t" //s2
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
175 "psubw %%mm1, %%mm2 \n\t" //s2-s1
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
176 "paddw %%mm1, %%mm0 \n\t" //s2+s1
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
177 "movq %%mm4, %%mm1 \n\t" //s0'
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
178 "psubw %%mm0, %%mm4 \n\t" //s0'-s'
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
179 "paddw %%mm0, %%mm1 \n\t" //s0'+s'
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
180 "movq %%mm3, %%mm0 \n\t" //s3'
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
181 "psubw %%mm2, %%mm3 \n\t"
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
182 "psubw %%mm2, %%mm3 \n\t"
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
183 "paddw %%mm0, %%mm2 \n\t"
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
184 "paddw %%mm0, %%mm2 \n\t"
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
185 "movq %%mm1, (%1) \n\t"
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
186 "movq %%mm4, 2*4*2(%1) \n\t"
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
187 "movq %%mm2, 1*4*2(%1) \n\t"
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
188 "movq %%mm3, 3*4*2(%1) \n\t"
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
189 :: "r" (src), "r"(dst)
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
190 );
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
191 }
15962
08338441314b #ifdef HAVE_MMX
michael
parents: 15944
diff changeset
192 #endif
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
193
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
194 static void (*dctB)(DCTELEM *dst, DCTELEM *src)= dctB_c;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
195
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
196 #define N0 4
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
197 #define N1 5
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
198 #define N2 10
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
199 #define SN0 2
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
200 #define SN1 2.2360679775
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
201 #define SN2 3.16227766017
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
202 #define N (1<<16)
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
203
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
204 static const int factor[16]={
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
205 N/(N0*N0), N/(N0*N1), N/(N0*N0),N/(N0*N2),
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
206 N/(N1*N0), N/(N1*N1), N/(N1*N0),N/(N1*N2),
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
207 N/(N0*N0), N/(N0*N1), N/(N0*N0),N/(N0*N2),
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
208 N/(N2*N0), N/(N2*N1), N/(N2*N0),N/(N2*N2),
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
209 };
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
210
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
211 static const int thres[16]={
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
212 N/(SN0*SN0), N/(SN0*SN2), N/(SN0*SN0),N/(SN0*SN2),
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
213 N/(SN2*SN0), N/(SN2*SN2), N/(SN2*SN0),N/(SN2*SN2),
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
214 N/(SN0*SN0), N/(SN0*SN2), N/(SN0*SN0),N/(SN0*SN2),
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
215 N/(SN2*SN0), N/(SN2*SN2), N/(SN2*SN0),N/(SN2*SN2),
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
216 };
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
217
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
218 static int thres2[99][16];
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
219
17566
f580a7755ac5 Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents: 17367
diff changeset
220 static void init_thres2(void){
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
221 int qp, i;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
222 int bias= 0; //FIXME
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
223
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
224 for(qp=0; qp<99; qp++){
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
225 for(i=0; i<16; i++){
19165
7e4f5f62703d -vf pp7 overblurs still parts of the image, which
gpoirier
parents: 17906
diff changeset
226 thres2[qp][i]= ((i&1)?SN2:SN0) * ((i&4)?SN2:SN0) * XMAX(1,qp) * (1<<2) - 1 - bias;
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
227 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
228 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
229 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
230
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
231 static int hardthresh_c(DCTELEM *src, int qp){
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28594
diff changeset
232 int i;
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
233 int a;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28594
diff changeset
234
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
235 a= src[0] * factor[0];
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
236 for(i=1; i<16; i++){
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
237 unsigned int threshold1= thres2[qp][i];
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
238 unsigned int threshold2= (threshold1<<1);
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
239 int level= src[i];
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
240 if(((unsigned)(level+threshold1))>threshold2){
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
241 a += level * factor[i];
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
242 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
243 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
244 return (a + (1<<11))>>12;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
245 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
246
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
247 static int mediumthresh_c(DCTELEM *src, int qp){
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28594
diff changeset
248 int i;
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
249 int a;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28594
diff changeset
250
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
251 a= src[0] * factor[0];
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
252 for(i=1; i<16; i++){
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
253 unsigned int threshold1= thres2[qp][i];
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
254 unsigned int threshold2= (threshold1<<1);
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
255 int level= src[i];
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
256 if(((unsigned)(level+threshold1))>threshold2){
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
257 if(((unsigned)(level+2*threshold1))>2*threshold2){
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
258 a += level * factor[i];
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
259 }else{
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
260 if(level>0) a+= 2*(level - (int)threshold1)*factor[i];
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
261 else a+= 2*(level + (int)threshold1)*factor[i];
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
262 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
263 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
264 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
265 return (a + (1<<11))>>12;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
266 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
267
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
268 static int softthresh_c(DCTELEM *src, int qp){
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28594
diff changeset
269 int i;
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
270 int a;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28594
diff changeset
271
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
272 a= src[0] * factor[0];
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
273 for(i=1; i<16; i++){
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
274 unsigned int threshold1= thres2[qp][i];
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
275 unsigned int threshold2= (threshold1<<1);
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
276 int level= src[i];
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
277 if(((unsigned)(level+threshold1))>threshold2){
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
278 if(level>0) a+= (level - (int)threshold1)*factor[i];
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
279 else a+= (level + (int)threshold1)*factor[i];
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
280 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
281 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
282 return (a + (1<<11))>>12;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
283 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
284
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
285 static int (*requantize)(DCTELEM *src, int qp)= hardthresh_c;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
286
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
287 static void filter(struct vf_priv_s *p, uint8_t *dst, uint8_t *src, int dst_stride, int src_stride, int width, int height, uint8_t *qp_store, int qp_stride, int is_luma){
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
288 int x, y;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
289 const int stride= is_luma ? p->temp_stride : ((width+16+15)&(~15));
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
290 uint8_t *p_src= p->src + 8*stride;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
291 DCTELEM *block= p->src;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
292 DCTELEM *temp= p->src + 32;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
293
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
294 if (!src || !dst) return; // HACK avoid crash for Y8 colourspace
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
295 for(y=0; y<height; y++){
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
296 int index= 8 + 8*stride + y*stride;
23457
a124f3abc1ec Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents: 19165
diff changeset
297 fast_memcpy(p_src + index, src + y*src_stride, width);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28594
diff changeset
298 for(x=0; x<8; x++){
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
299 p_src[index - x - 1]= p_src[index + x ];
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
300 p_src[index + width + x ]= p_src[index + width - x - 1];
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
301 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
302 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
303 for(y=0; y<8; y++){
23457
a124f3abc1ec Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents: 19165
diff changeset
304 fast_memcpy(p_src + ( 7-y)*stride, p_src + ( y+8)*stride, stride);
a124f3abc1ec Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents: 19165
diff changeset
305 fast_memcpy(p_src + (height+8+y)*stride, p_src + (height-y+7)*stride, stride);
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
306 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
307 //FIXME (try edge emu)
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
308
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
309 for(y=0; y<height; y++){
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
310 for(x=-8; x<0; x+=4){
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
311 const int index= x + y*stride + (8-3)*(1+stride) + 8; //FIXME silly offset
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
312 uint8_t *src = p_src + index;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
313 DCTELEM *tp= temp+4*x;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28594
diff changeset
314
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
315 dctA_c(tp+4*8, src, stride);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28594
diff changeset
316 }
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
317 for(x=0; x<width; ){
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
318 const int qps= 3 + is_luma;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
319 int qp;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
320 int end= XMIN(x+8, width);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28594
diff changeset
321
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
322 if(p->qp)
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
323 qp= p->qp;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
324 else{
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
325 qp= qp_store[ (XMIN(x, width-1)>>qps) + (XMIN(y, height-1)>>qps) * qp_stride];
30412
41fb4acf3df6 Support more qscale types in most post-processing filters.
reimar
parents: 29263
diff changeset
326 qp=norm_qscale(qp, p->mpeg2);
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
327 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
328 for(; x<end; x++){
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
329 const int index= x + y*stride + (8-3)*(1+stride) + 8; //FIXME silly offset
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
330 uint8_t *src = p_src + index;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
331 DCTELEM *tp= temp+4*x;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
332 int v;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28594
diff changeset
333
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
334 if((x&3)==0)
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
335 dctA_c(tp+4*8, src, stride);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28594
diff changeset
336
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
337 dctB(block, tp);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28594
diff changeset
338
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
339 v= requantize(block, qp);
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
340 v= (v + dither[y&7][x&7])>>6;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
341 if((unsigned)v > 255)
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
342 v= (-v)>>31;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
343 dst[x + y*dst_stride]= v;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
344 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
345 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
346 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
347 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
348
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
349 static int config(struct vf_instance *vf,
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
350 int width, int height, int d_width, int d_height,
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
351 unsigned int flags, unsigned int outfmt){
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
352 int h= (height+16+15)&(~15);
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
353
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
354 vf->priv->temp_stride= (width+16+15)&(~15);
32747
170106dd2ef2 Replace memalign() by av_malloc() in libmpcodecs. as it is not available in all platforms
michael
parents: 32702
diff changeset
355 vf->priv->src = av_malloc(vf->priv->temp_stride*(h+8)*sizeof(uint8_t));
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28594
diff changeset
356
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
357 return vf_next_config(vf,width,height,d_width,d_height,flags,outfmt);
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
358 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
359
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
360 static void get_image(struct vf_instance *vf, mp_image_t *mpi){
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
361 if(mpi->flags&MP_IMGFLAG_PRESERVE) return; // don't change
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
362 // ok, we can do pp in-place (or pp disabled):
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
363 vf->dmpi=vf_get_image(vf->next,mpi->imgfmt,
16018
bdf1b4ecb906 use stored dimensions instead of visible one when (vf_)get_image is called
iive
parents: 15965
diff changeset
364 mpi->type, mpi->flags | MP_IMGFLAG_READABLE, mpi->width, mpi->height);
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
365 mpi->planes[0]=vf->dmpi->planes[0];
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
366 mpi->stride[0]=vf->dmpi->stride[0];
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
367 mpi->width=vf->dmpi->width;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
368 if(mpi->flags&MP_IMGFLAG_PLANAR){
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
369 mpi->planes[1]=vf->dmpi->planes[1];
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
370 mpi->planes[2]=vf->dmpi->planes[2];
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
371 mpi->stride[1]=vf->dmpi->stride[1];
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
372 mpi->stride[2]=vf->dmpi->stride[2];
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
373 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
374 mpi->flags|=MP_IMGFLAG_DIRECT;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
375 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
376
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
377 static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts){
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
378 mp_image_t *dmpi;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
379
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
380 if(mpi->flags&MP_IMGFLAG_DIRECT){
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
381 dmpi=vf->dmpi;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
382 }else{
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
383 // no DR, so get a new image! hope we'll get DR buffer:
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
384 dmpi=vf_get_image(vf->next,mpi->imgfmt,
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
385 MP_IMGTYPE_TEMP,
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
386 MP_IMGFLAG_ACCEPT_STRIDE|MP_IMGFLAG_PREFER_ALIGNED_STRIDE,
16018
bdf1b4ecb906 use stored dimensions instead of visible one when (vf_)get_image is called
iive
parents: 15965
diff changeset
387 mpi->width,mpi->height);
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
388 vf_clone_mpi_attributes(dmpi, mpi);
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
389 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
390
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
391 vf->priv->mpeg2= mpi->qscale_type;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
392 if(mpi->qscale || vf->priv->qp){
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
393 filter(vf->priv, dmpi->planes[0], mpi->planes[0], dmpi->stride[0], mpi->stride[0], mpi->w, mpi->h, mpi->qscale, mpi->qstride, 1);
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
394 filter(vf->priv, dmpi->planes[1], mpi->planes[1], dmpi->stride[1], mpi->stride[1], mpi->w>>mpi->chroma_x_shift, mpi->h>>mpi->chroma_y_shift, mpi->qscale, mpi->qstride, 0);
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
395 filter(vf->priv, dmpi->planes[2], mpi->planes[2], dmpi->stride[2], mpi->stride[2], mpi->w>>mpi->chroma_x_shift, mpi->h>>mpi->chroma_y_shift, mpi->qscale, mpi->qstride, 0);
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
396 }else{
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
397 memcpy_pic(dmpi->planes[0], mpi->planes[0], mpi->w, mpi->h, dmpi->stride[0], mpi->stride[0]);
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
398 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]);
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
399 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]);
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
400 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
401
28290
25337a2147e7 Lots and lots of #ifdef ARCH_... -> #if ARCH_...
reimar
parents: 27754
diff changeset
402 #if HAVE_MMX
27754
08d18fe9da52 Change all occurrences of asm and __asm to __asm__, same as was done for FFmpeg.
diego
parents: 26727
diff changeset
403 if(gCpuCaps.hasMMX) __asm__ volatile ("emms\n\t");
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
404 #endif
28290
25337a2147e7 Lots and lots of #ifdef ARCH_... -> #if ARCH_...
reimar
parents: 27754
diff changeset
405 #if HAVE_MMX2
27754
08d18fe9da52 Change all occurrences of asm and __asm to __asm__, same as was done for FFmpeg.
diego
parents: 26727
diff changeset
406 if(gCpuCaps.hasMMX2) __asm__ volatile ("sfence\n\t");
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
407 #endif
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
408
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17566
diff changeset
409 return vf_next_put_image(vf,dmpi, pts);
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
410 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
411
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
412 static void uninit(struct vf_instance *vf){
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
413 if(!vf->priv) return;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
414
32747
170106dd2ef2 Replace memalign() by av_malloc() in libmpcodecs. as it is not available in all platforms
michael
parents: 32702
diff changeset
415 av_free(vf->priv->src);
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
416 vf->priv->src= NULL;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28594
diff changeset
417
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
418 free(vf->priv);
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
419 vf->priv=NULL;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
420 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
421
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
422 //===========================================================================//
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
423 static int query_format(struct vf_instance *vf, unsigned int fmt){
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
424 switch(fmt){
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
425 case IMGFMT_YVU9:
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
426 case IMGFMT_IF09:
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
427 case IMGFMT_YV12:
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
428 case IMGFMT_I420:
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
429 case IMGFMT_IYUV:
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
430 case IMGFMT_CLPL:
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
431 case IMGFMT_Y800:
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
432 case IMGFMT_Y8:
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
433 case IMGFMT_444P:
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
434 case IMGFMT_422P:
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
435 case IMGFMT_411P:
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
436 return vf_next_query_format(vf,fmt);
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
437 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
438 return 0;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
439 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
440
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
441 static int control(struct vf_instance *vf, int request, void* data){
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
442 return vf_next_control(vf,request,data);
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
443 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
444
30638
a7b908875c14 Rename open() vf initialization function to vf_open().
diego
parents: 30412
diff changeset
445 static int vf_open(vf_instance_t *vf, char *args){
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
446 vf->config=config;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
447 vf->put_image=put_image;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
448 vf->get_image=get_image;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
449 vf->query_format=query_format;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
450 vf->uninit=uninit;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
451 vf->control= control;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
452 vf->priv=malloc(sizeof(struct vf_priv_s));
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
453 memset(vf->priv, 0, sizeof(struct vf_priv_s));
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28594
diff changeset
454
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
455 if (args) sscanf(args, "%d:%d", &vf->priv->qp, &vf->priv->mode);
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
456
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
457 if(vf->priv->qp < 0)
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
458 vf->priv->qp = 0;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
459
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
460 init_thres2();
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28594
diff changeset
461
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
462 switch(vf->priv->mode){
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32537
diff changeset
463 case 0: requantize= hardthresh_c; break;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32537
diff changeset
464 case 1: requantize= softthresh_c; break;
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
465 default:
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32537
diff changeset
466 case 2: requantize= mediumthresh_c; break;
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
467 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
468
28290
25337a2147e7 Lots and lots of #ifdef ARCH_... -> #if ARCH_...
reimar
parents: 27754
diff changeset
469 #if HAVE_MMX
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
470 if(gCpuCaps.hasMMX){
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
471 dctB= dctB_mmx;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
472 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
473 #endif
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
474 #if 0
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
475 if(gCpuCaps.hasMMX){
32702
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32537
diff changeset
476 switch(vf->priv->mode){
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32537
diff changeset
477 case 0: requantize= hardthresh_mmx; break;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32537
diff changeset
478 case 1: requantize= softthresh_mmx; break;
7af3e6f901fd Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents: 32537
diff changeset
479 }
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
480 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
481 #endif
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28594
diff changeset
482
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
483 return 1;
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
484 }
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
485
25221
00fff9a3b735 Make all vf_info_t structs const
reimar
parents: 23457
diff changeset
486 const vf_info_t vf_info_pp7 = {
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
487 "postprocess 7",
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
488 "pp7",
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
489 "Michael Niedermayer",
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
490 "",
30638
a7b908875c14 Rename open() vf initialization function to vf_open().
diego
parents: 30412
diff changeset
491 vf_open,
15944
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
492 NULL
1a0c715343d2 pp7 filter (spp=6 filter with 7 point dct where only the center sample is used after idct)
michael
parents:
diff changeset
493 };