shithub: libvpx

Download patch

ref: e526c048729212db8ad046ab89d256b3a22fef26
parent: edcbbf2ee3a0acbe5162655bc128b3ac5340729a
author: Minghai Shang <minghai@google.com>
date: Fri Feb 28 05:30:20 EST 2014

[svc] Fix "possible loss of data", "division by zero" and
"index 5 out of bounds for type" compiler warings

Change-Id: I414d39198cb02d1b8e2330002ed5fe062aaea95e

--- a/vpx/src/svc_encodeframe.c
+++ b/vpx/src/svc_encodeframe.c
@@ -548,15 +548,20 @@
 
     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);
+      }
     }
   }