Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion examples/camera-app/camera-common/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ source_set("camera-lib") {
"include/camera-device-interface.h",
"include/media-controller/media-controller.h",
"include/transport/transport.h",
"include/webrtc-provider-controller/webrtc-provider-controller.h",
"src/camera-app.cpp",
]

Expand All @@ -57,6 +56,7 @@ source_set("camera-lib") {
deps = [
"${chip_root}/examples/camera-app/camera-common",
"${chip_root}/src/app/clusters/push-av-stream-transport-server",
"${chip_root}/src/app/clusters/webrtc-transport-provider-server",
"${chip_root}/src/lib",
]
}
4 changes: 3 additions & 1 deletion examples/camera-app/camera-common/include/camera-app.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
#include "camera-device-interface.h"
#include <app/util/config.h>
#include <cstring>
#include <data-model-providers/codegen/CodegenDataModelProvider.h>
#include <protocols/interaction_model/StatusCode.h>
#include <utility>

Expand All @@ -45,7 +46,8 @@ class CameraApp
CameraDeviceInterface * mCameraDevice;

// SDK cluster servers
std::unique_ptr<chip::app::Clusters::WebRTCTransportProvider::WebRTCTransportProviderServer> mWebRTCTransportProviderPtr;
chip::app::LazyRegisteredServerCluster<chip::app::Clusters::WebRTCTransportProvider::WebRTCTransportProviderCluster>
mWebRTCTransportProviderServer;
std::unique_ptr<chip::app::Clusters::ChimeServer> mChimeServerPtr;
std::unique_ptr<chip::app::Clusters::CameraAvStreamManagement::CameraAVStreamMgmtServer> mAVStreamMgmtServerPtr;
std::unique_ptr<chip::app::Clusters::CameraAvSettingsUserLevelManagement::CameraAvSettingsUserLevelMgmtServer>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,11 @@
#pragma once
#include "camera-avstream-controller.h"
#include "media-controller.h"
#include "webrtc-provider-controller.h"
#include <app/clusters/camera-av-settings-user-level-management-server/camera-av-settings-user-level-management-server.h>
#include <app/clusters/camera-av-stream-management-server/camera-av-stream-management-server.h>
#include <app/clusters/chime-server/chime-server.h>
#include <app/clusters/push-av-stream-transport-server/PushAVStreamTransportCluster.h>
#include <app/clusters/webrtc-transport-provider-server/webrtc-transport-provider-server.h>
#include <app/clusters/webrtc-transport-provider-server/WebRTCTransportProviderCluster.h>
#include <app/clusters/zone-management-server/zone-management-server.h>

using chip::app::Clusters::CameraAvStreamManagement::AudioCapabilitiesStruct;
Expand Down Expand Up @@ -125,8 +124,9 @@ class CameraDeviceInterface
// Getter for WebRTCProvider Delegate
virtual chip::app::Clusters::WebRTCTransportProvider::Delegate & GetWebRTCProviderDelegate() = 0;

// Getter for WebRTCProvider Controller
virtual chip::app::Clusters::WebRTCTransportProvider::WebRTCTransportProviderController & GetWebRTCProviderController() = 0;
// Set the WebRTC Transport Provider server instance
virtual void
SetWebRTCTransportProvider(chip::app::Clusters::WebRTCTransportProvider::WebRTCTransportProviderCluster * provider) = 0;

// Getter for CameraAVStreamManagement Delegate
virtual chip::app::Clusters::CameraAvStreamManagement::CameraAVStreamMgmtDelegate & GetCameraAVStreamMgmtDelegate() = 0;
Expand Down
24 changes: 17 additions & 7 deletions examples/camera-app/camera-common/src/camera-app.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,6 @@ CameraApp::CameraApp(chip::EndpointId aClustersEndpoint, CameraDeviceInterface *
// Instantiate Chime Server
mChimeServerPtr = std::make_unique<ChimeServer>(mEndpoint, mCameraDevice->GetChimeDelegate());

// Instantiate WebRTCTransport Provider
mWebRTCTransportProviderPtr =
std::make_unique<WebRTCTransportProviderServer>(mCameraDevice->GetWebRTCProviderDelegate(), mEndpoint);

Clusters::PushAvStreamTransport::SetDelegate(mEndpoint, &(mCameraDevice->GetPushAVTransportDelegate()));

Clusters::PushAvStreamTransport::SetTLSClientManagementDelegate(mEndpoint,
Expand Down Expand Up @@ -283,8 +279,16 @@ void CameraApp::InitializeCameraAVStreamMgmt()
void CameraApp::InitCameraDeviceClusters()
{
// Initialize Cluster Servers
TEMPORARY_RETURN_IGNORED mWebRTCTransportProviderPtr->Init();
mCameraDevice->GetWebRTCProviderController().SetWebRTCTransportProvider(std::move(mWebRTCTransportProviderPtr));
mWebRTCTransportProviderServer.Create(mEndpoint, mCameraDevice->GetWebRTCProviderDelegate());
CHIP_ERROR err = CodegenDataModelProvider::Instance().Registry().Register(mWebRTCTransportProviderServer.Registration());
if (err != CHIP_NO_ERROR)
{
ChipLogError(Camera, "Failed to register WebRTCTransportProvider on endpoint %u: %" CHIP_ERROR_FORMAT, mEndpoint,
err.Format());
}

// Set the WebRTCTransportProvider server in the manager
mCameraDevice->SetWebRTCTransportProvider(&mWebRTCTransportProviderServer.Cluster());

TEMPORARY_RETURN_IGNORED mChimeServerPtr->Init();

Expand All @@ -299,7 +303,13 @@ void CameraApp::ShutdownCameraDeviceClusters()
{
ChipLogDetail(Camera, "CameraAppShutdown: Shutting down Camera device clusters");
mAVSettingsUserLevelMgmtServerPtr->Shutdown();
mWebRTCTransportProviderPtr->Shutdown();

CHIP_ERROR err = CodegenDataModelProvider::Instance().Registry().Unregister(&mWebRTCTransportProviderServer.Cluster());
if (err != CHIP_NO_ERROR)
{
ChipLogError(Camera, "WebRTCTransportProvider unregister error: %" CHIP_ERROR_FORMAT, err.Format());
}
mWebRTCTransportProviderServer.Destroy();
}

static constexpr EndpointId kCameraEndpointId = 1;
Expand Down
3 changes: 2 additions & 1 deletion examples/camera-app/linux/include/camera-device.h
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,8 @@ class CameraDevice : public CameraDeviceInterface, public CameraDeviceInterface:
public:
chip::app::Clusters::ChimeDelegate & GetChimeDelegate() override;
chip::app::Clusters::WebRTCTransportProvider::Delegate & GetWebRTCProviderDelegate() override;
chip::app::Clusters::WebRTCTransportProvider::WebRTCTransportProviderController & GetWebRTCProviderController() override;
void
SetWebRTCTransportProvider(chip::app::Clusters::WebRTCTransportProvider::WebRTCTransportProviderCluster * provider) override;
chip::app::Clusters::CameraAvStreamManagement::CameraAVStreamMgmtDelegate & GetCameraAVStreamMgmtDelegate() override;
chip::app::Clusters::CameraAvStreamManagement::CameraAVStreamController & GetCameraAVStreamMgmtController() override;
chip::app::Clusters::CameraAvSettingsUserLevelManagement::Delegate & GetCameraAVSettingsUserLevelMgmtDelegate() override;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
#include "webrtc-abstract.h"
#include <app-common/zap-generated/cluster-enums.h>
#include <app/CASESessionManager.h>
#include <app/clusters/webrtc-transport-provider-server/webrtc-transport-provider-server.h>
#include <app/clusters/webrtc-transport-provider-server/WebRTCTransportProviderCluster.h>
#include <media-controller.h>
#include <webrtc-transport.h>

Expand All @@ -39,7 +39,7 @@ using ICECandidateStruct = chip::app::Clusters::Globals::Structs::ICECandi
using StreamUsageEnum = chip::app::Clusters::Globals::StreamUsageEnum;
using WebRTCEndReasonEnum = chip::app::Clusters::Globals::WebRTCEndReasonEnum;

class WebRTCProviderManager : public Delegate, public WebRTCTransportProviderController
class WebRTCProviderManager : public Delegate
{
public:
WebRTCProviderManager() :
Expand All @@ -54,7 +54,7 @@ class WebRTCProviderManager : public Delegate, public WebRTCTransportProviderCon

void SetMediaController(MediaController * mediaController);

void SetWebRTCTransportProvider(std::unique_ptr<WebRTCTransportProviderServer> webRTCTransportProvider) override;
void SetWebRTCTransportProvider(WebRTCTransportProviderCluster * webRTCTransportProvider);

CHIP_ERROR HandleSolicitOffer(const OfferRequestArgs & args, WebRTCSessionStruct & outSession,
bool & outDeferredOffer) override;
Expand Down Expand Up @@ -149,7 +149,7 @@ class WebRTCProviderManager : public Delegate, public WebRTCTransportProviderCon

MediaController * mMediaController = nullptr;

std::unique_ptr<WebRTCTransportProviderServer> mWebRTCTransportProvider = nullptr;
WebRTCTransportProviderCluster * mWebRTCTransportProvider = nullptr;

// Handle to the Camera Device interface. For accessing other
// clusters, if required.
Expand Down
4 changes: 2 additions & 2 deletions examples/camera-app/linux/src/camera-device.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1834,9 +1834,9 @@ WebRTCTransportProvider::Delegate & CameraDevice::GetWebRTCProviderDelegate()
return mWebRTCProviderManager;
}

WebRTCTransportProvider::WebRTCTransportProviderController & CameraDevice::GetWebRTCProviderController()
void CameraDevice::SetWebRTCTransportProvider(WebRTCTransportProvider::WebRTCTransportProviderCluster * provider)
{
return mWebRTCProviderManager;
mWebRTCProviderManager.SetWebRTCTransportProvider(provider);
}

PushAvStreamTransportDelegate & CameraDevice::GetPushAVTransportDelegate()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,9 @@ void WebRTCProviderManager::SetMediaController(MediaController * mediaController
mMediaController = mediaController;
}

void WebRTCProviderManager::SetWebRTCTransportProvider(std::unique_ptr<WebRTCTransportProviderServer> aWebRTCTransportProvider)
void WebRTCProviderManager::SetWebRTCTransportProvider(WebRTCTransportProviderCluster * webRTCTransportProvider)
{
mWebRTCTransportProvider = std::move(aWebRTCTransportProvider);
mWebRTCTransportProvider = webRTCTransportProvider;
}

CHIP_ERROR WebRTCProviderManager::HandleSolicitOffer(const OfferRequestArgs & args, WebRTCSessionStruct & outSession,
Expand Down
2 changes: 1 addition & 1 deletion scripts/tools/check_includes_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@
'src/app/clusters/media-playback-server/media-playback-delegate.h': {'list'},
'src/app/clusters/target-navigator-server/target-navigator-delegate.h': {'list'},
# WebRTCTransportProvider is for Camera and is intended to run on devices that are capable of handling these types.
'src/app/clusters/webrtc-transport-provider-server/webrtc-transport-provider-server.h': {'string', 'vector'},
'src/app/clusters/webrtc-transport-provider-server/WebRTCTransportProviderCluster.h': {'string', 'vector'},
# Camera AV Stream Management and Camera AV Settings User Level Management clusters are expected to run on resource-capable devices
'src/app/clusters/camera-av-stream-management-server/camera-av-stream-management-server.h': {'vector'},
'src/app/clusters/camera-av-stream-management-server/camera-av-stream-management-server.cpp': {'set'},
Expand Down
1 change: 1 addition & 0 deletions src/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ if (chip_build_tests) {
"${chip_root}/src/app/clusters/ethernet-network-diagnostics-server/tests",
"${chip_root}/src/app/clusters/operational-credentials-server/tests",
"${chip_root}/src/app/clusters/push-av-stream-transport-server/tests",
"${chip_root}/src/app/clusters/webrtc-transport-provider-server/tests",
"${chip_root}/src/app/clusters/webrtc-transport-requestor-server/tests",
"${chip_root}/src/app/clusters/zone-management-server/tests",
"${chip_root}/src/app/clusters/wifi-network-diagnostics-server/tests",
Expand Down
19 changes: 18 additions & 1 deletion src/app/clusters/webrtc-transport-provider-server/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,22 @@
# 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.
group("webrtc-transport-provider-server") {

import("//build_overrides/build.gni")
import("//build_overrides/chip.gni")

source_set("webrtc-transport-provider-server") {
sources = [
"CodegenIntegration.cpp",
"WebRTCTransportProviderCluster.cpp",
"WebRTCTransportProviderCluster.h",
]

public_deps = [
"${chip_root}/src/app:attribute-access",
"${chip_root}/src/app/data-model-provider:metadata",
"${chip_root}/src/app/server-cluster",
"${chip_root}/src/lib/core:error",
"${chip_root}/zzz_generated/app-common/clusters/WebRTCTransportProvider",
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,27 +16,17 @@
* limitations under the License.
*/

#pragma once
#include <lib/support/logging/CHIPLogging.h>

#include <app/clusters/webrtc-transport-provider-server/webrtc-transport-provider-server.h>
// These callbacks are required by the Ember/codegen integration but are not
// needed for the server cluster interface implementation.

namespace chip {
namespace app {
namespace Clusters {
namespace WebRTCTransportProvider {

/**
* The application interface to define the options & implement commands.
*/
class WebRTCTransportProviderController
void MatterWebRTCTransportProviderPluginServerInitCallback()
{
public:
virtual ~WebRTCTransportProviderController() = default;
ChipLogProgress(Zcl, "Initializing WebRTC Transport Provider cluster.");
}

virtual void SetWebRTCTransportProvider(std::unique_ptr<WebRTCTransportProviderServer> webRTCTransportProvider) = 0;
};

} // namespace WebRTCTransportProvider
} // namespace Clusters
} // namespace app
} // namespace chip
void MatterWebRTCTransportProviderPluginServerShutdownCallback()
{
ChipLogProgress(Zcl, "Shutdown WebRTC Transport Provider cluster.");
}
Loading
Loading