This directory contains the server-side implementation of the Camera AV Stream Management Cluster. This implementation is code-driven, and it does not rely on ZAP tool code generation for its core logic, and applications should not use the ZAP tool for configuring its attributes and commands.
The Camera AV Stream Management Cluster manages the allocation, configuration, and lifecycle of audio and video streams from a camera device. It allows commissioners to request streams for various purposes like live viewing, recording, and analysis, while enabling the device to manage its encoding and streaming resources.
CameraAVStreamManagementCluster: The main class implementing the cluster logic, attribute storage, and command handling.CameraAVStreamManagementDelegate: A pure virtual interface that the application MUST implement. This delegate is responsible for interacting with the device's underlying camera, audio, and encoder hardware/software stack to fulfill stream requests and report status.To use this cluster implementation in your application, follow the pattern in examples/camera-app/camera-common/src/camera-app.cpp:
Create a concrete class inheriting from CameraAVStreamManagementDelegate and implement all its pure virtual methods. This class will bridge the cluster logic with your device's specific media pipelines.
Within your application setup (e.g., in a function like CreateAndInitializeCameraAVStreamMgmt):
a. **Determine Features and Optional Attributes:** Based on your device capabilities, populate `BitFlags<CameraAvStreamManagement::Feature>` and `BitFlags<CameraAvStreamManagement::OptionalAttribute>`. Use helper functions or interfaces (like `CameraHALInterface` in the example) to query device capabilities.
b. **Gather Configuration Parameters:** Collect all necessary parameters for the `CameraAVStreamManagementCluster` constructor. This includes:
* Max concurrent encoders
* Max encoded pixel rate
* Video sensor parameters
* Audio/Speaker capabilities
* Snapshot capabilities
* Supported stream usages, etc.
Again, source these values from your device's hardware abstraction layer.
c. **Create Cluster Instance:** Instantiate `CameraAVStreamManagementCluster` on the heap or as a member variable, passing the delegate instance, endpoint ID, features, optional attributes, and all configuration parameters gathered above.
The example uses a ServerCluster<CameraAVStreamManagementCluster> member and a Create method.
d. **Register Cluster:** Register the created cluster instance with the Matter data model registry for the desired endpoint. e. **Set Initial Attribute Values:** After creation, set the initial values for writable attributes based on the device's current state. This is typically done by calling the cluster's setter methods (e.g., `SetHDRModeEnabled`, `SetViewport`, etc.). f. **Call `Init()`:** Finally, call the `Init()` method on the cluster instance. This performs essential validation of the configuration.
Refer to the Matter specification, the header files (CameraAVStreamManagementCluster.h, CameraAVStreamManagementDelegate.h), and the camera-app.cpp example for full details.