annotate simple_idct.c @ 205:ccf36af385f3 libavcodec

(commit by michael) faster simple_idct in C
author arpi_esp
date Mon, 14 Jan 2002 04:39:59 +0000
parents bd77d3cbb233
children 73df666cacc7
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 /*
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
2 Copyright (C) 2001 Michael Niedermayer (michaelni@gmx.at)
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
3
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
4 This program is free software; you can redistribute it and/or modify
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
5 it under the terms of the GNU General Public License as published by
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
6 the Free Software Foundation; either version 2 of the License, or
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
7 (at your option) any later version.
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
8
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
9 This program is distributed in the hope that it will be useful,
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
12 GNU General Public License for more details.
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
13
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
14 You should have received a copy of the GNU General Public License
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
15 along with this program; if not, write to the Free Software
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
16 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
17 */
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
18
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
19 /*
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
20 based upon some outcommented c code from mpeg2dec (idct_mmx.c written by Aaron Holtzman <aholtzma@ess.engr.uvic.ca>)
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
21 */
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
22
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
23 #include <inttypes.h>
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
24
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
25 #include "simple_idct.h"
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
26
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
27 #if 0
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
28 #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
29 #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
30 #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
31 #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
32 #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
33 #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
34 #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
35 #define ROW_SHIFT 8
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
36 #define COL_SHIFT 17
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
37 #else
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
38 #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
39 #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
40 #define W3 19266 //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
41 #define W4 16384 //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
42 #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
43 #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
44 #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
45 #define ROW_SHIFT 11
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
46 #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
47 #endif
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
48
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
49 /* 8x8 Matrix used to do a trivial (slow) 8 point IDCT */
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
50 static int coeff[64]={
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
51 W4, W4, W4, W4, W4, W4, W4, W4,
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
52 W1, W3, W5, W7,-W7,-W5,-W3,-W1,
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
53 W2, W6,-W6,-W2,-W2,-W6, W6, W2,
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
54 W3,-W7,-W1,-W5, W5, W1, W7,-W3,
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
55 W4,-W4,-W4, W4, W4,-W4,-W4, W4,
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
56 W5,-W1, W7, W3,-W3,-W7, W1,-W5,
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
57 W6,-W2, W2,-W6,-W6, W2,-W2, W6,
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
58 W7,-W5, W3,-W1, W1,-W3, W5,-W7
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
59 };
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
60
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
61 static int inline idctRowCondZ (int16_t * row)
175
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
62 {
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
63 int a0, a1, a2, a3, b0, b1, b2, b3;
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
64
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
65 if( !( ((uint32_t*)row)[0]|((uint32_t*)row)[1] |((uint32_t*)row)[2] |((uint32_t*)row)[3])) {
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
66 /* row[0] = row[1] = row[2] = row[3] = row[4] =
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
67 row[5] = row[6] = row[7] = 0;*/
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
68 return 0;
175
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
69 }
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
70
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
71 if(!( ((uint32_t*)row)[2] |((uint32_t*)row)[3] )){
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
72 a0 = W4*row[0] + W2*row[2] + (1<<(ROW_SHIFT-1));
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
73 a1 = W4*row[0] + W6*row[2] + (1<<(ROW_SHIFT-1));
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
74 a2 = W4*row[0] - W6*row[2] + (1<<(ROW_SHIFT-1));
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
75 a3 = W4*row[0] - W2*row[2] + (1<<(ROW_SHIFT-1));
175
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
76
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
77 b0 = W1*row[1] + W3*row[3];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
78 b1 = W3*row[1] - W7*row[3];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
79 b2 = W5*row[1] - W1*row[3];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
80 b3 = W7*row[1] - W5*row[3];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
81 }else{
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
82 a0 = W4*row[0] + W2*row[2] + W4*row[4] + W6*row[6] + (1<<(ROW_SHIFT-1));
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
83 a1 = W4*row[0] + W6*row[2] - W4*row[4] - W2*row[6] + (1<<(ROW_SHIFT-1));
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
84 a2 = W4*row[0] - W6*row[2] - W4*row[4] + W2*row[6] + (1<<(ROW_SHIFT-1));
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
85 a3 = W4*row[0] - W2*row[2] + W4*row[4] - W6*row[6] + (1<<(ROW_SHIFT-1));
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
86
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
87 b0 = W1*row[1] + W3*row[3] + W5*row[5] + W7*row[7];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
88 b1 = W3*row[1] - W7*row[3] - W1*row[5] - W5*row[7];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
89 b2 = W5*row[1] - W1*row[3] + W7*row[5] + W3*row[7];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
90 b3 = W7*row[1] - W5*row[3] + W3*row[5] - W1*row[7];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
91 }
175
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
92
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
93 row[0] = (a0 + b0) >> ROW_SHIFT;
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
94 row[1] = (a1 + b1) >> ROW_SHIFT;
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
95 row[2] = (a2 + b2) >> ROW_SHIFT;
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
96 row[3] = (a3 + b3) >> ROW_SHIFT;
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
97 row[4] = (a3 - b3) >> ROW_SHIFT;
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
98 row[5] = (a2 - b2) >> ROW_SHIFT;
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
99 row[6] = (a1 - b1) >> ROW_SHIFT;
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
100 row[7] = (a0 - b0) >> ROW_SHIFT;
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
101
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
102 return 1;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
103 }
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
104
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
105 static int inline idctRowCondDC (int16_t * row)
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
106 {
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
107 int a0, a1, a2, a3, b0, b1, b2, b3;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
108
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
109 if( !( ((uint32_t*)row)[1] |((uint32_t*)row)[2] |((uint32_t*)row)[3]| row[1])) {
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
110 // row[0] = row[1] = row[2] = row[3] = row[4] = row[5] = row[6] = row[7] = row[0]<<3;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
111 uint16_t temp= row[0]<<3;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
112 ((uint32_t*)row)[0]=((uint32_t*)row)[1]=
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
113 ((uint32_t*)row)[2]=((uint32_t*)row)[3]= temp + (temp<<16);
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
114 return 0;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
115 }
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
116
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
117 if(!( ((uint32_t*)row)[2] |((uint32_t*)row)[3] )){
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
118 a0 = W4*row[0] + W2*row[2] + (1<<(ROW_SHIFT-1));
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
119 a1 = W4*row[0] + W6*row[2] + (1<<(ROW_SHIFT-1));
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
120 a2 = W4*row[0] - W6*row[2] + (1<<(ROW_SHIFT-1));
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
121 a3 = W4*row[0] - W2*row[2] + (1<<(ROW_SHIFT-1));
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
122
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
123 b0 = W1*row[1] + W3*row[3];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
124 b1 = W3*row[1] - W7*row[3];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
125 b2 = W5*row[1] - W1*row[3];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
126 b3 = W7*row[1] - W5*row[3];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
127 }else{
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
128 a0 = W4*row[0] + W2*row[2] + W4*row[4] + W6*row[6] + (1<<(ROW_SHIFT-1));
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
129 a1 = W4*row[0] + W6*row[2] - W4*row[4] - W2*row[6] + (1<<(ROW_SHIFT-1));
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
130 a2 = W4*row[0] - W6*row[2] - W4*row[4] + W2*row[6] + (1<<(ROW_SHIFT-1));
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
131 a3 = W4*row[0] - W2*row[2] + W4*row[4] - W6*row[6] + (1<<(ROW_SHIFT-1));
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
132
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
133 b0 = W1*row[1] + W3*row[3] + W5*row[5] + W7*row[7];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
134 b1 = W3*row[1] - W7*row[3] - W1*row[5] - W5*row[7];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
135 b2 = W5*row[1] - W1*row[3] + W7*row[5] + W3*row[7];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
136 b3 = W7*row[1] - W5*row[3] + W3*row[5] - W1*row[7];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
137 }
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
138
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
139 row[0] = (a0 + b0) >> ROW_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
140 row[7] = (a0 - b0) >> ROW_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
141 row[1] = (a1 + b1) >> ROW_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
142 row[6] = (a1 - b1) >> ROW_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
143 row[2] = (a2 + b2) >> ROW_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
144 row[5] = (a2 - b2) >> ROW_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
145 row[3] = (a3 + b3) >> ROW_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
146 row[4] = (a3 - b3) >> ROW_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
147
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
148 return 1;
175
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
149 }
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
150
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
151 static void inline idctCol (int16_t * col)
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
152 {
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
153
175
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
154 /*
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
155 if( !(col[8*1] | col[8*2] |col[8*3] |col[8*4] |col[8*5] |col[8*6] | col[8*7])) {
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
156 col[8*0] = col[8*1] = col[8*2] = col[8*3] = col[8*4] =
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
157 col[8*5] = col[8*6] = col[8*7] = col[8*0]<<3;
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
158 return;
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
159 }*/
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
160
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
161 int a0, a1, a2, a3, b0, b1, b2, b3;
175
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
162 col[0] += (1<<(COL_SHIFT-1))/W4;
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
163 a0 = W4*col[8*0] + W2*col[8*2] + W4*col[8*4] + W6*col[8*6];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
164 a1 = W4*col[8*0] + W6*col[8*2] - W4*col[8*4] - W2*col[8*6];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
165 a2 = W4*col[8*0] - W6*col[8*2] - W4*col[8*4] + W2*col[8*6];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
166 a3 = W4*col[8*0] - W2*col[8*2] + W4*col[8*4] - W6*col[8*6];
175
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
167
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
168 b0 = W1*col[8*1] + W3*col[8*3] + W5*col[8*5] + W7*col[8*7];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
169 b1 = W3*col[8*1] - W7*col[8*3] - W1*col[8*5] - W5*col[8*7];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
170 b2 = W5*col[8*1] - W1*col[8*3] + W7*col[8*5] + W3*col[8*7];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
171 b3 = W7*col[8*1] - W5*col[8*3] + W3*col[8*5] - W1*col[8*7];
175
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
172
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
173 col[8*0] = (a0 + b0) >> COL_SHIFT;
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
174 col[8*7] = (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
175 col[8*1] = (a1 + b1) >> COL_SHIFT;
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
176 col[8*6] = (a1 - b1) >> COL_SHIFT;
175
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
177 col[8*2] = (a2 + b2) >> COL_SHIFT;
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
178 col[8*5] = (a2 - b2) >> COL_SHIFT;
175
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
179 col[8*3] = (a3 + b3) >> COL_SHIFT;
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
180 col[8*4] = (a3 - b3) >> COL_SHIFT;
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
181 }
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
182
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
183 static void inline idctSparseCol (int16_t * col)
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
184 {
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
185 int a0, a1, a2, a3, b0, b1, b2, b3;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
186 col[0] += (1<<(COL_SHIFT-1))/W4;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
187 a0 = W4*col[8*0];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
188 a1 = W4*col[8*0];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
189 a2 = W4*col[8*0];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
190 a3 = W4*col[8*0];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
191
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
192 if(col[8*2]){
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
193 a0 += + W2*col[8*2];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
194 a1 += + W6*col[8*2];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
195 a2 += - W6*col[8*2];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
196 a3 += - W2*col[8*2];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
197 }
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
198
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
199 if(col[8*4]){
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
200 a0 += + W4*col[8*4];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
201 a1 += - W4*col[8*4];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
202 a2 += - W4*col[8*4];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
203 a3 += + W4*col[8*4];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
204 }
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
206 if(col[8*6]){
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
207 a0 += + W6*col[8*6];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
208 a1 += - W2*col[8*6];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
209 a2 += + W2*col[8*6];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
210 a3 += - W6*col[8*6];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
211 }
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
212
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
213 if(col[8*1]){
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
214 b0 = W1*col[8*1];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
215 b1 = W3*col[8*1];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
216 b2 = W5*col[8*1];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
217 b3 = W7*col[8*1];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
218 }else{
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
219 b0 =
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
220 b1 =
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
221 b2 =
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
222 b3 = 0;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
223 }
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
224
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
225 if(col[8*3]){
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
226 b0 += + W3*col[8*3];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
227 b1 += - W7*col[8*3];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
228 b2 += - W1*col[8*3];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
229 b3 += - W5*col[8*3];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
230 }
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
231
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
232 if(col[8*5]){
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
233 b0 += + W5*col[8*5];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
234 b1 += - W1*col[8*5];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
235 b2 += + W7*col[8*5];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
236 b3 += + W3*col[8*5];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
237 }
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
238
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
239 if(col[8*7]){
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
240 b0 += + W7*col[8*7];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
241 b1 += - W5*col[8*7];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
242 b2 += + W3*col[8*7];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
243 b3 += - W1*col[8*7];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
244 }
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
245
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
246 if(!(b0|b1|b2|b3)){
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
247 col[8*0] = (a0) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
248 col[8*7] = (a0) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
249 col[8*1] = (a1) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
250 col[8*6] = (a1) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
251 col[8*2] = (a2) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
252 col[8*5] = (a2) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
253 col[8*3] = (a3) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
254 col[8*4] = (a3) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
255 }else{
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
256 col[8*0] = (a0 + b0) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
257 col[8*7] = (a0 - b0) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
258 col[8*1] = (a1 + b1) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
259 col[8*6] = (a1 - b1) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
260 col[8*2] = (a2 + b2) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
261 col[8*5] = (a2 - b2) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
262 col[8*3] = (a3 + b3) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
263 col[8*4] = (a3 - b3) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
264 }
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
265 }
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
266
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
267 static void inline idctSparse2Col (int16_t * col)
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
268 {
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
269 int a0, a1, a2, a3, b0, b1, b2, b3;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
270 col[0] += (1<<(COL_SHIFT-1))/W4;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
271 a0 = W4*col[8*0];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
272 a1 = W4*col[8*0];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
273 a2 = W4*col[8*0];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
274 a3 = W4*col[8*0];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
275
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
276 if(col[8*2]){
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
277 a0 += + W2*col[8*2];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
278 a1 += + W6*col[8*2];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
279 a2 += - W6*col[8*2];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
280 a3 += - W2*col[8*2];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
281 }
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
282
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
283 if(col[8*4]){
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
284 a0 += + W4*col[8*4];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
285 a1 += - W4*col[8*4];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
286 a2 += - W4*col[8*4];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
287 a3 += + W4*col[8*4];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
288 }
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
289
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
290 if(col[8*6]){
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
291 a0 += + W6*col[8*6];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
292 a1 += - W2*col[8*6];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
293 a2 += + W2*col[8*6];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
294 a3 += - W6*col[8*6];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
295 }
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
296
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
297 if(col[8*1] || 1){
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
298 b0 = W1*col[8*1];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
299 b1 = W3*col[8*1];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
300 b2 = W5*col[8*1];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
301 b3 = W7*col[8*1];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
302 }else{
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
303 b0 =
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
304 b1 =
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
305 b2 =
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
306 b3 = 0;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
307 }
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
308
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
309 if(col[8*3]){
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
310 b0 += + W3*col[8*3];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
311 b1 += - W7*col[8*3];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
312 b2 += - W1*col[8*3];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
313 b3 += - W5*col[8*3];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
314 }
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
315
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
316 if(col[8*5]){
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
317 b0 += + W5*col[8*5];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
318 b1 += - W1*col[8*5];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
319 b2 += + W7*col[8*5];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
320 b3 += + W3*col[8*5];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
321 }
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
322
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
323 if(col[8*7]){
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
324 b0 += + W7*col[8*7];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
325 b1 += - W5*col[8*7];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
326 b2 += + W3*col[8*7];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
327 b3 += - W1*col[8*7];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
328 }
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
329
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
330 col[8*0] = (a0 + b0) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
331 col[8*7] = (a0 - b0) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
332 col[8*1] = (a1 + b1) >> COL_SHIFT;
175
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
333 col[8*6] = (a1 - b1) >> COL_SHIFT;
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
334 col[8*2] = (a2 + b2) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
335 col[8*5] = (a2 - b2) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
336 col[8*3] = (a3 + b3) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
337 col[8*4] = (a3 - b3) >> COL_SHIFT;
175
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
338 }
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
339
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
340
175
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
341 void simple_idct (short *block)
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
342 {
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
343
175
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
344 int i;
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
345
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
346 #if 0
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
347 int nonZero[8];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
348 int buffer[64];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
349 int nNonZero=0;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
350
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
351 idctRowCondDC(block);
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
352
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
353 for(i=1; i<8; i++)
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
354 {
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
355 nonZero[nNonZero]=i;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
356 nNonZero+= idctRowCondZ(block + i*8);
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
357 }
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
358
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
359 if(nNonZero==0)
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
360 {
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
361 for(i=0; i<8; i++)
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
362 {
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
363 block[i ]=
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
364 block[i+8 ]=
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
365 block[i+16]=
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
366 block[i+24]=
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
367 block[i+32]=
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
368 block[i+40]=
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
369 block[i+48]=
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
370 block[i+56]= (W4*block[i] + (1<<(COL_SHIFT-1))) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
371 }
175
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
372 }
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
373 else if(nNonZero==1)
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
374 {
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
375 int index= nonZero[0]*8;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
376 for(i=0; i<8; i++)
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
377 {
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
378 int bias= W4*block[i] + (1<<(COL_SHIFT-1));
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
379 int c= block[i + index];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
380 block[i ]= (c*coeff[index ] + bias) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
381 block[i+8 ]= (c*coeff[index+1] + bias) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
382 block[i+16]= (c*coeff[index+2] + bias) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
383 block[i+24]= (c*coeff[index+3] + bias) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
384 block[i+32]= (c*coeff[index+4] + bias) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
385 block[i+40]= (c*coeff[index+5] + bias) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
386 block[i+48]= (c*coeff[index+6] + bias) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
387 block[i+56]= (c*coeff[index+7] + bias) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
388 }
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
389 }
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
390 /* else if(nNonZero==2)
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
391 {
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
392 int index1= nonZero[0]*8;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
393 int index2= nonZero[1]*8;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
394 for(i=0; i<8; i++)
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
395 {
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
396 int bias= W4*block[i] + (1<<(COL_SHIFT-1));
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
397 int c1= block[i + index1];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
398 int c2= block[i + index2];
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
399 block[i ]= (c1*coeff[index1 ] + c2*coeff[index2 ] + bias) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
400 block[i+8 ]= (c1*coeff[index1+1] + c2*coeff[index2+1] + bias) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
401 block[i+16]= (c1*coeff[index1+2] + c2*coeff[index2+2] + bias) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
402 block[i+24]= (c1*coeff[index1+3] + c2*coeff[index2+3] + bias) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
403 block[i+32]= (c1*coeff[index1+4] + c2*coeff[index2+4] + bias) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
404 block[i+40]= (c1*coeff[index1+5] + c2*coeff[index2+5] + bias) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
405 block[i+48]= (c1*coeff[index1+6] + c2*coeff[index2+6] + bias) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
406 block[i+56]= (c1*coeff[index1+7] + c2*coeff[index2+7] + bias) >> COL_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
407 }
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
408 }*/
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
409 else
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
410 {
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
411 for(i=0; i<8; i++)
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
412 idctSparse2Col(block + i);
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
413 }
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
414 #else
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
415 for(i=0; i<8; i++)
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
416 idctRowCondDC(block + i*8);
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
417
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
418 for(i=0; i<8; i++)
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
419 idctSparseCol(block + i);
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
420 #endif
175
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
421 }