mirror of
https://github.com/torvalds/linux.git
synced 2026-06-03 03:53:37 +02:00
media: renesas: vsp1: Replace vsp1_partition_window with v4l2_rect
The vsp1_partition_window structure is used to store the horizontal size of a partition window. This is all that is currently needed, as all partitions span the whole image vertically. The horizontal window size is retrieved in the .configure_partition() handler from the vsp1_partition_window structure, and the vertical window size from the subdev state. Accessing the subdev state in the .configure_partition() handler is problematic in the context of moving to the V4L2 subdev active state API, as .configure_partition() is called in non-interruptable context, and the state lock can't be taken. To avoid this, start by storing the vertical size in the window, replacing the custom vsp1_partition_window structure with a v4l2_rect. Retrieving the vertical size from the window in .configure_partition() will be done in a subsequent change. Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo.mondi+renesas@ideasonboard.com>
This commit is contained in:
parent
2d7e5d80f1
commit
41be7fcc5d
|
|
@ -19,7 +19,6 @@ struct vsp1_dl_body;
|
|||
struct vsp1_dl_list;
|
||||
struct vsp1_pipeline;
|
||||
struct vsp1_partition;
|
||||
struct vsp1_partition_window;
|
||||
|
||||
enum vsp1_entity_type {
|
||||
VSP1_ENTITY_BRS,
|
||||
|
|
@ -91,7 +90,7 @@ struct vsp1_entity_operations {
|
|||
unsigned int (*max_width)(struct vsp1_entity *, struct vsp1_pipeline *);
|
||||
void (*partition)(struct vsp1_entity *, struct vsp1_pipeline *,
|
||||
struct vsp1_partition *, unsigned int,
|
||||
struct vsp1_partition_window *);
|
||||
struct v4l2_rect *);
|
||||
};
|
||||
|
||||
struct vsp1_entity {
|
||||
|
|
|
|||
|
|
@ -459,7 +459,7 @@ void vsp1_pipeline_propagate_alpha(struct vsp1_pipeline *pipe,
|
|||
static void vsp1_pipeline_propagate_partition(struct vsp1_pipeline *pipe,
|
||||
struct vsp1_partition *partition,
|
||||
unsigned int index,
|
||||
struct vsp1_partition_window *window)
|
||||
struct v4l2_rect *window)
|
||||
{
|
||||
struct vsp1_entity *entity;
|
||||
|
||||
|
|
@ -485,7 +485,7 @@ void vsp1_pipeline_calculate_partition(struct vsp1_pipeline *pipe,
|
|||
unsigned int index)
|
||||
{
|
||||
const struct v4l2_mbus_framefmt *format;
|
||||
struct vsp1_partition_window window;
|
||||
struct v4l2_rect window;
|
||||
unsigned int modulus;
|
||||
|
||||
/*
|
||||
|
|
@ -498,6 +498,8 @@ void vsp1_pipeline_calculate_partition(struct vsp1_pipeline *pipe,
|
|||
/* Initialise the partition with sane starting conditions. */
|
||||
window.left = index * div_size;
|
||||
window.width = div_size;
|
||||
window.top = 0;
|
||||
window.height = format->height;
|
||||
|
||||
modulus = format->width % div_size;
|
||||
|
||||
|
|
|
|||
|
|
@ -53,17 +53,6 @@ enum vsp1_pipeline_state {
|
|||
VSP1_PIPELINE_STOPPING,
|
||||
};
|
||||
|
||||
/*
|
||||
* struct vsp1_partition_window - Partition window coordinates
|
||||
* @left: horizontal coordinate of the partition start in pixels relative to the
|
||||
* left edge of the image
|
||||
* @width: partition width in pixels
|
||||
*/
|
||||
struct vsp1_partition_window {
|
||||
unsigned int left;
|
||||
unsigned int width;
|
||||
};
|
||||
|
||||
/*
|
||||
* struct vsp1_partition - A description of a slice for the partition algorithm
|
||||
* @rpf: The RPF partition window configuration
|
||||
|
|
@ -73,11 +62,11 @@ struct vsp1_partition_window {
|
|||
* @wpf: The WPF partition window configuration
|
||||
*/
|
||||
struct vsp1_partition {
|
||||
struct vsp1_partition_window rpf[VSP1_MAX_RPF];
|
||||
struct vsp1_partition_window uds_sink;
|
||||
struct vsp1_partition_window uds_source;
|
||||
struct vsp1_partition_window sru;
|
||||
struct vsp1_partition_window wpf;
|
||||
struct v4l2_rect rpf[VSP1_MAX_RPF];
|
||||
struct v4l2_rect uds_sink;
|
||||
struct v4l2_rect uds_source;
|
||||
struct v4l2_rect sru;
|
||||
struct v4l2_rect wpf;
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -366,7 +366,7 @@ static void rpf_partition(struct vsp1_entity *entity,
|
|||
struct vsp1_pipeline *pipe,
|
||||
struct vsp1_partition *partition,
|
||||
unsigned int partition_idx,
|
||||
struct vsp1_partition_window *window)
|
||||
struct v4l2_rect *window)
|
||||
{
|
||||
struct vsp1_rwpf *rpf = to_rwpf(&entity->subdev);
|
||||
|
||||
|
|
|
|||
|
|
@ -323,7 +323,7 @@ static void sru_partition(struct vsp1_entity *entity,
|
|||
struct vsp1_pipeline *pipe,
|
||||
struct vsp1_partition *partition,
|
||||
unsigned int partition_idx,
|
||||
struct vsp1_partition_window *window)
|
||||
struct v4l2_rect *window)
|
||||
{
|
||||
struct vsp1_sru *sru = to_sru(&entity->subdev);
|
||||
struct v4l2_mbus_framefmt *input;
|
||||
|
|
@ -337,6 +337,8 @@ static void sru_partition(struct vsp1_entity *entity,
|
|||
if (input->width != output->width) {
|
||||
window->width /= 2;
|
||||
window->left /= 2;
|
||||
window->height /= 2;
|
||||
window->top /= 2;
|
||||
}
|
||||
|
||||
partition->sru = *window;
|
||||
|
|
|
|||
|
|
@ -363,16 +363,12 @@ static void uds_partition(struct vsp1_entity *entity,
|
|||
struct vsp1_pipeline *pipe,
|
||||
struct vsp1_partition *partition,
|
||||
unsigned int partition_idx,
|
||||
struct vsp1_partition_window *window)
|
||||
struct v4l2_rect *window)
|
||||
{
|
||||
struct vsp1_uds *uds = to_uds(&entity->subdev);
|
||||
const struct v4l2_mbus_framefmt *output;
|
||||
const struct v4l2_mbus_framefmt *input;
|
||||
|
||||
/* Initialise the partition state. */
|
||||
partition->uds_sink = *window;
|
||||
partition->uds_source = *window;
|
||||
|
||||
input = v4l2_subdev_state_get_format(uds->entity.state, UDS_PAD_SINK);
|
||||
output = v4l2_subdev_state_get_format(uds->entity.state,
|
||||
UDS_PAD_SOURCE);
|
||||
|
|
@ -381,6 +377,10 @@ static void uds_partition(struct vsp1_entity *entity,
|
|||
/ output->width;
|
||||
partition->uds_sink.left = window->left * input->width
|
||||
/ output->width;
|
||||
partition->uds_sink.height = input->height;
|
||||
partition->uds_sink.top = 0;
|
||||
|
||||
partition->uds_source = *window;
|
||||
|
||||
*window = partition->uds_sink;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -515,7 +515,7 @@ static void wpf_partition(struct vsp1_entity *entity,
|
|||
struct vsp1_pipeline *pipe,
|
||||
struct vsp1_partition *partition,
|
||||
unsigned int partition_idx,
|
||||
struct vsp1_partition_window *window)
|
||||
struct v4l2_rect *window)
|
||||
{
|
||||
partition->wpf = *window;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user