OLD | NEW |
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 <windows.h> | 5 #include <windows.h> |
6 #include <mmsystem.h> | 6 #include <mmsystem.h> |
7 | 7 |
8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
9 #include "base/base_paths.h" | 9 #include "base/base_paths.h" |
10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
(...skipping 618 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
629 } | 629 } |
630 | 630 |
631 // Simple source that uses a SyncSocket to retrieve the audio data | 631 // Simple source that uses a SyncSocket to retrieve the audio data |
632 // from a potentially remote thread. | 632 // from a potentially remote thread. |
633 class SyncSocketSource : public AudioOutputStream::AudioSourceCallback { | 633 class SyncSocketSource : public AudioOutputStream::AudioSourceCallback { |
634 public: | 634 public: |
635 explicit SyncSocketSource(base::SyncSocket* socket) | 635 explicit SyncSocketSource(base::SyncSocket* socket) |
636 : socket_(socket) {} | 636 : socket_(socket) {} |
637 | 637 |
638 ~SyncSocketSource() { | 638 ~SyncSocketSource() { |
639 delete socket_; | |
640 } | 639 } |
641 | 640 |
642 // AudioSourceCallback::OnMoreData implementation: | 641 // AudioSourceCallback::OnMoreData implementation: |
643 virtual uint32 OnMoreData(AudioOutputStream* stream, | 642 virtual uint32 OnMoreData(AudioOutputStream* stream, |
644 uint8* dest, uint32 max_size, | 643 uint8* dest, uint32 max_size, |
645 AudioBuffersState buffers_state) { | 644 AudioBuffersState buffers_state) { |
646 socket_->Send(&buffers_state, sizeof(buffers_state)); | 645 socket_->Send(&buffers_state, sizeof(buffers_state)); |
647 uint32 got = socket_->Receive(dest, max_size); | 646 uint32 got = socket_->Receive(dest, max_size); |
648 return got; | 647 return got; |
649 } | 648 } |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
709 | 708 |
710 int sample_rate = AudioParameters::kAudioCDSampleRate; | 709 int sample_rate = AudioParameters::kAudioCDSampleRate; |
711 const uint32 kSamples20ms = sample_rate / 50; | 710 const uint32 kSamples20ms = sample_rate / 50; |
712 AudioOutputStream* oas = audio_man->MakeAudioOutputStream( | 711 AudioOutputStream* oas = audio_man->MakeAudioOutputStream( |
713 AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, | 712 AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, |
714 CHANNEL_LAYOUT_MONO, sample_rate, 16, kSamples20ms)); | 713 CHANNEL_LAYOUT_MONO, sample_rate, 16, kSamples20ms)); |
715 ASSERT_TRUE(NULL != oas); | 714 ASSERT_TRUE(NULL != oas); |
716 | 715 |
717 ASSERT_TRUE(oas->Open()); | 716 ASSERT_TRUE(oas->Open()); |
718 | 717 |
719 base::SyncSocket* sockets[2]; | 718 base::SyncSocket sockets[2]; |
720 ASSERT_TRUE(base::SyncSocket::CreatePair(sockets)); | 719 ASSERT_TRUE(base::SyncSocket::CreatePair(&sockets[0], &sockets[1])); |
721 | 720 |
722 SyncSocketSource source(sockets[0]); | 721 SyncSocketSource source(&sockets[0]); |
723 | 722 |
724 SyncThreadContext thread_context; | 723 SyncThreadContext thread_context; |
725 thread_context.sample_rate = sample_rate; | 724 thread_context.sample_rate = sample_rate; |
726 thread_context.sine_freq = 200.0; | 725 thread_context.sine_freq = 200.0; |
727 thread_context.packet_size_bytes = kSamples20ms * 2; | 726 thread_context.packet_size_bytes = kSamples20ms * 2; |
728 thread_context.socket = sockets[1]; | 727 thread_context.socket = &sockets[1]; |
729 | 728 |
730 HANDLE thread = ::CreateThread(NULL, 0, SyncSocketThread, | 729 HANDLE thread = ::CreateThread(NULL, 0, SyncSocketThread, |
731 &thread_context, 0, NULL); | 730 &thread_context, 0, NULL); |
732 | 731 |
733 oas->Start(&source); | 732 oas->Start(&source); |
734 | 733 |
735 ::WaitForSingleObject(thread, INFINITE); | 734 ::WaitForSingleObject(thread, INFINITE); |
736 ::CloseHandle(thread); | 735 ::CloseHandle(thread); |
737 delete sockets[1]; | |
738 | 736 |
739 oas->Stop(); | 737 oas->Stop(); |
740 oas->Close(); | 738 oas->Close(); |
741 } | 739 } |
OLD | NEW |