annotate simple_idct.c @ 5757:ace63c809071 libavcodec

Remove uses of SIGILL for CPU extension detection, that method is not acceptable in a library. Should not change anything for PPC, the autodetection is currently pointless due to other code being compiled with -maltivec as well (and detection for OSX and AmigaOS remains in place). SPARC binaries built with VIS support can now only run on systems with VIS.
author reimar
date Tue, 02 Oct 2007 18:18:35 +0000
parents 3d2b2a2a664e
children eb2b4b1da4cd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
175
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
1 /*
429
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
2 * Simple IDCT
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
3 *
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
4 * Copyright (c) 2001 Michael Niedermayer <michaelni@gmx.at>
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
5 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3036
diff changeset
6 * This file is part of FFmpeg.
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3036
diff changeset
7 *
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3036
diff changeset
8 * FFmpeg is free software; you can redistribute it and/or
429
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
9 * modify it under the terms of the GNU Lesser General Public
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
10 * License as published by the Free Software Foundation; either
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3036
diff changeset
11 * version 2.1 of the License, or (at your option) any later version.
429
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
12 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3036
diff changeset
13 * FFmpeg is distributed in the hope that it will be useful,
429
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
16 * Lesser General Public License for more details.
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
17 *
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
18 * You should have received a copy of the GNU Lesser General Public
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3036
diff changeset
19 * License along with FFmpeg; if not, write to the Free Software
3036
0b546eab515d Update licensing information: The FSF changed postal address.
diego
parents: 2979
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
429
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
21 */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1106
diff changeset
22
1106
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
23 /**
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
24 * @file simple_idct.c
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
25 * simpleidct in C.
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
26 */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1106
diff changeset
27
175
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
28 /*
429
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
29 based upon some outcommented c code from mpeg2dec (idct_mmx.c
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1106
diff changeset
30 written by Aaron Holtzman <aholtzma@ess.engr.uvic.ca>)
429
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
31 */
396
fce0a2520551 removed useless header includes - use av memory functions
glantau
parents: 352
diff changeset
32 #include "avcodec.h"
479
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
33 #include "dsputil.h"
175
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
34 #include "simple_idct.h"
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
35
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
36 #if 0
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
37 #define W1 2841 /* 2048*sqrt (2)*cos (1*pi/16) */
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
38 #define W2 2676 /* 2048*sqrt (2)*cos (2*pi/16) */
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
39 #define W3 2408 /* 2048*sqrt (2)*cos (3*pi/16) */
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
40 #define W4 2048 /* 2048*sqrt (2)*cos (4*pi/16) */
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
41 #define W5 1609 /* 2048*sqrt (2)*cos (5*pi/16) */
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
42 #define W6 1108 /* 2048*sqrt (2)*cos (6*pi/16) */
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
43 #define W7 565 /* 2048*sqrt (2)*cos (7*pi/16) */
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
44 #define ROW_SHIFT 8
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
45 #define COL_SHIFT 17
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
46 #else
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
47 #define W1 22725 //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
48 #define W2 21407 //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
49 #define W3 19266 //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
352
5a8eb5cf9f92 C4=16383 for the c version too and even for some outcommented code
michaelni
parents: 215
diff changeset
50 #define W4 16383 //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
175
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
51 #define W5 12873 //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
52 #define W6 8867 //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
53 #define W7 4520 //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
54 #define ROW_SHIFT 11
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
55 #define COL_SHIFT 20 // 6
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
56 #endif
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
57
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
58 #if defined(ARCH_POWERPC_405)
175
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
59
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
60 /* signed 16x16 -> 32 multiply add accumulate */
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
61 #define MAC16(rt, ra, rb) \
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
62 asm ("maclhw %0, %2, %3" : "=r" (rt) : "0" (rt), "r" (ra), "r" (rb));
175
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
63
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
64 /* signed 16x16 -> 32 multiply */
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
65 #define MUL16(rt, ra, rb) \
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
66 asm ("mullhw %0, %1, %2" : "=r" (rt) : "r" (ra), "r" (rb));
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
67
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
68 #else
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
69
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
70 /* signed 16x16 -> 32 multiply add accumulate */
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
71 #define MAC16(rt, ra, rb) rt += (ra) * (rb)
175
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
72
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
73 /* signed 16x16 -> 32 multiply */
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
74 #define MUL16(rt, ra, rb) rt = (ra) * (rb)
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
75
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
76 #endif
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
77
1008
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
78 static inline void idctRowCondDC (DCTELEM * row)
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
79 {
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
80 int a0, a1, a2, a3, b0, b1, b2, b3;
4603
3d2b2a2a664e enable some 64bit optimized code on 64bit arch
aurel
parents: 4176
diff changeset
81 #ifdef HAVE_FAST_64BIT
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
82 uint64_t temp;
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
83 #else
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
84 uint32_t temp;
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
85 #endif
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
86
4603
3d2b2a2a664e enable some 64bit optimized code on 64bit arch
aurel
parents: 4176
diff changeset
87 #ifdef HAVE_FAST_64BIT
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
88 #ifdef WORDS_BIGENDIAN
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
89 #define ROW0_MASK 0xffff000000000000LL
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
90 #else
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
91 #define ROW0_MASK 0xffffLL
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
92 #endif
1008
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
93 if(sizeof(DCTELEM)==2){
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1106
diff changeset
94 if ( ((((uint64_t *)row)[0] & ~ROW0_MASK) |
1008
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
95 ((uint64_t *)row)[1]) == 0) {
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
96 temp = (row[0] << 3) & 0xffff;
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
97 temp += temp << 16;
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
98 temp += temp << 32;
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
99 ((uint64_t *)row)[0] = temp;
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
100 ((uint64_t *)row)[1] = temp;
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
101 return;
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
102 }
1008
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
103 }else{
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
104 if (!(row[1]|row[2]|row[3]|row[4]|row[5]|row[6]|row[7])) {
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
105 row[0]=row[1]=row[2]=row[3]=row[4]=row[5]=row[6]=row[7]= row[0] << 3;
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
106 return;
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
107 }
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
108 }
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
109 #else
1008
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
110 if(sizeof(DCTELEM)==2){
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
111 if (!(((uint32_t*)row)[1] |
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
112 ((uint32_t*)row)[2] |
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1106
diff changeset
113 ((uint32_t*)row)[3] |
1008
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
114 row[1])) {
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
115 temp = (row[0] << 3) & 0xffff;
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
116 temp += temp << 16;
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
117 ((uint32_t*)row)[0]=((uint32_t*)row)[1] =
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
118 ((uint32_t*)row)[2]=((uint32_t*)row)[3] = temp;
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
119 return;
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
120 }
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
121 }else{
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
122 if (!(row[1]|row[2]|row[3]|row[4]|row[5]|row[6]|row[7])) {
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
123 row[0]=row[1]=row[2]=row[3]=row[4]=row[5]=row[6]=row[7]= row[0] << 3;
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
124 return;
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
125 }
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
126 }
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
127 #endif
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
128
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
129 a0 = (W4 * row[0]) + (1 << (ROW_SHIFT - 1));
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
130 a1 = a0;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
131 a2 = a0;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
132 a3 = a0;
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
133
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
134 /* no need to optimize : gcc does it */
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
135 a0 += W2 * row[2];
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
136 a1 += W6 * row[2];
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
137 a2 -= W6 * row[2];
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
138 a3 -= W2 * row[2];
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
139
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
140 MUL16(b0, W1, row[1]);
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
141 MAC16(b0, W3, row[3]);
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
142 MUL16(b1, W3, row[1]);
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
143 MAC16(b1, -W7, row[3]);
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
144 MUL16(b2, W5, row[1]);
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
145 MAC16(b2, -W1, row[3]);
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
146 MUL16(b3, W7, row[1]);
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
147 MAC16(b3, -W5, row[3]);
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
148
4603
3d2b2a2a664e enable some 64bit optimized code on 64bit arch
aurel
parents: 4176
diff changeset
149 #ifdef HAVE_FAST_64BIT
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
150 temp = ((uint64_t*)row)[1];
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
151 #else
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
152 temp = ((uint32_t*)row)[2] | ((uint32_t*)row)[3];
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
153 #endif
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
154 if (temp != 0) {
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
155 a0 += W4*row[4] + W6*row[6];
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
156 a1 += - W4*row[4] - W2*row[6];
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
157 a2 += - W4*row[4] + W2*row[6];
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
158 a3 += W4*row[4] - W6*row[6];
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
159
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
160 MAC16(b0, W5, row[5]);
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
161 MAC16(b0, W7, row[7]);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1106
diff changeset
162
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
163 MAC16(b1, -W1, row[5]);
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
164 MAC16(b1, -W5, row[7]);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1106
diff changeset
165
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
166 MAC16(b2, W7, row[5]);
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
167 MAC16(b2, W3, row[7]);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1106
diff changeset
168
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
169 MAC16(b3, W3, row[5]);
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
170 MAC16(b3, -W1, row[7]);
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
171 }
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
172
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
173 row[0] = (a0 + b0) >> ROW_SHIFT;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
174 row[7] = (a0 - b0) >> ROW_SHIFT;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
175 row[1] = (a1 + b1) >> ROW_SHIFT;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
176 row[6] = (a1 - b1) >> ROW_SHIFT;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
177 row[2] = (a2 + b2) >> ROW_SHIFT;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
178 row[5] = (a2 - b2) >> ROW_SHIFT;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
179 row[3] = (a3 + b3) >> ROW_SHIFT;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
180 row[4] = (a3 - b3) >> ROW_SHIFT;
175
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
181 }
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
182
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1106
diff changeset
183 static inline void idctSparseColPut (uint8_t *dest, int line_size,
1008
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
184 DCTELEM * col)
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
185 {
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
186 int a0, a1, a2, a3, b0, b1, b2, b3;
4176
23da44e8fd05 rename cropTbl -> ff_cropTbl
mru
parents: 3947
diff changeset
187 uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
188
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
189 /* XXX: I did that only to give same values as previous code */
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
190 a0 = W4 * (col[8*0] + ((1<<(COL_SHIFT-1))/W4));
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
191 a1 = a0;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
192 a2 = a0;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
193 a3 = a0;
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
194
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
195 a0 += + W2*col[8*2];
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
196 a1 += + W6*col[8*2];
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
197 a2 += - W6*col[8*2];
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
198 a3 += - W2*col[8*2];
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
199
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
200 MUL16(b0, W1, col[8*1]);
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
201 MUL16(b1, W3, col[8*1]);
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
202 MUL16(b2, W5, col[8*1]);
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
203 MUL16(b3, W7, col[8*1]);
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
204
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
205 MAC16(b0, + W3, col[8*3]);
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
206 MAC16(b1, - W7, col[8*3]);
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
207 MAC16(b2, - W1, col[8*3]);
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
208 MAC16(b3, - W5, col[8*3]);
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
209
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
210 if(col[8*4]){
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
211 a0 += + W4*col[8*4];
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
212 a1 += - W4*col[8*4];
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
213 a2 += - W4*col[8*4];
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
214 a3 += + W4*col[8*4];
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
215 }
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
216
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
217 if (col[8*5]) {
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
218 MAC16(b0, + W5, col[8*5]);
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
219 MAC16(b1, - W1, col[8*5]);
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
220 MAC16(b2, + W7, col[8*5]);
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
221 MAC16(b3, + W3, col[8*5]);
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
222 }
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
223
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
224 if(col[8*6]){
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
225 a0 += + W6*col[8*6];
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
226 a1 += - W2*col[8*6];
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
227 a2 += + W2*col[8*6];
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
228 a3 += - W6*col[8*6];
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
229 }
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
230
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
231 if (col[8*7]) {
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
232 MAC16(b0, + W7, col[8*7]);
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
233 MAC16(b1, - W5, col[8*7]);
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
234 MAC16(b2, + W3, col[8*7]);
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
235 MAC16(b3, - W1, col[8*7]);
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
236 }
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
237
479
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
238 dest[0] = cm[(a0 + b0) >> COL_SHIFT];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
239 dest += line_size;
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
240 dest[0] = cm[(a1 + b1) >> COL_SHIFT];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
241 dest += line_size;
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
242 dest[0] = cm[(a2 + b2) >> COL_SHIFT];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
243 dest += line_size;
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
244 dest[0] = cm[(a3 + b3) >> COL_SHIFT];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
245 dest += line_size;
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
246 dest[0] = cm[(a3 - b3) >> COL_SHIFT];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
247 dest += line_size;
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
248 dest[0] = cm[(a2 - b2) >> COL_SHIFT];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
249 dest += line_size;
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
250 dest[0] = cm[(a1 - b1) >> COL_SHIFT];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
251 dest += line_size;
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
252 dest[0] = cm[(a0 - b0) >> COL_SHIFT];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
253 }
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
254
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1106
diff changeset
255 static inline void idctSparseColAdd (uint8_t *dest, int line_size,
1008
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
256 DCTELEM * col)
479
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
257 {
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
258 int a0, a1, a2, a3, b0, b1, b2, b3;
4176
23da44e8fd05 rename cropTbl -> ff_cropTbl
mru
parents: 3947
diff changeset
259 uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;
479
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
260
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
261 /* XXX: I did that only to give same values as previous code */
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
262 a0 = W4 * (col[8*0] + ((1<<(COL_SHIFT-1))/W4));
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
263 a1 = a0;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
264 a2 = a0;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
265 a3 = a0;
479
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
266
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
267 a0 += + W2*col[8*2];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
268 a1 += + W6*col[8*2];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
269 a2 += - W6*col[8*2];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
270 a3 += - W2*col[8*2];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
271
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
272 MUL16(b0, W1, col[8*1]);
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
273 MUL16(b1, W3, col[8*1]);
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
274 MUL16(b2, W5, col[8*1]);
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
275 MUL16(b3, W7, col[8*1]);
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
276
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
277 MAC16(b0, + W3, col[8*3]);
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
278 MAC16(b1, - W7, col[8*3]);
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
279 MAC16(b2, - W1, col[8*3]);
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
280 MAC16(b3, - W5, col[8*3]);
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
281
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
282 if(col[8*4]){
479
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
283 a0 += + W4*col[8*4];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
284 a1 += - W4*col[8*4];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
285 a2 += - W4*col[8*4];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
286 a3 += + W4*col[8*4];
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
287 }
479
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
288
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
289 if (col[8*5]) {
479
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
290 MAC16(b0, + W5, col[8*5]);
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
291 MAC16(b1, - W1, col[8*5]);
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
292 MAC16(b2, + W7, col[8*5]);
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
293 MAC16(b3, + W3, col[8*5]);
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
294 }
479
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
295
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
296 if(col[8*6]){
479
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
297 a0 += + W6*col[8*6];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
298 a1 += - W2*col[8*6];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
299 a2 += + W2*col[8*6];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
300 a3 += - W6*col[8*6];
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
301 }
479
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
302
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
303 if (col[8*7]) {
479
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
304 MAC16(b0, + W7, col[8*7]);
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
305 MAC16(b1, - W5, col[8*7]);
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
306 MAC16(b2, + W3, col[8*7]);
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
307 MAC16(b3, - W1, col[8*7]);
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
308 }
479
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
309
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
310 dest[0] = cm[dest[0] + ((a0 + b0) >> COL_SHIFT)];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
311 dest += line_size;
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
312 dest[0] = cm[dest[0] + ((a1 + b1) >> COL_SHIFT)];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
313 dest += line_size;
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
314 dest[0] = cm[dest[0] + ((a2 + b2) >> COL_SHIFT)];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
315 dest += line_size;
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
316 dest[0] = cm[dest[0] + ((a3 + b3) >> COL_SHIFT)];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
317 dest += line_size;
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
318 dest[0] = cm[dest[0] + ((a3 - b3) >> COL_SHIFT)];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
319 dest += line_size;
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
320 dest[0] = cm[dest[0] + ((a2 - b2) >> COL_SHIFT)];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
321 dest += line_size;
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
322 dest[0] = cm[dest[0] + ((a1 - b1) >> COL_SHIFT)];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
323 dest += line_size;
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
324 dest[0] = cm[dest[0] + ((a0 - b0) >> COL_SHIFT)];
175
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
325 }
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
326
1008
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
327 static inline void idctSparseCol (DCTELEM * col)
633
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
328 {
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
329 int a0, a1, a2, a3, b0, b1, b2, b3;
633
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
330
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
331 /* XXX: I did that only to give same values as previous code */
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
332 a0 = W4 * (col[8*0] + ((1<<(COL_SHIFT-1))/W4));
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
333 a1 = a0;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
334 a2 = a0;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
335 a3 = a0;
633
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
336
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
337 a0 += + W2*col[8*2];
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
338 a1 += + W6*col[8*2];
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
339 a2 += - W6*col[8*2];
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
340 a3 += - W2*col[8*2];
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
341
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
342 MUL16(b0, W1, col[8*1]);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
343 MUL16(b1, W3, col[8*1]);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
344 MUL16(b2, W5, col[8*1]);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
345 MUL16(b3, W7, col[8*1]);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
346
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
347 MAC16(b0, + W3, col[8*3]);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
348 MAC16(b1, - W7, col[8*3]);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
349 MAC16(b2, - W1, col[8*3]);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
350 MAC16(b3, - W5, col[8*3]);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
351
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
352 if(col[8*4]){
633
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
353 a0 += + W4*col[8*4];
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
354 a1 += - W4*col[8*4];
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
355 a2 += - W4*col[8*4];
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
356 a3 += + W4*col[8*4];
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
357 }
633
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
358
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
359 if (col[8*5]) {
633
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
360 MAC16(b0, + W5, col[8*5]);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
361 MAC16(b1, - W1, col[8*5]);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
362 MAC16(b2, + W7, col[8*5]);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
363 MAC16(b3, + W3, col[8*5]);
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
364 }
633
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
365
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
366 if(col[8*6]){
633
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
367 a0 += + W6*col[8*6];
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
368 a1 += - W2*col[8*6];
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
369 a2 += + W2*col[8*6];
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
370 a3 += - W6*col[8*6];
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
371 }
633
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
372
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
373 if (col[8*7]) {
633
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
374 MAC16(b0, + W7, col[8*7]);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
375 MAC16(b1, - W5, col[8*7]);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
376 MAC16(b2, + W3, col[8*7]);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
377 MAC16(b3, - W1, col[8*7]);
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
378 }
633
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
379
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
380 col[0 ] = ((a0 + b0) >> COL_SHIFT);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
381 col[8 ] = ((a1 + b1) >> COL_SHIFT);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
382 col[16] = ((a2 + b2) >> COL_SHIFT);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
383 col[24] = ((a3 + b3) >> COL_SHIFT);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
384 col[32] = ((a3 - b3) >> COL_SHIFT);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
385 col[40] = ((a2 - b2) >> COL_SHIFT);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
386 col[48] = ((a1 - b1) >> COL_SHIFT);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
387 col[56] = ((a0 - b0) >> COL_SHIFT);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
388 }
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
389
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1008
diff changeset
390 void simple_idct_put(uint8_t *dest, int line_size, DCTELEM *block)
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
391 {
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
392 int i;
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
393 for(i=0; i<8; i++)
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
394 idctRowCondDC(block + i*8);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1106
diff changeset
395
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
396 for(i=0; i<8; i++)
479
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
397 idctSparseColPut(dest + i, line_size, block + i);
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
398 }
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
399
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1008
diff changeset
400 void simple_idct_add(uint8_t *dest, int line_size, DCTELEM *block)
479
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
401 {
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
402 int i;
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
403 for(i=0; i<8; i++)
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
404 idctRowCondDC(block + i*8);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1106
diff changeset
405
479
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
406 for(i=0; i<8; i++)
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
407 idctSparseColAdd(dest + i, line_size, block + i);
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
408 }
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
409
1008
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
410 void simple_idct(DCTELEM *block)
633
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
411 {
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
412 int i;
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
413 for(i=0; i<8; i++)
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
414 idctRowCondDC(block + i*8);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1106
diff changeset
415
633
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
416 for(i=0; i<8; i++)
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
417 idctSparseCol(block + i);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
418 }
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
419
719
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
420 /* 2x4x8 idct */
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
421
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
422 #define CN_SHIFT 12
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
423 #define C_FIX(x) ((int)((x) * (1 << CN_SHIFT) + 0.5))
722
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 719
diff changeset
424 #define C1 C_FIX(0.6532814824)
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 719
diff changeset
425 #define C2 C_FIX(0.2705980501)
719
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
426
722
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 719
diff changeset
427 /* row idct is multiple by 16 * sqrt(2.0), col idct4 is normalized,
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 719
diff changeset
428 and the butterfly must be multiplied by 0.5 * sqrt(2.0) */
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 719
diff changeset
429 #define C_SHIFT (4+1+12)
719
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
430
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1008
diff changeset
431 static inline void idct4col(uint8_t *dest, int line_size, const DCTELEM *col)
719
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
432 {
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
433 int c0, c1, c2, c3, a0, a1, a2, a3;
4176
23da44e8fd05 rename cropTbl -> ff_cropTbl
mru
parents: 3947
diff changeset
434 const uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;
719
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
435
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
436 a0 = col[8*0];
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
437 a1 = col[8*2];
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
438 a2 = col[8*4];
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
439 a3 = col[8*6];
722
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 719
diff changeset
440 c0 = ((a0 + a2) << (CN_SHIFT - 1)) + (1 << (C_SHIFT - 1));
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 719
diff changeset
441 c2 = ((a0 - a2) << (CN_SHIFT - 1)) + (1 << (C_SHIFT - 1));
719
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
442 c1 = a1 * C1 + a3 * C2;
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
443 c3 = a1 * C2 - a3 * C1;
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
444 dest[0] = cm[(c0 + c1) >> C_SHIFT];
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
445 dest += line_size;
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
446 dest[0] = cm[(c2 + c3) >> C_SHIFT];
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
447 dest += line_size;
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
448 dest[0] = cm[(c2 - c3) >> C_SHIFT];
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
449 dest += line_size;
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
450 dest[0] = cm[(c0 - c1) >> C_SHIFT];
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
451 }
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
452
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
453 #define BF(k) \
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
454 {\
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
455 int a0, a1;\
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
456 a0 = ptr[k];\
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
457 a1 = ptr[8 + k];\
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
458 ptr[k] = a0 + a1;\
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
459 ptr[8 + k] = a0 - a1;\
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
460 }
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
461
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
462 /* only used by DV codec. The input must be interlaced. 128 is added
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
463 to the pixels before clamping to avoid systematic error
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
464 (1024*sqrt(2)) offset would be needed otherwise. */
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
465 /* XXX: I think a 1.0/sqrt(2) normalization should be needed to
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
466 compensate the extra butterfly stage - I don't have the full DV
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
467 specification */
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1008
diff changeset
468 void simple_idct248_put(uint8_t *dest, int line_size, DCTELEM *block)
719
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
469 {
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
470 int i;
1008
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
471 DCTELEM *ptr;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 1106
diff changeset
472
719
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
473 /* butterfly */
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
474 ptr = block;
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
475 for(i=0;i<4;i++) {
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
476 BF(0);
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
477 BF(1);
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
478 BF(2);
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
479 BF(3);
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
480 BF(4);
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
481 BF(5);
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
482 BF(6);
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
483 BF(7);
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
484 ptr += 2 * 8;
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
485 }
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
486
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
487 /* IDCT8 on each line */
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
488 for(i=0; i<8; i++) {
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
489 idctRowCondDC(block + i*8);
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
490 }
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
491
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
492 /* IDCT4 and store */
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
493 for(i=0;i<8;i++) {
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
494 idct4col(dest + i, 2 * line_size, block + i);
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
495 idct4col(dest + line_size + i, 2 * line_size, block + 8 + i);
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
496 }
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
497 }
936
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
498
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
499 /* 8x4 & 4x8 WMV2 IDCT */
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
500 #undef CN_SHIFT
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
501 #undef C_SHIFT
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
502 #undef C_FIX
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
503 #undef C1
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
504 #undef C2
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
505 #define CN_SHIFT 12
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
506 #define C_FIX(x) ((int)((x) * 1.414213562 * (1 << CN_SHIFT) + 0.5))
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
507 #define C1 C_FIX(0.6532814824)
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
508 #define C2 C_FIX(0.2705980501)
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
509 #define C3 C_FIX(0.5)
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
510 #define C_SHIFT (4+1+12)
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1008
diff changeset
511 static inline void idct4col_add(uint8_t *dest, int line_size, const DCTELEM *col)
936
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
512 {
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
513 int c0, c1, c2, c3, a0, a1, a2, a3;
4176
23da44e8fd05 rename cropTbl -> ff_cropTbl
mru
parents: 3947
diff changeset
514 const uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;
936
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
515
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
516 a0 = col[8*0];
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
517 a1 = col[8*1];
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
518 a2 = col[8*2];
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
519 a3 = col[8*3];
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
520 c0 = (a0 + a2)*C3 + (1 << (C_SHIFT - 1));
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
521 c2 = (a0 - a2)*C3 + (1 << (C_SHIFT - 1));
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
522 c1 = a1 * C1 + a3 * C2;
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
523 c3 = a1 * C2 - a3 * C1;
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
524 dest[0] = cm[dest[0] + ((c0 + c1) >> C_SHIFT)];
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
525 dest += line_size;
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
526 dest[0] = cm[dest[0] + ((c2 + c3) >> C_SHIFT)];
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
527 dest += line_size;
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
528 dest[0] = cm[dest[0] + ((c2 - c3) >> C_SHIFT)];
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
529 dest += line_size;
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
530 dest[0] = cm[dest[0] + ((c0 - c1) >> C_SHIFT)];
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
531 }
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
532
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
533 #define RN_SHIFT 15
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
534 #define R_FIX(x) ((int)((x) * 1.414213562 * (1 << RN_SHIFT) + 0.5))
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
535 #define R1 R_FIX(0.6532814824)
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
536 #define R2 R_FIX(0.2705980501)
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
537 #define R3 R_FIX(0.5)
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
538 #define R_SHIFT 11
1008
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
539 static inline void idct4row(DCTELEM *row)
936
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
540 {
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
541 int c0, c1, c2, c3, a0, a1, a2, a3;
4176
23da44e8fd05 rename cropTbl -> ff_cropTbl
mru
parents: 3947
diff changeset
542 //const uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;
936
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
543
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
544 a0 = row[0];
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
545 a1 = row[1];
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
546 a2 = row[2];
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
547 a3 = row[3];
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
548 c0 = (a0 + a2)*R3 + (1 << (R_SHIFT - 1));
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
549 c2 = (a0 - a2)*R3 + (1 << (R_SHIFT - 1));
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
550 c1 = a1 * R1 + a3 * R2;
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
551 c3 = a1 * R2 - a3 * R1;
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
552 row[0]= (c0 + c1) >> R_SHIFT;
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
553 row[1]= (c2 + c3) >> R_SHIFT;
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
554 row[2]= (c2 - c3) >> R_SHIFT;
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
555 row[3]= (c0 - c1) >> R_SHIFT;
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
556 }
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
557
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1008
diff changeset
558 void simple_idct84_add(uint8_t *dest, int line_size, DCTELEM *block)
936
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
559 {
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
560 int i;
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
561
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
562 /* IDCT8 on each line */
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
563 for(i=0; i<4; i++) {
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
564 idctRowCondDC(block + i*8);
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
565 }
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
566
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
567 /* IDCT4 and store */
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
568 for(i=0;i<8;i++) {
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
569 idct4col_add(dest + i, line_size, block + i);
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
570 }
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
571 }
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
572
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1008
diff changeset
573 void simple_idct48_add(uint8_t *dest, int line_size, DCTELEM *block)
936
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
574 {
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
575 int i;
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
576
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
577 /* IDCT4 on each line */
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
578 for(i=0; i<8; i++) {
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
579 idct4row(block + i*8);
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
580 }
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
581
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
582 /* IDCT8 and store */
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
583 for(i=0; i<4; i++){
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
584 idctSparseColAdd(dest + i, line_size, block + i);
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
585 }
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
586 }
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
587