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