summaryrefslogtreecommitdiff
path: root/vpx
diff options
context:
space:
mode:
authorMinghai Shang <minghai@google.com>2014-02-28 10:30:20 -0800
committerMinghai Shang <minghai@google.com>2014-02-28 10:30:20 -0800
commite526c048729212db8ad046ab89d256b3a22fef26 (patch)
treeec9c3ceac3c7e06f1190770e954ff275e9e66896 /vpx
parentedcbbf2ee3a0acbe5162655bc128b3ac5340729a (diff)
downloadlibvpx-e526c048729212db8ad046ab89d256b3a22fef26.tar.gz
libvpx-e526c048729212db8ad046ab89d256b3a22fef26.tar.bz2
libvpx-e526c048729212db8ad046ab89d256b3a22fef26.zip
[svc] Fix "possible loss of data", "division by zero" and
"index 5 out of bounds for type" compiler warings Change-Id: I414d39198cb02d1b8e2330002ed5fe062aaea95e
Diffstat (limited to 'vpx')
-rw-r--r--vpx/src/svc_encodeframe.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/vpx/src/svc_encodeframe.c b/vpx/src/svc_encodeframe.c
index 5537fb508..c7837244f 100644
--- a/vpx/src/svc_encodeframe.c
+++ b/vpx/src/svc_encodeframe.c
@@ -548,15 +548,20 @@ vpx_codec_err_t vpx_svc_init(SvcContext *svc_ctx, vpx_codec_ctx_t *codec_ctx,
for (i = 0; i < si->layers; ++i) {
int pos = i + VPX_SS_MAX_LAYERS - svc_ctx->spatial_layers;
- alloc_ratio[i] = si->scaling_factor_num[pos] * 1.0 /
- si->scaling_factor_den[pos];
- alloc_ratio[i] *= alloc_ratio[i];
- total += alloc_ratio[i];
+ if (pos < VPX_SS_MAX_LAYERS && si->scaling_factor_den[pos] > 0) {
+ alloc_ratio[i] = (float)(si->scaling_factor_num[pos] * 1.0 /
+ si->scaling_factor_den[pos]);
+
+ alloc_ratio[i] *= alloc_ratio[i];
+ total += alloc_ratio[i];
+ }
}
for (i = 0; i < si->layers; ++i) {
- enc_cfg->ss_target_bitrate[i] = enc_cfg->rc_target_bitrate *
- alloc_ratio[i] / total;
+ if (total > 0) {
+ enc_cfg->ss_target_bitrate[i] = (unsigned int)
+ (enc_cfg->rc_target_bitrate * alloc_ratio[i] / total);
+ }
}
}