Lines Matching refs:pipe
562 static int media_pipeline_add_pad(struct media_pipeline *pipe,
568 list_for_each_entry(ppad, &pipe->pads, list) {
581 ppad->pipe = pipe;
584 list_add_tail(&ppad->list, &pipe->pads);
594 static int media_pipeline_explore_next_link(struct media_pipeline *pipe,
639 ret = media_pipeline_add_pad(pipe, walk, local);
650 ret = media_pipeline_add_pad(pipe, walk, remote);
680 ret = media_pipeline_add_pad(pipe, walk, local);
688 static void media_pipeline_cleanup(struct media_pipeline *pipe)
690 while (!list_empty(&pipe->pads)) {
693 ppad = list_first_entry(&pipe->pads, typeof(*ppad), list);
699 static int media_pipeline_populate(struct media_pipeline *pipe,
710 INIT_LIST_HEAD(&pipe->pads);
711 pipe->mdev = pad->graph_obj.mdev;
713 walk.mdev = pipe->mdev;
715 ret = media_pipeline_add_pad(pipe, &walk, pad);
727 ret = media_pipeline_explore_next_link(pipe, &walk);
735 list_for_each_entry(ppad, &pipe->pads, list)
747 media_pipeline_cleanup(pipe);
753 struct media_pipeline *pipe)
764 * same as the pipe given to media_pipeline_start().
766 if (WARN_ON(pad->pipe && pad->pipe != pipe))
773 if (pipe->start_count) {
774 pipe->start_count++;
783 ret = media_pipeline_populate(pipe, pad);
792 list_for_each_entry(ppad, &pipe->pads, list) {
805 if (pad->pipe) {
871 /* Validation passed, store the pipe pointer in the pad. */
872 pad->pipe = pipe;
875 pipe->start_count++;
885 list_for_each_entry(err_ppad, &pipe->pads, list) {
889 err_ppad->pad->pipe = NULL;
892 media_pipeline_cleanup(pipe);
899 struct media_pipeline *pipe)
905 ret = __media_pipeline_start(pad, pipe);
913 struct media_pipeline *pipe = pad->pipe;
920 if (WARN_ON(!pipe))
923 if (--pipe->start_count)
926 list_for_each_entry(ppad, &pipe->pads, list)
927 ppad->pad->pipe = NULL;
929 media_pipeline_cleanup(pipe);
931 if (pipe->allocated)
932 kfree(pipe);
950 struct media_pipeline *pipe;
957 * a pipe.
959 pipe = media_pad_pipeline(pad);
960 if (!pipe) {
967 pipe = new_pipe;
968 pipe->allocated = true;
971 ret = __media_pipeline_start(pad, pipe);
983 __media_pipeline_pad_iter_next(struct media_pipeline *pipe,
988 iter->cursor = pipe->pads.next;
990 if (iter->cursor == &pipe->pads)
1000 int media_pipeline_entity_iter_init(struct media_pipeline *pipe,
1003 return media_entity_enum_init(&iter->ent_enum, pipe->mdev);
1014 __media_pipeline_entity_iter_next(struct media_pipeline *pipe,
1019 iter->cursor = pipe->pads.next;
1021 while (iter->cursor != &pipe->pads) {
1497 if (pad->pipe)
1498 return pad->pipe;
1507 return pad->pipe;