[FFmpeg-devel] [HOWTO] Building FFmpeg for iPhone

Måns Rullgård mans
Thu Oct 8 13:03:57 CEST 2009


David Conrad <lessen42 at gmail.com> writes:

> On Oct 7, 2009, at 10:07 AM, Jason Millard wrote:
>
>> --arch=arm --extra-cflags='-arch armv6' --extra-ldflags='-arch armv6'
>> Thanks. that did the trick. With my tests, mp3 decoding is fine, but
>> aac
>> decoding is mostly static -- (almost like the volume is amplified)
>
> Reproduced, it's because the aac and dca decoders check for the C
> version of float_to_int16 but use float_to_int16_interleave, which
> doesn't have a VFP version.
>
> Patch attached
>
>
> commit 2f891fb5b0097b000303e0ee4d085a492dbc7fed
> Author: David Conrad <lessen42 at gmail.com>
> Date:   Thu Oct 8 06:50:21 2009 -0400
>
>     dca and aac decoders use float_to_int16_interleave, so check for
>     the C version of that rather than float_to_int16.
>     Fixes output on ARM/VFP
>
> diff --git a/libavcodec/aac.c b/libavcodec/aac.c
> index 2dc7960..68a007b 100644
> --- a/libavcodec/aac.c
> +++ b/libavcodec/aac.c
> @@ -527,7 +527,7 @@ static av_cold int aac_decode_init(AVCodecContext *avccontext)
>      // 32768 - Required to scale values to the correct range for the bias method
>      //         for float to int16 conversion.
>
> -    if (ac->dsp.float_to_int16 == ff_float_to_int16_c) {
> +    if (ac->dsp.float_to_int16_interleave == ff_float_to_int16_interleave_c) {
>          ac->add_bias  = 385.0f;
>          ac->sf_scale  = 1. / (-1024. * 32768.);
>          ac->sf_offset = 0;
> diff --git a/libavcodec/dca.c b/libavcodec/dca.c
> index b68e547..e411c36 100644
> --- a/libavcodec/dca.c
> +++ b/libavcodec/dca.c
> @@ -1324,7 +1324,7 @@ static av_cold int dca_decode_init(AVCodecContext * avctx)
>          s->samples_chanptr[i] = s->samples + i * 256;
>      avctx->sample_fmt = SAMPLE_FMT_S16;
>
> -    if(s->dsp.float_to_int16 == ff_float_to_int16_c) {
> +    if(s->dsp.float_to_int16_interleave == ff_float_to_int16_interleave_c) {
>          s->add_bias = 385.0f;
>          s->scale_bias = 1.0 / 32768.0;
>      } else {

The idea of checking those functions like that is dreadful, but this
doesn't make it any worse, and it does fix a bug.  I say apply.

-- 
M?ns Rullg?rd
mans at mansr.com



More information about the ffmpeg-devel mailing list