diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2012-01-04 01:12:34 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-01-04 01:12:34 +0100 |
commit | ad1c8dd6734f0aa7a7a87b4669a166715c114b46 (patch) | |
tree | c03c08f30bf1a7e8d9859abc48de3391bb05c6a0 /libavcodec/dct.c | |
parent | d6da16dca5a64ed7ab2db54710a0c703f179d3ba (diff) | |
parent | fd16f567987524a769d5d4f1f69089f000386ac2 (diff) | |
download | ffmpeg-ad1c8dd6734f0aa7a7a87b4669a166715c114b46.tar.gz |
Merge remote-tracking branch 'qatar/master'
* qatar/master:
fate: add dxtory test
adx_parser: rewrite.
adxdec: Validate channel count to fix a division by zero.
adxdec: Do not require extradata.
cmdutils: K&R reformatting cosmetics
alacdec: implement the 2-pass prediction type.
alacenc: implement the 2-pass prediction type.
alacenc: do not generate invalid multi-channel ALAC files
alacdec: fill in missing or guessed info about the extradata format.
utvideo: proper median prediction for interlaced videos
lavu: bump lavu minor for av_popcount64
dca: K&R formatting cosmetics
dct: K&R formatting cosmetics
lavf: flush decoders in avformat_find_stream_info().
win32: detect number of CPUs using affinity
Add av_popcount64
snow: Restore three mistakenly removed casts.
Conflicts:
cmdutils.c
doc/APIchanges
libavcodec/adx_parser.c
libavcodec/adxdec.c
libavcodec/alacenc.c
libavutil/avutil.h
tests/fate/screen.mak
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/dct.c')
-rw-r--r-- | libavcodec/dct.c | 122 |
1 files changed, 61 insertions, 61 deletions
diff --git a/libavcodec/dct.c b/libavcodec/dct.c index c30cff664e..4800e13b36 100644 --- a/libavcodec/dct.c +++ b/libavcodec/dct.c @@ -28,15 +28,16 @@ */ #include <math.h> + #include "libavutil/mathematics.h" #include "dct.h" #include "dct32.h" -/* sin((M_PI * x / (2*n)) */ -#define SIN(s,n,x) (s->costab[(n) - (x)]) +/* sin((M_PI * x / (2 * n)) */ +#define SIN(s, n, x) (s->costab[(n) - (x)]) -/* cos((M_PI * x / (2*n)) */ -#define COS(s,n,x) (s->costab[x]) +/* cos((M_PI * x / (2 * n)) */ +#define COS(s, n, x) (s->costab[x]) static void ff_dst_calc_I_c(DCTContext *ctx, FFTSample *data) { @@ -44,28 +45,28 @@ static void ff_dst_calc_I_c(DCTContext *ctx, FFTSample *data) int i; data[0] = 0; - for(i = 1; i < n/2; i++) { - float tmp1 = data[i ]; - float tmp2 = data[n - i]; - float s = SIN(ctx, n, 2*i); - - s *= tmp1 + tmp2; - tmp1 = (tmp1 - tmp2) * 0.5f; - data[i ] = s + tmp1; - data[n - i] = s - tmp1; + for (i = 1; i < n / 2; i++) { + float tmp1 = data[i ]; + float tmp2 = data[n - i]; + float s = SIN(ctx, n, 2 * i); + + s *= tmp1 + tmp2; + tmp1 = (tmp1 - tmp2) * 0.5f; + data[i] = s + tmp1; + data[n - i] = s - tmp1; } - data[n/2] *= 2; + data[n / 2] *= 2; ctx->rdft.rdft_calc(&ctx->rdft, data); data[0] *= 0.5f; - for(i = 1; i < n-2; i += 2) { - data[i + 1] += data[i - 1]; - data[i ] = -data[i + 2]; + for (i = 1; i < n - 2; i += 2) { + data[i + 1] += data[i - 1]; + data[i] = -data[i + 2]; } - data[n-1] = 0; + data[n - 1] = 0; } static void ff_dct_calc_I_c(DCTContext *ctx, FFTSample *data) @@ -74,19 +75,19 @@ static void ff_dct_calc_I_c(DCTContext *ctx, FFTSample *data) int i; float next = -0.5f * (data[0] - data[n]); - for(i = 0; i < n/2; i++) { - float tmp1 = data[i ]; + for (i = 0; i < n / 2; i++) { + float tmp1 = data[i]; float tmp2 = data[n - i]; - float s = SIN(ctx, n, 2*i); - float c = COS(ctx, n, 2*i); + float s = SIN(ctx, n, 2 * i); + float c = COS(ctx, n, 2 * i); c *= tmp1 - tmp2; s *= tmp1 - tmp2; next += c; - tmp1 = (tmp1 + tmp2) * 0.5f; - data[i ] = tmp1 - s; + tmp1 = (tmp1 + tmp2) * 0.5f; + data[i] = tmp1 - s; data[n - i] = tmp1 + s; } @@ -94,7 +95,7 @@ static void ff_dct_calc_I_c(DCTContext *ctx, FFTSample *data) data[n] = data[1]; data[1] = next; - for(i = 3; i <= n; i += 2) + for (i = 3; i <= n; i += 2) data[i] = data[i - 2] - data[i]; } @@ -103,16 +104,16 @@ static void ff_dct_calc_III_c(DCTContext *ctx, FFTSample *data) int n = 1 << ctx->nbits; int i; - float next = data[n - 1]; + float next = data[n - 1]; float inv_n = 1.0f / n; for (i = n - 2; i >= 2; i -= 2) { - float val1 = data[i ]; + float val1 = data[i]; float val2 = data[i - 1] - data[i + 1]; - float c = COS(ctx, n, i); - float s = SIN(ctx, n, i); + float c = COS(ctx, n, i); + float s = SIN(ctx, n, i); - data[i ] = c * val1 + s * val2; + data[i] = c * val1 + s * val2; data[i + 1] = s * val1 - c * val2; } @@ -121,13 +122,13 @@ static void ff_dct_calc_III_c(DCTContext *ctx, FFTSample *data) ctx->rdft.rdft_calc(&ctx->rdft, data); for (i = 0; i < n / 2; i++) { - float tmp1 = data[i ] * inv_n; + float tmp1 = data[i] * inv_n; float tmp2 = data[n - i - 1] * inv_n; - float csc = ctx->csc2[i] * (tmp1 - tmp2); + float csc = ctx->csc2[i] * (tmp1 - tmp2); - tmp1 += tmp2; - data[i ] = tmp1 + csc; - data[n - i - 1] = tmp1 - csc; + tmp1 += tmp2; + data[i] = tmp1 + csc; + data[n - i - 1] = tmp1 - csc; } } @@ -137,34 +138,33 @@ static void ff_dct_calc_II_c(DCTContext *ctx, FFTSample *data) int i; float next; - for (i=0; i < n/2; i++) { - float tmp1 = data[i ]; + for (i = 0; i < n / 2; i++) { + float tmp1 = data[i]; float tmp2 = data[n - i - 1]; - float s = SIN(ctx, n, 2*i + 1); + float s = SIN(ctx, n, 2 * i + 1); - s *= tmp1 - tmp2; - tmp1 = (tmp1 + tmp2) * 0.5f; + s *= tmp1 - tmp2; + tmp1 = (tmp1 + tmp2) * 0.5f; - data[i ] = tmp1 + s; + data[i] = tmp1 + s; data[n-i-1] = tmp1 - s; } ctx->rdft.rdft_calc(&ctx->rdft, data); - next = data[1] * 0.5; + next = data[1] * 0.5; data[1] *= -1; for (i = n - 2; i >= 0; i -= 2) { float inr = data[i ]; float ini = data[i + 1]; - float c = COS(ctx, n, i); - float s = SIN(ctx, n, i); + float c = COS(ctx, n, i); + float s = SIN(ctx, n, i); - data[i ] = c * inr + s * ini; + data[i] = c * inr + s * ini; + data[i + 1] = next; - data[i+1] = next; - - next += s * inr - c * ini; + next += s * inr - c * ini; } } @@ -180,36 +180,36 @@ av_cold int ff_dct_init(DCTContext *s, int nbits, enum DCTTransformType inverse) memset(s, 0, sizeof(*s)); - s->nbits = nbits; - s->inverse = inverse; + s->nbits = nbits; + s->inverse = inverse; if (inverse == DCT_II && nbits == 5) { s->dct_calc = dct32_func; } else { - ff_init_ff_cos_tabs(nbits+2); - - s->costab = ff_cos_tabs[nbits+2]; + ff_init_ff_cos_tabs(nbits + 2); - s->csc2 = av_malloc(n/2 * sizeof(FFTSample)); + s->costab = ff_cos_tabs[nbits + 2]; + s->csc2 = av_malloc(n / 2 * sizeof(FFTSample)); if (ff_rdft_init(&s->rdft, nbits, inverse == DCT_III) < 0) { av_free(s->csc2); return -1; } - for (i = 0; i < n/2; i++) - s->csc2[i] = 0.5 / sin((M_PI / (2*n) * (2*i + 1))); + for (i = 0; i < n / 2; i++) + s->csc2[i] = 0.5 / sin((M_PI / (2 * n) * (2 * i + 1))); - switch(inverse) { - case DCT_I : s->dct_calc = ff_dct_calc_I_c; break; - case DCT_II : s->dct_calc = ff_dct_calc_II_c ; break; + switch (inverse) { + case DCT_I : s->dct_calc = ff_dct_calc_I_c; break; + case DCT_II : s->dct_calc = ff_dct_calc_II_c; break; case DCT_III: s->dct_calc = ff_dct_calc_III_c; break; - case DST_I : s->dct_calc = ff_dst_calc_I_c; break; + case DST_I : s->dct_calc = ff_dst_calc_I_c; break; } } s->dct32 = ff_dct32_float; - if (HAVE_MMX) ff_dct_init_mmx(s); + if (HAVE_MMX) + ff_dct_init_mmx(s); return 0; } |