{aq_variance,firstpass,ratectrl}.c: quiet -Wshorten warnings
ported from libvpx:
Added casts to remove warnings:
In regards to the safety of these casts they are of two types:-
- Normalized bits per (16x16) MB stored in a 32 bit int (This is safe as
bits per MB even with << 9 normalization cant overflow 32 bits. Even
raw 12 bits hdr source even would only be 29 bits :- (4+4+12+9) and
the encoder imposes much stricter limits than this on max bit rate.
- Cast as part of variance calculations. There is an internal cast up
to 64 bit for the Sum X Sum calculation, but after normalization
dividing by the number of points the result will always be <= the SSE
value.
BUG=aomedia:445
Change-Id: I4e700236ed83d6b2b1955e92e84c3b1978b9eaa0
diff --git a/av1/encoder/aq_variance.c b/av1/encoder/aq_variance.c
index b182e4b..ab9b379 100644
--- a/av1/encoder/aq_variance.c
+++ b/av1/encoder/aq_variance.c
@@ -169,8 +169,8 @@
aq_variance(x->plane[0].src.buf, x->plane[0].src.stride, av1_all_zeros, 0,
bw, bh, &sse, &avg);
#endif // CONFIG_HIGHBITDEPTH
- var = sse - (((int64_t)avg * avg) / (bw * bh));
- return ((uint64_t)var * 256) / (bw * bh);
+ var = sse - (unsigned int)(((int64_t)avg * avg) / (bw * bh));
+ return (unsigned int)((uint64_t)var * 256) / (bw * bh);
} else {
#if CONFIG_HIGHBITDEPTH
if (xd->cur_buf->flags & YV12_FLAG_HIGHBITDEPTH) {
@@ -185,7 +185,7 @@
var = cpi->fn_ptr[bs].vf(x->plane[0].src.buf, x->plane[0].src.stride,
av1_all_zeros, 0, &sse);
#endif // CONFIG_HIGHBITDEPTH
- return ((uint64_t)var * 256) >> num_pels_log2_lookup[bs];
+ return (unsigned int)((uint64_t)var * 256) >> num_pels_log2_lookup[bs];
}
}
diff --git a/av1/encoder/firstpass.c b/av1/encoder/firstpass.c
index 8865c4a..c62b02d 100644
--- a/av1/encoder/firstpass.c
+++ b/av1/encoder/firstpass.c
@@ -1186,7 +1186,8 @@
const double speed_term = 1.0 + 0.04 * oxcf->speed;
double ediv_size_correction;
const int target_norm_bits_per_mb =
- ((uint64_t)section_target_bandwidth << BPER_MB_NORMBITS) / active_mbs;
+ (int)((uint64_t)section_target_bandwidth << BPER_MB_NORMBITS) /
+ active_mbs;
int q;
// Larger image formats are expected to be a little harder to code
diff --git a/av1/encoder/ratectrl.c b/av1/encoder/ratectrl.c
index 2e31699..1f2ea36 100644
--- a/av1/encoder/ratectrl.c
+++ b/av1/encoder/ratectrl.c
@@ -494,7 +494,7 @@
// Calculate required scaling factor based on target frame size and size of
// frame produced using previous Q.
target_bits_per_mb =
- ((uint64_t)target_bits_per_frame << BPER_MB_NORMBITS) / cm->MBs;
+ (int)((uint64_t)target_bits_per_frame << BPER_MB_NORMBITS) / cm->MBs;
i = active_best_quality;
@@ -1165,8 +1165,8 @@
rate_thresh_mult[rc->frame_size_selector]);
// Target rate per SB64 (including partial SB64s.
- rc->sb64_target_rate =
- ((int64_t)rc->this_frame_target * 64 * 64) / (cm->width * cm->height);
+ rc->sb64_target_rate = (int)((int64_t)rc->this_frame_target * 64 * 64) /
+ (cm->width * cm->height);
}
static void update_alt_ref_frame_stats(AV1_COMP *cpi) {