vp8: modifcatiion to skin map computation. For each block in pickinter: use average of four middle pixels (instead of single pixel) to set skin map. This can help a little in reducing false skin detection in some cases. Change-Id: Ic247af75e9c2948b08ab977a39e061adacd8ec97
diff --git a/vp8/encoder/pickinter.c b/vp8/encoder/pickinter.c index f3443db..4ec9c05 100644 --- a/vp8/encoder/pickinter.c +++ b/vp8/encoder/pickinter.c
@@ -813,9 +813,18 @@ // Check if current macroblock is in skin area. { - const int y = x->src.y_buffer[7 * x->src.y_stride + 7]; - const int cb = x->src.u_buffer[3 * x->src.uv_stride + 3]; - const int cr = x->src.v_buffer[3 * x->src.uv_stride + 3]; + const int y = (x->src.y_buffer[7 * x->src.y_stride + 7] + + x->src.y_buffer[7 * x->src.y_stride + 8] + + x->src.y_buffer[8 * x->src.y_stride + 7] + + x->src.y_buffer[8 * x->src.y_stride + 8]) >> 2; + const int cb = (x->src.u_buffer[3 * x->src.uv_stride + 3] + + x->src.u_buffer[3 * x->src.uv_stride + 4] + + x->src.u_buffer[4 * x->src.uv_stride + 3] + + x->src.u_buffer[4 * x->src.uv_stride + 4]) >> 2; + const int cr = (x->src.v_buffer[3 * x->src.uv_stride + 3] + + x->src.v_buffer[3 * x->src.uv_stride + 4] + + x->src.v_buffer[4 * x->src.uv_stride + 3] + + x->src.v_buffer[4 * x->src.uv_stride + 4]) >> 2; x->is_skin = 0; if (!cpi->oxcf.screen_content_mode) x->is_skin = is_skin_color(y, cb, cr);