~siretart/ubuntu/utopic/libav/libav10

« back to all changes in this revision

Viewing changes to libavcodec/bfin/dsputil_bfin.c

  • Committer: Package Import Robot
  • Author(s): Reinhard Tartler
  • Date: 2014-05-11 12:28:45 UTC
  • mfrom: (1.1.22) (2.1.38 experimental)
  • Revision ID: package-import@ubuntu.com-20140511122845-gxvpts83i958y0i5
Tags: 6:10.1-1
* New upstream release 10:
   - pcm-dvd: Fix 20bit decoding (bug/592)
   - avi: Improve non-interleaved detection (bug/666)
   - arm: hpeldsp: fix put_pixels8_y2_{,no_rnd_}armv6
   - arm: hpeldsp: prevent overreads in armv6 asm (bug/646)
   - avfilter: Add missing emms_c when needed
   - rtmpproto: Check the buffer sizes when copying app/playpath strings
   - swscale: Fix an undefined behaviour
   - vp9: Read the frame size as unsigned
   - dcadec: Use correct channel count in stereo downmix check
   - dcadec: Do not decode the XCh extension when downmixing to stereo
   - matroska: add the Opus mapping
   - matroskadec: read the CodecDelay element
   - rtmpproto: Make sure to pass on the error code if read_connect failed
   - lavr: allocate the resampling buffer with a positive size
   - mp3enc: Properly write bitrate value in XING header (Closes: #736088)
   - golomb: Fix the implementation of get_se_golomb_long
* Drop debian/libav-tools.maintscript. ffserver is no longer found in
  stable, and this seems to cause other problems today (Closes: #742676)

Show diffs side-by-side

added added

removed removed

Lines of Context:
21
21
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22
22
 */
23
23
 
 
24
#include "libavutil/attributes.h"
24
25
#include "libavcodec/avcodec.h"
25
26
#include "libavcodec/dsputil.h"
26
27
#include "dsputil_bfin.h"
27
28
 
28
29
int off;
29
30
 
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)
31
32
{
32
33
    ff_bfin_idct (block);
33
34
    ff_bfin_add_pixels_clamped (block, dest, line_size);
34
35
}
35
36
 
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)
37
38
{
38
39
    ff_bfin_idct (block);
39
40
    ff_bfin_put_pixels_clamped (block, dest, line_size);
40
41
}
41
42
 
42
43
 
43
 
static void bfin_clear_blocks (DCTELEM *blocks)
 
44
static void bfin_clear_blocks (int16_t *blocks)
44
45
{
45
46
    // This is just a simple memset.
46
47
    //
53
54
        ::"a" (blocks):"P0","I0","R0");
54
55
}
55
56
 
56
 
 
57
 
 
58
 
static void bfin_put_pixels8 (uint8_t *block, const uint8_t *pixels, int line_size, int h)
59
 
{
60
 
    ff_bfin_put_pixels8uc (block, pixels, pixels, line_size, line_size, h);
61
 
}
62
 
 
63
 
static void bfin_put_pixels8_x2(uint8_t *block, const uint8_t *pixels, int line_size, int h)
64
 
{
65
 
    ff_bfin_put_pixels8uc (block, pixels, pixels+1, line_size, line_size, h);
66
 
}
67
 
 
68
 
static void bfin_put_pixels8_y2 (uint8_t *block, const uint8_t *pixels, int line_size, int h)
69
 
{
70
 
    ff_bfin_put_pixels8uc (block, pixels, pixels+line_size, line_size, line_size, h);
71
 
}
72
 
 
73
 
static void bfin_put_pixels8_xy2 (uint8_t *block, const uint8_t *s0, int line_size, int h)
74
 
{
75
 
    ff_bfin_z_put_pixels8_xy2 (block,s0,line_size, line_size, h);
76
 
}
77
 
 
78
 
static void bfin_put_pixels16 (uint8_t *block, const uint8_t *pixels, int line_size, int h)
79
 
{
80
 
    ff_bfin_put_pixels16uc (block, pixels, pixels, line_size, line_size, h);
81
 
}
82
 
 
83
 
static void bfin_put_pixels16_x2 (uint8_t *block, const uint8_t *pixels, int line_size, int h)
84
 
{
85
 
    ff_bfin_put_pixels16uc (block, pixels, pixels+1, line_size, line_size, h);
86
 
}
87
 
 
88
 
static void bfin_put_pixels16_y2 (uint8_t *block, const uint8_t *pixels, int line_size, int h)
89
 
{
90
 
    ff_bfin_put_pixels16uc (block, pixels, pixels+line_size, line_size, line_size, h);
91
 
}
92
 
 
93
 
static void bfin_put_pixels16_xy2 (uint8_t *block, const uint8_t *s0, int line_size, int h)
94
 
{
95
 
    ff_bfin_z_put_pixels16_xy2 (block,s0,line_size, line_size, h);
96
 
}
97
 
 
98
 
static void bfin_put_pixels8_nornd (uint8_t *block, const uint8_t *pixels, int line_size, int h)
99
 
{
100
 
    ff_bfin_put_pixels8uc_nornd (block, pixels, pixels, line_size, h);
101
 
}
102
 
 
103
 
static void bfin_put_pixels8_x2_nornd (uint8_t *block, const uint8_t *pixels, int line_size, int h)
104
 
{
105
 
    ff_bfin_put_pixels8uc_nornd (block, pixels, pixels+1, line_size, h);
106
 
}
107
 
 
108
 
static void bfin_put_pixels8_y2_nornd (uint8_t *block, const uint8_t *pixels, int line_size, int h)
109
 
{
110
 
    ff_bfin_put_pixels8uc_nornd (block, pixels, pixels+line_size, line_size, h);
111
 
}
112
 
 
113
 
 
114
 
static void bfin_put_pixels16_nornd (uint8_t *block, const uint8_t *pixels, int line_size, int h)
115
 
{
116
 
    ff_bfin_put_pixels16uc_nornd (block, pixels, pixels, line_size, h);
117
 
}
118
 
 
119
 
static void bfin_put_pixels16_x2_nornd (uint8_t *block, const uint8_t *pixels, int line_size, int h)
120
 
{
121
 
    ff_bfin_put_pixels16uc_nornd (block, pixels, pixels+1, line_size, h);
122
 
}
123
 
 
124
 
static void bfin_put_pixels16_y2_nornd (uint8_t *block, const uint8_t *pixels, int line_size, int h)
125
 
{
126
 
    ff_bfin_put_pixels16uc_nornd (block, pixels, pixels+line_size, line_size, h);
127
 
}
128
 
 
129
57
static int bfin_pix_abs16 (void *c, uint8_t *blk1, uint8_t *blk2, int line_size, int h)
130
58
{
131
59
    return ff_bfin_z_sad16x16 (blk1,blk2,line_size,line_size,h);
195
123
 
196
124
*/
197
125
 
198
 
void ff_dsputil_init_bfin( DSPContext* c, AVCodecContext *avctx )
 
126
av_cold void ff_dsputil_init_bfin(DSPContext *c, AVCodecContext *avctx)
199
127
{
200
128
    const int high_bit_depth = avctx->bits_per_raw_sample > 8;
201
129
 
204
132
    c->add_pixels_clamped = ff_bfin_add_pixels_clamped;
205
133
 
206
134
    if (!high_bit_depth)
207
 
    c->get_pixels         = ff_bfin_get_pixels;
 
135
        c->get_pixels     = ff_bfin_get_pixels;
208
136
    c->clear_blocks       = bfin_clear_blocks;
209
137
    c->pix_sum            = ff_bfin_pix_sum;
210
138
    c->pix_norm1          = ff_bfin_pix_norm1;
231
159
    c->sse[1] = ff_bfin_sse8;
232
160
    c->sse[2] = ff_bfin_sse4;
233
161
 
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;
239
 
 
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;
244
 
 
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; */
249
 
 
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; */
254
 
    }
255
 
 
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;
259
165
 
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;