Mercurial > libavcodec.hg
annotate armv4l/dsputil_arm.c @ 3990:746a60ba3177 libavcodec
enable CMOV_IS_FAST as its faster or equal speed on every cpu (duron, athlon, PM, P3) from which ive seen benchmarks, it might be slower on P4 but noone has posted benchmarks ...
author | michael |
---|---|
date | Wed, 11 Oct 2006 12:23:40 +0000 |
parents | c8c591fe26f8 |
children | 765df9cbb2b3 |
rev | line source |
---|---|
61 | 1 /* |
2 * ARMv4L optimized DSP utils | |
3 * Copyright (c) 2001 Lionel Ulmer. | |
4 * | |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3769
diff
changeset
|
5 * This file is part of FFmpeg. |
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3769
diff
changeset
|
6 * |
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3769
diff
changeset
|
7 * FFmpeg is free software; you can redistribute it and/or |
429 | 8 * modify it under the terms of the GNU Lesser General Public |
9 * License as published by the Free Software Foundation; either | |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3769
diff
changeset
|
10 * version 2.1 of the License, or (at your option) any later version. |
61 | 11 * |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3769
diff
changeset
|
12 * FFmpeg is distributed in the hope that it will be useful, |
61 | 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
429 | 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
15 * Lesser General Public License for more details. | |
61 | 16 * |
429 | 17 * You should have received a copy of the GNU Lesser General Public |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3769
diff
changeset
|
18 * License along with FFmpeg; if not, write to the Free Software |
3036
0b546eab515d
Update licensing information: The FSF changed postal address.
diego
parents:
2979
diff
changeset
|
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
61 | 20 */ |
21 | |
22 #include "../dsputil.h" | |
2734
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
23 #ifdef HAVE_IPP |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
24 #include "ipp.h" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
25 #endif |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
26 |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
27 extern void dsputil_init_iwmmxt(DSPContext* c, AVCodecContext *avctx); |
61 | 28 |
29 extern void j_rev_dct_ARM(DCTELEM *data); | |
1347
cca26199ab17
Optimized simple idct for arm by Frederic 'dilb' Boulay <dilb@handhelds.org>. Currently licensed under the GPLv2, but the author allowed to license it under the LGPL, feel free to change
al3x
parents:
1324
diff
changeset
|
30 extern void simple_idct_ARM(DCTELEM *data); |
61 | 31 |
3769 | 32 extern void simple_idct_armv5te(DCTELEM *data); |
33 extern void simple_idct_put_armv5te(uint8_t *dest, int line_size, | |
34 DCTELEM *data); | |
35 extern void simple_idct_add_armv5te(uint8_t *dest, int line_size, | |
36 DCTELEM *data); | |
37 | |
1092 | 38 /* XXX: local hack */ |
39 static void (*ff_put_pixels_clamped)(const DCTELEM *block, uint8_t *pixels, int line_size); | |
40 static void (*ff_add_pixels_clamped)(const DCTELEM *block, uint8_t *pixels, int line_size); | |
41 | |
2734
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
42 void put_pixels8_arm(uint8_t *block, const uint8_t *pixels, int line_size, int h); |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
43 void put_pixels8_x2_arm(uint8_t *block, const uint8_t *pixels, int line_size, int h); |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
44 void put_pixels8_y2_arm(uint8_t *block, const uint8_t *pixels, int line_size, int h); |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
45 void put_pixels8_xy2_arm(uint8_t *block, const uint8_t *pixels, int line_size, int h); |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
46 |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
47 void put_no_rnd_pixels8_x2_arm(uint8_t *block, const uint8_t *pixels, int line_size, int h); |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
48 void put_no_rnd_pixels8_y2_arm(uint8_t *block, const uint8_t *pixels, int line_size, int h); |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
49 void put_no_rnd_pixels8_xy2_arm(uint8_t *block, const uint8_t *pixels, int line_size, int h); |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
50 |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
51 void put_pixels16_arm(uint8_t *block, const uint8_t *pixels, int line_size, int h); |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
52 |
2735 | 53 CALL_2X_PIXELS(put_pixels16_x2_arm , put_pixels8_x2_arm , 8) |
54 CALL_2X_PIXELS(put_pixels16_y2_arm , put_pixels8_y2_arm , 8) | |
55 CALL_2X_PIXELS(put_pixels16_xy2_arm, put_pixels8_xy2_arm, 8) | |
56 CALL_2X_PIXELS(put_no_rnd_pixels16_x2_arm , put_no_rnd_pixels8_x2_arm , 8) | |
57 CALL_2X_PIXELS(put_no_rnd_pixels16_y2_arm , put_no_rnd_pixels8_y2_arm , 8) | |
58 CALL_2X_PIXELS(put_no_rnd_pixels16_xy2_arm, put_no_rnd_pixels8_xy2_arm, 8) | |
2734
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
59 |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
60 static void add_pixels_clamped_ARM(short *block, unsigned char *dest, int line_size) |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
61 { |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
62 asm volatile ( |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
63 "mov r10, #8 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
64 |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
65 "1: \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
66 |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
67 /* load dest */ |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
68 "ldr r4, [%1] \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
69 /* block[0] and block[1]*/ |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
70 "ldrsh r5, [%0] \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
71 "ldrsh r7, [%0, #2] \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
72 "and r6, r4, #0xFF \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
73 "and r8, r4, #0xFF00 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
74 "add r6, r5, r6 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
75 "add r8, r7, r8, lsr #8 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
76 "mvn r5, r5 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
77 "mvn r7, r7 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
78 "tst r6, #0x100 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
79 "movne r6, r5, lsr #24 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
80 "tst r8, #0x100 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
81 "movne r8, r7, lsr #24 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
82 "mov r9, r6 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
83 "ldrsh r5, [%0, #4] \n\t" /* moved form [A] */ |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
84 "orr r9, r9, r8, lsl #8 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
85 /* block[2] and block[3] */ |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
86 /* [A] */ |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
87 "ldrsh r7, [%0, #6] \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
88 "and r6, r4, #0xFF0000 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
89 "and r8, r4, #0xFF000000 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
90 "add r6, r5, r6, lsr #16 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
91 "add r8, r7, r8, lsr #24 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
92 "mvn r5, r5 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
93 "mvn r7, r7 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
94 "tst r6, #0x100 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
95 "movne r6, r5, lsr #24 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
96 "tst r8, #0x100 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
97 "movne r8, r7, lsr #24 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
98 "orr r9, r9, r6, lsl #16 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
99 "ldr r4, [%1, #4] \n\t" /* moved form [B] */ |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
100 "orr r9, r9, r8, lsl #24 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
101 /* store dest */ |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
102 "ldrsh r5, [%0, #8] \n\t" /* moved form [C] */ |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
103 "str r9, [%1] \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
104 |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
105 /* load dest */ |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
106 /* [B] */ |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
107 /* block[4] and block[5] */ |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
108 /* [C] */ |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
109 "ldrsh r7, [%0, #10] \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
110 "and r6, r4, #0xFF \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
111 "and r8, r4, #0xFF00 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
112 "add r6, r5, r6 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
113 "add r8, r7, r8, lsr #8 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
114 "mvn r5, r5 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
115 "mvn r7, r7 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
116 "tst r6, #0x100 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
117 "movne r6, r5, lsr #24 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
118 "tst r8, #0x100 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
119 "movne r8, r7, lsr #24 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
120 "mov r9, r6 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
121 "ldrsh r5, [%0, #12] \n\t" /* moved from [D] */ |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
122 "orr r9, r9, r8, lsl #8 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
123 /* block[6] and block[7] */ |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
124 /* [D] */ |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
125 "ldrsh r7, [%0, #14] \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
126 "and r6, r4, #0xFF0000 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
127 "and r8, r4, #0xFF000000 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
128 "add r6, r5, r6, lsr #16 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
129 "add r8, r7, r8, lsr #24 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
130 "mvn r5, r5 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
131 "mvn r7, r7 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
132 "tst r6, #0x100 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
133 "movne r6, r5, lsr #24 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
134 "tst r8, #0x100 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
135 "movne r8, r7, lsr #24 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
136 "orr r9, r9, r6, lsl #16 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
137 "add %0, %0, #16 \n\t" /* moved from [E] */ |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
138 "orr r9, r9, r8, lsl #24 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
139 "subs r10, r10, #1 \n\t" /* moved from [F] */ |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
140 /* store dest */ |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
141 "str r9, [%1, #4] \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
142 |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
143 /* [E] */ |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
144 /* [F] */ |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
145 "add %1, %1, %2 \n\t" |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
146 "bne 1b \n\t" |
2735 | 147 : "+r"(block), |
148 "+r"(dest) | |
149 : "r"(line_size) | |
2734
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
150 : "r4", "r5", "r6", "r7", "r8", "r9", "r10", "cc", "memory" ); |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
151 } |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
152 |
1092 | 153 /* XXX: those functions should be suppressed ASAP when all IDCTs are |
154 converted */ | |
1347
cca26199ab17
Optimized simple idct for arm by Frederic 'dilb' Boulay <dilb@handhelds.org>. Currently licensed under the GPLv2, but the author allowed to license it under the LGPL, feel free to change
al3x
parents:
1324
diff
changeset
|
155 static void j_rev_dct_ARM_put(uint8_t *dest, int line_size, DCTELEM *block) |
1092 | 156 { |
157 j_rev_dct_ARM (block); | |
158 ff_put_pixels_clamped(block, dest, line_size); | |
159 } | |
1347
cca26199ab17
Optimized simple idct for arm by Frederic 'dilb' Boulay <dilb@handhelds.org>. Currently licensed under the GPLv2, but the author allowed to license it under the LGPL, feel free to change
al3x
parents:
1324
diff
changeset
|
160 static void j_rev_dct_ARM_add(uint8_t *dest, int line_size, DCTELEM *block) |
61 | 161 { |
1092 | 162 j_rev_dct_ARM (block); |
163 ff_add_pixels_clamped(block, dest, line_size); | |
61 | 164 } |
1347
cca26199ab17
Optimized simple idct for arm by Frederic 'dilb' Boulay <dilb@handhelds.org>. Currently licensed under the GPLv2, but the author allowed to license it under the LGPL, feel free to change
al3x
parents:
1324
diff
changeset
|
165 static void simple_idct_ARM_put(uint8_t *dest, int line_size, DCTELEM *block) |
cca26199ab17
Optimized simple idct for arm by Frederic 'dilb' Boulay <dilb@handhelds.org>. Currently licensed under the GPLv2, but the author allowed to license it under the LGPL, feel free to change
al3x
parents:
1324
diff
changeset
|
166 { |
cca26199ab17
Optimized simple idct for arm by Frederic 'dilb' Boulay <dilb@handhelds.org>. Currently licensed under the GPLv2, but the author allowed to license it under the LGPL, feel free to change
al3x
parents:
1324
diff
changeset
|
167 simple_idct_ARM (block); |
cca26199ab17
Optimized simple idct for arm by Frederic 'dilb' Boulay <dilb@handhelds.org>. Currently licensed under the GPLv2, but the author allowed to license it under the LGPL, feel free to change
al3x
parents:
1324
diff
changeset
|
168 ff_put_pixels_clamped(block, dest, line_size); |
cca26199ab17
Optimized simple idct for arm by Frederic 'dilb' Boulay <dilb@handhelds.org>. Currently licensed under the GPLv2, but the author allowed to license it under the LGPL, feel free to change
al3x
parents:
1324
diff
changeset
|
169 } |
cca26199ab17
Optimized simple idct for arm by Frederic 'dilb' Boulay <dilb@handhelds.org>. Currently licensed under the GPLv2, but the author allowed to license it under the LGPL, feel free to change
al3x
parents:
1324
diff
changeset
|
170 static void simple_idct_ARM_add(uint8_t *dest, int line_size, DCTELEM *block) |
cca26199ab17
Optimized simple idct for arm by Frederic 'dilb' Boulay <dilb@handhelds.org>. Currently licensed under the GPLv2, but the author allowed to license it under the LGPL, feel free to change
al3x
parents:
1324
diff
changeset
|
171 { |
cca26199ab17
Optimized simple idct for arm by Frederic 'dilb' Boulay <dilb@handhelds.org>. Currently licensed under the GPLv2, but the author allowed to license it under the LGPL, feel free to change
al3x
parents:
1324
diff
changeset
|
172 simple_idct_ARM (block); |
cca26199ab17
Optimized simple idct for arm by Frederic 'dilb' Boulay <dilb@handhelds.org>. Currently licensed under the GPLv2, but the author allowed to license it under the LGPL, feel free to change
al3x
parents:
1324
diff
changeset
|
173 ff_add_pixels_clamped(block, dest, line_size); |
cca26199ab17
Optimized simple idct for arm by Frederic 'dilb' Boulay <dilb@handhelds.org>. Currently licensed under the GPLv2, but the author allowed to license it under the LGPL, feel free to change
al3x
parents:
1324
diff
changeset
|
174 } |
3726 | 175 |
176 #ifdef HAVE_IPP | |
2734
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
177 static void simple_idct_ipp(DCTELEM *block) |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
178 { |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
179 ippiDCT8x8Inv_Video_16s_C1I(block); |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
180 } |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
181 static void simple_idct_ipp_put(uint8_t *dest, int line_size, DCTELEM *block) |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
182 { |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
183 ippiDCT8x8Inv_Video_16s8u_C1R(block, dest, line_size); |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
184 } |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
185 |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
186 void add_pixels_clamped_iwmmxt(const DCTELEM *block, uint8_t *pixels, int line_size); |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
187 |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
188 static void simple_idct_ipp_add(uint8_t *dest, int line_size, DCTELEM *block) |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
189 { |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
190 ippiDCT8x8Inv_Video_16s_C1I(block); |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
191 #ifdef HAVE_IWMMXT |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
192 add_pixels_clamped_iwmmxt(block, dest, line_size); |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
193 #else |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
194 add_pixels_clamped_ARM(block, dest, line_size); |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
195 #endif |
3726 | 196 } |
2734
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
197 #endif |
1092 | 198 |
199 void dsputil_init_armv4l(DSPContext* c, AVCodecContext *avctx) | |
200 { | |
3726 | 201 int idct_algo= avctx->idct_algo; |
1092 | 202 |
203 ff_put_pixels_clamped = c->put_pixels_clamped; | |
204 ff_add_pixels_clamped = c->add_pixels_clamped; | |
205 | |
3726 | 206 if(idct_algo == FF_IDCT_AUTO){ |
3769 | 207 #if defined(HAVE_IPP) |
3726 | 208 idct_algo = FF_IDCT_IPP; |
3769 | 209 #elif defined(HAVE_ARMV5TE) |
210 idct_algo = FF_IDCT_SIMPLEARMV5TE; | |
2734
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
211 #else |
3726 | 212 idct_algo = FF_IDCT_ARM; |
2734
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
213 #endif |
3726 | 214 } |
215 | |
216 if(idct_algo==FF_IDCT_ARM){ | |
1347
cca26199ab17
Optimized simple idct for arm by Frederic 'dilb' Boulay <dilb@handhelds.org>. Currently licensed under the GPLv2, but the author allowed to license it under the LGPL, feel free to change
al3x
parents:
1324
diff
changeset
|
217 c->idct_put= j_rev_dct_ARM_put; |
cca26199ab17
Optimized simple idct for arm by Frederic 'dilb' Boulay <dilb@handhelds.org>. Currently licensed under the GPLv2, but the author allowed to license it under the LGPL, feel free to change
al3x
parents:
1324
diff
changeset
|
218 c->idct_add= j_rev_dct_ARM_add; |
2979 | 219 c->idct = j_rev_dct_ARM; |
1092 | 220 c->idct_permutation_type= FF_LIBMPEG2_IDCT_PERM;/* FF_NO_IDCT_PERM */ |
1347
cca26199ab17
Optimized simple idct for arm by Frederic 'dilb' Boulay <dilb@handhelds.org>. Currently licensed under the GPLv2, but the author allowed to license it under the LGPL, feel free to change
al3x
parents:
1324
diff
changeset
|
221 } else if (idct_algo==FF_IDCT_SIMPLEARM){ |
2979 | 222 c->idct_put= simple_idct_ARM_put; |
223 c->idct_add= simple_idct_ARM_add; | |
224 c->idct = simple_idct_ARM; | |
225 c->idct_permutation_type= FF_NO_IDCT_PERM; | |
3769 | 226 #ifdef HAVE_ARMV5TE |
227 } else if (idct_algo==FF_IDCT_SIMPLEARMV5TE){ | |
228 c->idct_put= simple_idct_put_armv5te; | |
229 c->idct_add= simple_idct_add_armv5te; | |
230 c->idct = simple_idct_armv5te; | |
231 c->idct_permutation_type = FF_NO_IDCT_PERM; | |
232 #endif | |
2734
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
233 #ifdef HAVE_IPP |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
234 } else if (idct_algo==FF_IDCT_IPP){ |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
235 c->idct_put= simple_idct_ipp_put; |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
236 c->idct_add= simple_idct_ipp_add; |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
237 c->idct = simple_idct_ipp; |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
238 c->idct_permutation_type= FF_NO_IDCT_PERM; |
3726 | 239 #endif |
1092 | 240 } |
2734
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
241 |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
242 /* c->put_pixels_tab[0][0] = put_pixels16_arm; */ // NG! |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
243 c->put_pixels_tab[0][1] = put_pixels16_x2_arm; //OK! |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
244 c->put_pixels_tab[0][2] = put_pixels16_y2_arm; //OK! |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
245 /* c->put_pixels_tab[0][3] = put_pixels16_xy2_arm; /\* NG *\/ */ |
3727 | 246 /* c->put_no_rnd_pixels_tab[0][0] = put_pixels16_arm; */ |
2734
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
247 c->put_no_rnd_pixels_tab[0][1] = put_no_rnd_pixels16_x2_arm; // OK |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
248 c->put_no_rnd_pixels_tab[0][2] = put_no_rnd_pixels16_y2_arm; //OK |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
249 /* c->put_no_rnd_pixels_tab[0][3] = put_no_rnd_pixels16_xy2_arm; //NG */ |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
250 c->put_pixels_tab[1][0] = put_pixels8_arm; //OK |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
251 c->put_pixels_tab[1][1] = put_pixels8_x2_arm; //OK |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
252 /* c->put_pixels_tab[1][2] = put_pixels8_y2_arm; //NG */ |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
253 /* c->put_pixels_tab[1][3] = put_pixels8_xy2_arm; //NG */ |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
254 c->put_no_rnd_pixels_tab[1][0] = put_pixels8_arm;//OK |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
255 c->put_no_rnd_pixels_tab[1][1] = put_no_rnd_pixels8_x2_arm; //OK |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
256 c->put_no_rnd_pixels_tab[1][2] = put_no_rnd_pixels8_y2_arm; //OK |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
257 /* c->put_no_rnd_pixels_tab[1][3] = put_no_rnd_pixels8_xy2_arm;//NG */ |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
258 |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
259 #ifdef HAVE_IWMMXT |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
260 dsputil_init_iwmmxt(c, avctx); |
aeea63c97878
Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents:
1347
diff
changeset
|
261 #endif |
1092 | 262 } |