~ubuntu-branches/ubuntu/hardy/vlc/hardy-security

« back to all changes in this revision

Viewing changes to extras/x264/common/i386/mc-c.c

  • Committer: Bazaar Package Importer
  • Author(s): Mario Limonciello, Mario Limonciello, Martin Hamrle
  • Date: 2008-03-25 20:08:07 UTC
  • mfrom: (1.1.14 upstream)
  • Revision ID: james.westby@ubuntu.com-20080325200807-64amsvla1tnnen5s
Tags: 0.8.6.release.e+x264svn20071224+faad2.6.1-0ubuntu1
[ Mario Limonciello ]
* New upstream version. (LP: #206918)
  - New versioning scheme to bring attention to the fact that
    faad and x264 are in the .orig.tar.gz.
  - Fixes 6 CVEs (LP: #196452)
    + CVE: 2007-6681
    + CVE: 2007-6682
    + CVE: 2007-6683
    + CVE: 2008-0295
    + CVE: 2008-0296
* Drop 021_CVE-2008-0984 as it's included upstream.
* debian/rules:
  - Adjust items touched for faad2 when building.
  - Apply all faad2 patches when building
* debian/control:
  - Add dpatch, libfaad-dev, and autotools-dev to build-depends to allow 
    faad2 to build again.
  - Add automake, cvs, and libtool to build depends (now needed for building VLC)

[ Martin Hamrle ]
 * Add new package with pulse output plugin (LP: #196417)
   - debian/patches/030_pulse.diff:
     + patch from upstream trunk to support pulseaudio output
   - debian/rules:
     + enable pulseaudio
   - debian/control:
     + add dependencies to libpulse-dev
     + new package description
   - Creates a NEW binary package, requiring FFe (LP: #204050)

Show diffs side-by-side

added added

removed removed

Lines of Context:
28
28
#include "common/common.h"
29
29
 
30
30
/* NASM functions */
31
 
extern void x264_pixel_avg_w4_mmxext( uint8_t *,  int, uint8_t *, int, uint8_t *, int, int );
32
 
extern void x264_pixel_avg_w8_mmxext( uint8_t *,  int, uint8_t *, int, uint8_t *, int, int );
33
 
extern void x264_pixel_avg_w16_mmxext( uint8_t *,  int, uint8_t *, int, uint8_t *, int, int );
34
 
extern void x264_pixel_avg_w20_mmxext( uint8_t *,  int, uint8_t *, int, uint8_t *, int, int );
35
 
extern void x264_pixel_avg_w16_sse2( uint8_t *,  int, uint8_t *, int, uint8_t *, int, int );
 
31
extern void x264_pixel_avg_16x16_mmxext( uint8_t *, int, uint8_t *, int );
 
32
extern void x264_pixel_avg_16x8_mmxext( uint8_t *, int, uint8_t *, int );
 
33
extern void x264_pixel_avg_8x16_mmxext( uint8_t *, int, uint8_t *, int );
 
34
extern void x264_pixel_avg_8x8_mmxext( uint8_t *, int, uint8_t *, int );
 
35
extern void x264_pixel_avg_8x4_mmxext( uint8_t *, int, uint8_t *, int );
 
36
extern void x264_pixel_avg_4x8_mmxext( uint8_t *, int, uint8_t *, int );
 
37
extern void x264_pixel_avg_4x4_mmxext( uint8_t *, int, uint8_t *, int );
 
38
extern void x264_pixel_avg_4x2_mmxext( uint8_t *, int, uint8_t *, int );
 
39
extern void x264_pixel_avg2_w4_mmxext( uint8_t *, int, uint8_t *, int, uint8_t *, int );
 
40
extern void x264_pixel_avg2_w8_mmxext( uint8_t *, int, uint8_t *, int, uint8_t *, int );
 
41
extern void x264_pixel_avg2_w16_mmxext( uint8_t *, int, uint8_t *, int, uint8_t *, int );
 
42
extern void x264_pixel_avg2_w20_mmxext( uint8_t *, int, uint8_t *, int, uint8_t *, int );
36
43
extern void x264_pixel_avg_weight_4x4_mmxext( uint8_t *, int, uint8_t *, int, int );
37
44
extern void x264_pixel_avg_weight_w8_mmxext( uint8_t *, int, uint8_t *, int, int, int );
38
45
extern void x264_pixel_avg_weight_w16_mmxext( uint8_t *, int, uint8_t *, int, int, int );
43
50
extern void x264_plane_copy_mmxext( uint8_t *, int, uint8_t *, int, int w, int h);
44
51
extern void x264_prefetch_fenc_mmxext( uint8_t *, int, uint8_t *, int, int );
45
52
extern void x264_prefetch_ref_mmxext( uint8_t *, int, int );
46
 
 
47
 
#define AVG(W,H) \
48
 
static void x264_pixel_avg_ ## W ## x ## H ## _mmxext( uint8_t *dst, int i_dst, uint8_t *src, int i_src ) \
49
 
{ \
50
 
    x264_pixel_avg_w ## W ## _mmxext( dst, i_dst, dst, i_dst, src, i_src, H ); \
51
 
}
52
 
AVG(16,16)
53
 
AVG(16,8)
54
 
AVG(8,16)
55
 
AVG(8,8)
56
 
AVG(8,4)
57
 
AVG(4,8)
58
 
AVG(4,4)
59
 
AVG(4,2)
 
53
extern void x264_hpel_filter_mmxext( uint8_t *dsth, uint8_t *dstv, uint8_t *dstc, uint8_t *src,
 
54
                                     int i_stride, int i_width, int i_height );
60
55
 
61
56
#define AVG_WEIGHT(W,H) \
62
57
void x264_pixel_avg_weight_ ## W ## x ## H ## _mmxext( uint8_t *dst, int i_dst, uint8_t *src, int i_src, int i_weight_dst ) \
69
64
AVG_WEIGHT(8,8)
70
65
AVG_WEIGHT(8,4)
71
66
 
72
 
static void (* const x264_pixel_avg_wtab_mmxext[6])( uint8_t *, int, uint8_t *, int, uint8_t *, int, int ) =
 
67
static void (* const x264_pixel_avg_wtab_mmxext[6])( uint8_t *, int, uint8_t *, int, uint8_t *, int ) =
73
68
{
74
69
    NULL,
75
 
    x264_pixel_avg_w4_mmxext,
76
 
    x264_pixel_avg_w8_mmxext,
77
 
    x264_pixel_avg_w16_mmxext,
78
 
    x264_pixel_avg_w16_mmxext,
79
 
    x264_pixel_avg_w20_mmxext,
 
70
    x264_pixel_avg2_w4_mmxext,
 
71
    x264_pixel_avg2_w8_mmxext,
 
72
    x264_pixel_avg2_w16_mmxext,
 
73
    x264_pixel_avg2_w16_mmxext,
 
74
    x264_pixel_avg2_w20_mmxext,
80
75
};
81
76
static void (* const x264_mc_copy_wtab_mmx[5])( uint8_t *, int, uint8_t *, int, int ) =
82
77
{
89
84
static const int hpel_ref0[16] = {0,1,1,1,0,1,1,1,2,3,3,3,0,1,1,1};
90
85
static const int hpel_ref1[16] = {0,0,0,0,2,2,3,2,2,2,3,2,2,2,3,2};
91
86
 
92
 
void mc_luma_mmx( uint8_t *src[4], int i_src_stride,
93
 
                  uint8_t *dst,    int i_dst_stride,
 
87
void mc_luma_mmx( uint8_t *dst,    int i_dst_stride,
 
88
                  uint8_t *src[4], int i_src_stride,
94
89
                  int mvx, int mvy,
95
90
                  int i_width, int i_height )
96
91
{
103
98
        uint8_t *src2 = src[hpel_ref1[qpel_idx]] + offset + ((mvx&3) == 3);
104
99
        x264_pixel_avg_wtab_mmxext[i_width>>2](
105
100
                dst, i_dst_stride, src1, i_src_stride,
106
 
                src2, i_src_stride, i_height );
 
101
                src2, i_height );
107
102
    }
108
103
    else
109
104
    {
112
107
    }
113
108
}
114
109
 
115
 
uint8_t *get_ref_mmx( uint8_t *src[4], int i_src_stride,
116
 
                      uint8_t *dst,   int *i_dst_stride,
 
110
uint8_t *get_ref_mmx( uint8_t *dst,   int *i_dst_stride,
 
111
                      uint8_t *src[4], int i_src_stride,
117
112
                      int mvx, int mvy,
118
113
                      int i_width, int i_height )
119
114
{
126
121
        uint8_t *src2 = src[hpel_ref1[qpel_idx]] + offset + ((mvx&3) == 3);
127
122
        x264_pixel_avg_wtab_mmxext[i_width>>2](
128
123
                dst, *i_dst_stride, src1, i_src_stride,
129
 
                src2, i_src_stride, i_height );
 
124
                src2, i_height );
130
125
        return dst;
131
126
    }
132
127
    else
139
134
 
140
135
void x264_mc_mmxext_init( x264_mc_functions_t *pf )
141
136
{
142
 
    pf->mc_luma   = mc_luma_mmx;
143
 
    pf->get_ref   = get_ref_mmx;
 
137
    pf->mc_luma = mc_luma_mmx;
 
138
    pf->get_ref = get_ref_mmx;
144
139
 
145
140
    pf->avg[PIXEL_16x16] = x264_pixel_avg_16x16_mmxext;
146
141
    pf->avg[PIXEL_16x8]  = x264_pixel_avg_16x8_mmxext;
164
159
    pf->copy[PIXEL_4x4]   = x264_mc_copy_w4_mmx;
165
160
 
166
161
    pf->plane_copy = x264_plane_copy_mmxext;
 
162
    pf->hpel_filter = x264_hpel_filter_mmxext;
167
163
 
168
164
    pf->prefetch_fenc = x264_prefetch_fenc_mmxext;
169
165
    pf->prefetch_ref  = x264_prefetch_ref_mmxext;
171
167
void x264_mc_sse2_init( x264_mc_functions_t *pf )
172
168
{
173
169
    /* todo: use sse2 */
174
 
    pf->mc_luma   = mc_luma_mmx;
175
 
    pf->get_ref   = get_ref_mmx;
176
170
}