| /* |
| * 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 |