OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "remoting/protocol/protobuf_video_writer.h" | |
6 | |
7 #include "base/bind.h" | |
8 #include "net/socket/stream_socket.h" | |
9 #include "remoting/base/constants.h" | |
10 #include "remoting/proto/video.pb.h" | |
11 #include "remoting/protocol/message_serialization.h" | |
12 #include "remoting/protocol/session.h" | |
13 #include "remoting/protocol/stream_channel_factory.h" | |
14 | |
15 namespace remoting { | |
16 namespace protocol { | |
17 | |
18 ProtobufVideoWriter::ProtobufVideoWriter() | |
19 : channel_factory_(NULL) { | |
20 } | |
21 | |
22 ProtobufVideoWriter::~ProtobufVideoWriter() { | |
23 Close(); | |
24 } | |
25 | |
26 void ProtobufVideoWriter::Init(protocol::Session* session, | |
27 const InitializedCallback& callback) { | |
28 channel_factory_ = session->GetTransportChannelFactory(); | |
29 initialized_callback_ = callback; | |
30 | |
31 channel_factory_->CreateChannel( | |
32 kVideoChannelName, | |
33 base::Bind(&ProtobufVideoWriter::OnChannelReady, base::Unretained(this))); | |
34 } | |
35 | |
36 void ProtobufVideoWriter::OnChannelReady(scoped_ptr<net::StreamSocket> socket) { | |
37 if (!socket.get()) { | |
38 initialized_callback_.Run(false); | |
39 return; | |
40 } | |
41 | |
42 DCHECK(!channel_.get()); | |
43 channel_ = socket.Pass(); | |
44 // TODO(sergeyu): Provide WriteFailedCallback for the buffered writer. | |
45 buffered_writer_.Init( | |
46 channel_.get(), BufferedSocketWriter::WriteFailedCallback()); | |
47 | |
48 initialized_callback_.Run(true); | |
49 } | |
50 | |
51 void ProtobufVideoWriter::Close() { | |
52 buffered_writer_.Close(); | |
53 channel_.reset(); | |
54 if (channel_factory_) { | |
55 channel_factory_->CancelChannelCreation(kVideoChannelName); | |
56 channel_factory_ = NULL; | |
57 } | |
58 } | |
59 | |
60 bool ProtobufVideoWriter::is_connected() { | |
61 return channel_.get() != NULL; | |
62 } | |
63 | |
64 void ProtobufVideoWriter::ProcessVideoPacket(scoped_ptr<VideoPacket> packet, | |
65 const base::Closure& done) { | |
66 buffered_writer_.Write(SerializeAndFrameMessage(*packet), done); | |
67 } | |
68 | |
69 } // namespace protocol | |
70 } // namespace remoting | |
OLD | NEW |