Add "throws IOException" to MediaCodec constructors
Change to add "throws IOException" to android.media.MediaCodec
(createByCodecName|createDecoderByType|createEncoderByType). The exception was
previously thrown through the native JNI, but not explicitly declared.
Requires changes to existing code for declaration compatibility.
Bug: 11364276
Change-Id: Ide4231c75a135e5e16d3b4787a9f05d35135cdcd
Signed-off-by: Andy Hung <hunga@google.com>
diff --git a/tests/tests/media/src/android/media/cts/DecodeEditEncodeTest.java b/tests/tests/media/src/android/media/cts/DecodeEditEncodeTest.java
index 0d83647..e74a64a 100644
--- a/tests/tests/media/src/android/media/cts/DecodeEditEncodeTest.java
+++ b/tests/tests/media/src/android/media/cts/DecodeEditEncodeTest.java
@@ -149,7 +149,8 @@
/**
* Tests editing of a video file with GL.
*/
- private void videoEditTest() {
+ private void videoEditTest()
+ throws IOException {
VideoChunks sourceChunks = new VideoChunks();
if (!generateVideoFile(sourceChunks)) {
@@ -182,7 +183,8 @@
*
* @return true on success, false on "soft" failure
*/
- private boolean generateVideoFile(VideoChunks output) {
+ private boolean generateVideoFile(VideoChunks output)
+ throws IOException {
if (VERBOSE) Log.d(TAG, "generateVideoFile " + mWidth + "x" + mHeight);
MediaCodec encoder = null;
InputSurface inputSurface = null;
@@ -393,7 +395,8 @@
* for output and a Surface for input, we can avoid issues with obscure formats and can
* use a fragment shader to do transformations.
*/
- private VideoChunks editVideoFile(VideoChunks inputData) {
+ private VideoChunks editVideoFile(VideoChunks inputData)
+ throws IOException {
if (VERBOSE) Log.d(TAG, "editVideoFile " + mWidth + "x" + mHeight);
VideoChunks outputData = new VideoChunks();
MediaCodec decoder = null;
@@ -613,7 +616,8 @@
* Checks the video file to see if the contents match our expectations. We decode the
* video to a Surface and check the pixels with GL.
*/
- private void checkVideoFile(VideoChunks inputData) {
+ private void checkVideoFile(VideoChunks inputData)
+ throws IOException {
OutputSurface surface = null;
MediaCodec decoder = null;
diff --git a/tests/tests/media/src/android/media/cts/DecoderTest.java b/tests/tests/media/src/android/media/cts/DecoderTest.java
index 211cc15..0194958 100644
--- a/tests/tests/media/src/android/media/cts/DecoderTest.java
+++ b/tests/tests/media/src/android/media/cts/DecoderTest.java
@@ -578,21 +578,25 @@
}
private MediaCodec createDecoder(String mime) {
- if (false) {
- // change to force testing software codecs
- if (mime.contains("avc")) {
- return MediaCodec.createByCodecName("OMX.google.h264.decoder");
- } else if (mime.contains("3gpp")) {
- return MediaCodec.createByCodecName("OMX.google.h263.decoder");
- } else if (mime.contains("mp4v")) {
- return MediaCodec.createByCodecName("OMX.google.mpeg4.decoder");
- } else if (mime.contains("vp8")) {
- return MediaCodec.createByCodecName("OMX.google.vp8.decoder");
- } else if (mime.contains("vp9")) {
- return MediaCodec.createByCodecName("OMX.google.vp9.decoder");
+ try {
+ if (false) {
+ // change to force testing software codecs
+ if (mime.contains("avc")) {
+ return MediaCodec.createByCodecName("OMX.google.h264.decoder");
+ } else if (mime.contains("3gpp")) {
+ return MediaCodec.createByCodecName("OMX.google.h263.decoder");
+ } else if (mime.contains("mp4v")) {
+ return MediaCodec.createByCodecName("OMX.google.mpeg4.decoder");
+ } else if (mime.contains("vp8")) {
+ return MediaCodec.createByCodecName("OMX.google.vp8.decoder");
+ } else if (mime.contains("vp9")) {
+ return MediaCodec.createByCodecName("OMX.google.vp9.decoder");
+ }
}
+ return MediaCodec.createDecoderByType(mime);
+ } catch (Exception e) {
+ return null;
}
- return MediaCodec.createDecoderByType(mime);
}
private int countFrames(int video, int resetMode, int eosframe, Surface s)
@@ -929,6 +933,8 @@
testFd.getLength());
codec = createDecoder(mime);
+ assertNotNull("couldn't find codec", codec);
+
codec.configure(format, null /* surface */, null /* crypto */, 0 /* flags */);
codec.start();
codecInputBuffers = codec.getInputBuffers();
@@ -1097,6 +1103,8 @@
assertTrue("not an audio file", mime.startsWith("audio/"));
codec = MediaCodec.createDecoderByType(mime);
+ assertNotNull("couldn't find codec", codec);
+
codec.configure(format, null /* surface */, null /* crypto */, 0 /* flags */);
codec.start();
codecInputBuffers = codec.getInputBuffers();
diff --git a/tests/tests/media/src/android/media/cts/EncodeVirtualDisplayTest.java b/tests/tests/media/src/android/media/cts/EncodeVirtualDisplayTest.java
index 9f76ddf..eb06eda 100644
--- a/tests/tests/media/src/android/media/cts/EncodeVirtualDisplayTest.java
+++ b/tests/tests/media/src/android/media/cts/EncodeVirtualDisplayTest.java
@@ -153,7 +153,7 @@
/**
* Prepares the encoder, decoder, and virtual display.
*/
- private void encodeVirtualDisplayTest() {
+ private void encodeVirtualDisplayTest() throws IOException {
MediaCodec encoder = null;
MediaCodec decoder = null;
OutputSurface outputSurface = null;
diff --git a/tests/tests/media/src/android/media/cts/EncoderTest.java b/tests/tests/media/src/android/media/cts/EncoderTest.java
index e9d0b5f..c2e59d4 100644
--- a/tests/tests/media/src/android/media/cts/EncoderTest.java
+++ b/tests/tests/media/src/android/media/cts/EncoderTest.java
@@ -187,8 +187,13 @@
}
private void testEncoder(String componentName, MediaFormat format) {
- MediaCodec codec = MediaCodec.createByCodecName(componentName);
-
+ MediaCodec codec;
+ try {
+ codec = MediaCodec.createByCodecName(componentName);
+ } catch (Exception e) {
+ fail("codec '" + componentName + "' failed construction.");
+ return; /* does not get here, but avoids warning */
+ }
try {
codec.configure(
format,
@@ -196,9 +201,7 @@
null /* crypto */,
MediaCodec.CONFIGURE_FLAG_ENCODE);
} catch (IllegalStateException e) {
- Log.e(TAG, "codec '" + componentName + "' failed configuration.");
-
- assertTrue("codec '" + componentName + "' failed configuration.", false);
+ fail("codec '" + componentName + "' failed configuration.");
}
codec.start();
diff --git a/tests/tests/media/src/android/media/cts/ExtractDecodeEditEncodeMuxTest.java b/tests/tests/media/src/android/media/cts/ExtractDecodeEditEncodeMuxTest.java
index 81296e4..264a76a 100644
--- a/tests/tests/media/src/android/media/cts/ExtractDecodeEditEncodeMuxTest.java
+++ b/tests/tests/media/src/android/media/cts/ExtractDecodeEditEncodeMuxTest.java
@@ -469,7 +469,8 @@
* @param inputFormat the format of the stream to decode
* @param surface into which to decode the frames
*/
- private MediaCodec createVideoDecoder(MediaFormat inputFormat, Surface surface) {
+ private MediaCodec createVideoDecoder(MediaFormat inputFormat, Surface surface)
+ throws IOException {
MediaCodec decoder = MediaCodec.createDecoderByType(getMimeTypeFor(inputFormat));
decoder.configure(inputFormat, surface, null, 0);
decoder.start();
@@ -489,7 +490,8 @@
private MediaCodec createVideoEncoder(
MediaCodecInfo codecInfo,
MediaFormat format,
- AtomicReference<Surface> surfaceReference) {
+ AtomicReference<Surface> surfaceReference)
+ throws IOException {
MediaCodec encoder = MediaCodec.createByCodecName(codecInfo.getName());
encoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
// Must be called before start() is.
@@ -503,7 +505,8 @@
*
* @param inputFormat the format of the stream to decode
*/
- private MediaCodec createAudioDecoder(MediaFormat inputFormat) {
+ private MediaCodec createAudioDecoder(MediaFormat inputFormat)
+ throws IOException {
MediaCodec decoder = MediaCodec.createDecoderByType(getMimeTypeFor(inputFormat));
decoder.configure(inputFormat, null, null, 0);
decoder.start();
@@ -516,7 +519,8 @@
* @param codecInfo of the codec to use
* @param format of the stream to be produced
*/
- private MediaCodec createAudioEncoder(MediaCodecInfo codecInfo, MediaFormat format) {
+ private MediaCodec createAudioEncoder(MediaCodecInfo codecInfo, MediaFormat format)
+ throws IOException {
MediaCodec encoder = MediaCodec.createByCodecName(codecInfo.getName());
encoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
encoder.start();
diff --git a/tests/tests/media/src/android/media/cts/MediaCodecListTest.java b/tests/tests/media/src/android/media/cts/MediaCodecListTest.java
index 3428e86..9c07cf1 100644
--- a/tests/tests/media/src/android/media/cts/MediaCodecListTest.java
+++ b/tests/tests/media/src/android/media/cts/MediaCodecListTest.java
@@ -26,6 +26,7 @@
import android.util.Log;
import java.io.File;
+import java.io.IOException;
import java.util.List;
import java.util.ArrayList;
@@ -56,7 +57,7 @@
// Each component advertised by MediaCodecList should at least be
// instantiate-able.
- public void testComponentInstantiation() {
+ public void testComponentInstantiation() throws IOException {
Log.d(TAG, "testComponentInstantiation");
int codecCount = MediaCodecList.getCodecCount();
diff --git a/tests/tests/media/src/android/media/cts/MediaCodecTest.java b/tests/tests/media/src/android/media/cts/MediaCodecTest.java
index d2c39f4..c61fd8c 100644
--- a/tests/tests/media/src/android/media/cts/MediaCodecTest.java
+++ b/tests/tests/media/src/android/media/cts/MediaCodecTest.java
@@ -27,6 +27,7 @@
import android.util.Log;
import android.view.Surface;
+import java.io.IOException;
import java.nio.ByteBuffer;
@@ -77,7 +78,11 @@
format.setInteger(MediaFormat.KEY_COLOR_FORMAT, colorFormat);
try {
- encoder = MediaCodec.createByCodecName(codecInfo.getName());
+ try {
+ encoder = MediaCodec.createByCodecName(codecInfo.getName());
+ } catch (IOException e) {
+ fail("failed to create codec " + codecInfo.getName());
+ }
try {
surface = encoder.createInputSurface();
fail("createInputSurface should not work pre-configure");
@@ -123,7 +128,11 @@
InputSurface inputSurface = null;
try {
- encoder = MediaCodec.createEncoderByType(MIME_TYPE);
+ try {
+ encoder = MediaCodec.createEncoderByType(MIME_TYPE);
+ } catch (IOException e) {
+ fail("failed to create " + MIME_TYPE + " encoder");
+ }
encoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
inputSurface = new InputSurface(encoder.createInputSurface());
inputSurface.makeCurrent();
@@ -171,7 +180,11 @@
Surface surface = null;
try {
- encoder = MediaCodec.createEncoderByType(MIME_TYPE);
+ try {
+ encoder = MediaCodec.createEncoderByType(MIME_TYPE);
+ } catch (IOException e) {
+ fail("failed to create " + MIME_TYPE + " encoder");
+ }
encoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
surface = encoder.createInputSurface();
encoder.start();
@@ -205,7 +218,11 @@
Surface surface = null;
try {
- encoder = MediaCodec.createEncoderByType(MIME_TYPE);
+ try {
+ encoder = MediaCodec.createEncoderByType(MIME_TYPE);
+ } catch (IOException e) {
+ fail("failed to create " + MIME_TYPE + " encoder");
+ }
encoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
surface = encoder.createInputSurface();
encoder.start();