Commit 3a06d2fb authored by newt's avatar newt Committed by Commit bot

Address NewApi Android lint warnings in src/media.

Android lint complains when we use APIs added to Android after ICS
because these will causes crashes if used on ICS devices. In cases where
we only call the API on later versions of Android, we need to annotate
the method or class with @TargetApi to tell Android lint that each
particular use of the new API is safe. This adds a bunch of such
@TargetApi annotations.

BUG=266140

Review URL: https://codereview.chromium.org/969883002

Cr-Commit-Position: refs/heads/master@{#319703}
parent d27a7e1e
......@@ -4,6 +4,7 @@
package org.chromium.media;
import android.annotation.TargetApi;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothManager;
import android.content.BroadcastReceiver;
......@@ -70,18 +71,6 @@ class AudioManagerAndroid {
}
}
private static boolean runningOnJellyBeanOrHigher() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
}
private static boolean runningOnJellyBeanMR1OrHigher() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1;
}
private static boolean runningOnJellyBeanMR2OrHigher() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2;
}
/** Simple container for device information. */
private static class AudioDeviceName {
private final int mId;
......@@ -455,9 +444,10 @@ class AudioManagerAndroid {
return array;
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
@CalledByNative
private int getNativeOutputSampleRate() {
if (runningOnJellyBeanMR1OrHigher()) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
String sampleRateString = mAudioManager.getProperty(
AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE);
return sampleRateString == null
......@@ -513,18 +503,23 @@ class AudioManagerAndroid {
PackageManager.FEATURE_AUDIO_LOW_LATENCY);
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
@CalledByNative
private int getAudioLowLatencyOutputFrameSize() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
return DEFAULT_FRAME_PER_BUFFER;
}
String framesPerBuffer =
mAudioManager.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER);
return framesPerBuffer == null
? DEFAULT_FRAME_PER_BUFFER : Integer.parseInt(framesPerBuffer);
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@CalledByNative
private static boolean shouldUseAcousticEchoCanceler() {
// AcousticEchoCanceler was added in API level 16 (Jelly Bean).
if (!runningOnJellyBeanOrHigher()) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
return false;
}
......@@ -642,6 +637,7 @@ class AudioManagerAndroid {
* android.bluetooth.BluetoothAdapter.getProfileConnectionState() requires
* the BLUETOOTH permission.
*/
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
private boolean hasBluetoothHeadset() {
if (!mHasBluetoothPermission) {
Log.w(TAG, "hasBluetoothHeadset() requires BLUETOOTH permission");
......@@ -654,7 +650,7 @@ class AudioManagerAndroid {
// higher, retrieve it through getSystemService(String) with
// BLUETOOTH_SERVICE.
BluetoothAdapter btAdapter = null;
if (runningOnJellyBeanMR2OrHigher()) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
// Use BluetoothManager to get the BluetoothAdapter for
// Android 4.3 and above.
BluetoothManager btManager =
......
......@@ -4,6 +4,7 @@
package org.chromium.media;
import android.annotation.TargetApi;
import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioTrack;
......@@ -30,6 +31,7 @@ import java.util.Map;
* audio rendering.
*/
@JNINamespace("media")
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
class MediaCodecBridge {
private static final String TAG = "MediaCodecBridge";
......@@ -212,6 +214,7 @@ class MediaCodecBridge {
/**
* Get a name of default android codec.
*/
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
@SuppressWarnings("deprecation")
@CalledByNative
private static String getDefaultCodecName(String mime, int direction) {
......@@ -237,6 +240,8 @@ class MediaCodecBridge {
/**
* Get a list of encoder supported color formats for specified mime type.
*/
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@SuppressWarnings("deprecation")
@CalledByNative
private static int[] getEncoderColorFormatsForMime(String mime) {
MediaCodecInfo[] codecs = null;
......@@ -495,6 +500,7 @@ class MediaCodecBridge {
return MEDIA_CODEC_OK;
}
@TargetApi(Build.VERSION_CODES.KITKAT)
@CalledByNative
private void setVideoBitrate(int bps) {
Bundle b = new Bundle();
......@@ -636,6 +642,7 @@ class MediaCodecBridge {
return width <= MAX_ADAPTIVE_PLAYBACK_WIDTH && height <= MAX_ADAPTIVE_PLAYBACK_HEIGHT;
}
@TargetApi(Build.VERSION_CODES.KITKAT)
private static boolean codecSupportsAdaptivePlayback(MediaCodec mediaCodec, String mime) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT || mediaCodec == null) {
return false;
......
......@@ -4,9 +4,11 @@
package org.chromium.media;
import android.annotation.TargetApi;
import android.media.MediaCrypto;
import android.media.MediaDrm;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Handler;
import android.util.Log;
......@@ -32,6 +34,7 @@ import java.util.UUID;
* sessions for a single MediaSourcePlayer.
*/
@JNINamespace("media")
@TargetApi(Build.VERSION_CODES.KITKAT)
public class MediaDrmBridge {
// Implementation Notes:
// - A media crypto session (mMediaCryptoSession) is opened after MediaDrm
......@@ -198,6 +201,7 @@ public class MediaDrmBridge {
// Create MediaCrypto object.
try {
// TODO: This requires KitKat. Is this class used on pre-KK devices?
if (MediaCrypto.isCryptoSchemeSupported(mSchemeUUID)) {
mMediaCrypto = new MediaCrypto(mSchemeUUID, mMediaCryptoSession);
Log.d(TAG, "MediaCrypto successfully created!");
......
......@@ -4,9 +4,11 @@
package org.chromium.media;
import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.SurfaceTexture;
import android.opengl.GLES20;
import android.os.Build;
import android.util.Log;
import org.chromium.base.JNINamespace;
......@@ -22,6 +24,8 @@ import java.util.concurrent.locks.ReentrantLock;
**/
@JNINamespace("media")
@SuppressWarnings("deprecation")
//TODO: is this class only used on ICS MR1 (or some later version) and above?
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1)
public abstract class VideoCaptureCamera extends VideoCapture
implements android.hardware.Camera.PreviewCallback {
......
......@@ -4,6 +4,7 @@
package org.chromium.media;
import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.ImageFormat;
import android.hardware.camera2.CameraAccessException;
......@@ -16,6 +17,7 @@ import android.hardware.camera2.CaptureRequest;
import android.hardware.camera2.params.StreamConfigurationMap;
import android.media.Image;
import android.media.ImageReader;
import android.os.Build;
import android.os.Handler;
import android.os.HandlerThread;
import android.util.Log;
......@@ -37,6 +39,7 @@ import java.util.List;
* and their capabilities, using android.hardware.camera2.CameraManager.
**/
@JNINamespace("media")
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public class VideoCaptureCamera2 extends VideoCapture {
// Inner class to extend a CameraDevice state change listener.
......
......@@ -4,11 +4,13 @@
package org.chromium.media;
import android.annotation.TargetApi;
import android.content.Context;
import android.media.MediaCodec;
import android.media.MediaCodec.BufferInfo;
import android.media.MediaExtractor;
import android.media.MediaFormat;
import android.os.Build;
import android.os.ParcelFileDescriptor;
import android.util.Log;
......@@ -19,6 +21,7 @@ import java.io.File;
import java.nio.ByteBuffer;
@JNINamespace("media")
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
class WebAudioMediaCodecBridge {
static final String LOG_TAG = "WebAudioMediaCodec";
// TODO(rtoy): What is the correct timeout value for reading
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment