aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAngie Chiang <angiebird@google.com>2023-11-22 17:09:14 -0800
committerJerome Jiang <jianj@google.com>2023-12-06 16:22:10 -0500
commit5d49fa1f017091ec5105b1b783c9b1e1d31ee0b0 (patch)
treeb2ce12301c8181acc9ae8376cda98989cdbf91b2
parent6f1001a894cfdd1977dc7069d3a599b26ef04260 (diff)
downloadlibvpx-5d49fa1f017091ec5105b1b783c9b1e1d31ee0b0.tar.gz
Set skip_recode=0 in nonrd_pick_sb_modes
Need to set skip_recode properly so that vp9_encode_block_intra() can work properly when it is called by block_rd_txfm(). We can not skip "recode" because it is still at the rd search stage. Bug: b/310340241 Change-Id: I7d7600ef72addd341636549c2dad1868ad90e1cb (cherry picked from commit f10481dc0a49b5d53428560de2a2eee43f9ed60f)
-rw-r--r--test/encode_api_test.cc19
-rw-r--r--vp9/encoder/vp9_encodeframe.c2
2 files changed, 21 insertions, 0 deletions
diff --git a/test/encode_api_test.cc b/test/encode_api_test.cc
index 6205a56ce..25c8d7624 100644
--- a/test/encode_api_test.cc
+++ b/test/encode_api_test.cc
@@ -673,6 +673,25 @@ TEST(EncodeAPI, DynamicDeadlineChange) {
encoder.Encode(false);
}
+TEST(EncodeAPI, Buganizer310340241) {
+ VP9Encoder encoder(-6);
+
+ // Set initial config, in particular set deadline to GOOD mode.
+ encoder.Configure(0, 1, 1, VPX_VBR, VPX_DL_GOOD_QUALITY);
+
+ // Encode 1st frame.
+ encoder.Encode(true);
+
+ // Encode 2nd frame, delta frame.
+ encoder.Encode(false);
+
+ // Change config: change deadline to REALTIME.
+ encoder.Configure(0, 1, 1, VPX_VBR, VPX_DL_REALTIME);
+
+ // Encode 3rd frame with new config, set key frame.
+ encoder.Encode(true);
+}
+
// This is a test case from clusterfuzz: based on b/312517065.
TEST(EncodeAPI, Buganizer312517065) {
VP9Encoder encoder(4);
diff --git a/vp9/encoder/vp9_encodeframe.c b/vp9/encoder/vp9_encodeframe.c
index ddf47c128..d6ac04400 100644
--- a/vp9/encoder/vp9_encodeframe.c
+++ b/vp9/encoder/vp9_encodeframe.c
@@ -4714,6 +4714,8 @@ static void nonrd_pick_sb_modes(VP9_COMP *cpi, TileDataEnc *tile_data,
set_segment_index(cpi, x, mi_row, mi_col, bsize, 0);
+ x->skip_recode = 0;
+
mi = xd->mi[0];
mi->sb_type = bsize;