/* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ #ifndef CTSAUDIO_AUDIORECORDPLAYTESTCOMMON_H #define CTSAUDIO_AUDIORECORDPLAYTESTCOMMON_H #include <gtest/gtest.h> #include <utils/threads.h> #include <utils/StrongPointer.h> #include <audio/AudioHardware.h> #include <audio/AudioPlaybackLocal.h> #include <audio/AudioRecordingLocal.h> #include <audio/AudioSignalFactory.h> #include <audio/AudioLocal.h> #include <audio/Buffer.h> #include <Log.h> class AudioRecordPlayTestCommon : public testing::Test { protected: android::sp<Buffer> mBufferRecording; android::sp<Buffer> mBufferPlayback; android::sp<AudioHardware> mAudioRecordingHw; android::sp<AudioHardware> mAudioPlaybackHw; static const int MAX_POSITIVE_AMPLITUDE = 10000; static const int SIGNAL_FREQ = 1000; static const int NUMBER_SAMPLES = AudioHardware::SAMPLES_PER_ONE_GO * 4; static const int DEFAULT_VOLUME = 10; protected: virtual void SetUp() { mAudioPlaybackHw = createPlaybackHw(); ASSERT_TRUE(mAudioPlaybackHw.get() != NULL); mAudioRecordingHw = createRecordingHw(); ASSERT_TRUE(mAudioRecordingHw.get() != NULL); mBufferPlayback = AudioSignalFactory::generateSineWave(AudioHardware::E2BPS, MAX_POSITIVE_AMPLITUDE, AudioHardware::ESampleRate_44100, SIGNAL_FREQ, NUMBER_SAMPLES); ASSERT_TRUE(mBufferPlayback.get() != NULL); mBufferRecording = new Buffer(NUMBER_SAMPLES * 4, NUMBER_SAMPLES * 4); ASSERT_TRUE(mBufferRecording.get() != NULL); } virtual void TearDown() { mAudioRecordingHw->stopPlaybackOrRecord(); mAudioPlaybackHw->stopPlaybackOrRecord(); mAudioRecordingHw.clear(); mAudioPlaybackHw.clear(); } void PlayAndRecord(int numberRepetition) { ASSERT_TRUE(mAudioPlaybackHw->prepare(AudioHardware::ESampleRate_44100, DEFAULT_VOLUME)); ASSERT_TRUE(mAudioRecordingHw->prepare(AudioHardware::ESampleRate_44100, DEFAULT_VOLUME)); ASSERT_TRUE(mAudioRecordingHw->startPlaybackOrRecord(mBufferRecording, numberRepetition)); ASSERT_TRUE(mAudioPlaybackHw->startPlaybackOrRecord(mBufferPlayback, numberRepetition)); ASSERT_TRUE(mAudioRecordingHw->waitForCompletion()); ASSERT_TRUE(mAudioPlaybackHw->waitForCompletion()); mAudioPlaybackHw->stopPlaybackOrRecord(); mAudioRecordingHw->stopPlaybackOrRecord(); LOGV("Audio playback buffer size %d, handled %d", mBufferPlayback->getSize(), mBufferPlayback->amountHandled()); ASSERT_TRUE(mBufferPlayback->amountHandled() == mBufferPlayback->getSize()); LOGV("Audio recording buffer size %d, handled %d", mBufferRecording->getSize(), mBufferRecording->amountHandled()); ASSERT_TRUE(mBufferRecording->amountHandled() == mBufferRecording->getSize()); } virtual android::sp<AudioHardware> createRecordingHw() = 0; virtual android::sp<AudioHardware> createPlaybackHw() = 0; }; #endif // CTSAUDIO_AUDIORECORDPLAYTESTCOMMON_H