class PipelineManager

Defined at line 50 of file ../../src/camera/drivers/controller/pipeline_manager.h

|PipelineManager|

This class provides a way to create the stream pipeline for a particular

stream configuration requested.

While doing so it would also create ISP stream protocol and client stream protocols

and setup the camera pipeline such that the streams are flowing properly as per the

requested stream configuration.

Each "ProcessNode" represents a logical or physical hardware unit. A graph begins at an "input"

i.e. the output of the ISP (there are two of these on Sherlock) and eventually connects to the

server end of a fuchsia::camera2::Stream channel. A node can have multiple downstream nodes but

only one upstream node. In other words, all nodes have a fan-in of 1, except the input node which

has a fan-in of 0 (it generates its own frames unsolicited).

The supported graph layouts are defined by the ProductConfig used by the caller. Individual

elements from it are passed in to methods on the PipelineManager. The connections themselves are

not explicit, but are determined by the "supported stream types" of a given node. These uniquely

define the required connectivity between nodes in the graph.

A "config node" is an element within the product config data structure, which statically defines

the supported connectivity to other config nodes. ProcessNodes are created using parameters from

a specific ConfigNode.

TODO(100525): Rationalize the different "node" names e.g. fnode, inode, pnode = frame graph,

internal config, and process, respectively.

Public Methods

void PipelineManager (async_dispatcher_t * dispatcher, fuchsia::sysmem2::AllocatorSyncPtr sysmem_allocator, const ddk::IspProtocolClient & isp, const ddk::GdcProtocolClient & gdc, const ddk::Ge2dProtocolClient & ge2d, LoadFirmwareCallback load_firmware)

Defined at line 34 of file ../../src/camera/drivers/controller/pipeline_manager.cc

void ~PipelineManager ()

Defined at line 47 of file ../../src/camera/drivers/controller/pipeline_manager.cc

void SetRoots (const std::vector<InternalConfigNode> & roots)

Sets the roots (inputs) of the pipeline. The pipeline must have no active streams.

Defined at line 52 of file ../../src/camera/drivers/controller/pipeline_manager.cc

void ConfigureStreamPipeline (StreamCreationData info, fidl::InterfaceRequest<fuchsia::camera2::Stream> request)

Attaches the provided stream request to the pipeline using the provided info structure,

creating intermediate nodes as necessary.

Defined at line 65 of file ../../src/camera/drivers/controller/pipeline_manager.cc

void SetStreamingEnabled (bool enabled)

Suppresses sending frames to all output clients.

Defined at line 121 of file ../../src/camera/drivers/controller/pipeline_manager.cc

void Shutdown (fit::closure callback)

Requests shutdown of the current pipeline. Callers must call this method and await the callback

before destroying the class or calling SetRoots or ConfigureStreamPipeline with a new

configuration index.

Defined at line 126 of file ../../src/camera/drivers/controller/pipeline_manager.cc