]> granicus.if.org Git - libvpx/commitdiff
Disable update of last_show_frame for existing frame
authorAdrian Grange <agrange@google.com>
Thu, 23 Jan 2014 17:26:19 +0000 (09:26 -0800)
committerAdrian Grange <agrange@google.com>
Fri, 31 Jan 2014 16:55:01 +0000 (08:55 -0800)
When showing a previously decoded frame, i.e. when
show_existing_frame=1, the update of the
last_show_frame flag must be disabled.

This is to ensure that the last_show_frame flag
reflects the state of the flag for the immediately
previously decoded frame rather then the value that
was forced to ensure that a previously decoded frame
would be displayed.

This patch also adds a test vector to verify that the
display_existing_frame flag works as expected. Code
for generating the test vector can be found in this
patch:
https://gerrit.chromium.org/gerrit/#/c/68581/

(Bug originally reported by Alexander Voronov
<ru.xalba@gmail.com>).

Change-Id: I731d288fba02088959f7fcc87707137fffc6acf5

test/test-data.sha1
test/test.mk
test/test_vectors.cc
test/test_vectors.h
vp9/decoder/vp9_onyxd_if.c
vp9/encoder/vp9_onyx_if.c

index 6daf69e634691f4d959ed84fe59f6926aa08e65f..a28773133616327dbf5913feb1a8097564b9fa0a 100644 (file)
@@ -574,3 +574,5 @@ d48c5db1b0f8e60521a7c749696b8067886033a3  vp90-2-09-aq2.webm
 84c1599298aac78f2fc05ae2274575d10569dfa0  vp90-2-09-aq2.webm.md5
 55fc55ed73d578ed60fad05692579873f8bad758  vp90-2-09-lf_deltas.webm
 54638c38009198c38c8f3b25c182b709b6c1fd2e  vp90-2-09-lf_deltas.webm.md5
+510d95f3beb3b51c572611fdaeeece12277dac30  vp90-2-10-show-existing-frame.webm
+14d631096f4bfa2d71f7f739aec1448fb3c33bad  vp90-2-10-show-existing-frame.webm.md5
index cb62615685df7c87daa84c63f98b39bd204d1b48..a65decf730c34a88f09c674d04a214d0af112ec6 100644 (file)
@@ -676,6 +676,8 @@ LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp90-2-09-lf_deltas.webm
 LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp90-2-09-lf_deltas.webm.md5
 LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp91-2-04-yv444.webm
 LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp91-2-04-yv444.webm.md5
+LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp90-2-10-show-existing-frame.webm
+LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp90-2-10-show-existing-frame.webm.md5
 
 ifeq ($(CONFIG_DECODE_PERF_TESTS),yes)
 # BBB VP9 streams
index 16298d0ff3a59b71f521a15c6744251a00bdc70f..3227f52530bb0c43abc5516ac8755739c1f674b7 100644 (file)
@@ -160,6 +160,7 @@ const char *kVP9TestVectors[kNumVp9TestVectors] = {
   "vp90-2-02-size-lf-1920x1080.webm",
   "vp90-2-09-aq2.webm",
   "vp90-2-09-lf_deltas.webm",
+  "vp90-2-10-show-existing-frame.webm",
 #if CONFIG_NON420
   "vp91-2-04-yv444.webm"
 #endif
index 5f62e9919ce42097fb1bd3826b22116c63da4473..eb592de64df6ddb2fdccbae184fb6d0d0970f689 100644 (file)
@@ -22,9 +22,9 @@ extern const char *kVP8TestVectors[kNumVp8TestVectors];
 
 #if CONFIG_VP9_DECODER
 #if CONFIG_NON420
-const int kNumVp9TestVectors = 216;
+const int kNumVp9TestVectors = 217;
 #else
-const int kNumVp9TestVectors = 215;
+const int kNumVp9TestVectors = 216;
 #endif
 
 extern const char *kVP9TestVectors[kNumVp9TestVectors];
index 75d52c25afb72a7b3ff75125001b6f11148f7caf..c6e9205bb527d81b91c16e87c96f506757686127 100644 (file)
@@ -390,7 +390,8 @@ int vp9_receive_compressed_data(VP9D_PTR ptr,
 
   vp9_clear_system_state();
 
-  cm->last_show_frame = cm->show_frame;
+  if (!cm->show_existing_frame)
+    cm->last_show_frame = cm->show_frame;
   if (cm->show_frame) {
     if (!cm->show_existing_frame) {
       // current mip will be the prev_mip for the next frame
index b3f8c7ef769a91536d6165e4280d4ccea65500db..2d20f7ed38e124c3f544078b76aea3da51af3cb8 100644 (file)
@@ -3250,7 +3250,8 @@ static void encode_frame_to_data_rate(VP9_COMP *cpi,
   cm->last_height = cm->height;
 
   // reset to normal state now that we are done.
-  cm->last_show_frame = cm->show_frame;
+  if (!cm->show_existing_frame)
+    cm->last_show_frame = cm->show_frame;
   if (cm->show_frame) {
     // current mip will be the prev_mip for the next frame
     MODE_INFO *temp = cm->prev_mip;