~medibuntu-maintainers/mplayer/medibuntu.precise

« back to all changes in this revision

Viewing changes to ffmpeg/libavcodec/dct.c

  • Committer: Gauvain Pocentek
  • Date: 2012-03-06 11:59:12 UTC
  • mfrom: (66.1.15 precise)
  • Revision ID: gauvain@pocentek.net-20120306115912-h9d6kt9j0l532oo5
* Merge from Ubuntu:
  - put back faac support
  - recommends apport-hooks-medibuntu
  - change Maintainer, Uploaders & Vcs-* fields.
* New upstream snapshot
* upload to unstable
* Build against external libmpeg2
* drop 51_FTBFS_arm.patch again
* no longer build depend on libcdparanoia-dev on the Hurd
* Fix FTBFS on the hurd.
  Thanks to Samuel Thibault <sthibault@debian.org> (Closes: #654974)
* Fix FTBFS on arm
* New upstream snapshot, Closes: #650339, #643621, #481807
* Imported Upstream version 1.0~rc4+svn34492
* Bump standards version
* Bump dependency on libav >= 4:0.8~, Closes: #653887
* Fix build-indep
* Build mplayer-gui again, Closes: #568514
* Drop debian/all-lang-config-mak.sh, no longer needed
* include .dfsg1 in version number
* remove get-orig-source target
* no longer prune compiler flags from the environment
* No longer advertise nor build 3fdx, mga and dxr3 backends,
  Closes: #496106, #442181, #533546
* beautify mplayer version identification string
* Brown paperbag upload.
* Next try to fix build failure on sparce after recent binutils change.
* Brown paperbag upload.
* Really fix build failure on sparc after recent binutils change.
* Properly set Replaces/Conflicts on mplayer2{,-dbg} to avoid
  file overwrite errors.
* Adjust versioning of mplayer listed in the mplayer-dbg's Depends field.
* Fix build failure on sparc after recent binutils change.
* Urgency medium bumped because of RC-level bugfix
  and speeding up x264 transition.
* Update to my @debian.org email.
* Upload to unstable
* Enable joystick support on Linux only, Closes: #638408
* Rebuild fixes toolchain issue on arm, Closes: #637077
* New upstream snapshot
* following the discussion started by Diego Biurrun <diego@biurrun.de>
  in debian-devel, I have prepared a new packaging of 'mplayer'
  (with code that comes from CVS)
* the upstream tar.bz cannot be distributed by Debian, since it contains
   CSS code; so I am repackaging it 
* I have tried my best to address all known issues:
  - the package contains the detailed Copyright made by Diego Biurrun 
  - the package does not contain CSS code, or  AFAIK other code on which 
     there is active patent enforcement
  - there is a script  debian/cvs-changelog.sh  that shows all changes
     done to files included in this source.
    This should comply with GPLv2 sec 2.a  (in spirit if not in letter)
    For this reason, the source code contains CVS directories.
* needs   make (>= 3.80) for 'html-chunked-$(1)' in DOCS/xml/Makefile

* some corrections, as suggested Diego Biurrun
  - binary codecs should go into /usr/lib/codecs (upstream default)
  - better template 'mplayer/install_codecs'
  - an empty 'font=' in mplayer.conf breaks mplayer: postinst corrected
* correction in 'mplayer/cfgnote'
* better mplayer.postinst and mplayer.config

* New upstream release
* better debian/copyright file
* do not ship a skin
* New upstream release
* changed DEB_BUILD_OPTIONS to DEB_BUILD_CONFIGURE ,
  DEB_BUILD_OPTIONS is used as in debian policy
* use gcc-3.4
* changed xlibs-dev to a long list of dependencies, for Debian/etch
* try to adhere to  http://www.mplayerhq.hu/DOCS/tech/binary-packaging.txt
  (see README.Debian for details)
* removed dependency on xlibmesa-dev, disabled opengl
* New upstream release
* Simon McVittie <hacks@pseudorandom.co.uk> wonderful work:
- Work around Debian bug #267442 (glibc's sys/uio.h and gcc's altivec.h have
  conflicting uses for __vector) by re-ordering #includes
- Fix potential symlink attack in ./configure
- Disable support for binary codecs on platforms for which those codecs
  aren't available; also disable the corresponding Debconf note when it's
  inappropriate
- Changed Build-Depends: so it works in pbuilder
- Explicitly build-depend on libjpeg62-dev, libfontconfig1-dev,
  libungif4-dev 
- Tweak debian/rules to avoid certain errors being ignored
- Use --language=all
* provide a target  'debian/rules get-orig-source' 
  that recreates the orig.tar.gz ; then use the above orig.tar.gz
* rewrote some parts of debian/rules
* don't clean and recompile docs if upstream ships them
* mplayer-doc was shipping too much stuff
* translated man pages where not installed properly
* compile with libdv4-dev
* correct README.Debian
* Forgot build-dep on libtheora
* Must not depend on libxvidcore
* New upstream release
* new release.
* rc1 to become 0.90
* new pre-release
* new pre-release
* gtk bug fixed.
* new release.
* version bumped
* 0.60 pre2 release
* 0.60 pre-release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
28
28
 */
29
29
 
30
30
#include <math.h>
 
31
 
31
32
#include "libavutil/mathematics.h"
32
33
#include "dct.h"
33
34
#include "dct32.h"
34
35
 
35
 
/* sin((M_PI * x / (2*n)) */
36
 
#define SIN(s,n,x) (s->costab[(n) - (x)])
 
36
/* sin((M_PI * x / (2 * n)) */
 
37
#define SIN(s, n, x) (s->costab[(n) - (x)])
37
38
 
38
 
/* cos((M_PI * x / (2*n)) */
39
 
#define COS(s,n,x) (s->costab[x])
 
39
/* cos((M_PI * x / (2 * n)) */
 
40
#define COS(s, n, x) (s->costab[x])
40
41
 
41
42
static void ff_dst_calc_I_c(DCTContext *ctx, FFTSample *data)
42
43
{
44
45
    int i;
45
46
 
46
47
    data[0] = 0;
47
 
    for(i = 1; i < n/2; i++) {
48
 
        float tmp1 = data[i    ];
49
 
        float tmp2 = data[n - i];
50
 
        float s = SIN(ctx, n, 2*i);
 
48
    for (i = 1; i < n / 2; i++) {
 
49
        float tmp1   = data[i    ];
 
50
        float tmp2   = data[n - i];
 
51
        float s      = SIN(ctx, n, 2 * i);
51
52
 
52
 
        s *= tmp1 + tmp2;
53
 
        tmp1 = (tmp1 - tmp2) * 0.5f;
54
 
        data[i    ] = s + tmp1;
55
 
        data[n - i] = s - tmp1;
 
53
        s           *= tmp1 + tmp2;
 
54
        tmp1         = (tmp1 - tmp2) * 0.5f;
 
55
        data[i]      = s + tmp1;
 
56
        data[n - i]  = s - tmp1;
56
57
    }
57
58
 
58
 
    data[n/2] *= 2;
 
59
    data[n / 2] *= 2;
59
60
    ctx->rdft.rdft_calc(&ctx->rdft, data);
60
61
 
61
62
    data[0] *= 0.5f;
62
63
 
63
 
    for(i = 1; i < n-2; i += 2) {
64
 
        data[i + 1] += data[i - 1];
65
 
        data[i    ] = -data[i + 2];
 
64
    for (i = 1; i < n - 2; i += 2) {
 
65
        data[i + 1] +=  data[i - 1];
 
66
        data[i]      = -data[i + 2];
66
67
    }
67
68
 
68
 
    data[n-1] = 0;
 
69
    data[n - 1] = 0;
69
70
}
70
71
 
71
72
static void ff_dct_calc_I_c(DCTContext *ctx, FFTSample *data)
74
75
    int i;
75
76
    float next = -0.5f * (data[0] - data[n]);
76
77
 
77
 
    for(i = 0; i < n/2; i++) {
78
 
        float tmp1 = data[i    ];
 
78
    for (i = 0; i < n / 2; i++) {
 
79
        float tmp1 = data[i];
79
80
        float tmp2 = data[n - i];
80
 
        float s = SIN(ctx, n, 2*i);
81
 
        float c = COS(ctx, n, 2*i);
 
81
        float s    = SIN(ctx, n, 2 * i);
 
82
        float c    = COS(ctx, n, 2 * i);
82
83
 
83
84
        c *= tmp1 - tmp2;
84
85
        s *= tmp1 - tmp2;
85
86
 
86
87
        next += c;
87
88
 
88
 
        tmp1 = (tmp1 + tmp2) * 0.5f;
89
 
        data[i    ] = tmp1 - s;
 
89
        tmp1        = (tmp1 + tmp2) * 0.5f;
 
90
        data[i]     = tmp1 - s;
90
91
        data[n - i] = tmp1 + s;
91
92
    }
92
93
 
94
95
    data[n] = data[1];
95
96
    data[1] = next;
96
97
 
97
 
    for(i = 3; i <= n; i += 2)
 
98
    for (i = 3; i <= n; i += 2)
98
99
        data[i] = data[i - 2] - data[i];
99
100
}
100
101
 
103
104
    int n = 1 << ctx->nbits;
104
105
    int i;
105
106
 
106
 
    float next = data[n - 1];
 
107
    float next  = data[n - 1];
107
108
    float inv_n = 1.0f / n;
108
109
 
109
110
    for (i = n - 2; i >= 2; i -= 2) {
110
 
        float val1 = data[i    ];
 
111
        float val1 = data[i];
111
112
        float val2 = data[i - 1] - data[i + 1];
112
 
        float c = COS(ctx, n, i);
113
 
        float s = SIN(ctx, n, i);
 
113
        float c    = COS(ctx, n, i);
 
114
        float s    = SIN(ctx, n, i);
114
115
 
115
 
        data[i    ] = c * val1 + s * val2;
 
116
        data[i]     = c * val1 + s * val2;
116
117
        data[i + 1] = s * val1 - c * val2;
117
118
    }
118
119
 
121
122
    ctx->rdft.rdft_calc(&ctx->rdft, data);
122
123
 
123
124
    for (i = 0; i < n / 2; i++) {
124
 
        float tmp1 = data[i        ] * inv_n;
 
125
        float tmp1 = data[i]         * inv_n;
125
126
        float tmp2 = data[n - i - 1] * inv_n;
126
 
        float csc = ctx->csc2[i] * (tmp1 - tmp2);
 
127
        float csc  = ctx->csc2[i] * (tmp1 - tmp2);
127
128
 
128
 
        tmp1 += tmp2;
129
 
        data[i        ] = tmp1 + csc;
130
 
        data[n - i - 1] = tmp1 - csc;
 
129
        tmp1            += tmp2;
 
130
        data[i]          = tmp1 + csc;
 
131
        data[n - i - 1]  = tmp1 - csc;
131
132
    }
132
133
}
133
134
 
137
138
    int i;
138
139
    float next;
139
140
 
140
 
    for (i=0; i < n/2; i++) {
141
 
        float tmp1 = data[i        ];
 
141
    for (i = 0; i < n / 2; i++) {
 
142
        float tmp1 = data[i];
142
143
        float tmp2 = data[n - i - 1];
143
 
        float s = SIN(ctx, n, 2*i + 1);
144
 
 
145
 
        s *= tmp1 - tmp2;
146
 
        tmp1 = (tmp1 + tmp2) * 0.5f;
147
 
 
148
 
        data[i    ] = tmp1 + s;
 
144
        float s    = SIN(ctx, n, 2 * i + 1);
 
145
 
 
146
        s    *= tmp1 - tmp2;
 
147
        tmp1  = (tmp1 + tmp2) * 0.5f;
 
148
 
 
149
        data[i]     = tmp1 + s;
149
150
        data[n-i-1] = tmp1 - s;
150
151
    }
151
152
 
152
153
    ctx->rdft.rdft_calc(&ctx->rdft, data);
153
154
 
154
 
    next = data[1] * 0.5;
 
155
    next     = data[1] * 0.5;
155
156
    data[1] *= -1;
156
157
 
157
158
    for (i = n - 2; i >= 0; i -= 2) {
158
159
        float inr = data[i    ];
159
160
        float ini = data[i + 1];
160
 
        float c = COS(ctx, n, i);
161
 
        float s = SIN(ctx, n, i);
162
 
 
163
 
        data[i  ] = c * inr + s * ini;
164
 
 
165
 
        data[i+1] = next;
166
 
 
167
 
        next +=     s * inr - c * ini;
 
161
        float c   = COS(ctx, n, i);
 
162
        float s   = SIN(ctx, n, i);
 
163
 
 
164
        data[i]     = c * inr + s * ini;
 
165
        data[i + 1] = next;
 
166
 
 
167
        next += s * inr - c * ini;
168
168
    }
169
169
}
170
170
 
180
180
 
181
181
    memset(s, 0, sizeof(*s));
182
182
 
183
 
    s->nbits    = nbits;
184
 
    s->inverse  = inverse;
 
183
    s->nbits   = nbits;
 
184
    s->inverse = inverse;
185
185
 
186
186
    if (inverse == DCT_II && nbits == 5) {
187
187
        s->dct_calc = dct32_func;
188
188
    } else {
189
 
        ff_init_ff_cos_tabs(nbits+2);
190
 
 
191
 
        s->costab = ff_cos_tabs[nbits+2];
192
 
 
193
 
        s->csc2 = av_malloc(n/2 * sizeof(FFTSample));
 
189
        ff_init_ff_cos_tabs(nbits + 2);
 
190
 
 
191
        s->costab = ff_cos_tabs[nbits + 2];
 
192
        s->csc2   = av_malloc(n / 2 * sizeof(FFTSample));
194
193
 
195
194
        if (ff_rdft_init(&s->rdft, nbits, inverse == DCT_III) < 0) {
196
195
            av_free(s->csc2);
197
196
            return -1;
198
197
        }
199
198
 
200
 
        for (i = 0; i < n/2; i++)
201
 
            s->csc2[i] = 0.5 / sin((M_PI / (2*n) * (2*i + 1)));
 
199
        for (i = 0; i < n / 2; i++)
 
200
            s->csc2[i] = 0.5 / sin((M_PI / (2 * n) * (2 * i + 1)));
202
201
 
203
 
        switch(inverse) {
204
 
        case DCT_I  : s->dct_calc = ff_dct_calc_I_c; break;
205
 
        case DCT_II : s->dct_calc = ff_dct_calc_II_c ; break;
 
202
        switch (inverse) {
 
203
        case DCT_I  : s->dct_calc = ff_dct_calc_I_c;   break;
 
204
        case DCT_II : s->dct_calc = ff_dct_calc_II_c;  break;
206
205
        case DCT_III: s->dct_calc = ff_dct_calc_III_c; break;
207
 
        case DST_I  : s->dct_calc = ff_dst_calc_I_c; break;
 
206
        case DST_I  : s->dct_calc = ff_dst_calc_I_c;   break;
208
207
        }
209
208
    }
210
209
 
211
210
    s->dct32 = ff_dct32_float;
212
 
    if (HAVE_MMX)     ff_dct_init_mmx(s);
 
211
    if (HAVE_MMX)
 
212
        ff_dct_init_mmx(s);
213
213
 
214
214
    return 0;
215
215
}