Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(46)

Unified Diff: webrtc/examples/unityplugin/unity_plugin_apis.cc

Issue 2823783002: An example of Unity native plugin of webrtc for Windows OS (Closed)
Patch Set: Add readme and owners files Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/examples/unityplugin/unity_plugin_apis.cc
diff --git a/webrtc/examples/unityplugin/unity_plugin_apis.cc b/webrtc/examples/unityplugin/unity_plugin_apis.cc
new file mode 100644
index 0000000000000000000000000000000000000000..834fb1c93edbc7713fecd6d3817ea05e0f1f250b
--- /dev/null
+++ b/webrtc/examples/unityplugin/unity_plugin_apis.cc
@@ -0,0 +1,178 @@
+/*
+ * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+#include "webrtc/examples/unityplugin/unity_plugin_apis.h"
+
+#include <map>
+#include <string>
+
+#include "webrtc/examples/unityplugin/simple_peer_connection.h"
+
+static int g_peer_connection_id = 1;
+static std::map<int, rtc::scoped_refptr<Conductor>> g_conductor_map;
+
+int CreatePeerConnection() {
+ g_conductor_map[g_peer_connection_id] =
+ new rtc::RefCountedObject<Conductor>();
+
+ if (!g_conductor_map[g_peer_connection_id]->InitializePeerConnection(false))
+ return -1;
+
+ return g_peer_connection_id++;
+}
+
+bool ClosePeerConnection(int peer_connection_id) {
+ if (!g_conductor_map.count(peer_connection_id))
+ return false;
+
+ g_conductor_map[peer_connection_id]->DeletePeerConnection();
+ g_conductor_map.erase(peer_connection_id);
+ return true;
+}
+
+bool AddStream(int peer_connection_id, bool audio_only) {
+ if (!g_conductor_map.count(peer_connection_id))
+ return false;
+
+ g_conductor_map[peer_connection_id]->AddStreams(audio_only);
+ return true;
+}
+
+bool AddDataChannel(int peer_connection_id) {
+ if (!g_conductor_map.count(peer_connection_id))
+ return false;
+
+ return g_conductor_map[peer_connection_id]->CreateDataChannel();
+}
+
+bool CreateOffer(int peer_connection_id) {
+ if (!g_conductor_map.count(peer_connection_id))
+ return false;
+
+ return g_conductor_map[peer_connection_id]->CreateOffer();
+}
+
+bool CreateAnswer(int peer_connection_id) {
+ if (!g_conductor_map.count(peer_connection_id))
+ return false;
+
+ return g_conductor_map[peer_connection_id]->CreateAnswer();
+}
+
+bool SendDataViaDataChannel(int peer_connection_id, const char* data) {
+ if (!g_conductor_map.count(peer_connection_id))
+ return false;
+
+ std::string s(data);
+ g_conductor_map[peer_connection_id]->SendDataViaDataChannel(s);
+
+ return true;
+}
+
+bool SetAudioControl(int peer_connection_id, bool is_mute, bool is_record) {
+ if (!g_conductor_map.count(peer_connection_id))
+ return false;
+
+ g_conductor_map[peer_connection_id]->SetAudioControl(is_mute, is_record);
+ return true;
+}
+
+// Register callback functions.
+bool RegisterOnVideoFramReady(int peer_connection_id,
+ VIDEOFRAMEREADY_CALLBACK callback) {
+ if (!g_conductor_map.count(peer_connection_id))
+ return false;
+
+ g_conductor_map[peer_connection_id]->RegisterOnVideoFramReady(callback);
+ return true;
+}
+
+bool RegisterOnLocalDataChannelReady(int peer_connection_id,
+ LOCALDATACHANNELREADY_CALLBACK callback) {
+ if (!g_conductor_map.count(peer_connection_id))
+ return false;
+
+ g_conductor_map[peer_connection_id]->RegisterOnLocalDataChannelReady(
+ callback);
+ return true;
+}
+
+bool RegisterOnDataFromDataChannelReady(
+ int peer_connection_id,
+ DATAFROMEDATECHANNELREADY_CALLBACK callback) {
+ if (!g_conductor_map.count(peer_connection_id))
+ return false;
+
+ g_conductor_map[peer_connection_id]->RegisterOnDataFromDataChannelReady(
+ callback);
+ return true;
+}
+
+bool RegisterOnFailure(int peer_connection_id, FAILURE_CALLBACK callback) {
+ if (!g_conductor_map.count(peer_connection_id))
+ return false;
+
+ g_conductor_map[peer_connection_id]->RegisterOnFailure(callback);
+ return true;
+}
+
+bool RegisterOnAudioBusReady(int peer_connection_id,
+ AUDIOBUSREADY_CALLBACK callback) {
+ if (!g_conductor_map.count(peer_connection_id))
+ return false;
+
+ g_conductor_map[peer_connection_id]->RegisterOnAudioBusReady(callback);
+ return true;
+}
+
+// Singnaling channel related functions.
+bool RegisterOnLocalSdpReadytoSend(int peer_connection_id,
+ LOCALSDPREADYTOSEND_CALLBACK callback) {
+ if (!g_conductor_map.count(peer_connection_id))
+ return false;
+
+ g_conductor_map[peer_connection_id]->RegisterOnLocalSdpReadytoSend(callback);
+ return true;
+}
+
+bool RegisterOnIceCandiateReadytoSend(
+ int peer_connection_id,
+ ICECANDIDATEREADYTOSEND_CALLBACK callback) {
+ if (!g_conductor_map.count(peer_connection_id))
+ return false;
+
+ g_conductor_map[peer_connection_id]->RegisterOnIceCandiateReadytoSend(
+ callback);
+ return true;
+}
+
+int ReceivedSdp(int peer_connection_id, const char* sdp) {
+ // Create a conductor if no one exists.
+ int id = -1;
+ if (g_conductor_map.count(peer_connection_id)) {
+ id = peer_connection_id;
+ } else {
+ id = g_peer_connection_id++;
+ g_conductor_map[id] = new rtc::RefCountedObject<Conductor>();
+ if (!g_conductor_map[id]->InitializePeerConnection(true))
+ return -1;
+ }
+
+ g_conductor_map[id]->ReceivedSdp(sdp);
+ return id;
+}
+
+bool ReceivedIceCandidate(int peer_connection_id, const char* ice_candidate) {
+ if (!g_conductor_map.count(peer_connection_id))
+ return false;
+
+ return g_conductor_map[peer_connection_id]->ReceivedIceCandidate(
+ ice_candidate);
+}

Powered by Google App Engine
This is Rietveld 408576698