]> granicus.if.org Git - libvpx/commitdiff
Fix frames that have no references to them.
authorFrank Galligan <fgalligan@google.com>
Wed, 12 Feb 2014 02:33:02 +0000 (18:33 -0800)
committerFrank Galligan <fgalligan@google.com>
Wed, 12 Feb 2014 02:34:21 +0000 (18:34 -0800)
BasicRateTargeting3TemporalLayers found an error with
the get/release frame buffer management.

Change-Id: Iccff25cba1d2f276f2a0d0fb7b20cf99b4405549

test/datarate_test.cc
vp9/decoder/vp9_onyxd_if.c
vp9/vp9_dx_iface.c

index 31b8239d658709da72756366bc9b1ed7b2c70a25..5b0a54887cdbed3d9f5c20ce85c6ea78eaacee8b 100644 (file)
@@ -489,7 +489,7 @@ TEST_P(DatarateTestVP9, BasicRateTargeting2TemporalLayers) {
 }
 
 // Check basic rate targeting for 3 temporal layers.
-TEST_P(DatarateTestVP9, DISABLED_BasicRateTargeting3TemporalLayers) {
+TEST_P(DatarateTestVP9, BasicRateTargeting3TemporalLayers) {
   cfg_.rc_buf_initial_sz = 500;
   cfg_.rc_buf_optimal_sz = 500;
   cfg_.rc_buf_sz = 1000;
index fd34883550570e9492a51352b6412cf3e10be350..1d3522e1390ef0ec7dbb86812b7d7e1e45c3a0be 100644 (file)
@@ -342,6 +342,10 @@ int vp9_receive_compressed_data(VP9D_PTR ptr,
       cm->frame_refs[0].buf->corrupted = 1;
   }
 
+  // Check if the previous frame was a frame without any references to it.
+  if (cm->new_fb_idx >= 0 && cm->frame_bufs[cm->new_fb_idx].ref_count == 0)
+    cm->release_fb_cb(cm->cb_priv,
+                      &cm->frame_bufs[cm->new_fb_idx].raw_frame_buffer);
   cm->new_fb_idx = get_free_fb(cm);
 
   if (setjmp(cm->error.jmp)) {
index 881a7d152089b2e1605ed07073646502df1cd411..41750de02edd49701b661a4ccb32c366087ebdc1 100644 (file)
@@ -303,6 +303,9 @@ static vpx_codec_err_t decode_one(vpx_codec_alg_priv_t *ctx,
         cm->get_fb_cb = vp9_get_frame_buffer;
         cm->release_fb_cb = vp9_release_frame_buffer;
 
+        // Set index to not initialized.
+        cm->new_fb_idx = -1;
+
         if (vp9_alloc_internal_frame_buffers(&cm->int_frame_buffers))
           vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR,
                              "Failed to initialize internal frame buffers");