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

Side by Side Diff: talk/app/webrtc/test/fakeaudiocapturemodule.cc

Issue 1236023010: In PeerConnectionTestWrapper, put audio input on a separate thread. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Fixing potential deadlock in FakeAudioCaptureModule, caused by unnecessary call to Thread::Send Created 5 years, 5 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
OLDNEW
1 /* 1 /*
2 * libjingle 2 * libjingle
3 * Copyright 2012 Google Inc. 3 * Copyright 2012 Google Inc.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met: 6 * modification, are permitted provided that the following conditions are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright notice, 8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer. 9 * this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright notice, 10 * 2. Redistributions in binary form must reproduce the above copyright notice,
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 static const int kTimePerFrameMs = 10; 47 static const int kTimePerFrameMs = 10;
48 static const uint8_t kNumberOfChannels = 1; 48 static const uint8_t kNumberOfChannels = 1;
49 static const int kSamplesPerSecond = 44000; 49 static const int kSamplesPerSecond = 44000;
50 static const int kTotalDelayMs = 0; 50 static const int kTotalDelayMs = 0;
51 static const int kClockDriftMs = 0; 51 static const int kClockDriftMs = 0;
52 static const uint32_t kMaxVolume = 14392; 52 static const uint32_t kMaxVolume = 14392;
53 53
54 enum { 54 enum {
55 MSG_START_PROCESS, 55 MSG_START_PROCESS,
56 MSG_RUN_PROCESS, 56 MSG_RUN_PROCESS,
57 MSG_STOP_PROCESS,
58 }; 57 };
59 58
60 FakeAudioCaptureModule::FakeAudioCaptureModule( 59 FakeAudioCaptureModule::FakeAudioCaptureModule(
61 rtc::Thread* process_thread) 60 rtc::Thread* process_thread)
62 : last_process_time_ms_(0), 61 : last_process_time_ms_(0),
63 audio_callback_(NULL), 62 audio_callback_(NULL),
64 recording_(false), 63 recording_(false),
65 playing_(false), 64 playing_(false),
66 play_is_initialized_(false), 65 play_is_initialized_(false),
67 rec_is_initialized_(false), 66 rec_is_initialized_(false),
68 current_mic_level_(kMaxVolume), 67 current_mic_level_(kMaxVolume),
69 started_(false), 68 started_(false),
70 next_frame_time_(0), 69 next_frame_time_(0),
71 process_thread_(process_thread), 70 process_thread_(process_thread),
72 frames_received_(0) { 71 frames_received_(0) {
73 } 72 }
74 73
75 FakeAudioCaptureModule::~FakeAudioCaptureModule() { 74 FakeAudioCaptureModule::~FakeAudioCaptureModule() {
76 // Ensure that thread stops calling ProcessFrame(). 75 // Ensure that thread stops calling ProcessFrame().
77 process_thread_->Send(this, MSG_STOP_PROCESS); 76 process_thread_->Clear(this);
78 } 77 }
79 78
80 rtc::scoped_refptr<FakeAudioCaptureModule> FakeAudioCaptureModule::Create( 79 rtc::scoped_refptr<FakeAudioCaptureModule> FakeAudioCaptureModule::Create(
81 rtc::Thread* process_thread) { 80 rtc::Thread* process_thread) {
82 if (process_thread == NULL) return NULL; 81 if (process_thread == NULL) return NULL;
83 82
84 rtc::scoped_refptr<FakeAudioCaptureModule> capture_module( 83 rtc::scoped_refptr<FakeAudioCaptureModule> capture_module(
85 new rtc::RefCountedObject<FakeAudioCaptureModule>(process_thread)); 84 new rtc::RefCountedObject<FakeAudioCaptureModule>(process_thread));
86 if (!capture_module->Initialize()) { 85 if (!capture_module->Initialize()) {
87 return NULL; 86 return NULL;
(...skipping 506 matching lines...) Expand 10 before | Expand all | Expand 10 after
594 } 593 }
595 594
596 void FakeAudioCaptureModule::OnMessage(rtc::Message* msg) { 595 void FakeAudioCaptureModule::OnMessage(rtc::Message* msg) {
597 switch (msg->message_id) { 596 switch (msg->message_id) {
598 case MSG_START_PROCESS: 597 case MSG_START_PROCESS:
599 StartProcessP(); 598 StartProcessP();
600 break; 599 break;
601 case MSG_RUN_PROCESS: 600 case MSG_RUN_PROCESS:
602 ProcessFrameP(); 601 ProcessFrameP();
603 break; 602 break;
604 case MSG_STOP_PROCESS:
605 StopProcessP();
606 break;
607 default: 603 default:
608 // All existing messages should be caught. Getting here should never 604 // All existing messages should be caught. Getting here should never
609 // happen. 605 // happen.
610 ASSERT(false); 606 ASSERT(false);
611 } 607 }
612 } 608 }
613 609
614 bool FakeAudioCaptureModule::Initialize() { 610 bool FakeAudioCaptureModule::Initialize() {
615 // Set the send buffer samples high enough that it would not occur on the 611 // Set the send buffer samples high enough that it would not occur on the
616 // remote side unless a packet containing a sample of that magnitude has been 612 // remote side unless a packet containing a sample of that magnitude has been
(...skipping 28 matching lines...) Expand all
645 } 641 }
646 642
647 bool FakeAudioCaptureModule::ShouldStartProcessing() { 643 bool FakeAudioCaptureModule::ShouldStartProcessing() {
648 return recording_ || playing_; 644 return recording_ || playing_;
649 } 645 }
650 646
651 void FakeAudioCaptureModule::UpdateProcessing(bool start) { 647 void FakeAudioCaptureModule::UpdateProcessing(bool start) {
652 if (start) { 648 if (start) {
653 process_thread_->Post(this, MSG_START_PROCESS); 649 process_thread_->Post(this, MSG_START_PROCESS);
654 } else { 650 } else {
655 process_thread_->Send(this, MSG_STOP_PROCESS); 651 process_thread_->Clear(this);
652 started_ = false;
656 } 653 }
657 } 654 }
658 655
659 void FakeAudioCaptureModule::StartProcessP() { 656 void FakeAudioCaptureModule::StartProcessP() {
660 ASSERT(rtc::Thread::Current() == process_thread_); 657 ASSERT(rtc::Thread::Current() == process_thread_);
661 if (started_) { 658 if (started_) {
662 // Already started. 659 // Already started.
663 return; 660 return;
664 } 661 }
665 ProcessFrameP(); 662 ProcessFrameP();
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
740 kNumberOfChannels, 737 kNumberOfChannels,
741 kSamplesPerSecond, kTotalDelayMs, 738 kSamplesPerSecond, kTotalDelayMs,
742 kClockDriftMs, current_mic_level, 739 kClockDriftMs, current_mic_level,
743 key_pressed, 740 key_pressed,
744 current_mic_level) != 0) { 741 current_mic_level) != 0) {
745 ASSERT(false); 742 ASSERT(false);
746 } 743 }
747 SetMicrophoneVolume(current_mic_level); 744 SetMicrophoneVolume(current_mic_level);
748 } 745 }
749 746
750 void FakeAudioCaptureModule::StopProcessP() {
751 ASSERT(rtc::Thread::Current() == process_thread_);
752 started_ = false;
753 process_thread_->Clear(this);
754 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698