]> granicus.if.org Git - libvpx/commitdiff
Fix memory leak for vp8 multi-res encoder.
authorJerome Jiang <jianj@google.com>
Fri, 14 Jun 2019 16:50:30 +0000 (09:50 -0700)
committerJerome Jiang <jianj@google.com>
Fri, 14 Jun 2019 17:13:26 +0000 (10:13 -0700)
BUG=webm:1630

Change-Id: I03e74e78aa0ead66eda7506e921b1774b5442ed5

vpx/src/vpx_encoder.c

index 3385c22c0a2f061e7458829936e693c3593330f7..f38577de6ce42bbab7385532f29991134abd4dee 100644 (file)
@@ -82,6 +82,9 @@ vpx_codec_err_t vpx_codec_enc_init_multi_ver(
     res = VPX_CODEC_INCAPABLE;
   else {
     int i;
+#if CONFIG_MULTI_RES_ENCODING
+    int mem_loc_owned = 0;
+#endif
     void *mem_loc = NULL;
 
     if (iface->enc.mr_get_mem_loc == NULL) return VPX_CODEC_INCAPABLE;
@@ -129,13 +132,17 @@ vpx_codec_err_t vpx_codec_enc_init_multi_ver(
             i--;
           }
 #if CONFIG_MULTI_RES_ENCODING
-          assert(mem_loc);
-          free(((LOWER_RES_FRAME_INFO *)mem_loc)->mb_info);
-          free(mem_loc);
+          if (!mem_loc_owned) {
+            assert(mem_loc);
+            free(((LOWER_RES_FRAME_INFO *)mem_loc)->mb_info);
+            free(mem_loc);
+          }
 #endif
           return SAVE_STATUS(ctx, res);
         }
-
+#if CONFIG_MULTI_RES_ENCODING
+        mem_loc_owned = 1;
+#endif
         ctx++;
         cfg++;
         dsf++;