/* * 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_AUDIOPLAYTESTCOMMON_H #define CTSAUDIO_AUDIOPLAYTESTCOMMON_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 AudioPlayTestCommon : public testing::Test { protected: android::sp<Buffer> mBuffer; android::sp<AudioHardware> mAudioHw; static const int MAX_POSITIVE_AMPLITUDE = 1000; static const int SIGNAL_FREQ = 1000; static const int SIGNAL_LENGTH = AudioHardware::SAMPLES_PER_ONE_GO * 2; static const int DEFAULT_VOLUME = 10; protected: virtual ~AudioPlayTestCommon() { LOGV("~AudioPlayTestCommon"); } virtual void SetUp() { mAudioHw = createAudioHw(); ASSERT_TRUE(mAudioHw.get() != NULL); mBuffer = AudioSignalFactory::generateSineWave(AudioHardware::E2BPS, MAX_POSITIVE_AMPLITUDE, AudioHardware::ESampleRate_44100, SIGNAL_FREQ, SIGNAL_LENGTH); ASSERT_TRUE(mBuffer.get() != NULL); } virtual void TearDown() { LOGV("AudioPlayTestCommon::TearDown"); mAudioHw->stopPlaybackOrRecord(); // this stops the thread mAudioHw.clear(); } void playAll(int numberRepetition) { ASSERT_TRUE(mAudioHw->prepare(AudioHardware::ESampleRate_44100, DEFAULT_VOLUME)); ASSERT_TRUE(mAudioHw->startPlaybackOrRecord(mBuffer, numberRepetition)); ASSERT_TRUE(mAudioHw->waitForCompletion()); mAudioHw->stopPlaybackOrRecord(); LOGV("size %d, handled %d", mBuffer->getSize(), mBuffer->amountHandled()); ASSERT_TRUE(mBuffer->amountHandled() == mBuffer->getSize()); } void repeatPlayStop() { for (int i = 0; i < 2; i++) { ASSERT_TRUE(mAudioHw->prepare(AudioHardware::ESampleRate_44100, DEFAULT_VOLUME)); mBuffer->restart(); ASSERT_TRUE(mAudioHw->startPlaybackOrRecord(mBuffer, 10)); mAudioHw->stopPlaybackOrRecord(); } } void playWrongUsage() { ASSERT_FALSE(mAudioHw->startPlaybackOrRecord(mBuffer)); ASSERT_TRUE(mAudioHw->prepare(AudioHardware::ESampleRate_44100, DEFAULT_VOLUME)); playAll(1); } virtual android::sp<AudioHardware> createAudioHw() = 0; }; #endif // CTSAUDIO_AUDIOPLAYTESTCOMMON_H