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