From 5d49fa1f017091ec5105b1b783c9b1e1d31ee0b0 Mon Sep 17 00:00:00 2001 From: Angie Chiang Date: Wed, 22 Nov 2023 17:09:14 -0800 Subject: [PATCH] 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) --- test/encode_api_test.cc | 19 +++++++++++++++++++ vp9/encoder/vp9_encodeframe.c | 2 ++ 2 files changed, 21 insertions(+) diff --git a/test/encode_api_test.cc b/test/encode_api_test.cc index 6205a56..25c8d76 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 ddf47c1..d6ac044 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; -- 2.7.4