av1_first_pass_row: fix non-zero offset of null ptr
check num_planes before incrementing x->plane[].src.buf
this fixes a couple non-zero offset of a null pointer warnings under
clang -fsanitize=undefined:
av1/encoder/firstpass.c:1199:25: runtime error: applying non-zero offset
8 to null pointer
av1/encoder/firstpass.c:1200:25: runtime error: applying non-zero offset
8 to null pointer
Bug: aomedia:3136
Bug: b/229626362
Change-Id: Ibd36809a21898611e363343828c9aecd5467f573
diff --git a/av1/encoder/firstpass.c b/av1/encoder/firstpass.c
index 7ad0c8d..7e137d0 100644
--- a/av1/encoder/firstpass.c
+++ b/av1/encoder/firstpass.c
@@ -473,8 +473,10 @@
set_mi_offsets(mi_params, xd, unit_row * unit_scale, unit_col * unit_scale);
xd->plane[0].dst.buf = this_frame->y_buffer + y_offset;
- xd->plane[1].dst.buf = this_frame->u_buffer + uv_offset;
- xd->plane[2].dst.buf = this_frame->v_buffer + uv_offset;
+ if (num_planes > 1) {
+ xd->plane[1].dst.buf = this_frame->u_buffer + uv_offset;
+ xd->plane[2].dst.buf = this_frame->v_buffer + uv_offset;
+ }
xd->left_available = (unit_col != 0);
xd->mi[0]->bsize = bsize;
xd->mi[0]->ref_frame[0] = INTRA_FRAME;
@@ -761,8 +763,10 @@
// Reset to last frame as reference buffer.
xd->plane[0].pre[0].buf = last_frame->y_buffer + recon_yoffset;
- xd->plane[1].pre[0].buf = last_frame->u_buffer + recon_uvoffset;
- xd->plane[2].pre[0].buf = last_frame->v_buffer + recon_uvoffset;
+ if (av1_num_planes(&cpi->common) > 1) {
+ xd->plane[1].pre[0].buf = last_frame->u_buffer + recon_uvoffset;
+ xd->plane[2].pre[0].buf = last_frame->v_buffer + recon_uvoffset;
+ }
} else {
stats->sr_coded_error += motion_error;
}
@@ -1196,8 +1200,10 @@
// Adjust to the next column of MBs.
x->plane[0].src.buf += fp_block_size_width;
- x->plane[1].src.buf += uv_mb_height;
- x->plane[2].src.buf += uv_mb_height;
+ if (num_planes > 1) {
+ x->plane[1].src.buf += uv_mb_height;
+ x->plane[2].src.buf += uv_mb_height;
+ }
recon_yoffset += fp_block_size_width;
src_yoffset += fp_block_size_width;