Index: remoting/protocol/rtp_video_reader.cc |
diff --git a/remoting/protocol/rtp_video_reader.cc b/remoting/protocol/rtp_video_reader.cc |
index b6d9e0bcbd66f67b550b51d48719c941df1db275..9549addd5b575369d317d2dfb7421f4fe148deee 100644 |
--- a/remoting/protocol/rtp_video_reader.cc |
+++ b/remoting/protocol/rtp_video_reader.cc |
@@ -4,7 +4,9 @@ |
#include "remoting/protocol/rtp_video_reader.h" |
+#include "base/bind.h" |
#include "base/task.h" |
+#include "remoting/base/constants.h" |
#include "remoting/proto/video.pb.h" |
#include "remoting/protocol/session.h" |
@@ -22,7 +24,8 @@ RtpVideoReader::PacketsQueueEntry::PacketsQueueEntry() |
} |
RtpVideoReader::RtpVideoReader() |
- : last_sequence_number_(0), |
+ : initialized_(false), |
+ last_sequence_number_(0), |
video_stub_(NULL) { |
} |
@@ -30,11 +33,47 @@ RtpVideoReader::~RtpVideoReader() { |
ResetQueue(); |
} |
-void RtpVideoReader::Init(protocol::Session* session, VideoStub* video_stub) { |
- rtp_reader_.Init(session->video_rtp_channel(), |
- NewCallback(this, &RtpVideoReader::OnRtpPacket)); |
- rtcp_writer_.Init(session->video_rtcp_channel()); |
+void RtpVideoReader::Init(protocol::Session* session, |
+ VideoStub* video_stub, |
+ const InitializedCallback& callback) { |
+ initialized_callback_ = callback; |
video_stub_ = video_stub; |
+ |
+ session->CreateDatagramChannel( |
+ kVideoRtpChannelName, |
+ base::Bind(&RtpVideoReader::OnChannelReady, base::Unretained(this))); |
+ session->CreateDatagramChannel( |
+ kVideoRtcpChannelName, |
+ base::Bind(&RtpVideoReader::OnChannelReady, base::Unretained(this))); |
+} |
+ |
+void RtpVideoReader::OnChannelReady(const std::string& name, |
+ net::Socket* socket) { |
+ if (!socket) { |
+ if (!initialized_) { |
+ initialized_callback_.Run(false); |
+ initialized_ = true; |
+ } |
+ return; |
+ } |
+ |
+ if (name == kVideoRtpChannelName) { |
+ DCHECK(!rtp_channel_.get()); |
+ rtp_channel_.reset(socket); |
+ rtp_reader_.Init(socket, NewCallback(this, &RtpVideoReader::OnRtpPacket)); |
+ } else if (name == kVideoRtcpChannelName) { |
+ DCHECK(!rtcp_channel_.get()); |
+ rtcp_channel_.reset(socket); |
+ rtcp_writer_.Init(socket); |
+ } else { |
+ NOTREACHED(); |
+ } |
+ |
+ if (rtp_channel_.get() && rtcp_channel_.get()) { |
+ DCHECK(!initialized_); |
+ initialized_callback_.Run(true); |
+ initialized_ = true; |
Wez
2011/08/04 23:49:52
Need to set |initialize_| before invoking callback
Sergey Ulanov
2011/08/09 19:41:10
Done.
|
+ } |
} |
void RtpVideoReader::ResetQueue() { |