diff options
author | kxing@chromium.org <kxing@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-15 22:21:40 +0000 |
---|---|---|
committer | kxing@chromium.org <kxing@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-15 22:21:40 +0000 |
commit | 8f7940244f8402881e94c258551f836262827a12 (patch) | |
tree | 1694ada99949df620cfceb2b589df75620812cbb /remoting | |
parent | c8481e93207795eac1a1c39f7cb71dc356d8649d (diff) | |
download | chromium_src-8f7940244f8402881e94c258551f836262827a12.zip chromium_src-8f7940244f8402881e94c258551f836262827a12.tar.gz chromium_src-8f7940244f8402881e94c258551f836262827a12.tar.bz2 |
Added files for audio readers.
Review URL: https://chromiumcodereview.appspot.com/10562007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@142497 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'remoting')
-rw-r--r-- | remoting/protocol/audio_reader.cc | 68 | ||||
-rw-r--r-- | remoting/protocol/audio_reader.h | 67 | ||||
-rw-r--r-- | remoting/remoting.gyp | 2 |
3 files changed, 137 insertions, 0 deletions
diff --git a/remoting/protocol/audio_reader.cc b/remoting/protocol/audio_reader.cc new file mode 100644 index 0000000..6a607bd --- /dev/null +++ b/remoting/protocol/audio_reader.cc @@ -0,0 +1,68 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "remoting/protocol/audio_reader.h" + +#include "base/bind.h" +#include "net/socket/stream_socket.h" +#include "remoting/base/constants.h" +#include "remoting/protocol/session.h" +#include "remoting/protocol/session_config.h" + +namespace remoting { +namespace protocol { + +AudioReader::AudioReader(AudioPacket::Encoding encoding) + : session_(NULL), + encoding_(encoding), + audio_stub_(NULL) { +} + +AudioReader::~AudioReader() { + if (session_) + session_->CancelChannelCreation(kAudioChannelName); +} + +// static +scoped_ptr<AudioReader> AudioReader::Create(const SessionConfig& config) { + // TODO(kxing): Support different session configurations. + return scoped_ptr<AudioReader>(new AudioReader(AudioPacket::ENCODING_RAW)); +} + +void AudioReader::Init(protocol::Session* session, + AudioStub* audio_stub, + const InitializedCallback& callback) { + session_ = session; + initialized_callback_ = callback; + audio_stub_ = audio_stub; + + session_->CreateStreamChannel( + kAudioChannelName, + base::Bind(&AudioReader::OnChannelReady, base::Unretained(this))); +} + +bool AudioReader::is_connected() { + return channel_.get() != NULL; +} + +void AudioReader::OnChannelReady(scoped_ptr<net::StreamSocket> socket) { + if (!socket.get()) { + initialized_callback_.Run(false); + return; + } + + DCHECK(!channel_.get()); + channel_ = socket.Pass(); + reader_.Init(channel_.get(), base::Bind(&AudioReader::OnNewData, + base::Unretained(this))); + initialized_callback_.Run(true); +} + +void AudioReader::OnNewData(scoped_ptr<AudioPacket> packet, + const base::Closure& done_task) { + audio_stub_->ProcessAudioPacket(packet.Pass(), done_task); +} + +} // namespace protocol +} // namespace remoting diff --git a/remoting/protocol/audio_reader.h b/remoting/protocol/audio_reader.h new file mode 100644 index 0000000..2d708db --- /dev/null +++ b/remoting/protocol/audio_reader.h @@ -0,0 +1,67 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef REMOTING_PROTOCOL_AUDIO_READER_H_ +#define REMOTING_PROTOCOL_AUDIO_READER_H_ + +#include "base/callback.h" +#include "base/compiler_specific.h" +#include "remoting/proto/audio.pb.h" +#include "remoting/protocol/audio_stub.h" +#include "remoting/protocol/message_reader.h" + +namespace net { +class StreamSocket; +} // namespace net + +namespace remoting { +namespace protocol { + +class Session; +class SessionConfig; + +class AudioReader { + public: + // The callback is called when initialization is finished. The + // parameter is set to true on success. + typedef base::Callback<void(bool)> InitializedCallback; + + virtual ~AudioReader(); + + static scoped_ptr<AudioReader> Create(const SessionConfig& config); + + // Initializies the reader. + void Init(Session* session, + AudioStub* audio_stub, + const InitializedCallback& callback); + bool is_connected(); + + private: + explicit AudioReader(AudioPacket::Encoding encoding); + + void OnChannelReady(scoped_ptr<net::StreamSocket> socket); + void OnNewData(scoped_ptr<AudioPacket> packet, + const base::Closure& done_task); + + Session* session_; + + InitializedCallback initialized_callback_; + + AudioPacket::Encoding encoding_; + + // TODO(sergeyu): Remove |channel_| and let |reader_| own it. + scoped_ptr<net::StreamSocket> channel_; + + ProtobufMessageReader<AudioPacket> reader_; + + // The stub that processes all received packets. + AudioStub* audio_stub_; + + DISALLOW_COPY_AND_ASSIGN(AudioReader); +}; + +} // namespace protocol +} // namespace remoting + +#endif // REMOTING_PROTOCOL_AUDIO_READER_H_ diff --git a/remoting/remoting.gyp b/remoting/remoting.gyp index 5721ae0..764b304 100644 --- a/remoting/remoting.gyp +++ b/remoting/remoting.gyp @@ -1506,6 +1506,8 @@ 'remoting_jingle_glue', ], 'sources': [ + 'protocol/audio_reader.cc', + 'protocol/audio_reader.h', 'protocol/audio_stub.h', 'protocol/audio_writer.cc', 'protocol/audio_writer.h', |