Set skip_recode=0 in nonrd_pick_sb_modes
authorAngie Chiang <angiebird@google.com>
Thu, 23 Nov 2023 01:09:14 +0000 (17:09 -0800)
committerJerome Jiang <jianj@google.com>
Wed, 6 Dec 2023 21:22:10 +0000 (16:22 -0500)
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)

test/encode_api_test.cc
vp9/encoder/vp9_encodeframe.c

index 6205a56..25c8d76 100644 (file)
@@ -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);
index ddf47c1..d6ac044 100644 (file)
@@ -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;