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.Virtualizer;
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 MediaVirtualizerTest extends ActivityInstrumentationTestCase2<MediaFrameworkTest> {
46441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private String TAG = "MediaVirtualizerTest";
47441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private final static short TEST_STRENGTH = 500;
48441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
49441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private Virtualizer mVirtualizer = null;
50441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private int mSession = -1;
51441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
52441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public MediaVirtualizerTest() {
53441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        super("com.android.mediaframeworktest", MediaFrameworkTest.class);
54441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
55441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
56441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @Override
57441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    protected void setUp() throws Exception {
58441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent      super.setUp();
59441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
60441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
61441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @Override
62441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    protected void tearDown() throws Exception {
63441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        super.tearDown();
64441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        releaseVirtualizer();
65441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
66441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
67441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private static void assumeTrue(String message, boolean cond) {
68441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue("(assume)"+message, cond);
69441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
70441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
71441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private void log(String testName, String message) {
72441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        Log.v(TAG, "["+testName+"] "+message);
73441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
74441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
75441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private void loge(String testName, String message) {
76441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        Log.e(TAG, "["+testName+"] "+message);
77441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
78441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
79441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //-----------------------------------------------------------------
80441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    // VIRTUALIZER TESTS:
81441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //----------------------------------
82441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
83441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
84441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //-----------------------------------------------------------------
85441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    // 0 - constructor
86441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //----------------------------------
87441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
88441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 0.0: test constructor and release
89441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
90441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test0_0ConstructorAndRelease() throws Exception {
91441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
92441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test1_0ConstructorAndRelease()";
93441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        Virtualizer virtualizer = null;
94441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent         try {
95441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            virtualizer = new Virtualizer(0, 0);
96441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            assertNotNull(msg + ": could not create Virtualizer", virtualizer);
97441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            try {
98441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                assertTrue(msg +": invalid effect ID", (virtualizer.getId() != 0));
99441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            } catch (IllegalStateException e) {
100441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                msg = msg.concat(": Virtualizer not initialized");
101441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
102441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            result = true;
103441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
104441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Virtualizer not found");
105441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
106441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Effect library not loaded");
107441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } finally {
108441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            if (virtualizer != null) {
109441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                virtualizer.release();
110441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
111441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
112441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
113441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
114441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
115441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
116441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //-----------------------------------------------------------------
117441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    // 1 - get/set parameters
118441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //----------------------------------
119441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
120441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 1.0: test strength
121441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
122441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test1_0Strength() throws Exception {
123441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
124441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test1_0Strength()";
125441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        getVirtualizer(0);
126441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
127441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            if (mVirtualizer.getStrengthSupported()) {
128441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                mVirtualizer.setStrength((short)TEST_STRENGTH);
129441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                short strength = mVirtualizer.getRoundedStrength();
130441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                // allow 10% difference between set strength and rounded strength
131441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                assertTrue(msg +": got incorrect strength",
132441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                        ((float)strength > (float)TEST_STRENGTH * 0.9f) &&
133441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                        ((float)strength < (float)TEST_STRENGTH * 1.1f));
134441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            } else {
135441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                short strength = mVirtualizer.getRoundedStrength();
136441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                assertTrue(msg +": got incorrect strength", strength >= 0 && strength <= 1000);
137441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
138441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            result = true;
139441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
140441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Bad parameter value");
141441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "Bad parameter value");
142441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
143441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": get parameter() rejected");
144441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "get parameter() rejected");
145441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalStateException e) {
146441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat("get parameter() called in wrong state");
147441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "get parameter() called in wrong state");
148441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } finally {
149441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            releaseVirtualizer();
150441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
151441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
152441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
153441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
154441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //Test case 1.1: test properties
155441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    @LargeTest
156441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    public void test1_1Properties() throws Exception {
157441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        boolean result = false;
158441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        String msg = "test1_1Properties()";
159441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        getVirtualizer(0);
160441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        try {
161441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            Virtualizer.Settings settings = mVirtualizer.getProperties();
162441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            String str = settings.toString();
163441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            settings = new Virtualizer.Settings(str);
164441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            mVirtualizer.setProperties(settings);
165441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            result = true;
166441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalArgumentException e) {
167441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": Bad parameter value");
168441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "Bad parameter value");
169441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (UnsupportedOperationException e) {
170441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat(": get parameter() rejected");
171441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "get parameter() rejected");
172441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } catch (IllegalStateException e) {
173441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            msg = msg.concat("get parameter() called in wrong state");
174441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            loge(msg, "get parameter() called in wrong state");
175441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        } finally {
176441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            releaseVirtualizer();
177441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
178441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        assertTrue(msg, result);
179441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
180441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
181441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //-----------------------------------------------------------------
182441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    // private methods
183441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    //----------------------------------
184441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
185441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private void getVirtualizer(int session) {
186441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent         if (mVirtualizer == null || session != mSession) {
187441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent             if (session != mSession && mVirtualizer != null) {
188441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                 mVirtualizer.release();
189441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                 mVirtualizer = null;
190441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent             }
191441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent             try {
192441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                mVirtualizer = new Virtualizer(0, session);
193441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                mSession = session;
194441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            } catch (IllegalArgumentException e) {
195441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                Log.e(TAG, "getVirtualizer() Virtualizer not found exception: "+e);
196441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            } catch (UnsupportedOperationException e) {
197441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent                Log.e(TAG, "getVirtualizer() Effect library not loaded exception: "+e);
198441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            }
199441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent         }
200441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent         assertNotNull("could not create mVirtualizer", mVirtualizer);
201441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    }
202441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
203441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent    private void releaseVirtualizer() {
204441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        if (mVirtualizer != null) {
205441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            mVirtualizer.release();
206441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent            mVirtualizer = null;
207441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent        }
208441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent   }
209441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent
210441ec6bd106a6ac09ff0ceed1f8d437c33cfc156Eric Laurent}
211