From 37850a5d0251fc3229db192a7aa7448f95adf3b6 Mon Sep 17 00:00:00 2001 From: Nick Desaulniers Date: Tue, 15 Oct 2019 18:31:37 -0700 Subject: [PATCH] [libstagefright] fix -Wimplicit-int-float-conversion IEEE754 single precision cannot precisely represent INT32_MAX/UINT_MAX/RAND_MAX. IEEE754 double precision cannot precisely represent INT64_MAX. As such, implicit conversions from operations with floating point and integral operands may result in a loss of precision. Accept the imprecision with by making the existing implicit casts explicit. Bug: 139945549 Test: mm Merged-in: Ic66b3d3bbac9e644e27ad8233018f24dfce3209f Change-Id: Ic5a40abbccb1bf4d78475a6f3d1d2835df603d0a Signed-off-by: Nick Desaulniers --- cmds/stagefright/stagefright.cpp | 2 +- media/libstagefright/ACodec.cpp | 2 +- media/libstagefright/MediaClock.cpp | 2 +- media/libstagefright/Utils.cpp | 2 +- .../codecs/mp3dec/src/pv_mp3dec_fxd_op_c_equivalent.h | 2 +- .../libstagefright/codecs/mp3dec/src/pvmp3_alias_reduction.cpp | 2 +- media/libstagefright/codecs/mp3dec/src/pvmp3_dct_9.cpp | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/cmds/stagefright/stagefright.cpp b/cmds/stagefright/stagefright.cpp index a1ee90483f..7c7a01f241 100644 --- a/cmds/stagefright/stagefright.cpp +++ b/cmds/stagefright/stagefright.cpp @@ -304,7 +304,7 @@ static void playSource(sp &source) { seekTimeUs = -1; if (shouldSeek) { - seekTimeUs = (rand() * (float)durationUs) / RAND_MAX; + seekTimeUs = (rand() * (float)durationUs) / (float)RAND_MAX; options.setSeekTo(seekTimeUs); printf("seeking to %" PRId64 " us (%.2f secs)\n", diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp index d198d39bc6..84d6ffdc17 100644 --- a/media/libstagefright/ACodec.cpp +++ b/media/libstagefright/ACodec.cpp @@ -2403,7 +2403,7 @@ status_t ACodec::setOperatingRate(float rateFloat, bool isVideo) { } rate = (OMX_U32)(rateFloat * 65536.0f + 0.5f); } else { - if (rateFloat > UINT_MAX) { + if (rateFloat > static_cast(UINT_MAX)) { return BAD_VALUE; } rate = (OMX_U32)(rateFloat); diff --git a/media/libstagefright/MediaClock.cpp b/media/libstagefright/MediaClock.cpp index 4f9bc6d32f..24608a7996 100644 --- a/media/libstagefright/MediaClock.cpp +++ b/media/libstagefright/MediaClock.cpp @@ -281,7 +281,7 @@ void MediaClock::processTimers_l() { it = mTimers.erase(it); } else { if (mPlaybackRate != 0.0 - && (double)diffMediaUs < INT64_MAX * (double)mPlaybackRate) { + && (double)diffMediaUs < (double)INT64_MAX * (double)mPlaybackRate) { int64_t targetRealUs = diffMediaUs / (double)mPlaybackRate; if (targetRealUs < nextLapseRealUs) { nextLapseRealUs = targetRealUs; diff --git a/media/libstagefright/Utils.cpp b/media/libstagefright/Utils.cpp index bda6053b0a..c20dfe26d0 100644 --- a/media/libstagefright/Utils.cpp +++ b/media/libstagefright/Utils.cpp @@ -1806,7 +1806,7 @@ void convertMessageToMetaData(const sp &msg, sp &meta) { if (msg->findInt32("frame-rate", &fps) && fps > 0) { meta->setInt32(kKeyFrameRate, fps); } else if (msg->findFloat("frame-rate", &fpsFloat) - && fpsFloat >= 1 && fpsFloat <= INT32_MAX) { + && fpsFloat >= 1 && static_cast(fpsFloat) <= INT32_MAX) { // truncate values to distinguish between e.g. 24 vs 23.976 fps meta->setInt32(kKeyFrameRate, (int32_t)fpsFloat); } diff --git a/media/libstagefright/codecs/mp3dec/src/pv_mp3dec_fxd_op_c_equivalent.h b/media/libstagefright/codecs/mp3dec/src/pv_mp3dec_fxd_op_c_equivalent.h index adb0dd4ec7..f9d91b1903 100644 --- a/media/libstagefright/codecs/mp3dec/src/pv_mp3dec_fxd_op_c_equivalent.h +++ b/media/libstagefright/codecs/mp3dec/src/pv_mp3dec_fxd_op_c_equivalent.h @@ -44,7 +44,7 @@ extern "C" #endif #include "pvmp3_audio_type_defs.h" -#define Qfmt_31(a) (Int32)((float)(a)*0x7FFFFFFF) +#define Qfmt_31(a) (Int32)((float)(a)*(float)0x7FFFFFFF) #define Qfmt15(x) (Int16)((x)*((Int32)1<<15) + ((x)>=0?0.5F:-0.5F)) diff --git a/media/libstagefright/codecs/mp3dec/src/pvmp3_alias_reduction.cpp b/media/libstagefright/codecs/mp3dec/src/pvmp3_alias_reduction.cpp index af738ba5f3..a4f798e671 100644 --- a/media/libstagefright/codecs/mp3dec/src/pvmp3_alias_reduction.cpp +++ b/media/libstagefright/codecs/mp3dec/src/pvmp3_alias_reduction.cpp @@ -169,7 +169,7 @@ void pvmp3_alias_reduction(int32 *input_buffer, /* Ptr to spec values of int32 i, j; - *used_freq_lines = fxp_mul32_Q32(*used_freq_lines << 16, (int32)(0x7FFFFFFF / (float)18 - 1.0f)) >> 15; + *used_freq_lines = fxp_mul32_Q32(*used_freq_lines << 16, (int32)((float)0x7FFFFFFF / 18.0f - 1.0f)) >> 15; if (gr_info->window_switching_flag && gr_info->block_type == 2) diff --git a/media/libstagefright/codecs/mp3dec/src/pvmp3_dct_9.cpp b/media/libstagefright/codecs/mp3dec/src/pvmp3_dct_9.cpp index bbb247d344..9cd0e91452 100644 --- a/media/libstagefright/codecs/mp3dec/src/pvmp3_dct_9.cpp +++ b/media/libstagefright/codecs/mp3dec/src/pvmp3_dct_9.cpp @@ -77,7 +77,7 @@ Returns ; Include all pre-processor statements here. Include conditional ; compile variables also. ----------------------------------------------------------------------------*/ -#define Qfmt31(a) (int32)((a)*(0x7FFFFFFF)) +#define Qfmt31(a) (int32)((a)*((float)0x7FFFFFFF)) #define cos_pi_9 Qfmt31( 0.93969262078591f) #define cos_2pi_9 Qfmt31( 0.76604444311898f)