/* * * Copyright (c) 2025 Project CHIP Authors * All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #include "camera-avstream-controller.h" #include "camera-device-interface.h" #include #include #include namespace chip { namespace app { namespace Clusters { namespace CameraAvStreamManagement { /** * The application delegate to define the options & implement commands. */ class CameraAVStreamManager : public CameraAVStreamManagementDelegate, public CameraAVStreamController { public: Protocols::InteractionModel::Status VideoStreamAllocate(const VideoStreamStruct & allocateArgs, uint16_t & outStreamID) override; Protocols::InteractionModel::Status VideoStreamModify(const uint16_t streamID, const chip::Optional waterMarkEnabled, const chip::Optional osdEnabled) override; Protocols::InteractionModel::Status VideoStreamDeallocate(const uint16_t streamID) override; Protocols::InteractionModel::Status AudioStreamAllocate(const AudioStreamStruct & allocateArgs, uint16_t & outStreamID) override; Protocols::InteractionModel::Status AudioStreamDeallocate(const uint16_t streamID) override; Protocols::InteractionModel::Status SnapshotStreamAllocate(const SnapshotStreamAllocateArgs & allocateArgs, uint16_t & outStreamID) override; Protocols::InteractionModel::Status SnapshotStreamModify(const uint16_t streamID, const chip::Optional waterMarkEnabled, const chip::Optional osdEnabled) override; Protocols::InteractionModel::Status SnapshotStreamDeallocate(const uint16_t streamID) override; void OnVideoStreamAllocated(const VideoStreamStruct & allocatedStream, StreamAllocationAction action) override; void OnStreamUsagePrioritiesChanged() override; void OnAttributeChanged(AttributeId attributeId) override; Protocols::InteractionModel::Status CaptureSnapshot(const chip::app::DataModel::Nullable streamID, const VideoResolutionStruct & resolution, ImageSnapshot & outImageSnapshot) override; CHIP_ERROR ValidateStreamUsage(StreamUsageEnum streamUsage, Optional> & videoStreamId, Optional> & audioStreamId) override; CHIP_ERROR ValidateVideoStreamID(uint16_t videoStreamId) override; CHIP_ERROR ValidateAudioStreamID(uint16_t audioStreamId) override; CHIP_ERROR IsHardPrivacyModeActive(bool & isActive) override; CHIP_ERROR IsSoftRecordingPrivacyModeActive(bool & isActive) override; CHIP_ERROR IsSoftLivestreamPrivacyModeActive(bool & isActive) override; bool HasAllocatedVideoStreams() override; bool HasAllocatedAudioStreams() override; CHIP_ERROR SetHardPrivacyModeOn(bool hardPrivacyMode) override; CHIP_ERROR PersistentAttributesLoadedCallback() override; CHIP_ERROR OnTransportAcquireAudioVideoStreams(uint16_t audioStreamID, uint16_t videoStreamID) override; CHIP_ERROR OnTransportReleaseAudioVideoStreams(uint16_t audioStreamID, uint16_t videoStreamID) override; const std::vector & GetAllocatedVideoStreams() const override; const std::vector & GetAllocatedAudioStreams() const override; void GetBandwidthForStreams(const Optional> & videoStreamId, const Optional> & audioStreamId, uint32_t & outBandwidthbps) override; CameraAVStreamManager() = default; ~CameraAVStreamManager() = default; void SetCameraDeviceHAL(CameraDeviceInterface * aCameraDevice); private: CHIP_ERROR AllocatedVideoStreamsLoaded(); CHIP_ERROR AllocatedAudioStreamsLoaded(); CHIP_ERROR AllocatedSnapshotStreamsLoaded(); CameraDeviceInterface * mCameraDeviceHAL = nullptr; }; } // namespace CameraAvStreamManagement } // namespace Clusters } // namespace app } // namespace chip