Fix the crash happens in PrintPredictionUnitStats()
Root cause:
The call path
rd_pick_intrabc_mode_sb -> txfm_search -> PrintPredictionUnitStats
set tile_data to NULL and passed it into PrintPredictionUnitStats.
However PrintPredictionUnitStats always assumes tile_data to be non
NULL, which incurs the segmentation fault.
Solution:
Add NULL check in PrintPredictionUnitStats.
Turn on the stats dumping related to inter_mode_rd_models.
Change-Id: I29fbc93acd145d287f210aa31fdadb7f782ab230
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 8f56bd2..4d8dd20 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -2544,9 +2544,10 @@
if (rd_stats->invalid_rate) return;
if (rd_stats->rate == INT_MAX || rd_stats->dist == INT64_MAX) return;
-#if 0 // CONFIG_COLLECT_INTER_MODE_RD_STATS
+#if CONFIG_COLLECT_INTER_MODE_RD_STATS
if (cpi->sf.inter_mode_rd_model_estimation == 1 &&
- !tile_data->inter_mode_rd_models[plane_bsize].ready)
+ (tile_data == NULL ||
+ !tile_data->inter_mode_rd_models[plane_bsize].ready))
return;
#endif
(void)tile_data;
@@ -2626,7 +2627,7 @@
fprintf(fout, " %g %g %g", model_rate_norm, model_dist_norm,
model_rdcost_norm);
-#if 0 // CONFIG_COLLECT_INTER_MODE_RD_STATS
+#if CONFIG_COLLECT_INTER_MODE_RD_STATS
if (cpi->sf.inter_mode_rd_model_estimation == 1) {
assert(tile_data->inter_mode_rd_models[plane_bsize].ready);
const int64_t overall_sse = get_sse(cpi, x);