[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 <ndesaulniers@google.com>
gugelfrei
Nick Desaulniers 5 years ago
parent cb137d0ead
commit 37850a5d02

@ -304,7 +304,7 @@ static void playSource(sp<MediaSource> &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",

@ -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<float>(UINT_MAX)) {
return BAD_VALUE;
}
rate = (OMX_U32)(rateFloat);

@ -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;

@ -1806,7 +1806,7 @@ void convertMessageToMetaData(const sp<AMessage> &msg, sp<MetaData> &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<int32_t>(fpsFloat) <= INT32_MAX) {
// truncate values to distinguish between e.g. 24 vs 23.976 fps
meta->setInt32(kKeyFrameRate, (int32_t)fpsFloat);
}

@ -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))

@ -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)

@ -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)

Loading…
Cancel
Save