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

Side by Side Diff: remoting/host/audio_scheduler.cc

Issue 10836017: Piping for audio encoding. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed some style issues Created 8 years, 4 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "remoting/host/audio_scheduler.h" 5 #include "remoting/host/audio_scheduler.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/location.h" 9 #include "base/location.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/single_thread_task_runner.h" 11 #include "base/single_thread_task_runner.h"
12 #include "remoting/base/audio_capture_data.h"
13 #include "remoting/base/audio_encoder.h"
12 #include "remoting/host/audio_capturer.h" 14 #include "remoting/host/audio_capturer.h"
13 #include "remoting/proto/audio.pb.h" 15 #include "remoting/proto/audio.pb.h"
14 #include "remoting/protocol/audio_stub.h" 16 #include "remoting/protocol/audio_stub.h"
15 17
16 namespace remoting { 18 namespace remoting {
17 19
18 AudioScheduler::AudioScheduler( 20 AudioScheduler::AudioScheduler(
19 scoped_refptr<base::SingleThreadTaskRunner> capture_task_runner, 21 scoped_refptr<base::SingleThreadTaskRunner> capture_task_runner,
20 scoped_refptr<base::SingleThreadTaskRunner> network_task_runner, 22 scoped_refptr<base::SingleThreadTaskRunner> network_task_runner,
21 AudioCapturer* audio_capturer, 23 AudioCapturer* audio_capturer,
24 scoped_ptr<AudioEncoder> audio_encoder,
22 protocol::AudioStub* audio_stub) 25 protocol::AudioStub* audio_stub)
23 : capture_task_runner_(capture_task_runner), 26 : capture_task_runner_(capture_task_runner),
24 network_task_runner_(network_task_runner), 27 network_task_runner_(network_task_runner),
25 audio_capturer_(audio_capturer), 28 audio_capturer_(audio_capturer),
29 audio_encoder_(audio_encoder.Pass()),
26 audio_stub_(audio_stub), 30 audio_stub_(audio_stub),
27 network_stopped_(false) { 31 network_stopped_(false) {
28 DCHECK(capture_task_runner_); 32 DCHECK(capture_task_runner_);
29 DCHECK(network_task_runner_); 33 DCHECK(network_task_runner_);
30 DCHECK(audio_capturer_); 34 DCHECK(audio_capturer_);
31 DCHECK(audio_stub_); 35 DCHECK(audio_stub_);
32 capture_task_runner_->PostTask( 36 capture_task_runner_->PostTask(
33 FROM_HERE, base::Bind(&AudioScheduler::DoStart, this)); 37 FROM_HERE, base::Bind(&AudioScheduler::DoStart, this));
34 } 38 }
35 39
(...skipping 14 matching lines...) Expand all
50 54
51 void AudioScheduler::OnClientDisconnected() { 55 void AudioScheduler::OnClientDisconnected() {
52 DCHECK(network_task_runner_->BelongsToCurrentThread()); 56 DCHECK(network_task_runner_->BelongsToCurrentThread());
53 DCHECK(audio_stub_); 57 DCHECK(audio_stub_);
54 audio_stub_ = NULL; 58 audio_stub_ = NULL;
55 } 59 }
56 60
57 AudioScheduler::~AudioScheduler() { 61 AudioScheduler::~AudioScheduler() {
58 } 62 }
59 63
60 void AudioScheduler::NotifyAudioPacketCaptured(scoped_ptr<AudioPacket> packet) { 64 void AudioScheduler::NotifyAudioSamplesCaptured(
65 scoped_ptr<AudioCaptureData> capture_data) {
66 audio_encoder_->Encode(
67 capture_data.Pass(),
68 base::Bind(&AudioScheduler::NotifyAudioPacketEncoded, this));
69 }
70
71 void AudioScheduler::NotifyAudioPacketEncoded(scoped_ptr<AudioPacket> packet) {
61 network_task_runner_->PostTask( 72 network_task_runner_->PostTask(
62 FROM_HERE, base::Bind(&AudioScheduler::DoSendAudioPacket, 73 FROM_HERE, base::Bind(&AudioScheduler::DoSendAudioPacket,
63 this, base::Passed(packet.Pass()))); 74 this, base::Passed(packet.Pass())));
64 } 75 }
65 76
66 void AudioScheduler::DoStart() { 77 void AudioScheduler::DoStart() {
67 DCHECK(capture_task_runner_->BelongsToCurrentThread()); 78 DCHECK(capture_task_runner_->BelongsToCurrentThread());
68 79
69 // TODO(kxing): Do something with the return value. 80 // TODO(kxing): Do something with the return value.
70 audio_capturer_->Start( 81 audio_capturer_->Start(
71 base::Bind(&AudioScheduler::NotifyAudioPacketCaptured, this)); 82 base::Bind(&AudioScheduler::NotifyAudioSamplesCaptured, this));
72 } 83 }
73 84
74 void AudioScheduler::DoSendAudioPacket(scoped_ptr<AudioPacket> packet) { 85 void AudioScheduler::DoSendAudioPacket(scoped_ptr<AudioPacket> packet) {
75 DCHECK(network_task_runner_->BelongsToCurrentThread()); 86 DCHECK(network_task_runner_->BelongsToCurrentThread());
76 87
77 if (network_stopped_ || !audio_stub_) 88 if (network_stopped_ || !audio_stub_)
78 return; 89 return;
79 90
80 audio_stub_->ProcessAudioPacket( 91 audio_stub_->ProcessAudioPacket(
81 packet.Pass(), 92 packet.Pass(),
82 base::Bind(&AudioScheduler::OnCaptureCallbackNotified, this)); 93 base::Bind(&AudioScheduler::OnCaptureCallbackNotified, this));
83 } 94 }
84 95
85 void AudioScheduler::OnCaptureCallbackNotified() { 96 void AudioScheduler::OnCaptureCallbackNotified() {
86 } 97 }
87 98
88 void AudioScheduler::DoStopOnNetworkThread(const base::Closure& done_task) { 99 void AudioScheduler::DoStopOnNetworkThread(const base::Closure& done_task) {
89 DCHECK(network_task_runner_->BelongsToCurrentThread()); 100 DCHECK(network_task_runner_->BelongsToCurrentThread());
90 101
91 network_stopped_ = true; 102 network_stopped_ = true;
92 103
93 done_task.Run(); 104 done_task.Run();
94 } 105 }
95 106
96 } // namespace remoting 107 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698