1441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent/*
2441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * Copyright (C) 2010 The Android Open Source Project
3441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent *
4441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * Licensed under the Apache License, Version 2.0 (the "License");
5441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * you may not use this file except in compliance with the License.
6441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * You may obtain a copy of the License at
7441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent *
8441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent *      http://www.apache.org/licenses/LICENSE-2.0
9441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent *
10441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * Unless required by applicable law or agreed to in writing, software
11441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * distributed under the License is distributed on an "AS IS" BASIS,
12441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * See the License for the specific language governing permissions and
14441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * limitations under the License.
15441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent */
16441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
17db6028508c8eb31a0de1dcdfc410ddfe6df7c5adXia Wangpackage com.android.mediaframeworktest.functional.audio;
18441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
19441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport com.android.mediaframeworktest.MediaFrameworkTest;
20441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport com.android.mediaframeworktest.MediaNames;
21db6028508c8eb31a0de1dcdfc410ddfe6df7c5adXia Wangimport com.android.mediaframeworktest.functional.EnergyProbe;
22441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.content.Context;
23441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.content.res.AssetFileDescriptor;
241a5149e5d7f2dddc8b324f7695e69fd89af73c52Eric Laurentimport android.media.audiofx.AudioEffect;
25441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.media.AudioManager;
261a5149e5d7f2dddc8b324f7695e69fd89af73c52Eric Laurentimport android.media.audiofx.Equalizer;
271a5149e5d7f2dddc8b324f7695e69fd89af73c52Eric Laurentimport android.media.audiofx.Visualizer;
28441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.media.MediaPlayer;
29441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
30441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.os.Looper;
31441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.test.suitebuilder.annotation.LargeTest;
32441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.test.suitebuilder.annotation.MediumTest;
33441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.test.suitebuilder.annotation.Suppress;
34441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.test.ActivityInstrumentationTestCase2;
35441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport android.util.Log;
36441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
37441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport java.nio.ByteOrder;
38441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport java.nio.ByteBuffer;
39441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentimport java.util.UUID;
40441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
41441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent/**
42441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent * Junit / Instrumentation test case for the media AudioTrack api
43441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
44441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent */
45441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurentpublic class MediaEqualizerTest extends ActivityInstrumentationTestCase2<MediaFrameworkTest> {
46441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private String TAG = "MediaEqualizerTest";
47441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private final static int MIN_NUMBER_OF_BANDS = 4;
48441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private final static int MIN_BAND_LEVEL = -1500;
49441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private final static int MAX_BAND_LEVEL = 1500;
50441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private final static int TEST_FREQUENCY_MILLIHERTZ = 1000000;
51441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private final static int MIN_NUMBER_OF_PRESETS = 4;
525e7acae2c3e4cf345e3fa7bf10e3c62f9e69e6beEric Laurent
53441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private Equalizer mEqualizer = null;
54441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private int mSession = -1;
55441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
56441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public MediaEqualizerTest() {
57441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        super("com.android.mediaframeworktest", MediaFrameworkTest.class);
58441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
59441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
60441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @Override
61441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    protected void setUp() throws Exception {
62441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent      super.setUp();
63441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
64441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
65441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @Override
66441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    protected void tearDown() throws Exception {
67441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        super.tearDown();
68441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        releaseEqualizer();
69441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
70441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
71441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private static void assumeTrue(String message, boolean cond) {
72441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue("(assume)"+message, cond);
73441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
74441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
75441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private void log(String testName, String message) {
76441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        Log.v(TAG, "["+testName+"] "+message);
77441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
78441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
79441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private void loge(String testName, String message) {
80441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        Log.e(TAG, "["+testName+"] "+message);
81441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
82441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
83441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //-----------------------------------------------------------------
84441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    // EQUALIZER TESTS:
85441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //----------------------------------
86441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
87441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
88441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //-----------------------------------------------------------------
89441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    // 0 - constructor
90441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //----------------------------------
91441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
92441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 0.0: test constructor and release
93441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
94441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test0_0ConstructorAndRelease() throws Exception {
95441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
96441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test1_0ConstructorAndRelease()";
97441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        Equalizer eq = null;
98441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent         try {
99441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            eq = new Equalizer(0, 0);
100441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertNotNull(msg + ": could not create Equalizer", eq);
101441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            try {
102441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                assertTrue(msg +": invalid effect ID", (eq.getId() != 0));
103441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            } catch (IllegalStateException e) {
104441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                msg = msg.concat(": Equalizer not initialized");
105441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
106441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            result = true;
107441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
108441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Equalizer not found");
109441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
110441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Effect library not loaded");
111441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } finally {
112441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            if (eq != null) {
113441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                eq.release();
114441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
115441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
116441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
117441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
118441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
119441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
120441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //-----------------------------------------------------------------
121441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    // 1 - get/set parameters
122441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //----------------------------------
123441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
124441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 1.0: test setBandLevel() and getBandLevel()
125441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
126441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test1_0BandLevel() throws Exception {
127441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
128441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test1_0BandLevel()";
129441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        getEqualizer(0);
130441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
131441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            short numBands = mEqualizer.getNumberOfBands();
132441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertTrue(msg + ": not enough bands", numBands >= MIN_NUMBER_OF_BANDS);
133441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
134441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            short[] levelRange = mEqualizer.getBandLevelRange();
135441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertTrue(msg + ": min level too high", levelRange[0] <= MIN_BAND_LEVEL);
136441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertTrue(msg + ": max level too low", levelRange[1] >= MAX_BAND_LEVEL);
137441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
138441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            mEqualizer.setBandLevel((short)0, levelRange[1]);
139441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            short level = mEqualizer.getBandLevel((short)0);
140441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            // 10% margin on actual level compared to requested level
141441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertTrue(msg + ": setBandLevel failed",
142441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    ((float)level > (float)levelRange[1] * 0.9f) &&
143441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    ((float)level < (float)levelRange[1] * 1.1f));
144441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            result = true;
145441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
146441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Bad parameter value");
147441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "Bad parameter value");
148441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
149441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": get parameter() rejected");
150441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "get parameter() rejected");
151441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalStateException e) {
152441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat("get parameter() called in wrong state");
153441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "get parameter() called in wrong state");
154441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } finally {
155441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            releaseEqualizer();
156441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
157441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
158441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
159441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
160441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 1.1: test band frequency
161441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
162441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test1_1BandFrequency() throws Exception {
163441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
164441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test1_1BandFrequency()";
165441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        getEqualizer(0);
166441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
167441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            short band = mEqualizer.getBand(TEST_FREQUENCY_MILLIHERTZ);
168441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertTrue(msg + ": getBand failed", band >= 0);
169441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            int[] freqRange = mEqualizer.getBandFreqRange(band);
170441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertTrue(msg + ": getBandFreqRange failed",
171441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    (freqRange[0] <= TEST_FREQUENCY_MILLIHERTZ) &&
172441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    (freqRange[1] >= TEST_FREQUENCY_MILLIHERTZ));
173441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            int freq = mEqualizer.getCenterFreq(band);
174441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertTrue(msg + ": getCenterFreq failed",
175441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                    (freqRange[0] <= freq) && (freqRange[1] >= freq));
176441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            result = true;
177441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
178441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Bad parameter value");
179441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "Bad parameter value");
180441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
181441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": get parameter() rejected");
182441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "get parameter() rejected");
183441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalStateException e) {
184441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat("get parameter() called in wrong state");
185441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "get parameter() called in wrong state");
186441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } finally {
187441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            releaseEqualizer();
188441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
189441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
190441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
191441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
192441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 1.2: test presets
193441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
194441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test1_2Presets() throws Exception {
195441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
196441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test1_2Presets()";
197441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        getEqualizer(0);
198441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
199441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            short numPresets = mEqualizer.getNumberOfPresets();
200441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertTrue(msg + ": getNumberOfPresets failed", numPresets >= MIN_NUMBER_OF_PRESETS);
201441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            mEqualizer.usePreset((short)(numPresets - 1));
202441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            short preset = mEqualizer.getCurrentPreset();
203441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertEquals(msg + ": usePreset failed", preset, (short)(numPresets - 1));
204441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            String name = mEqualizer.getPresetName(preset);
205441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertNotNull(msg + ": getPresetName failed", name);
206441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            result = true;
207441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
208441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Bad parameter value");
209441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "Bad parameter value");
210441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
211441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": get parameter() rejected");
212441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "get parameter() rejected");
213441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalStateException e) {
214441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat("get parameter() called in wrong state");
215441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "get parameter() called in wrong state");
216441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } finally {
217441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            releaseEqualizer();
218441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
219441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
220441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
221441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
222441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 1.3: test properties
223441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
224441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test1_3Properties() throws Exception {
225441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
226441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test1_3Properties()";
227441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        getEqualizer(0);
228441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
229441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            Equalizer.Settings settings = mEqualizer.getProperties();
230441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            String str = settings.toString();
231441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            settings = new Equalizer.Settings(str);
232441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            mEqualizer.setProperties(settings);
233441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            result = true;
234441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
235441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Bad parameter value");
236441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "Bad parameter value");
237441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
238441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": get parameter() rejected");
239441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "get parameter() rejected");
240441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalStateException e) {
241441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat("get parameter() called in wrong state");
242441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "get parameter() called in wrong state");
243441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } finally {
244441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            releaseEqualizer();
245441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
246441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
247441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
248441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
249441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //-----------------------------------------------------------------
250441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    // private methods
251441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //----------------------------------
252441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
253441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private void getEqualizer(int session) {
254441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent         if (mEqualizer == null || session != mSession) {
255441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent             if (session != mSession && mEqualizer != null) {
256441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                 mEqualizer.release();
257441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                 mEqualizer = null;
258441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent             }
259441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent             try {
260441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                mEqualizer = new Equalizer(0, session);
261441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                mSession = session;
262441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            } catch (IllegalArgumentException e) {
263441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                Log.e(TAG, "getEqualizer() Equalizer not found exception: "+e);
264441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            } catch (UnsupportedOperationException e) {
265441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                Log.e(TAG, "getEqualizer() Effect library not loaded exception: "+e);
266441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
267441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent         }
268441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent         assertNotNull("could not create mEqualizer", mEqualizer);
269441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
270441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
271441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private void releaseEqualizer() {
272441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        if (mEqualizer != null) {
273441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            mEqualizer.release();
274441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            mEqualizer = null;
275441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
276441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent   }
277441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
278441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent}
279