]> granicus.if.org Git - libvpx/commitdiff
Fix show_existing_frame not decreasing frame buffer ref counter.
authorAlexander Voronov <avoronov@graphics.cs.msu.ru>
Mon, 14 Jul 2014 12:36:21 +0000 (16:36 +0400)
committerAdrian Grange <agrange@google.com>
Tue, 15 Jul 2014 18:06:15 +0000 (11:06 -0700)
The issue was introduced by commit g7c43fb6. If current frame
is repeated from existing-ref pool, frame buffer ref counter
is not decreased, so buffer isn't released. Decoder fails being
unable to allocate new frame buffer at some point.

Added a test vector to verify that the condition will not
recur later. Test vector was generated by the code in this patch:
https://gerrit.chromium.org/gerrit/#/c/70862/

Change-Id: I8af96eb5b9670176e01a281d2e18bd458712cf78

test/test-data.sha1
test/test.mk
test/test_vectors.cc
vp9/decoder/vp9_decoder.c

index d5a116558d8fec2abefafe3171213dbb3616117a..02b43d9e1ea8ad258f32ed84578eb4e4bf93a606 100644 (file)
@@ -655,6 +655,8 @@ e3ab35d4316c5e81325c50f5236ceca4bc0d35df  vp90-2-15-segkey.webm.md5
 8f46ba5f785d0c2170591a153e0d0d146a7c8090  vp90-2-15-segkey_adpq.webm.md5
 698a6910a97486b833073ef0c0b18d75dce57ee8  vp90-2-16-intra-only.webm
 5661b0168752969f055eec37b05fa9fa947dc7eb  vp90-2-16-intra-only.webm.md5
+c01bb7938f9a9f25e0c37afdec2f2fb73b6cc7fa  vp90-2-17-show-existing-frame.webm
+cc75f351818b9a619818f5cc77b9bc013d0c1e11  vp90-2-17-show-existing-frame.webm.md5
 0321d507ce62dedc8a51b4e9011f7a19aed9c3dc  vp91-2-04-yuv444.webm
 367e423dd41fdb49aa028574a2cfec5c2f325c5c  vp91-2-04-yuv444.webm.md5
 76024eb753cdac6a5e5703aaea189d35c3c30ac7  invalid-vp90-2-00-quantizer-00.webm.ivf.s5861_r01-05_b6-.ivf
index f624649f032e58ca2af574edc02e9f0aa4cb6553..020175db1104335f26bcff184f05663f57fa788a 100644 (file)
@@ -773,6 +773,8 @@ LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp90-2-15-segkey_adpq.webm
 LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp90-2-15-segkey_adpq.webm.md5
 LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp90-2-16-intra-only.webm
 LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp90-2-16-intra-only.webm.md5
+LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp90-2-17-show-existing-frame.webm
+LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp90-2-17-show-existing-frame.webm.md5
 LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp91-2-04-yuv444.webm
 LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp91-2-04-yuv444.webm.md5
 
index 495588715f44718f8797779a69b003a932ee17ee..4ea4b9dab74b71a2d0cbe28520d8dfcef472a4f7 100644 (file)
@@ -180,7 +180,7 @@ const char *const kVP9TestVectors[] = {
   "vp90-2-14-resize-fp-tiles-8-16.webm", "vp90-2-14-resize-fp-tiles-8-1.webm",
   "vp90-2-14-resize-fp-tiles-8-2.webm", "vp90-2-14-resize-fp-tiles-8-4.webm",
   "vp90-2-15-segkey.webm", "vp90-2-15-segkey_adpq.webm",
-  "vp90-2-16-intra-only.webm",
+  "vp90-2-16-intra-only.webm", "vp90-2-17-show-existing-frame.webm",
   "vp91-2-04-yuv444.webm",
 };
 const int kNumVP9TestVectors = NELEMENTS(kVP9TestVectors);
index e32637b06fc1635c5e8858b7b871497b96727bf4..0343c214c03e8b35f6f9216f2e70cdb00760052a 100644 (file)
@@ -268,10 +268,7 @@ int vp9_receive_compressed_data(VP9Decoder *pbi,
 
   vp9_decode_frame(pbi, source, source + size, psource);
 
-  if (!cm->show_existing_frame)
-    swap_frame_buffers(pbi);
-  else
-    cm->frame_to_show = get_frame_new_buffer(cm);
+  swap_frame_buffers(pbi);
 
   vp9_clear_system_state();