21
21
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24
#include "libavutil/attributes.h"
24
25
#include "libavcodec/avcodec.h"
25
26
#include "libavcodec/dsputil.h"
26
27
#include "dsputil_bfin.h"
30
static void bfin_idct_add (uint8_t *dest, int line_size, DCTELEM *block)
31
static void bfin_idct_add (uint8_t *dest, int line_size, int16_t *block)
32
33
ff_bfin_idct (block);
33
34
ff_bfin_add_pixels_clamped (block, dest, line_size);
36
static void bfin_idct_put (uint8_t *dest, int line_size, DCTELEM *block)
37
static void bfin_idct_put (uint8_t *dest, int line_size, int16_t *block)
38
39
ff_bfin_idct (block);
39
40
ff_bfin_put_pixels_clamped (block, dest, line_size);
43
static void bfin_clear_blocks (DCTELEM *blocks)
44
static void bfin_clear_blocks (int16_t *blocks)
45
46
// This is just a simple memset.
53
54
::"a" (blocks):"P0","I0","R0");
58
static void bfin_put_pixels8 (uint8_t *block, const uint8_t *pixels, int line_size, int h)
60
ff_bfin_put_pixels8uc (block, pixels, pixels, line_size, line_size, h);
63
static void bfin_put_pixels8_x2(uint8_t *block, const uint8_t *pixels, int line_size, int h)
65
ff_bfin_put_pixels8uc (block, pixels, pixels+1, line_size, line_size, h);
68
static void bfin_put_pixels8_y2 (uint8_t *block, const uint8_t *pixels, int line_size, int h)
70
ff_bfin_put_pixels8uc (block, pixels, pixels+line_size, line_size, line_size, h);
73
static void bfin_put_pixels8_xy2 (uint8_t *block, const uint8_t *s0, int line_size, int h)
75
ff_bfin_z_put_pixels8_xy2 (block,s0,line_size, line_size, h);
78
static void bfin_put_pixels16 (uint8_t *block, const uint8_t *pixels, int line_size, int h)
80
ff_bfin_put_pixels16uc (block, pixels, pixels, line_size, line_size, h);
83
static void bfin_put_pixels16_x2 (uint8_t *block, const uint8_t *pixels, int line_size, int h)
85
ff_bfin_put_pixels16uc (block, pixels, pixels+1, line_size, line_size, h);
88
static void bfin_put_pixels16_y2 (uint8_t *block, const uint8_t *pixels, int line_size, int h)
90
ff_bfin_put_pixels16uc (block, pixels, pixels+line_size, line_size, line_size, h);
93
static void bfin_put_pixels16_xy2 (uint8_t *block, const uint8_t *s0, int line_size, int h)
95
ff_bfin_z_put_pixels16_xy2 (block,s0,line_size, line_size, h);
98
static void bfin_put_pixels8_nornd (uint8_t *block, const uint8_t *pixels, int line_size, int h)
100
ff_bfin_put_pixels8uc_nornd (block, pixels, pixels, line_size, h);
103
static void bfin_put_pixels8_x2_nornd (uint8_t *block, const uint8_t *pixels, int line_size, int h)
105
ff_bfin_put_pixels8uc_nornd (block, pixels, pixels+1, line_size, h);
108
static void bfin_put_pixels8_y2_nornd (uint8_t *block, const uint8_t *pixels, int line_size, int h)
110
ff_bfin_put_pixels8uc_nornd (block, pixels, pixels+line_size, line_size, h);
114
static void bfin_put_pixels16_nornd (uint8_t *block, const uint8_t *pixels, int line_size, int h)
116
ff_bfin_put_pixels16uc_nornd (block, pixels, pixels, line_size, h);
119
static void bfin_put_pixels16_x2_nornd (uint8_t *block, const uint8_t *pixels, int line_size, int h)
121
ff_bfin_put_pixels16uc_nornd (block, pixels, pixels+1, line_size, h);
124
static void bfin_put_pixels16_y2_nornd (uint8_t *block, const uint8_t *pixels, int line_size, int h)
126
ff_bfin_put_pixels16uc_nornd (block, pixels, pixels+line_size, line_size, h);
129
57
static int bfin_pix_abs16 (void *c, uint8_t *blk1, uint8_t *blk2, int line_size, int h)
131
59
return ff_bfin_z_sad16x16 (blk1,blk2,line_size,line_size,h);
231
159
c->sse[1] = ff_bfin_sse8;
232
160
c->sse[2] = ff_bfin_sse4;
234
if (!high_bit_depth) {
235
c->put_pixels_tab[0][0] = bfin_put_pixels16;
236
c->put_pixels_tab[0][1] = bfin_put_pixels16_x2;
237
c->put_pixels_tab[0][2] = bfin_put_pixels16_y2;
238
c->put_pixels_tab[0][3] = bfin_put_pixels16_xy2;
240
c->put_pixels_tab[1][0] = bfin_put_pixels8;
241
c->put_pixels_tab[1][1] = bfin_put_pixels8_x2;
242
c->put_pixels_tab[1][2] = bfin_put_pixels8_y2;
243
c->put_pixels_tab[1][3] = bfin_put_pixels8_xy2;
245
c->put_no_rnd_pixels_tab[1][0] = bfin_put_pixels8_nornd;
246
c->put_no_rnd_pixels_tab[1][1] = bfin_put_pixels8_x2_nornd;
247
c->put_no_rnd_pixels_tab[1][2] = bfin_put_pixels8_y2_nornd;
248
/* c->put_no_rnd_pixels_tab[1][3] = ff_bfin_put_pixels8_xy2_nornd; */
250
c->put_no_rnd_pixels_tab[0][0] = bfin_put_pixels16_nornd;
251
c->put_no_rnd_pixels_tab[0][1] = bfin_put_pixels16_x2_nornd;
252
c->put_no_rnd_pixels_tab[0][2] = bfin_put_pixels16_y2_nornd;
253
/* c->put_no_rnd_pixels_tab[0][3] = ff_bfin_put_pixels16_xy2_nornd; */
256
162
if (avctx->bits_per_raw_sample <= 8) {
257
163
if (avctx->dct_algo == FF_DCT_AUTO)
258
164
c->fdct = ff_bfin_fdct;
260
if (avctx->idct_algo == FF_IDCT_VP3) {
261
c->idct_permutation_type = FF_NO_IDCT_PERM;
262
c->idct = ff_bfin_vp3_idct;
263
c->idct_add = ff_bfin_vp3_idct_add;
264
c->idct_put = ff_bfin_vp3_idct_put;
265
} else if (avctx->idct_algo == FF_IDCT_AUTO) {
166
if (avctx->idct_algo == FF_IDCT_AUTO) {
266
167
c->idct_permutation_type = FF_NO_IDCT_PERM;
267
168
c->idct = ff_bfin_idct;
268
169
c->idct_add = bfin_idct_add;