blob: 7701ab31db3828985494301dda6c24cd12fcf3c1 [file] [log] [blame]
package org.sflphone.service;
import android.annotation.TargetApi;
import android.content.Context;
import android.media.AudioManager;
import android.os.Build;
import android.util.Log;
/**
* This class illustrates how to query OpenSL config parameters on Jelly Bean MR1 while maintaining
* backward compatibility with older versions of Android. The trick is to place the new API calls in
* an inner class that will only be loaded if we're running on JB MR1 or later.
*/
public abstract class OpenSlParams {
/**
* @return The recommended sample rate in Hz.
*/
public abstract int getSampleRate();
/**
* @return The recommended buffer size in frames.
*/
public abstract int getBufferSize();
/**
* @param context, e.g., the current activity.
* @return OpenSlParams instance for the given context.
*/
public static OpenSlParams createInstance(Context context) {
return (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1)
? new JellyBeanMr1OpenSlParams(context)
: new DefaultOpenSlParams();
}
private OpenSlParams() {
// Not meant to be instantiated except here.
}
// Implementation for Jelly Bean MR1 or later.
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
private static class JellyBeanMr1OpenSlParams extends OpenSlParams {
private final int sampleRate;
private final int bufferSize;
private JellyBeanMr1OpenSlParams(Context context) {
AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
// Provide default values in case config lookup fails.
int sr = 44100;
int bs = 64;
try {
// If possible, query the native sample rate and buffer size.
sr = Integer.parseInt(am.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE));
bs = Integer.parseInt(am.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER));
} catch (NumberFormatException e) {
Log.w(getClass().getName(), "Failed to read native OpenSL config: " + e);
}
sampleRate = sr;
bufferSize = bs;
}
@Override
public int getSampleRate() {
return sampleRate;
}
@Override
public int getBufferSize() {
return bufferSize;
}
};
// Default factory for Jelly Bean or older.
private static class DefaultOpenSlParams extends OpenSlParams {
@Override
public int getSampleRate() {
return 44100;
}
@Override
public int getBufferSize() {
return 64;
}
};
}