annotate simple_idct.c @ 2497:69adfbbdcdeb libavcodec

- samples from mplayer ftp in the "adv" profile seem to have profile=2, which isn't the advanced one; and indeed, using adv. profile parser fails. Using normal parser works, and that's what is done - attempt at taking care of stride for NORM2 bitplane decoding - duplication of much code from msmpeg4.c; this code isn't yet used, but goes down as far as the block layer (mainly Transform Type stuff, the remains are wild editing without checking). Unusable yet, and lacks the AC decoding (but a step further in bitstream parsing) patch by anonymous
author michael
date Fri, 04 Feb 2005 02:20:38 +0000
parents 1e39f273ecd6
children ef2149182f1c
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 *
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
6 * This library is free software; you can redistribute it and/or
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
7 * modify it under the terms of the GNU Lesser General Public
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
8 * License as published by the Free Software Foundation; either
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
9 * version 2 of the License, or (at your option) any later version.
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
10 *
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
11 * This library is distributed in the hope that it will be useful,
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
14 * Lesser General Public License for more details.
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
15 *
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
16 * You should have received a copy of the GNU Lesser General Public
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
17 * License along with this library; if not, write to the Free Software
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
19 */
1106
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
20
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
21 /**
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
22 * @file simple_idct.c
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
23 * simpleidct in C.
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
24 */
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
25
175
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
26 /*
429
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
27 based upon some outcommented c code from mpeg2dec (idct_mmx.c
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
28 written by Aaron Holtzman <aholtzma@ess.engr.uvic.ca>)
718a22dc121f license/copyright change
glantau
parents: 396
diff changeset
29 */
396
fce0a2520551 removed useless header includes - use av memory functions
glantau
parents: 352
diff changeset
30 #include "avcodec.h"
479
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
31 #include "dsputil.h"
175
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
32 #include "simple_idct.h"
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
33
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
34 #if 0
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
35 #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
36 #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
37 #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
38 #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
39 #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
40 #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
41 #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
42 #define ROW_SHIFT 8
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
43 #define COL_SHIFT 17
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
44 #else
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
45 #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
46 #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
47 #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
48 #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
49 #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
50 #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
51 #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
52 #define ROW_SHIFT 11
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
53 #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
54 #endif
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
55
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
56 #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
57
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
58 /* 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
59 #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
60 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
61
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
62 /* 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
63 #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
64 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
65
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
66 #else
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
67
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
68 /* 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
69 #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
70
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
71 /* 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
72 #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
73
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
74 #endif
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
75
1008
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
76 static inline void idctRowCondDC (DCTELEM * row)
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
77 {
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
78 int a0, a1, a2, a3, b0, b1, b2, b3;
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
79 #ifdef FAST_64BIT
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
80 uint64_t temp;
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
81 #else
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
82 uint32_t temp;
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
83 #endif
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
84
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
85 #ifdef FAST_64BIT
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
86 #ifdef WORDS_BIGENDIAN
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
87 #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
88 #else
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 0xffffLL
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
90 #endif
1008
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
91 if(sizeof(DCTELEM)==2){
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
92 if ( ((((uint64_t *)row)[0] & ~ROW0_MASK) |
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
93 ((uint64_t *)row)[1]) == 0) {
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
94 temp = (row[0] << 3) & 0xffff;
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
95 temp += temp << 16;
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
96 temp += temp << 32;
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
97 ((uint64_t *)row)[0] = temp;
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
98 ((uint64_t *)row)[1] = temp;
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
99 return;
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
100 }
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
101 }else{
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
102 if (!(row[1]|row[2]|row[3]|row[4]|row[5]|row[6]|row[7])) {
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
103 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
104 return;
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
105 }
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
106 }
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
107 #else
1008
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
108 if(sizeof(DCTELEM)==2){
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
109 if (!(((uint32_t*)row)[1] |
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
110 ((uint32_t*)row)[2] |
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
111 ((uint32_t*)row)[3] |
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
112 row[1])) {
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
113 temp = (row[0] << 3) & 0xffff;
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
114 temp += temp << 16;
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
115 ((uint32_t*)row)[0]=((uint32_t*)row)[1] =
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
116 ((uint32_t*)row)[2]=((uint32_t*)row)[3] = temp;
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
117 return;
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
118 }
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
119 }else{
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
120 if (!(row[1]|row[2]|row[3]|row[4]|row[5]|row[6]|row[7])) {
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
121 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
122 return;
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
123 }
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
124 }
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
125 #endif
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
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 a0 = (W4 * row[0]) + (1 << (ROW_SHIFT - 1));
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
128 a1 = a0;
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
129 a2 = a0;
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
130 a3 = a0;
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
131
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
132 /* 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
133 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
134 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
135 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
136 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
137
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
138 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
139 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
140 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
141 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
142 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
143 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
144 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
145 MAC16(b3, -W5, row[3]);
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
146
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
147 #ifdef FAST_64BIT
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
148 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
149 #else
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
150 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
151 #endif
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
152 if (temp != 0) {
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
153 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
154 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
155 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
156 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
157
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
158 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
159 MAC16(b0, W7, row[7]);
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
160
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
161 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
162 MAC16(b1, -W5, row[7]);
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
163
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
164 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
165 MAC16(b2, W3, row[7]);
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
166
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
167 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
168 MAC16(b3, -W1, row[7]);
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
169 }
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
170
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
171 row[0] = (a0 + b0) >> ROW_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
172 row[7] = (a0 - b0) >> ROW_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
173 row[1] = (a1 + b1) >> ROW_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
174 row[6] = (a1 - b1) >> ROW_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
175 row[2] = (a2 + b2) >> ROW_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
176 row[5] = (a2 - b2) >> ROW_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
177 row[3] = (a3 + b3) >> ROW_SHIFT;
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
178 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
179 }
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
180
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1008
diff changeset
181 static inline void idctSparseColPut (uint8_t *dest, int line_size,
1008
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
182 DCTELEM * col)
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
183 {
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
184 int a0, a1, a2, a3, b0, b1, b2, b3;
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1008
diff changeset
185 uint8_t *cm = 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
186
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
187 /* XXX: I did that only to give same values as previous code */
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
188 a0 = W4 * (col[8*0] + ((1<<(COL_SHIFT-1))/W4));
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
189 a1 = a0;
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
190 a2 = a0;
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
191 a3 = a0;
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
192
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
193 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
194 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
195 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
196 a3 += - W2*col[8*2];
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
197
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
198 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
199 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
200 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
201 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
202
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
203 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
204 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
205 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
206 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
207
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
208 if(col[8*4]){
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
209 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
210 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
211 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
212 a3 += + W4*col[8*4];
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
213 }
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
214
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
215 if (col[8*5]) {
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
216 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
217 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
218 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
219 MAC16(b3, + W3, col[8*5]);
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
220 }
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
221
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
222 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
223 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
224 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
225 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
226 a3 += - W6*col[8*6];
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
227 }
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
228
476
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
229 if (col[8*7]) {
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
230 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
231 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
232 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
233 MAC16(b3, - W1, col[8*7]);
205
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
234 }
ccf36af385f3 (commit by michael)
arpi_esp
parents: 175
diff changeset
235
479
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
236 dest[0] = cm[(a0 + b0) >> COL_SHIFT];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
237 dest += line_size;
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
238 dest[0] = cm[(a1 + b1) >> 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[(a2 + b2) >> 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[(a3 + b3) >> 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[(a2 - b2) >> 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[(a1 - b1) >> 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[(a0 - b0) >> COL_SHIFT];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
251 }
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
252
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1008
diff changeset
253 static inline void idctSparseColAdd (uint8_t *dest, int line_size,
1008
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
254 DCTELEM * col)
479
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
255 {
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
256 int a0, a1, a2, a3, b0, b1, b2, b3;
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1008
diff changeset
257 uint8_t *cm = cropTbl + MAX_NEG_CROP;
479
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
258
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
259 /* XXX: I did that only to give same values as previous code */
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
260 a0 = W4 * (col[8*0] + ((1<<(COL_SHIFT-1))/W4));
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
261 a1 = a0;
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
262 a2 = a0;
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
263 a3 = a0;
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
264
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
265 a0 += + W2*col[8*2];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
266 a1 += + W6*col[8*2];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
267 a2 += - W6*col[8*2];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
268 a3 += - W2*col[8*2];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
269
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
270 MUL16(b0, W1, col[8*1]);
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
271 MUL16(b1, W3, col[8*1]);
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
272 MUL16(b2, W5, col[8*1]);
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
273 MUL16(b3, W7, col[8*1]);
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
274
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
275 MAC16(b0, + W3, col[8*3]);
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
276 MAC16(b1, - W7, col[8*3]);
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
277 MAC16(b2, - W1, col[8*3]);
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
278 MAC16(b3, - W5, col[8*3]);
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
279
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
280 if(col[8*4]){
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
281 a0 += + W4*col[8*4];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
282 a1 += - W4*col[8*4];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
283 a2 += - W4*col[8*4];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
284 a3 += + W4*col[8*4];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
285 }
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
286
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
287 if (col[8*5]) {
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
288 MAC16(b0, + W5, col[8*5]);
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
289 MAC16(b1, - W1, col[8*5]);
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
290 MAC16(b2, + W7, col[8*5]);
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
291 MAC16(b3, + W3, col[8*5]);
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
292 }
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
293
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
294 if(col[8*6]){
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
295 a0 += + W6*col[8*6];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
296 a1 += - W2*col[8*6];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
297 a2 += + W2*col[8*6];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
298 a3 += - W6*col[8*6];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
299 }
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
300
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
301 if (col[8*7]) {
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
302 MAC16(b0, + W7, col[8*7]);
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
303 MAC16(b1, - W5, col[8*7]);
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
304 MAC16(b2, + W3, col[8*7]);
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
305 MAC16(b3, - W1, col[8*7]);
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
306 }
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
307
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
308 dest[0] = cm[dest[0] + ((a0 + b0) >> COL_SHIFT)];
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
309 dest += line_size;
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
310 dest[0] = cm[dest[0] + ((a1 + b1) >> 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] + ((a2 + b2) >> 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] + ((a3 + b3) >> 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] + ((a2 - b2) >> 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] + ((a1 - b1) >> 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] + ((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
323 }
bd77d3cbb233 new IDCT code by Michael Niedermayer (michaelni@gmx.at) - #define SIMPLE_IDCT to enable
arpi_esp
parents:
diff changeset
324
1008
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
325 static inline void idctSparseCol (DCTELEM * col)
633
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
326 {
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
327 int a0, a1, a2, a3, b0, b1, b2, b3;
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
328
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
329 /* XXX: I did that only to give same values as previous code */
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
330 a0 = W4 * (col[8*0] + ((1<<(COL_SHIFT-1))/W4));
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
331 a1 = a0;
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
332 a2 = a0;
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
333 a3 = a0;
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
334
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
335 a0 += + W2*col[8*2];
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
336 a1 += + W6*col[8*2];
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
337 a2 += - W6*col[8*2];
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
338 a3 += - W2*col[8*2];
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
339
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
340 MUL16(b0, W1, col[8*1]);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
341 MUL16(b1, W3, col[8*1]);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
342 MUL16(b2, W5, col[8*1]);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
343 MUL16(b3, W7, col[8*1]);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
344
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
345 MAC16(b0, + W3, col[8*3]);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
346 MAC16(b1, - W7, col[8*3]);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
347 MAC16(b2, - W1, col[8*3]);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
348 MAC16(b3, - W5, col[8*3]);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
349
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
350 if(col[8*4]){
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
351 a0 += + W4*col[8*4];
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
352 a1 += - W4*col[8*4];
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
353 a2 += - W4*col[8*4];
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
354 a3 += + W4*col[8*4];
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
355 }
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
356
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
357 if (col[8*5]) {
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
358 MAC16(b0, + W5, col[8*5]);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
359 MAC16(b1, - W1, col[8*5]);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
360 MAC16(b2, + W7, col[8*5]);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
361 MAC16(b3, + W3, col[8*5]);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
362 }
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
363
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
364 if(col[8*6]){
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
365 a0 += + W6*col[8*6];
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
366 a1 += - W2*col[8*6];
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
367 a2 += + W2*col[8*6];
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
368 a3 += - W6*col[8*6];
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
369 }
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
370
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
371 if (col[8*7]) {
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
372 MAC16(b0, + W7, col[8*7]);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
373 MAC16(b1, - W5, col[8*7]);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
374 MAC16(b2, + W3, col[8*7]);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
375 MAC16(b3, - W1, col[8*7]);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
376 }
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
377
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
378 col[0 ] = ((a0 + b0) >> COL_SHIFT);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
379 col[8 ] = ((a1 + b1) >> COL_SHIFT);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
380 col[16] = ((a2 + b2) >> COL_SHIFT);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
381 col[24] = ((a3 + b3) >> COL_SHIFT);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
382 col[32] = ((a3 - b3) >> COL_SHIFT);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
383 col[40] = ((a2 - b2) >> COL_SHIFT);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
384 col[48] = ((a1 - b1) >> COL_SHIFT);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
385 col[56] = ((a0 - b0) >> COL_SHIFT);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
386 }
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
387
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1008
diff changeset
388 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
389 {
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
390 int i;
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
391 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
392 idctRowCondDC(block + i*8);
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
393
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
394 for(i=0; i<8; i++)
479
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
395 idctSparseColPut(dest + i, line_size, block + i);
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
396 }
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
397
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1008
diff changeset
398 void simple_idct_add(uint8_t *dest, int line_size, DCTELEM *block)
479
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
399 {
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
400 int i;
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
401 for(i=0; i<8; i++)
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
402 idctRowCondDC(block + i*8);
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
403
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
404 for(i=0; i<8; i++)
40ffce2cb6ef added inlined put/add functions
bellard
parents: 476
diff changeset
405 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
406 }
ec13b0a726c3 removed unused code - began to merge alpha specific stuff - added mac macros for suitable CPUs
bellard
parents: 464
diff changeset
407
1008
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
408 void simple_idct(DCTELEM *block)
633
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
409 {
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
410 int i;
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
411 for(i=0; i<8; i++)
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
412 idctRowCondDC(block + i*8);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
413
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
414 for(i=0; i<8; i++)
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
415 idctSparseCol(block + i);
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
416 }
e7b72c1dfa1b dct-test update
michaelni
parents: 503
diff changeset
417
719
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
418 /* 2x4x8 idct */
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
419
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
420 #define CN_SHIFT 12
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
421 #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
422 #define C1 C_FIX(0.6532814824)
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 719
diff changeset
423 #define C2 C_FIX(0.2705980501)
719
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
424
722
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 719
diff changeset
425 /* 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
426 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
427 #define C_SHIFT (4+1+12)
719
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
428
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1008
diff changeset
429 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
430 {
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
431 int c0, c1, c2, c3, a0, a1, a2, a3;
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1008
diff changeset
432 const uint8_t *cm = cropTbl + MAX_NEG_CROP;
719
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
433
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
434 a0 = col[8*0];
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
435 a1 = col[8*2];
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
436 a2 = col[8*4];
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
437 a3 = col[8*6];
722
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 719
diff changeset
438 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
439 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
440 c1 = a1 * C1 + a3 * C2;
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
441 c3 = a1 * C2 - a3 * C1;
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
442 dest[0] = cm[(c0 + c1) >> C_SHIFT];
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
443 dest += line_size;
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
444 dest[0] = cm[(c2 + c3) >> 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[(c0 - c1) >> C_SHIFT];
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
449 }
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
450
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
451 #define BF(k) \
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 int a0, a1;\
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
454 a0 = ptr[k];\
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
455 a1 = ptr[8 + k];\
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
456 ptr[k] = a0 + a1;\
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
457 ptr[8 + k] = a0 - a1;\
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
458 }
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
459
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
460 /* 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
461 to the pixels before clamping to avoid systematic error
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
462 (1024*sqrt(2)) offset would be needed otherwise. */
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
463 /* 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
464 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
465 specification */
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1008
diff changeset
466 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
467 {
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
468 int i;
1008
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
469 DCTELEM *ptr;
719
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
470
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
471 /* butterfly */
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
472 ptr = block;
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
473 for(i=0;i<4;i++) {
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
474 BF(0);
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
475 BF(1);
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
476 BF(2);
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
477 BF(3);
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
478 BF(4);
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
479 BF(5);
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
480 BF(6);
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
481 BF(7);
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
482 ptr += 2 * 8;
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
483 }
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
484
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
485 /* IDCT8 on each line */
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
486 for(i=0; i<8; i++) {
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
487 idctRowCondDC(block + i*8);
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
488 }
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
489
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
490 /* IDCT4 and store */
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
491 for(i=0;i<8;i++) {
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
492 idct4col(dest + i, 2 * line_size, block + i);
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
493 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
494 }
2b7ff6dfee35 first version of IDCT248 for DV decoding support
bellard
parents: 642
diff changeset
495 }
936
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
496
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
497 /* 8x4 & 4x8 WMV2 IDCT */
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
498 #undef CN_SHIFT
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
499 #undef C_SHIFT
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
500 #undef C_FIX
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
501 #undef C1
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
502 #undef C2
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
503 #define CN_SHIFT 12
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
504 #define C_FIX(x) ((int)((x) * 1.414213562 * (1 << CN_SHIFT) + 0.5))
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
505 #define C1 C_FIX(0.6532814824)
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
506 #define C2 C_FIX(0.2705980501)
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
507 #define C3 C_FIX(0.5)
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
508 #define C_SHIFT (4+1+12)
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1008
diff changeset
509 static inline void idct4col_add(uint8_t *dest, int line_size, const DCTELEM *col)
936
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
510 {
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
511 int c0, c1, c2, c3, a0, a1, a2, a3;
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1008
diff changeset
512 const uint8_t *cm = cropTbl + MAX_NEG_CROP;
936
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
513
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
514 a0 = col[8*0];
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
515 a1 = col[8*1];
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
516 a2 = col[8*2];
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
517 a3 = col[8*3];
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
518 c0 = (a0 + a2)*C3 + (1 << (C_SHIFT - 1));
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
519 c2 = (a0 - a2)*C3 + (1 << (C_SHIFT - 1));
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
520 c1 = a1 * C1 + a3 * C2;
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
521 c3 = a1 * C2 - a3 * C1;
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
522 dest[0] = cm[dest[0] + ((c0 + c1) >> C_SHIFT)];
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
523 dest += line_size;
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
524 dest[0] = cm[dest[0] + ((c2 + c3) >> 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] + ((c0 - c1) >> C_SHIFT)];
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
529 }
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
530
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
531 #define RN_SHIFT 15
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
532 #define R_FIX(x) ((int)((x) * 1.414213562 * (1 << RN_SHIFT) + 0.5))
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
533 #define R1 R_FIX(0.6532814824)
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
534 #define R2 R_FIX(0.2705980501)
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
535 #define R3 R_FIX(0.5)
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
536 #define R_SHIFT 11
1008
fb6cbb8a04a3 fixing DCTELEM != short
michaelni
parents: 936
diff changeset
537 static inline void idct4row(DCTELEM *row)
936
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
538 {
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
539 int c0, c1, c2, c3, a0, a1, a2, a3;
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1008
diff changeset
540 //const uint8_t *cm = cropTbl + MAX_NEG_CROP;
936
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
541
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
542 a0 = row[0];
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
543 a1 = row[1];
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
544 a2 = row[2];
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
545 a3 = row[3];
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
546 c0 = (a0 + a2)*R3 + (1 << (R_SHIFT - 1));
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
547 c2 = (a0 - a2)*R3 + (1 << (R_SHIFT - 1));
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
548 c1 = a1 * R1 + a3 * R2;
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
549 c3 = a1 * R2 - a3 * R1;
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
550 row[0]= (c0 + c1) >> R_SHIFT;
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
551 row[1]= (c2 + c3) >> R_SHIFT;
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
552 row[2]= (c2 - c3) >> R_SHIFT;
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
553 row[3]= (c0 - c1) >> R_SHIFT;
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
554 }
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
555
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1008
diff changeset
556 void simple_idct84_add(uint8_t *dest, int line_size, DCTELEM *block)
936
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
557 {
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
558 int i;
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
559
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
560 /* IDCT8 on each line */
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
561 for(i=0; i<4; i++) {
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
562 idctRowCondDC(block + i*8);
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
563 }
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
564
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
565 /* IDCT4 and store */
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
566 for(i=0;i<8;i++) {
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
567 idct4col_add(dest + i, line_size, block + i);
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
568 }
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
569 }
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
570
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 1008
diff changeset
571 void simple_idct48_add(uint8_t *dest, int line_size, DCTELEM *block)
936
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
572 {
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
573 int i;
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
574
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
575 /* IDCT4 on each line */
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
576 for(i=0; i<8; i++) {
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
577 idct4row(block + i*8);
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
578 }
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
579
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
580 /* IDCT8 and store */
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
581 for(i=0; i<4; i++){
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
582 idctSparseColAdd(dest + i, line_size, block + i);
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
583 }
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
584 }
caa77cd960c0 qpel encoding
michaelni
parents: 744
diff changeset
585