diff options
author | Alex Converse <aconverse@google.com> | 2011-04-10 23:42:29 -0700 |
---|---|---|
committer | Alex Converse <alex.converse@gmail.com> | 2011-04-11 21:47:53 -0700 |
commit | 2f072b55a49eb56b1bcffdda344f21d09981430b (patch) | |
tree | e88a09c3b91be0e290090266047a47bd3c04f184 | |
parent | 187a537904ef2193a4b5e0312349f95223ff8610 (diff) | |
download | ffmpeg-2f072b55a49eb56b1bcffdda344f21d09981430b.tar.gz |
Fix the conversion of AV_SAMPLE_FMT_FLT and _DBL to AV_SAMPLE_FMT_S32.
(1<<31) is undefined and seems to be evaluated by gcc to -2^31 when
these formulae require 2^31.
These conversions still need fate tests.
-rw-r--r-- | libavcodec/audioconvert.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/libavcodec/audioconvert.c b/libavcodec/audioconvert.c index c5977b6efb..4bea30848f 100644 --- a/libavcodec/audioconvert.c +++ b/libavcodec/audioconvert.c @@ -145,8 +145,8 @@ if(ctx->fmt_pair == ofmt + AV_SAMPLE_FMT_NB*ifmt){\ else CONV(AV_SAMPLE_FMT_U8 , uint8_t, AV_SAMPLE_FMT_S32, (*(const int32_t*)pi>>24) + 0x80) else CONV(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_S32, *(const int32_t*)pi>>16) else CONV(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_S32, *(const int32_t*)pi) - else CONV(AV_SAMPLE_FMT_FLT, float , AV_SAMPLE_FMT_S32, *(const int32_t*)pi*(1.0 / (1<<31))) - else CONV(AV_SAMPLE_FMT_DBL, double , AV_SAMPLE_FMT_S32, *(const int32_t*)pi*(1.0 / (1<<31))) + else CONV(AV_SAMPLE_FMT_FLT, float , AV_SAMPLE_FMT_S32, *(const int32_t*)pi*(1.0 / (1U<<31))) + else CONV(AV_SAMPLE_FMT_DBL, double , AV_SAMPLE_FMT_S32, *(const int32_t*)pi*(1.0 / (1U<<31))) else CONV(AV_SAMPLE_FMT_U8 , uint8_t, AV_SAMPLE_FMT_FLT, av_clip_uint8( lrintf(*(const float*)pi * (1<<7)) + 0x80)) else CONV(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, av_clip_int16( lrintf(*(const float*)pi * (1<<15)))) else CONV(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, av_clipl_int32(llrintf(*(const float*)pi * (1U<<31)))) |