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

Unified Diff: chrome/renderer/extensions/webrtc_native_handler.cc

Issue 47343005: Data type conversion between extensions API and Cast API (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: removed bool Created 7 years, 2 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: chrome/renderer/extensions/webrtc_native_handler.cc
diff --git a/chrome/renderer/extensions/webrtc_native_handler.cc b/chrome/renderer/extensions/webrtc_native_handler.cc
index 2695ff7531d22dbe038a85430fec6299ac7ad3df..4dd40ab55f35d46e3094e61b9a6801bef6be7406 100644
--- a/chrome/renderer/extensions/webrtc_native_handler.cc
+++ b/chrome/renderer/extensions/webrtc_native_handler.cc
@@ -4,6 +4,8 @@
#include "chrome/renderer/extensions/webrtc_native_handler.h"
+#include <functional>
+
#include "base/logging.h"
#include "chrome/common/extensions/api/webrtc_cast_send_transport.h"
#include "chrome/common/extensions/api/webrtc_cast_udp_transport.h"
@@ -17,6 +19,7 @@
using content::V8ValueConverter;
// Extension types.
+using extensions::api::webrtc_cast_send_transport::CodecSpecificParams;
using extensions::api::webrtc_cast_send_transport::RtpCaps;
using extensions::api::webrtc_cast_send_transport::RtpParams;
using extensions::api::webrtc_cast_send_transport::RtpPayloadParams;
@@ -32,30 +35,133 @@ const char kInvalidUdpParams[] = "Invalid UDP params";
const char kInvalidRtpCaps[] = "Invalid value for RTP caps";
const char kInvalidRtpParams[] = "Invalid value for RTP params";
const char kUnableToConvertArgs[] = "Unable to convert arguments";
-const char kUnableToConvertCaps[] = "Unable to convert caps";
const char kUnableToConvertParams[] = "Unable to convert params";
// These helper methods are used to convert between Extension API
// types and Cast types.
-bool ToCastRtpCaps(const RtpCaps& ext_caps, CastRtpCaps* cast_caps) {
- NOTIMPLEMENTED();
- return true;
+void ToCastCodecSpecificParams(const CodecSpecificParams& ext_params,
+ CastCodecSpecificParams* cast_params) {
+ cast_params->key = ext_params.key;
+ cast_params->value = ext_params.value;
+}
+
+void FromCastCodecSpecificParams(const CastCodecSpecificParams& cast_params,
+ CodecSpecificParams* ext_params) {
+ ext_params->key = cast_params.key;
+ ext_params->value = cast_params.value;
+}
+
+void ToCastRtpPayloadParams(const RtpPayloadParams& ext_params,
+ CastRtpPayloadParams* cast_params) {
+ cast_params->payload_type = ext_params.payload_type;
+ cast_params->codec_name = ext_params.codec_name;
+ cast_params->ssrc = ext_params.ssrc ? *ext_params.ssrc : 0;
+ cast_params->clock_rate = ext_params.clock_rate ? *ext_params.clock_rate : 0;
+ cast_params->min_bitrate =
+ ext_params.min_bitrate ? *ext_params.min_bitrate : 0;
+ cast_params->max_bitrate =
+ ext_params.max_bitrate ? *ext_params.max_bitrate : 0;
+ cast_params->channels = ext_params.channels ? *ext_params.channels : 0;
+ cast_params->width = ext_params.width ? *ext_params.width : 0;
+ cast_params->height = ext_params.height ? *ext_params.height : 0;
+ for (size_t i = 0; i < ext_params.codec_specific_params.size(); ++i) {
+ CastCodecSpecificParams cast_codec_params;
+ ToCastCodecSpecificParams(*ext_params.codec_specific_params[i],
+ &cast_codec_params);
+ cast_params->codec_specific_params.push_back(cast_codec_params);
+ }
+}
+
+void FromCastRtpPayloadParams(const CastRtpPayloadParams& cast_params,
+ RtpPayloadParams* ext_params) {
+ ext_params->payload_type = cast_params.payload_type;
+ ext_params->codec_name = cast_params.codec_name;
+ if (cast_params.ssrc) {
+ ext_params->ssrc.reset(new int);
+ *ext_params->ssrc = cast_params.ssrc;
+ }
+ if (cast_params.clock_rate) {
+ ext_params->clock_rate.reset(new int);
+ *ext_params->clock_rate = cast_params.clock_rate;
+ }
+ if (cast_params.min_bitrate) {
+ ext_params->min_bitrate.reset(new int);
+ *ext_params->min_bitrate = cast_params.min_bitrate;
+ }
+ if (cast_params.max_bitrate) {
+ ext_params->max_bitrate.reset(new int);
+ *ext_params->max_bitrate = cast_params.max_bitrate;
+ }
+ if (cast_params.channels) {
+ ext_params->channels.reset(new int);
+ *ext_params->channels = cast_params.channels;
+ }
+ if (cast_params.width) {
+ ext_params->width.reset(new int);
+ *ext_params->width = cast_params.width;
+ }
+ if (cast_params.height) {
+ ext_params->height.reset(new int);
+ *ext_params->height = cast_params.height;
+ }
+ for (size_t i = 0; i < cast_params.codec_specific_params.size(); ++i) {
+ linked_ptr<CodecSpecificParams> ext_codec_params(
+ new CodecSpecificParams());
+ FromCastCodecSpecificParams(cast_params.codec_specific_params[i],
+ ext_codec_params.get());
+ ext_params->codec_specific_params.push_back(ext_codec_params);
+ }
+}
+
+void ToCastRtpCaps(const RtpCaps& ext_caps, CastRtpCaps* cast_caps) {
+ std::copy(ext_caps.rtcp_features.begin(), ext_caps.rtcp_features.end(),
+ cast_caps->rtcp_features.begin());
+ std::copy(ext_caps.fec_mechanisms.begin(), ext_caps.fec_mechanisms.end(),
+ cast_caps->fec_mechanisms.begin());
+ for (size_t i = 0; i < ext_caps.payloads.size(); ++i) {
+ CastRtpPayloadParams cast_payload_params;
+ ToCastRtpPayloadParams(*ext_caps.payloads[i], &cast_payload_params);
+ cast_caps->payloads.push_back(cast_payload_params);
+ }
}
-bool FromCastRtpCaps(const CastRtpCaps& cast_caps, RtpCaps* ext_caps) {
- NOTIMPLEMENTED();
- return true;
+void FromCastRtpCaps(const CastRtpCaps& cast_caps, RtpCaps* ext_caps) {
+ std::copy(cast_caps.rtcp_features.begin(), cast_caps.rtcp_features.end(),
+ ext_caps->rtcp_features.begin());
+ std::copy(cast_caps.fec_mechanisms.begin(), cast_caps.fec_mechanisms.end(),
+ ext_caps->fec_mechanisms.begin());
+ for (size_t i = 0; i < cast_caps.payloads.size(); ++i) {
+ linked_ptr<RtpPayloadParams> ext_payload_params(new RtpPayloadParams());
+ FromCastRtpPayloadParams(cast_caps.payloads[i], ext_payload_params.get());
+ ext_caps->payloads.push_back(ext_payload_params);
+ }
}
-bool ToCastRtpParams(const RtpParams& ext_params, CastRtpParams* cast_params) {
- NOTIMPLEMENTED();
- return true;
+void ToCastRtpParams(const RtpParams& ext_params, CastRtpParams* cast_params) {
+ std::copy(ext_params.rtcp_features.begin(), ext_params.rtcp_features.end(),
+ cast_params->rtcp_features.begin());
+ std::copy(ext_params.fec_mechanisms.begin(), ext_params.fec_mechanisms.end(),
+ cast_params->fec_mechanisms.begin());
+ for (size_t i = 0; i < ext_params.payloads.size(); ++i) {
+ CastRtpPayloadParams cast_payload_params;
+ ToCastRtpPayloadParams(*ext_params.payloads[i], &cast_payload_params);
+ cast_params->payloads.push_back(cast_payload_params);
+ }
}
-bool FromCastRtpParams(const CastRtpParams& cast_params,
+void FromCastRtpParams(const CastRtpParams& cast_params,
RtpParams* ext_params) {
- NOTIMPLEMENTED();
- return true;
+ std::copy(cast_params.rtcp_features.begin(), cast_params.rtcp_features.end(),
+ ext_params->rtcp_features.begin());
+ std::copy(cast_params.fec_mechanisms.begin(),
+ cast_params.fec_mechanisms.end(),
+ ext_params->fec_mechanisms.begin());
+ for (size_t i = 0; i < cast_params.payloads.size(); ++i) {
+ linked_ptr<RtpPayloadParams> ext_payload_params(new RtpPayloadParams());
+ FromCastRtpPayloadParams(cast_params.payloads[i],
+ ext_payload_params.get());
+ ext_params->payloads.push_back(ext_payload_params);
+ }
}
} // namespace
@@ -162,18 +268,10 @@ void WebRtcNativeHandler::CreateParamsCastSendTransport(
}
CastRtpCaps cast_remote_caps;
- if (!ToCastRtpCaps(*remote_caps, &cast_remote_caps)) {
- v8::ThrowException(v8::Exception::TypeError(v8::String::New(
- kUnableToConvertCaps)));
- return;
- }
+ ToCastRtpCaps(*remote_caps, &cast_remote_caps);
CastRtpParams cast_params = transport->CreateParams(cast_remote_caps);
RtpParams params;
- if (!FromCastRtpParams(cast_params, &params)) {
- v8::ThrowException(v8::Exception::TypeError(v8::String::New(
- kUnableToConvertParams)));
- return;
- }
+ FromCastRtpParams(cast_params, &params);
scoped_ptr<base::DictionaryValue> params_value = params.ToValue();
v8::Handle<v8::Value> params_v8 = converter->ToV8Value(
@@ -195,11 +293,7 @@ void WebRtcNativeHandler::GetCapsCastSendTransport(
CastRtpCaps cast_caps = transport->GetCaps();
RtpCaps caps;
- if (!FromCastRtpCaps(cast_caps, &caps)) {
- v8::ThrowException(v8::Exception::TypeError(v8::String::New(
- kUnableToConvertCaps)));
- return;
- }
+ FromCastRtpCaps(cast_caps, &caps);
scoped_ptr<base::DictionaryValue> caps_value = caps.ToValue();
scoped_ptr<V8ValueConverter> converter(V8ValueConverter::create());
@@ -236,11 +330,7 @@ void WebRtcNativeHandler::StartCastSendTransport(
}
CastRtpCaps cast_params;
- if (!ToCastRtpParams(*params, &cast_params)) {
- v8::ThrowException(v8::Exception::TypeError(v8::String::New(
- kUnableToConvertParams)));
- return;
- }
+ ToCastRtpParams(*params, &cast_params);
justinlin 2013/11/01 16:08:21 Maybe you've already considered this, but why not
Alpha Left Google 2013/11/01 22:27:47 I would like to separate cast and extensions types
transport->Start(cast_params);
}

Powered by Google App Engine
This is Rietveld 408576698