Chromium Code Reviews| Index: remoting/protocol/rtp_video_writer.cc |
| diff --git a/remoting/protocol/rtp_video_writer.cc b/remoting/protocol/rtp_video_writer.cc |
| index d5d4b752236430ea21435c7536f6918910c4b501..d18199aba3f6c363ef6a7f51319b7fc910d0dc1a 100644 |
| --- a/remoting/protocol/rtp_video_writer.cc |
| +++ b/remoting/protocol/rtp_video_writer.cc |
| @@ -4,9 +4,11 @@ |
| #include "remoting/protocol/rtp_video_writer.h" |
| +#include "base/bind.h" |
| #include "base/task.h" |
| #include "net/base/io_buffer.h" |
| #include "remoting/base/compound_buffer.h" |
| +#include "remoting/base/constants.h" |
| #include "remoting/proto/video.pb.h" |
| #include "remoting/protocol/rtp_writer.h" |
| #include "remoting/protocol/session.h" |
| @@ -18,18 +20,56 @@ namespace { |
| const int kMtu = 1200; |
| } // namespace |
| -RtpVideoWriter::RtpVideoWriter() { } |
| +RtpVideoWriter::RtpVideoWriter() |
| + : initialized_(false) { |
| +} |
| RtpVideoWriter::~RtpVideoWriter() { |
| Close(); |
| } |
| -void RtpVideoWriter::Init(protocol::Session* session) { |
| - rtp_writer_.Init(session->video_rtp_channel()); |
| +void RtpVideoWriter::Init(protocol::Session* session, |
| + const InitializedCallback& callback) { |
| + initialized_callback_ = callback; |
| + session->CreateDatagramChannel( |
| + kVideoRtpChannelName, |
| + base::Bind(&RtpVideoWriter::OnChannelReady, base::Unretained(this))); |
| + session->CreateDatagramChannel( |
| + kVideoRtcpChannelName, |
| + base::Bind(&RtpVideoWriter::OnChannelReady, base::Unretained(this))); |
| +} |
| + |
| +void RtpVideoWriter::OnChannelReady(const std::string& name, |
| + net::Socket* socket) { |
| + if (!socket) { |
| + if (!initialized_) { |
| + initialized_callback_.Run(false); |
| + initialized_ = true; |
|
Wez
2011/08/04 23:49:52
Set before callback?
Sergey Ulanov
2011/08/09 19:41:10
Done.
|
| + } |
| + return; |
| + } |
| + |
| + if (name == kVideoRtpChannelName) { |
| + DCHECK(!rtp_channel_.get()); |
| + rtp_channel_.reset(socket); |
| + rtp_writer_.Init(socket); |
| + } else if (name == kVideoRtcpChannelName) { |
| + DCHECK(!rtcp_channel_.get()); |
| + rtcp_channel_.reset(socket); |
| + // TODO(sergeyu): Use RTCP channel somehow. |
| + } |
| + |
| + if (rtp_channel_.get() && rtcp_channel_.get()) { |
| + DCHECK(!initialized_); |
| + initialized_callback_.Run(true); |
| + initialized_ = true; |
|
Wez
2011/08/04 23:49:52
Set before callback?
Do we really need the |initi
Sergey Ulanov
2011/08/09 19:41:10
Yes, we do. It's for the case when initialization
|
| + } |
| } |
| void RtpVideoWriter::Close() { |
| rtp_writer_.Close(); |
| + rtp_channel_.reset(); |
| + rtcp_channel_.reset(); |
| } |
| void RtpVideoWriter::ProcessVideoPacket(const VideoPacket* packet, Task* done) { |