mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-05 07:36:56 +07:00
[media] media: Keep using the same graph walk object for a given pipeline
Initialise a given graph walk object once, and then keep using it whilst the same pipeline is running. Once the pipeline is stopped, release the graph walk object. Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
This commit is contained in:
parent
29d8da02d1
commit
74a4133079
@ -379,10 +379,10 @@ __must_check int media_entity_pipeline_start(struct media_entity *entity,
|
||||
|
||||
mutex_lock(&mdev->graph_mutex);
|
||||
|
||||
ret = media_entity_graph_walk_init(&pipe->graph, mdev);
|
||||
if (ret) {
|
||||
mutex_unlock(&mdev->graph_mutex);
|
||||
return ret;
|
||||
if (!pipe->streaming_count++) {
|
||||
ret = media_entity_graph_walk_init(&pipe->graph, mdev);
|
||||
if (ret)
|
||||
goto error_graph_walk_start;
|
||||
}
|
||||
|
||||
media_entity_graph_walk_start(&pipe->graph, entity);
|
||||
@ -483,7 +483,9 @@ __must_check int media_entity_pipeline_start(struct media_entity *entity,
|
||||
break;
|
||||
}
|
||||
|
||||
media_entity_graph_walk_cleanup(graph);
|
||||
error_graph_walk_start:
|
||||
if (!--pipe->streaming_count)
|
||||
media_entity_graph_walk_cleanup(graph);
|
||||
|
||||
mutex_unlock(&mdev->graph_mutex);
|
||||
|
||||
@ -495,9 +497,11 @@ void media_entity_pipeline_stop(struct media_entity *entity)
|
||||
{
|
||||
struct media_device *mdev = entity->graph_obj.mdev;
|
||||
struct media_entity_graph *graph = &entity->pipe->graph;
|
||||
struct media_pipeline *pipe = entity->pipe;
|
||||
|
||||
mutex_lock(&mdev->graph_mutex);
|
||||
|
||||
WARN_ON(!pipe->streaming_count);
|
||||
media_entity_graph_walk_start(graph, entity);
|
||||
|
||||
while ((entity = media_entity_graph_walk_next(graph))) {
|
||||
@ -506,7 +510,8 @@ void media_entity_pipeline_stop(struct media_entity *entity)
|
||||
entity->pipe = NULL;
|
||||
}
|
||||
|
||||
media_entity_graph_walk_cleanup(graph);
|
||||
if (!--pipe->streaming_count)
|
||||
media_entity_graph_walk_cleanup(graph);
|
||||
|
||||
mutex_unlock(&mdev->graph_mutex);
|
||||
}
|
||||
|
@ -119,9 +119,11 @@ struct media_entity_graph {
|
||||
/*
|
||||
* struct media_pipeline - Media pipeline related information
|
||||
*
|
||||
* @graph: Media graph walk during pipeline start / stop
|
||||
* @streaming_count: Streaming start count - streaming stop count
|
||||
* @graph: Media graph walk during pipeline start / stop
|
||||
*/
|
||||
struct media_pipeline {
|
||||
int streaming_count;
|
||||
struct media_entity_graph graph;
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user