Improve AudioTrack and AudioRecord CTS coverage
Bug: 21134712
Change-Id: Icc0655852f335be53d6bd6135f5d57694461de58
diff --git a/tests/tests/media/src/android/media/cts/AudioRecordTest.java b/tests/tests/media/src/android/media/cts/AudioRecordTest.java
index d390c14..245847f 100644
--- a/tests/tests/media/src/android/media/cts/AudioRecordTest.java
+++ b/tests/tests/media/src/android/media/cts/AudioRecordTest.java
@@ -418,12 +418,13 @@
int audioSource, int sampleRateInHz,
int channelConfig, int audioFormat, int bufferSizeInBytes,
boolean auditRecording, boolean isChannelIndex) {
+ final AudioRecord record;
if (auditRecording) {
- return new AudioHelper.AudioRecordAudit(
+ record = new AudioHelper.AudioRecordAudit(
audioSource, sampleRateInHz, channelConfig,
audioFormat, bufferSizeInBytes, isChannelIndex);
} else if (isChannelIndex) {
- return new AudioRecord.Builder()
+ record = new AudioRecord.Builder()
.setAudioFormat(new AudioFormat.Builder()
.setChannelIndexMask(channelConfig)
.setEncoding(audioFormat)
@@ -432,9 +433,23 @@
.setBufferSizeInBytes(bufferSizeInBytes)
.build();
} else {
- return new AudioRecord(audioSource, sampleRateInHz, channelConfig,
+ record = new AudioRecord(audioSource, sampleRateInHz, channelConfig,
audioFormat, bufferSizeInBytes);
}
+
+ // did we get the AudioRecord we expected?
+ final AudioFormat format = record.getFormat();
+ assertEquals(isChannelIndex ? channelConfig : AudioFormat.CHANNEL_INVALID,
+ format.getChannelIndexMask());
+ assertEquals(isChannelIndex ? AudioFormat.CHANNEL_INVALID : channelConfig,
+ format.getChannelMask());
+ assertEquals(audioFormat, format.getEncoding());
+ assertEquals(sampleRateInHz, format.getSampleRate());
+ final int frameSize =
+ format.getChannelCount() * AudioFormat.getBytesPerSample(audioFormat);
+ // our native frame count cannot be smaller than our minimum buffer size request.
+ assertTrue(record.getNativeFrameCount() * frameSize >= bufferSizeInBytes);
+ return record;
}
private void doTest(String reportName, boolean localRecord, boolean customHandler,
diff --git a/tests/tests/media/src/android/media/cts/AudioTrackTest.java b/tests/tests/media/src/android/media/cts/AudioTrackTest.java
index 403d714..c95cc6f 100644
--- a/tests/tests/media/src/android/media/cts/AudioTrackTest.java
+++ b/tests/tests/media/src/android/media/cts/AudioTrackTest.java
@@ -1732,10 +1732,19 @@
int bufferSize = 12 * minBufferSize;
int bufferSamples = bufferSize
/ AudioFormat.getBytesPerSample(TEST_FORMAT);
+
+ // create audio track and confirm settings
AudioTrack track = new AudioTrack(TEST_STREAM_TYPE, TEST_SR,
TEST_CONF, TEST_FORMAT, minBufferSize, TEST_MODE);
- assertTrue(TEST_NAME,
- track.getState() == AudioTrack.STATE_INITIALIZED);
+ assertEquals(TEST_NAME + ": state",
+ AudioTrack.STATE_INITIALIZED, track.getState());
+ assertEquals(TEST_NAME + ": sample rate",
+ TEST_SR, track.getSampleRate());
+ assertEquals(TEST_NAME + ": channel mask",
+ TEST_CONF, track.getChannelConfiguration());
+ assertEquals(TEST_NAME + ": encoding",
+ TEST_FORMAT, track.getAudioFormat());
+
ByteBuffer bb = (useDirect == 1)
? ByteBuffer.allocateDirect(bufferSize)
: ByteBuffer.allocate(bufferSize);
@@ -2161,6 +2170,39 @@
{ {1.0f, 0.5f}, {1.0f, 2.0f} }, // pitch by SR conversion (chirp)
};
+ // sanity test that playback params works as expected
+ PlaybackParams params = new PlaybackParams().allowDefaults();
+ assertEquals(TEST_NAME, 1.0f, params.getSpeed());
+ assertEquals(TEST_NAME, 1.0f, params.getPitch());
+ assertEquals(TEST_NAME,
+ params.AUDIO_FALLBACK_MODE_DEFAULT,
+ params.getAudioFallbackMode());
+ track.setPlaybackParams(params); // OK
+ params.setAudioFallbackMode(params.AUDIO_FALLBACK_MODE_FAIL);
+ assertEquals(TEST_NAME,
+ params.AUDIO_FALLBACK_MODE_FAIL, params.getAudioFallbackMode());
+ params.setPitch(0.0f);
+ try {
+ track.setPlaybackParams(params);
+ fail("IllegalArgumentException should be thrown on out of range data");
+ } catch (IllegalArgumentException e) {
+ ; // expect this is invalid
+ }
+ // on failure, the AudioTrack params should not change.
+ PlaybackParams paramCheck = track.getPlaybackParams();
+ assertEquals(TEST_NAME,
+ paramCheck.AUDIO_FALLBACK_MODE_DEFAULT, paramCheck.getAudioFallbackMode());
+ assertEquals(TEST_NAME,
+ 1.0f, paramCheck.getPitch());
+
+ // now try to see if we can do extreme pitch correction that should probably be muted.
+ params.setAudioFallbackMode(params.AUDIO_FALLBACK_MODE_MUTE);
+ assertEquals(TEST_NAME,
+ params.AUDIO_FALLBACK_MODE_MUTE, params.getAudioFallbackMode());
+ params.setPitch(0.1f);
+ track.setPlaybackParams(params); // OK
+
+ // now do our actual playback
final int TEST_TIME_MS = 2000;
final int TEST_DELTA_MS = 100;
final int testSteps = TEST_TIME_MS / TEST_DELTA_MS;
diff --git a/tests/tests/media/src/android/media/cts/AudioTrack_ListenerTest.java b/tests/tests/media/src/android/media/cts/AudioTrack_ListenerTest.java
index 353dbcb..2395fd9 100644
--- a/tests/tests/media/src/android/media/cts/AudioTrack_ListenerTest.java
+++ b/tests/tests/media/src/android/media/cts/AudioTrack_ListenerTest.java
@@ -124,14 +124,23 @@
mMarkerPeriodInFrames = mFrameCount / markerPeriods;
markerPeriods = mFrameCount / mMarkerPeriodInFrames; // recalculate due to round-down
mMarkerPosition = mMarkerPeriodInFrames;
+
+ // check that we can get and set notification marker position
+ assertEquals(0, track.getNotificationMarkerPosition());
assertEquals(AudioTrack.SUCCESS,
track.setNotificationMarkerPosition(mMarkerPosition));
+ assertEquals(mMarkerPosition, track.getNotificationMarkerPosition());
+
int updatePeriods = Math.max(3, mFrameCount * periodsPerSecond / TEST_SR);
final int updatePeriodInFrames = mFrameCount / updatePeriods;
updatePeriods = mFrameCount / updatePeriodInFrames; // recalculate due to round-down
+
+ // we set the notification period before running for better period positional accuracy.
+ // check that we can get and set notification periods
+ assertEquals(0, track.getPositionNotificationPeriod());
assertEquals(AudioTrack.SUCCESS,
track.setPositionNotificationPeriod(updatePeriodInFrames));
- // set NotificationPeriod before running to ensure better period positional accuracy.
+ assertEquals(updatePeriodInFrames, track.getPositionNotificationPeriod());
if (mode == AudioTrack.MODE_STATIC && TEST_LOOP_FACTOR > 1) {
track.setLoopPoints(0, vai.length, TEST_LOOP_FACTOR - 1);