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

Unified Diff: chrome/renderer/media/cast_session_delegate.cc

Issue 138753004: Cast: IPC glue between cast library transport and encoders. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: minor cleanup Created 6 years, 10 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
« no previous file with comments | « chrome/renderer/media/cast_session_delegate.h ('k') | chrome/renderer/media/cast_transport_sender_ipc.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/renderer/media/cast_session_delegate.cc
diff --git a/chrome/renderer/media/cast_session_delegate.cc b/chrome/renderer/media/cast_session_delegate.cc
index 5da3443f493cb3339e0c6ce789e1a66776af4f78..d5133b61cc0259899b38a5d422f96ca694b321a3 100644
--- a/chrome/renderer/media/cast_session_delegate.cc
+++ b/chrome/renderer/media/cast_session_delegate.cc
@@ -6,6 +6,7 @@
#include "base/logging.h"
#include "base/message_loop/message_loop_proxy.h"
+#include "chrome/renderer/media/cast_transport_sender_ipc.h"
#include "content/public/renderer/p2p_socket_client.h"
#include "content/public/renderer/render_thread.h"
#include "media/cast/cast_config.h"
@@ -20,56 +21,13 @@ using media::cast::CastEnvironment;
using media::cast::CastSender;
using media::cast::VideoSenderConfig;
-namespace {
-
-// This is a dummy class that does nothing. This is needed temporarily
-// to enable tests for cast.streaming extension APIs.
-// The real implementation of CastTransportSender is to use IPC to send
-// data to the browser process.
-// See crbug.com/327482 for more details.
-class DummyTransport : public media::cast::transport::CastTransportSender {
- public:
- DummyTransport() {}
- virtual ~DummyTransport() {}
-
- // CastTransportSender implementations.
- virtual void SetPacketReceiver(
- const media::cast::transport::PacketReceiverCallback& packet_receiver)
- OVERRIDE {}
- virtual void InsertCodedAudioFrame(
- const media::cast::transport::EncodedAudioFrame* audio_frame,
- const base::TimeTicks& recorded_time) OVERRIDE {}
- virtual void InsertCodedVideoFrame(
- const media::cast::transport::EncodedVideoFrame* video_frame,
- const base::TimeTicks& capture_time) OVERRIDE {}
- virtual void SendRtcpFromRtpSender(
- uint32 packet_type_flags,
- const media::cast::transport::RtcpSenderInfo& sender_info,
- const media::cast::transport::RtcpDlrrReportBlock& dlrr,
- const media::cast::transport::RtcpSenderLogMessage& sender_log,
- uint32 sending_ssrc,
- const std::string& c_name) OVERRIDE {}
- virtual void ResendPackets(
- bool is_audio,
- const media::cast::transport::MissingFramesAndPacketsMap& missing_packets)
- OVERRIDE {}
- virtual void SubscribeAudioRtpStatsCallback(
- const media::cast::transport::CastTransportRtpStatistics& callback)
- OVERRIDE {}
- virtual void SubscribeVideoRtpStatsCallback(
- const media::cast::transport::CastTransportRtpStatistics& callback)
- OVERRIDE {}
-
- private:
- DISALLOW_COPY_AND_ASSIGN(DummyTransport);
-};
-} // namespace
-
CastSessionDelegate::CastSessionDelegate()
: audio_encode_thread_("CastAudioEncodeThread"),
video_encode_thread_("CastVideoEncodeThread"),
+ transport_configured_(false),
io_message_loop_proxy_(
content::RenderThread::Get()->GetIOMessageLoopProxy()) {
+ DCHECK(io_message_loop_proxy_);
}
CastSessionDelegate::~CastSessionDelegate() {
@@ -80,7 +38,6 @@ void CastSessionDelegate::Initialize() {
if (cast_environment_)
return; // Already initialized.
- cast_transport_.reset(new DummyTransport());
audio_encode_thread_.Start();
video_encode_thread_.Start();
@@ -105,32 +62,71 @@ void CastSessionDelegate::StartAudio(
DCHECK(io_message_loop_proxy_->BelongsToCurrentThread());
audio_config_.reset(new AudioSenderConfig(config));
- StartSendingInternal(callback, true);
+ video_frame_input_available_callback_ = callback;
+ StartSendingInternal();
}
void CastSessionDelegate::StartVideo(
const VideoSenderConfig& config,
const FrameInputAvailableCallback& callback) {
DCHECK(io_message_loop_proxy_->BelongsToCurrentThread());
+ audio_frame_input_available_callback_ = callback;
video_config_.reset(new VideoSenderConfig(config));
- StartSendingInternal(callback, false);
+ StartSendingInternal();
+}
+
+void CastSessionDelegate::StartUDP(
+ const net::IPEndPoint& local_endpoint,
+ const net::IPEndPoint& remote_endpoint) {
+ DCHECK(io_message_loop_proxy_->BelongsToCurrentThread());
+ transport_configured_ = true;
+ local_endpoint_ = local_endpoint;
+ remote_endpoint_ = remote_endpoint;
+ StartSendingInternal();
}
-void CastSessionDelegate::StartSendingInternal(
- const FrameInputAvailableCallback& callback,
- bool is_audio) {
+void CastSessionDelegate::StatusNotificationCB(
+ media::cast::transport::CastTransportStatus unused_status) {
DCHECK(io_message_loop_proxy_->BelongsToCurrentThread());
+ // TODO(hubbe): Call javascript UDPTransport error function.
+}
+
+void CastSessionDelegate::StartSendingInternal() {
+ DCHECK(io_message_loop_proxy_->BelongsToCurrentThread());
+
+ // No transport, wait.
+ if (!transport_configured_)
+ return;
+
+ // No audio or video, wait.
+ if (!audio_config_ && !video_config_)
+ return;
Initialize();
- if (is_audio) {
- audio_frame_input_available_callback_.reset(
- new FrameInputAvailableCallback(callback));
- } else {
- video_frame_input_available_callback_.reset(
- new FrameInputAvailableCallback(callback));
+ media::cast::transport::CastTransportConfig config;
+
+ // TODO(hubbe): set config.aes_key and config.aes_iv_mask.
+ config.local_endpoint = local_endpoint_;
+ config.receiver_endpoint = remote_endpoint_;
+ if (audio_config_) {
+ config.audio_ssrc = audio_config_->sender_ssrc;
+ config.audio_codec = audio_config_->codec;
+ config.audio_rtp_config = audio_config_->rtp_config;
+ config.audio_frequency = audio_config_->frequency;
+ config.audio_channels = audio_config_->channels;
}
+ if (video_config_) {
+ config.video_ssrc = video_config_->sender_ssrc;
+ config.video_codec = video_config_->codec;
+ config.video_rtp_config = video_config_->rtp_config;
+ }
+
+ cast_transport_.reset(new CastTransportSenderIPC(
+ config,
+ base::Bind(&CastSessionDelegate::StatusNotificationCB,
+ base::Unretained(this))));
cast_sender_.reset(CastSender::CreateCastSender(
cast_environment_,
@@ -140,6 +136,7 @@ void CastSessionDelegate::StartSendingInternal(
base::Bind(&CastSessionDelegate::InitializationResult,
base::Unretained(this)),
cast_transport_.get()));
+ cast_transport_->SetPacketReceiver(cast_sender_->packet_receiver());
}
void CastSessionDelegate::InitializationResult(
@@ -148,11 +145,11 @@ void CastSessionDelegate::InitializationResult(
// TODO(pwestin): handle the error codes.
if (result == media::cast::STATUS_INITIALIZED) {
- if (audio_frame_input_available_callback_) {
- audio_frame_input_available_callback_->Run(cast_sender_->frame_input());
+ if (!audio_frame_input_available_callback_.is_null()) {
+ audio_frame_input_available_callback_.Run(cast_sender_->frame_input());
}
- if (video_frame_input_available_callback_) {
- video_frame_input_available_callback_->Run(cast_sender_->frame_input());
+ if (!video_frame_input_available_callback_.is_null()) {
+ video_frame_input_available_callback_.Run(cast_sender_->frame_input());
}
}
}
« no previous file with comments | « chrome/renderer/media/cast_session_delegate.h ('k') | chrome/renderer/media/cast_transport_sender_ipc.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698