X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fimc.c;h=07d6cadcfdfd9065ca7aa5d4b0d6ead9ebcb67d7;hb=87cf70eb237e7586cc7399627dafa1b980ec0b7d;hp=ff50d4b59b57106d45176709d62ab8421bb49df3;hpb=7a00bbad2100367481240e62876b941b5c4befdc;p=ffmpeg diff --git a/libavcodec/imc.c b/libavcodec/imc.c index ff50d4b59b5..07d6cadcfdf 100644 --- a/libavcodec/imc.c +++ b/libavcodec/imc.c @@ -4,25 +4,26 @@ * Copyright (c) 2006 Benjamin Larsson * Copyright (c) 2006 Konstantin Shishkov * - * This file is part of FFmpeg. + * This file is part of Libav. * - * FFmpeg is free software; you can redistribute it and/or + * Libav is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * - * FFmpeg is distributed in the hope that it will be useful, + * Libav is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software + * License along with Libav; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** - * @file libavcodec/imc.c IMC - Intel Music Coder + * @file + * IMC - Intel Music Coder * A mdct based codec using a 256 points large transform * divied into 32 bands with some mix of scale factors. * Only mono is supported. @@ -36,8 +37,11 @@ #define ALT_BITSTREAM_READER #include "avcodec.h" -#include "bitstream.h" +#include "get_bits.h" #include "dsputil.h" +#include "fft.h" +#include "libavutil/audioconvert.h" +#include "sinewin.h" #include "imcdata.h" @@ -84,8 +88,8 @@ typedef struct { DSPContext dsp; FFTContext fft; - DECLARE_ALIGNED_16(FFTComplex, samples[COEFFS/2]); - DECLARE_ALIGNED_16(float, out_samples[COEFFS]); + DECLARE_ALIGNED(32, FFTComplex, samples)[COEFFS/2]; + float *out_samples; } IMCContext; static VLC huffman_vlc[4][4]; @@ -114,8 +118,8 @@ static av_cold int imc_decode_init(AVCodecContext * avctx) for(i = 0; i < COEFFS; i++) q->mdct_sine_window[i] *= sqrt(2.0); for(i = 0; i < COEFFS/2; i++){ - q->post_cos[i] = cos(i / 256.0 * M_PI); - q->post_sin[i] = sin(i / 256.0 * M_PI); + q->post_cos[i] = (1.0f / 32768) * cos(i / 256.0 * M_PI); + q->post_sin[i] = (1.0f / 32768) * sin(i / 256.0 * M_PI); r1 = sin((i * 4.0 + 1.0) / 1024.0 * M_PI); r2 = cos((i * 4.0 + 1.0) / 1024.0 * M_PI); @@ -154,8 +158,8 @@ static av_cold int imc_decode_init(AVCodecContext * avctx) ff_fft_init(&q->fft, 7, 1); dsputil_init(&q->dsp, avctx); - avctx->sample_fmt = SAMPLE_FMT_S16; - avctx->channel_layout = (avctx->channels==2) ? CH_LAYOUT_STEREO : CH_LAYOUT_MONO; + avctx->sample_fmt = AV_SAMPLE_FMT_FLT; + avctx->channel_layout = (avctx->channels==2) ? AV_CH_LAYOUT_STEREO : AV_CH_LAYOUT_MONO; return 0; } @@ -360,7 +364,7 @@ static int bit_allocation (IMCContext* q, int stream_format_code, int freebits, iacc = 0; for(j = (stream_format_code & 0x2)?4:0; j < BANDS; j++) { - cwlen = av_clip((int)((q->flcoeffs4[j] * 0.5) - summa + 0.5), 0, 6); + cwlen = av_clipf(((q->flcoeffs4[j] * 0.5) - summa + 0.5), 0, 6); q->bitsBandT[j] = cwlen; summer += q->bandWidthT[j] * cwlen; @@ -561,8 +565,8 @@ static void imc_imdct256(IMCContext *q) { } /* FFT */ - ff_fft_permute(&q->fft, q->samples); - ff_fft_calc (&q->fft, q->samples); + q->fft.fft_permute(&q->fft, q->samples); + q->fft.fft_calc (&q->fft, q->samples); /* postrotation, window and reorder */ for(i = 0; i < COEFFS/2; i++){ @@ -658,8 +662,9 @@ static int imc_decode_frame(AVCodecContext * avctx, return -1; } for(i = 0; i < IMC_BLOCK_SIZE / 2; i++) - buf16[i] = bswap_16(((const uint16_t*)buf)[i]); + buf16[i] = av_bswap16(((const uint16_t*)buf)[i]); + q->out_samples = data; init_get_bits(&q->gb, (const uint8_t*)buf16, IMC_BLOCK_SIZE * 8); /* Check the frame header */ @@ -803,9 +808,7 @@ static int imc_decode_frame(AVCodecContext * avctx, imc_imdct256(q); - q->dsp.float_to_int16(data, q->out_samples, COEFFS); - - *data_size = COEFFS * sizeof(int16_t); + *data_size = COEFFS * sizeof(float); return IMC_BLOCK_SIZE; } @@ -820,9 +823,9 @@ static av_cold int imc_decode_close(AVCodecContext * avctx) } -AVCodec imc_decoder = { +AVCodec ff_imc_decoder = { .name = "imc", - .type = CODEC_TYPE_AUDIO, + .type = AVMEDIA_TYPE_AUDIO, .id = CODEC_ID_IMC, .priv_data_size = sizeof(IMCContext), .init = imc_decode_init,