rec_y_offset = y_pos - (cursor_height - y_hotspot);
}
- if (rec_x_offset >= (int)param->recout.width)
- cur_en = 0; /* not visible beyond right edge*/
+ if (param->rotation == ROTATION_ANGLE_0 && !param->mirror) {
+ if (rec_x_offset >= (int)param->recout.width)
+ cur_en = 0; /* not visible beyond right edge*/
+
+ if (rec_y_offset >= (int)param->recout.height)
+ cur_en = 0; /* not visible beyond bottom edge*/
+ } else {
+ if (rec_x_offset > (int)param->recout.width)
+ cur_en = 0; /* not visible beyond right edge*/
+
+ if (rec_y_offset > (int)param->recout.height)
+ cur_en = 0; /* not visible beyond bottom edge*/
+ }
if (rec_x_offset + cursor_width <= 0)
cur_en = 0; /* not visible beyond left edge*/
- if (rec_y_offset >= (int)param->recout.height)
- cur_en = 0; /* not visible beyond bottom edge*/
-
if (rec_y_offset + cursor_height <= 0)
cur_en = 0; /* not visible beyond top edge*/
*/
if (param.rotation == ROTATION_ANGLE_90 || param.rotation == ROTATION_ANGLE_270) {
- x_pos = x_pos * pipe_ctx->stream->dst.width /
+ x_pos = pipe_ctx->stream->dst.x + x_pos * pipe_ctx->stream->dst.width /
pipe_ctx->stream->src.height;
- y_pos = y_pos * pipe_ctx->stream->dst.height /
+ y_pos = pipe_ctx->stream->dst.y + y_pos * pipe_ctx->stream->dst.height /
pipe_ctx->stream->src.width;
} else {
- x_pos = x_pos * pipe_ctx->stream->dst.width /
+ x_pos = pipe_ctx->stream->dst.x + x_pos * pipe_ctx->stream->dst.width /
pipe_ctx->stream->src.width;
- y_pos = y_pos * pipe_ctx->stream->dst.height /
+ y_pos = pipe_ctx->stream->dst.y + y_pos * pipe_ctx->stream->dst.height /
pipe_ctx->stream->src.height;
}
}
}
} else if (param.rotation == ROTATION_ANGLE_90) {
- uint32_t temp_y = pos_cpy.y;
+ if (!param.mirror) {
+ uint32_t temp_y = pos_cpy.y;
+
+ pos_cpy.y = pipe_ctx->plane_res.scl_data.recout.height - pos_cpy.x;
+ pos_cpy.x = temp_y - prev_odm_width;
+ } else {
+ swap(pos_cpy.x, pos_cpy.y);
+ }
- pos_cpy.y = pipe_ctx->plane_res.scl_data.recout.height - pos_cpy.x;
- pos_cpy.x = temp_y - prev_odm_width;
} else if (param.rotation == ROTATION_ANGLE_270) {
// Swap axis and mirror vertically
uint32_t temp_x = pos_cpy.x;
pos_cpy.y = temp_x;
}
} else {
- pos_cpy.x = pipe_ctx->plane_res.scl_data.recout.width - pos_cpy.y;
- pos_cpy.y = temp_x;
+ if (param.mirror) {
+ swap(pos_cpy.x, pos_cpy.y);
+
+ pos_cpy.x = pipe_ctx->plane_res.scl_data.recout.width - pos_cpy.x + 2 * pipe_ctx->plane_res.scl_data.recout.x;
+ pos_cpy.y = (2 * pipe_ctx->plane_res.scl_data.recout.y) + pipe_ctx->plane_res.scl_data.recout.height - pos_cpy.y;
+ } else {
+ pos_cpy.x = pipe_ctx->plane_res.scl_data.recout.width - pos_cpy.y;
+ pos_cpy.y = temp_x;
+ }
}
} else if (param.rotation == ROTATION_ANGLE_180) {
// Mirror horizontally and vertically