annotate arm/dsputil_init_arm.c @ 12530:63edd10ad4bc libavcodec tip

Try to fix crashes introduced by r25218 r25218 made assumptions about the existence of past reference frames that weren't necessarily true.
author darkshikari
date Tue, 28 Sep 2010 09:06:22 +0000
parents 9fef0a8ddd63
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
61
fefaa96def6e arm specific code
glantau
parents:
diff changeset
1 /*
8359
9281a8a9387a ARM: replace "armv4l" with "arm"
mru
parents: 8335
diff changeset
2 * ARM optimized DSP utils
8629
04423b2f6e0b cosmetics: Remove pointless period after copyright statement non-sentences.
diego
parents: 8596
diff changeset
3 * Copyright (c) 2001 Lionel Ulmer
61
fefaa96def6e arm specific code
glantau
parents:
diff changeset
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
718a22dc121f license/copyright change
glantau
parents: 61
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
718a22dc121f license/copyright change
glantau
parents: 61
diff changeset
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
fefaa96def6e arm specific code
glantau
parents:
diff changeset
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
fefaa96def6e arm specific code
glantau
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
429
718a22dc121f license/copyright change
glantau
parents: 61
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
718a22dc121f license/copyright change
glantau
parents: 61
diff changeset
15 * Lesser General Public License for more details.
61
fefaa96def6e arm specific code
glantau
parents:
diff changeset
16 *
429
718a22dc121f license/copyright change
glantau
parents: 61
diff changeset
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
fefaa96def6e arm specific code
glantau
parents:
diff changeset
20 */
fefaa96def6e arm specific code
glantau
parents:
diff changeset
21
6763
f7cbb7733146 Use full path for #includes from another directory.
diego
parents: 6760
diff changeset
22 #include "libavcodec/dsputil.h"
10359
48be79afc72d ARM: clean up dsputil initialisation
mru
parents: 10203
diff changeset
23 #include "dsputil_arm.h"
61
fefaa96def6e arm specific code
glantau
parents:
diff changeset
24
10374
a6ff6fb10ff5 ARM: make function names all-lowercase
mru
parents: 10373
diff changeset
25 void ff_j_rev_dct_arm(DCTELEM *data);
a6ff6fb10ff5 ARM: make function names all-lowercase
mru
parents: 10373
diff changeset
26 void ff_simple_idct_arm(DCTELEM *data);
61
fefaa96def6e arm specific code
glantau
parents:
diff changeset
27
1092
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 874
diff changeset
28 /* XXX: local hack */
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 874
diff changeset
29 static void (*ff_put_pixels_clamped)(const DCTELEM *block, uint8_t *pixels, int line_size);
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 874
diff changeset
30 static void (*ff_add_pixels_clamped)(const DCTELEM *block, uint8_t *pixels, int line_size);
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 874
diff changeset
31
10363
08573f5f587d ARM: add ff_ prefix to lots of functions
mru
parents: 10362
diff changeset
32 void ff_put_pixels8_arm(uint8_t *block, const uint8_t *pixels, int line_size, int h);
08573f5f587d ARM: add ff_ prefix to lots of functions
mru
parents: 10362
diff changeset
33 void ff_put_pixels8_x2_arm(uint8_t *block, const uint8_t *pixels, int line_size, int h);
08573f5f587d ARM: add ff_ prefix to lots of functions
mru
parents: 10362
diff changeset
34 void ff_put_pixels8_y2_arm(uint8_t *block, const uint8_t *pixels, int line_size, int h);
08573f5f587d ARM: add ff_ prefix to lots of functions
mru
parents: 10362
diff changeset
35 void ff_put_pixels8_xy2_arm(uint8_t *block, const uint8_t *pixels, int line_size, int h);
2734
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents: 1347
diff changeset
36
10363
08573f5f587d ARM: add ff_ prefix to lots of functions
mru
parents: 10362
diff changeset
37 void ff_put_no_rnd_pixels8_x2_arm(uint8_t *block, const uint8_t *pixels, int line_size, int h);
08573f5f587d ARM: add ff_ prefix to lots of functions
mru
parents: 10362
diff changeset
38 void ff_put_no_rnd_pixels8_y2_arm(uint8_t *block, const uint8_t *pixels, int line_size, int h);
08573f5f587d ARM: add ff_ prefix to lots of functions
mru
parents: 10362
diff changeset
39 void ff_put_no_rnd_pixels8_xy2_arm(uint8_t *block, const uint8_t *pixels, int line_size, int h);
2734
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents: 1347
diff changeset
40
10363
08573f5f587d ARM: add ff_ prefix to lots of functions
mru
parents: 10362
diff changeset
41 void ff_put_pixels16_arm(uint8_t *block, const uint8_t *pixels, int line_size, int h);
2734
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents: 1347
diff changeset
42
10363
08573f5f587d ARM: add ff_ prefix to lots of functions
mru
parents: 10362
diff changeset
43 CALL_2X_PIXELS(ff_put_pixels16_x2_arm, ff_put_pixels8_x2_arm, 8)
08573f5f587d ARM: add ff_ prefix to lots of functions
mru
parents: 10362
diff changeset
44 CALL_2X_PIXELS(ff_put_pixels16_y2_arm, ff_put_pixels8_y2_arm, 8)
08573f5f587d ARM: add ff_ prefix to lots of functions
mru
parents: 10362
diff changeset
45 CALL_2X_PIXELS(ff_put_pixels16_xy2_arm, ff_put_pixels8_xy2_arm, 8)
08573f5f587d ARM: add ff_ prefix to lots of functions
mru
parents: 10362
diff changeset
46 CALL_2X_PIXELS(ff_put_no_rnd_pixels16_x2_arm, ff_put_no_rnd_pixels8_x2_arm, 8)
08573f5f587d ARM: add ff_ prefix to lots of functions
mru
parents: 10362
diff changeset
47 CALL_2X_PIXELS(ff_put_no_rnd_pixels16_y2_arm, ff_put_no_rnd_pixels8_y2_arm, 8)
08573f5f587d ARM: add ff_ prefix to lots of functions
mru
parents: 10362
diff changeset
48 CALL_2X_PIXELS(ff_put_no_rnd_pixels16_xy2_arm, ff_put_no_rnd_pixels8_xy2_arm,8)
2734
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents: 1347
diff changeset
49
10374
a6ff6fb10ff5 ARM: make function names all-lowercase
mru
parents: 10373
diff changeset
50 void ff_add_pixels_clamped_arm(const DCTELEM *block, uint8_t *dest,
10373
9a46f75a47ee ARM: enable ARMv4 add_pixels_clamped
mru
parents: 10363
diff changeset
51 int line_size);
2734
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents: 1347
diff changeset
52
1092
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 874
diff changeset
53 /* XXX: those functions should be suppressed ASAP when all IDCTs are
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 874
diff changeset
54 converted */
10374
a6ff6fb10ff5 ARM: make function names all-lowercase
mru
parents: 10373
diff changeset
55 static void j_rev_dct_arm_put(uint8_t *dest, int line_size, DCTELEM *block)
1092
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 874
diff changeset
56 {
10374
a6ff6fb10ff5 ARM: make function names all-lowercase
mru
parents: 10373
diff changeset
57 ff_j_rev_dct_arm (block);
1092
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 874
diff changeset
58 ff_put_pixels_clamped(block, dest, line_size);
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 874
diff changeset
59 }
10374
a6ff6fb10ff5 ARM: make function names all-lowercase
mru
parents: 10373
diff changeset
60 static void j_rev_dct_arm_add(uint8_t *dest, int line_size, DCTELEM *block)
61
fefaa96def6e arm specific code
glantau
parents:
diff changeset
61 {
10374
a6ff6fb10ff5 ARM: make function names all-lowercase
mru
parents: 10373
diff changeset
62 ff_j_rev_dct_arm (block);
1092
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 874
diff changeset
63 ff_add_pixels_clamped(block, dest, line_size);
61
fefaa96def6e arm specific code
glantau
parents:
diff changeset
64 }
10374
a6ff6fb10ff5 ARM: make function names all-lowercase
mru
parents: 10373
diff changeset
65 static void simple_idct_arm_put(uint8_t *dest, int line_size, DCTELEM *block)
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
66 {
10374
a6ff6fb10ff5 ARM: make function names all-lowercase
mru
parents: 10373
diff changeset
67 ff_simple_idct_arm (block);
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
68 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
69 }
10374
a6ff6fb10ff5 ARM: make function names all-lowercase
mru
parents: 10373
diff changeset
70 static void simple_idct_arm_add(uint8_t *dest, int line_size, DCTELEM *block)
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
71 {
10374
a6ff6fb10ff5 ARM: make function names all-lowercase
mru
parents: 10373
diff changeset
72 ff_simple_idct_arm (block);
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
73 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
74 }
3726
49fb1958d8e1 clean up #ifdef HAVE_IPP
mru
parents: 3036
diff changeset
75
8359
9281a8a9387a ARM: replace "armv4l" with "arm"
mru
parents: 8335
diff changeset
76 void dsputil_init_arm(DSPContext* c, AVCodecContext *avctx)
1092
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 874
diff changeset
77 {
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 874
diff changeset
78 ff_put_pixels_clamped = c->put_pixels_clamped;
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 874
diff changeset
79 ff_add_pixels_clamped = c->add_pixels_clamped;
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 874
diff changeset
80
10362
838b42ccd65e ARM: cosmetics
mru
parents: 10361
diff changeset
81 if (!avctx->lowres) {
10359
48be79afc72d ARM: clean up dsputil initialisation
mru
parents: 10203
diff changeset
82 if(avctx->idct_algo == FF_IDCT_AUTO ||
48be79afc72d ARM: clean up dsputil initialisation
mru
parents: 10203
diff changeset
83 avctx->idct_algo == FF_IDCT_ARM){
10374
a6ff6fb10ff5 ARM: make function names all-lowercase
mru
parents: 10373
diff changeset
84 c->idct_put = j_rev_dct_arm_put;
a6ff6fb10ff5 ARM: make function names all-lowercase
mru
parents: 10373
diff changeset
85 c->idct_add = j_rev_dct_arm_add;
a6ff6fb10ff5 ARM: make function names all-lowercase
mru
parents: 10373
diff changeset
86 c->idct = ff_j_rev_dct_arm;
10362
838b42ccd65e ARM: cosmetics
mru
parents: 10361
diff changeset
87 c->idct_permutation_type = FF_LIBMPEG2_IDCT_PERM;
838b42ccd65e ARM: cosmetics
mru
parents: 10361
diff changeset
88 } else if (avctx->idct_algo == FF_IDCT_SIMPLEARM){
10374
a6ff6fb10ff5 ARM: make function names all-lowercase
mru
parents: 10373
diff changeset
89 c->idct_put = simple_idct_arm_put;
a6ff6fb10ff5 ARM: make function names all-lowercase
mru
parents: 10373
diff changeset
90 c->idct_add = simple_idct_arm_add;
a6ff6fb10ff5 ARM: make function names all-lowercase
mru
parents: 10373
diff changeset
91 c->idct = ff_simple_idct_arm;
10362
838b42ccd65e ARM: cosmetics
mru
parents: 10361
diff changeset
92 c->idct_permutation_type = FF_NO_IDCT_PERM;
6180
a15900739a31 fix indentation that was messed up by r11628
gpoirier
parents: 6179
diff changeset
93 }
6179
bdcb17652343 fix lowres decoding support on ARM CPUs
gpoirier
parents: 5641
diff changeset
94 }
2734
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents: 1347
diff changeset
95
10374
a6ff6fb10ff5 ARM: make function names all-lowercase
mru
parents: 10373
diff changeset
96 c->add_pixels_clamped = ff_add_pixels_clamped_arm;
10373
9a46f75a47ee ARM: enable ARMv4 add_pixels_clamped
mru
parents: 10363
diff changeset
97
10363
08573f5f587d ARM: add ff_ prefix to lots of functions
mru
parents: 10362
diff changeset
98 c->put_pixels_tab[0][0] = ff_put_pixels16_arm;
08573f5f587d ARM: add ff_ prefix to lots of functions
mru
parents: 10362
diff changeset
99 c->put_pixels_tab[0][1] = ff_put_pixels16_x2_arm;
08573f5f587d ARM: add ff_ prefix to lots of functions
mru
parents: 10362
diff changeset
100 c->put_pixels_tab[0][2] = ff_put_pixels16_y2_arm;
08573f5f587d ARM: add ff_ prefix to lots of functions
mru
parents: 10362
diff changeset
101 c->put_pixels_tab[0][3] = ff_put_pixels16_xy2_arm;
08573f5f587d ARM: add ff_ prefix to lots of functions
mru
parents: 10362
diff changeset
102 c->put_pixels_tab[1][0] = ff_put_pixels8_arm;
08573f5f587d ARM: add ff_ prefix to lots of functions
mru
parents: 10362
diff changeset
103 c->put_pixels_tab[1][1] = ff_put_pixels8_x2_arm;
08573f5f587d ARM: add ff_ prefix to lots of functions
mru
parents: 10362
diff changeset
104 c->put_pixels_tab[1][2] = ff_put_pixels8_y2_arm;
08573f5f587d ARM: add ff_ prefix to lots of functions
mru
parents: 10362
diff changeset
105 c->put_pixels_tab[1][3] = ff_put_pixels8_xy2_arm;
10362
838b42ccd65e ARM: cosmetics
mru
parents: 10361
diff changeset
106
10363
08573f5f587d ARM: add ff_ prefix to lots of functions
mru
parents: 10362
diff changeset
107 c->put_no_rnd_pixels_tab[0][0] = ff_put_pixels16_arm;
08573f5f587d ARM: add ff_ prefix to lots of functions
mru
parents: 10362
diff changeset
108 c->put_no_rnd_pixels_tab[0][1] = ff_put_no_rnd_pixels16_x2_arm;
08573f5f587d ARM: add ff_ prefix to lots of functions
mru
parents: 10362
diff changeset
109 c->put_no_rnd_pixels_tab[0][2] = ff_put_no_rnd_pixels16_y2_arm;
08573f5f587d ARM: add ff_ prefix to lots of functions
mru
parents: 10362
diff changeset
110 c->put_no_rnd_pixels_tab[0][3] = ff_put_no_rnd_pixels16_xy2_arm;
08573f5f587d ARM: add ff_ prefix to lots of functions
mru
parents: 10362
diff changeset
111 c->put_no_rnd_pixels_tab[1][0] = ff_put_pixels8_arm;
08573f5f587d ARM: add ff_ prefix to lots of functions
mru
parents: 10362
diff changeset
112 c->put_no_rnd_pixels_tab[1][1] = ff_put_no_rnd_pixels8_x2_arm;
08573f5f587d ARM: add ff_ prefix to lots of functions
mru
parents: 10362
diff changeset
113 c->put_no_rnd_pixels_tab[1][2] = ff_put_no_rnd_pixels8_y2_arm;
08573f5f587d ARM: add ff_ prefix to lots of functions
mru
parents: 10362
diff changeset
114 c->put_no_rnd_pixels_tab[1][3] = ff_put_no_rnd_pixels8_xy2_arm;
2734
aeea63c97878 Better ARM support for mplayer/ffmpeg, ported from atty fork
michael
parents: 1347
diff changeset
115
10359
48be79afc72d ARM: clean up dsputil initialisation
mru
parents: 10203
diff changeset
116 if (HAVE_ARMV5TE) ff_dsputil_init_armv5te(c, avctx);
48be79afc72d ARM: clean up dsputil initialisation
mru
parents: 10203
diff changeset
117 if (HAVE_ARMV6) ff_dsputil_init_armv6(c, avctx);
10363
08573f5f587d ARM: add ff_ prefix to lots of functions
mru
parents: 10362
diff changeset
118 if (HAVE_IWMMXT) ff_dsputil_init_iwmmxt(c, avctx);
10361
a1cc263fba25 ARM: replace some #if with if()
mru
parents: 10360
diff changeset
119 if (HAVE_ARMVFP) ff_dsputil_init_vfp(c, avctx);
a1cc263fba25 ARM: replace some #if with if()
mru
parents: 10360
diff changeset
120 if (HAVE_NEON) ff_dsputil_init_neon(c, avctx);
1092
f59c3f66363b MpegEncContext.(i)dct_* -> DspContext.(i)dct_*
michaelni
parents: 874
diff changeset
121 }