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

Side by Side Diff: remoting/protocol/webrtc_audio_module.cc

Issue 2650633003: Fix threading issues in the audio pipeline for WebRTC remoting protocol. (Closed)
Patch Set: . Created 3 years, 11 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
« no previous file with comments | « remoting/protocol/webrtc_audio_module.h ('k') | remoting/protocol/webrtc_audio_sink_adapter.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/protocol/webrtc_audio_module.h" 5 #include "remoting/protocol/webrtc_audio_module.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/memory/ptr_util.h"
8 #include "base/stl_util.h" 9 #include "base/stl_util.h"
9 #include "base/threading/thread_task_runner_handle.h" 10 #include "base/threading/thread_task_runner_handle.h"
11 #include "base/timer/timer.h"
10 12
11 namespace remoting { 13 namespace remoting {
12 namespace protocol { 14 namespace protocol {
13 15
14 namespace { 16 namespace {
15 17
16 const int kSamplingRate = 48000; 18 const int kSamplingRate = 48000;
17 19
18 // Webrtc uses 10ms frames. 20 // Webrtc uses 10ms frames.
19 const int kFrameLengthMs = 10; 21 const int kFrameLengthMs = 10;
(...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after
495 497
496 int WebrtcAudioModule::GetRecordAudioParameters( 498 int WebrtcAudioModule::GetRecordAudioParameters(
497 webrtc::AudioParameters* params) const { 499 webrtc::AudioParameters* params) const {
498 NOTREACHED(); 500 NOTREACHED();
499 return -1; 501 return -1;
500 } 502 }
501 #endif // WEBRTC_IOS 503 #endif // WEBRTC_IOS
502 504
503 void WebrtcAudioModule::StartPlayoutOnAudioThread() { 505 void WebrtcAudioModule::StartPlayoutOnAudioThread() {
504 DCHECK(audio_task_runner_->BelongsToCurrentThread()); 506 DCHECK(audio_task_runner_->BelongsToCurrentThread());
505 poll_timer_.Start( 507 poll_timer_ = base::MakeUnique<base::RepeatingTimer>();
508 poll_timer_->Start(
506 FROM_HERE, kPollInterval, 509 FROM_HERE, kPollInterval,
507 base::Bind(&WebrtcAudioModule::PollFromSource, base::Unretained(this))); 510 base::Bind(&WebrtcAudioModule::PollFromSource, base::Unretained(this)));
508 } 511 }
509 512
510 void WebrtcAudioModule::StopPlayoutOnAudioThread() { 513 void WebrtcAudioModule::StopPlayoutOnAudioThread() {
511 DCHECK(audio_task_runner_->BelongsToCurrentThread()); 514 DCHECK(audio_task_runner_->BelongsToCurrentThread());
512 poll_timer_.Stop(); 515 poll_timer_.reset();
513 } 516 }
514 517
515 void WebrtcAudioModule::PollFromSource() { 518 void WebrtcAudioModule::PollFromSource() {
516 DCHECK(audio_task_runner_->BelongsToCurrentThread()); 519 DCHECK(audio_task_runner_->BelongsToCurrentThread());
517 520
518 base::AutoLock lock(lock_); 521 base::AutoLock lock(lock_);
519 if (!audio_transport_) 522 if (!audio_transport_)
520 return; 523 return;
521 524
522 for (int i = 0; i < kPollInterval.InMilliseconds() / kFrameLengthMs; i++) { 525 for (int i = 0; i < kPollInterval.InMilliseconds() / kFrameLengthMs; i++) {
523 int64_t elapsed_time_ms = -1; 526 int64_t elapsed_time_ms = -1;
524 int64_t ntp_time_ms = -1; 527 int64_t ntp_time_ms = -1;
525 char data[kBytesPerSample * kChannels * kSamplesPerFrame]; 528 char data[kBytesPerSample * kChannels * kSamplesPerFrame];
526 audio_transport_->PullRenderData(kBytesPerSample * 8, kSamplingRate, 529 audio_transport_->PullRenderData(kBytesPerSample * 8, kSamplingRate,
527 kChannels, kSamplesPerFrame, data, 530 kChannels, kSamplesPerFrame, data,
528 &elapsed_time_ms, &ntp_time_ms); 531 &elapsed_time_ms, &ntp_time_ms);
529 } 532 }
530 } 533 }
531 534
532 } // namespace protocol 535 } // namespace protocol
533 } // namespace remoting 536 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/protocol/webrtc_audio_module.h ('k') | remoting/protocol/webrtc_audio_sink_adapter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698