|
yading@10
|
1 /*
|
|
yading@10
|
2 * Copyright (C) 2007 Marc Hoffman <marc.hoffman@analog.com>
|
|
yading@10
|
3 *
|
|
yading@10
|
4 * This file is part of FFmpeg.
|
|
yading@10
|
5 *
|
|
yading@10
|
6 * FFmpeg is free software; you can redistribute it and/or
|
|
yading@10
|
7 * modify it under the terms of the GNU Lesser General Public
|
|
yading@10
|
8 * License as published by the Free Software Foundation; either
|
|
yading@10
|
9 * version 2.1 of the License, or (at your option) any later version.
|
|
yading@10
|
10 *
|
|
yading@10
|
11 * FFmpeg is distributed in the hope that it will be useful,
|
|
yading@10
|
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
yading@10
|
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
yading@10
|
14 * Lesser General Public License for more details.
|
|
yading@10
|
15 *
|
|
yading@10
|
16 * You should have received a copy of the GNU Lesser General Public
|
|
yading@10
|
17 * License along with FFmpeg; if not, write to the Free Software
|
|
yading@10
|
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
yading@10
|
19 */
|
|
yading@10
|
20
|
|
yading@10
|
21 #include <string.h>
|
|
yading@10
|
22
|
|
yading@10
|
23 #include "libavutil/attributes.h"
|
|
yading@10
|
24 #include "libavcodec/avcodec.h"
|
|
yading@10
|
25 #include "libavcodec/vp3dsp.h"
|
|
yading@10
|
26 #include "libavcodec/dsputil.h"
|
|
yading@10
|
27 #include "dsputil_bfin.h"
|
|
yading@10
|
28 #include "vp3_bfin.h"
|
|
yading@10
|
29
|
|
yading@10
|
30 /* Intra iDCT offset 128 */
|
|
yading@10
|
31 static void bfin_vp3_idct_put(uint8_t *dest, int line_size, int16_t *block)
|
|
yading@10
|
32 {
|
|
yading@10
|
33 const uint8_t *cm = ff_cropTbl + MAX_NEG_CROP + 128;
|
|
yading@10
|
34 int i,j;
|
|
yading@10
|
35
|
|
yading@10
|
36 ff_bfin_vp3_idct (block);
|
|
yading@10
|
37
|
|
yading@10
|
38 for (i=0;i<8;i++)
|
|
yading@10
|
39 for (j=0;j<8;j++)
|
|
yading@10
|
40 dest[line_size*i + j] = cm[block[j*8 + i]];
|
|
yading@10
|
41
|
|
yading@10
|
42 memset(block, 0, 128);
|
|
yading@10
|
43 }
|
|
yading@10
|
44
|
|
yading@10
|
45 /* Inter iDCT */
|
|
yading@10
|
46 static void bfin_vp3_idct_add(uint8_t *dest, int line_size, int16_t *block)
|
|
yading@10
|
47 {
|
|
yading@10
|
48 const uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;
|
|
yading@10
|
49 int i, j;
|
|
yading@10
|
50
|
|
yading@10
|
51 ff_bfin_vp3_idct (block);
|
|
yading@10
|
52 for (i = 0; i < 8; i++)
|
|
yading@10
|
53 for (j = 0; j < 8; j++)
|
|
yading@10
|
54 dest[line_size*i + j] = cm[dest[line_size*i + j] + block[j*8 + i]];
|
|
yading@10
|
55
|
|
yading@10
|
56 memset(block, 0, 128);
|
|
yading@10
|
57 }
|
|
yading@10
|
58
|
|
yading@10
|
59 av_cold void ff_vp3dsp_init_bfin(VP3DSPContext *c, int flags)
|
|
yading@10
|
60 {
|
|
yading@10
|
61 if (!(flags & CODEC_FLAG_BITEXACT)) {
|
|
yading@10
|
62 c->idct_add = bfin_vp3_idct_add;
|
|
yading@10
|
63 c->idct_put = bfin_vp3_idct_put;
|
|
yading@10
|
64 }
|
|
yading@10
|
65 }
|