Return error log for issue b:457951958 Crash happens for speed 6 realtime encoding, and points to mi being NULL or mi->bsize being invalid in av1_update_state(). Add check and return codec_error if mi == NULL in av1_update_state(). The check for (mi != NULL) is already done in the parent functions where the pc_tree is allocated, but add the additional check here to be sure. Also use bsize instead of mi->bsize for the array mi_size_width/height[]. Bug: b:457951958 Change-Id: I80f3a3c1ea90d67e08017c3a4eaa13bb18ff811b
diff --git a/av1/encoder/encodeframe_utils.c b/av1/encoder/encodeframe_utils.c index b296dba..2b0495e 100644 --- a/av1/encoder/encodeframe_utils.c +++ b/av1/encoder/encodeframe_utils.c
@@ -182,12 +182,18 @@ struct macroblock_plane *const p = x->plane; struct macroblockd_plane *const pd = xd->plane; const MB_MODE_INFO *const mi = &ctx->mic; + if (mi == NULL) { + aom_internal_error(cm->error, AOM_CODEC_ERROR, + "mi is NULL in av1_update_state: %d %d %d %d \n", + cm->current_frame.frame_type, cm->width, cm->height, + bsize); + } MB_MODE_INFO *const mi_addr = xd->mi[0]; const struct segmentation *const seg = &cm->seg; assert(bsize < BLOCK_SIZES_ALL); - assert(mi != NULL && mi->bsize == bsize); - const int bw = mi_size_wide[mi->bsize]; - const int bh = mi_size_high[mi->bsize]; + assert(mi->bsize == bsize); + const int bw = mi_size_wide[bsize]; + const int bh = mi_size_high[bsize]; const int mis = mi_params->mi_stride; const int mi_width = mi_size_wide[bsize]; const int mi_height = mi_size_high[bsize];