From 1604ad21491c3982e68395a7d43961781f111e8c Mon Sep 17 00:00:00 2001 From: Frank Galligan Date: Tue, 11 Feb 2014 18:33:02 -0800 Subject: [PATCH] Fix frames that have no references to them. BasicRateTargeting3TemporalLayers found an error with the get/release frame buffer management. Change-Id: Iccff25cba1d2f276f2a0d0fb7b20cf99b4405549 --- test/datarate_test.cc | 2 +- vp9/decoder/vp9_onyxd_if.c | 4 ++++ vp9/vp9_dx_iface.c | 3 +++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/test/datarate_test.cc b/test/datarate_test.cc index 31b8239d6..5b0a54887 100644 --- a/test/datarate_test.cc +++ b/test/datarate_test.cc @@ -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; diff --git a/vp9/decoder/vp9_onyxd_if.c b/vp9/decoder/vp9_onyxd_if.c index fd3488355..1d3522e13 100644 --- a/vp9/decoder/vp9_onyxd_if.c +++ b/vp9/decoder/vp9_onyxd_if.c @@ -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)) { diff --git a/vp9/vp9_dx_iface.c b/vp9/vp9_dx_iface.c index 881a7d152..41750de02 100644 --- a/vp9/vp9_dx_iface.c +++ b/vp9/vp9_dx_iface.c @@ -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");