summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--api/current.txt6
-rw-r--r--media/java/android/media/MediaCodec.java33
-rw-r--r--tests/AccessoryDisplay/sink/src/com/android/accessorydisplay/sink/DisplaySinkService.java8
-rw-r--r--tests/AccessoryDisplay/source/src/com/android/accessorydisplay/source/DisplaySourceService.java10
-rw-r--r--tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/decoder/AudioTrackDecoder.java11
-rw-r--r--tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/decoder/CpuVideoTrackDecoder.java9
-rw-r--r--tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/decoder/GpuVideoTrackDecoder.java12
7 files changed, 72 insertions, 17 deletions
diff --git a/api/current.txt b/api/current.txt
index 745b33d93..e82d348 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -12597,9 +12597,9 @@ package android.media {
public final class MediaCodec {
method public void configure(android.media.MediaFormat, android.view.Surface, android.media.MediaCrypto, int);
- method public static android.media.MediaCodec createByCodecName(java.lang.String);
- method public static android.media.MediaCodec createDecoderByType(java.lang.String);
- method public static android.media.MediaCodec createEncoderByType(java.lang.String);
+ method public static android.media.MediaCodec createByCodecName(java.lang.String) throws java.io.IOException;
+ method public static android.media.MediaCodec createDecoderByType(java.lang.String) throws java.io.IOException;
+ method public static android.media.MediaCodec createEncoderByType(java.lang.String) throws java.io.IOException;
method public final android.view.Surface createInputSurface();
method public final int dequeueInputBuffer(long);
method public final int dequeueOutputBuffer(android.media.MediaCodec.BufferInfo, long);
diff --git a/media/java/android/media/MediaCodec.java b/media/java/android/media/MediaCodec.java
index 5175830..02cb6dd 100644
--- a/media/java/android/media/MediaCodec.java
+++ b/media/java/android/media/MediaCodec.java
@@ -23,6 +23,7 @@ import android.media.MediaFormat;
import android.os.Bundle;
import android.view.Surface;
+import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.Arrays;
import java.util.Map;
@@ -66,8 +67,8 @@ import java.util.Map;
*
* Each codec maintains a number of input and output buffers that are
* referred to by index in API calls.
- * The contents of these buffers is represented by the ByteBuffer[] arrays
- * accessible through getInputBuffers() and getOutputBuffers().
+ * The contents of these buffers are represented by the ByteBuffer[] arrays
+ * accessible through {@link #getInputBuffers} and {@link #getOutputBuffers}.
*
* After a successful call to {@link #start} the client "owns" neither
* input nor output buffers, subsequent calls to {@link #dequeueInputBuffer}
@@ -117,7 +118,18 @@ import java.util.Map;
* own any buffers anymore.
* Note that the format of the data submitted after a flush must not change,
* flush does not support format discontinuities,
- * for this a full stop(), configure(), start() cycle is necessary.
+ * for this a full {@link #stop}, {@link #configure}, {@link #start}
+ * cycle is necessary.
+ *
+ * <p> The factory methods
+ * {@link #createByCodecName},
+ * {@link #createDecoderByType},
+ * and {@link #createEncoderByType}
+ * throw {@link java.io.IOException} on failure which
+ * the caller must catch or declare to pass up.
+ * Other methods will throw {@link java.lang.IllegalStateException}
+ * if the codec is in an Uninitialized, Invalid, or Error state (e.g. not
+ * initialized properly). Exceptions are thrown elsewhere as noted. </p>
*
*/
final public class MediaCodec {
@@ -181,16 +193,22 @@ final public class MediaCodec {
* </ul>
*
* @param type The mime type of the input data.
+ * @throws IOException if the codec cannot be created.
+ * @throws IllegalArgumentException if type is null.
*/
- public static MediaCodec createDecoderByType(String type) {
+ public static MediaCodec createDecoderByType(String type)
+ throws IOException {
return new MediaCodec(type, true /* nameIsType */, false /* encoder */);
}
/**
* Instantiate an encoder supporting output data of the given mime type.
* @param type The desired mime type of the output data.
+ * @throws IOException if the codec cannot be created.
+ * @throws IllegalArgumentException if type is null.
*/
- public static MediaCodec createEncoderByType(String type) {
+ public static MediaCodec createEncoderByType(String type)
+ throws IOException {
return new MediaCodec(type, true /* nameIsType */, true /* encoder */);
}
@@ -199,8 +217,11 @@ final public class MediaCodec {
* use this method to instantiate it. Use with caution.
* Likely to be used with information obtained from {@link android.media.MediaCodecList}
* @param name The name of the codec to be instantiated.
+ * @throws IOException if the codec cannot be created.
+ * @throws IllegalArgumentException if name is null.
*/
- public static MediaCodec createByCodecName(String name) {
+ public static MediaCodec createByCodecName(String name)
+ throws IOException {
return new MediaCodec(
name, false /* nameIsType */, false /* unused */);
}
diff --git a/tests/AccessoryDisplay/sink/src/com/android/accessorydisplay/sink/DisplaySinkService.java b/tests/AccessoryDisplay/sink/src/com/android/accessorydisplay/sink/DisplaySinkService.java
index daec845..9e6ced1 100644
--- a/tests/AccessoryDisplay/sink/src/com/android/accessorydisplay/sink/DisplaySinkService.java
+++ b/tests/AccessoryDisplay/sink/src/com/android/accessorydisplay/sink/DisplaySinkService.java
@@ -30,6 +30,7 @@ import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
+import java.io.IOException;
import java.nio.ByteBuffer;
public class DisplaySinkService extends Service implements SurfaceHolder.Callback {
@@ -150,7 +151,12 @@ public class DisplaySinkService extends Service implements SurfaceHolder.Callbac
if (mSurface != null) {
MediaFormat format = MediaFormat.createVideoFormat(
"video/avc", mSurfaceWidth, mSurfaceHeight);
- mCodec = MediaCodec.createDecoderByType("video/avc");
+ try {
+ mCodec = MediaCodec.createDecoderByType("video/avc");
+ } catch (IOException e) {
+ throw new RuntimeException(
+ "IOException in MediaCodec.createDecoderByType for video/avc", e);
+ }
mCodec.configure(format, mSurface, null, 0);
mCodec.start();
mCodecBufferInfo = new BufferInfo();
diff --git a/tests/AccessoryDisplay/source/src/com/android/accessorydisplay/source/DisplaySourceService.java b/tests/AccessoryDisplay/source/src/com/android/accessorydisplay/source/DisplaySourceService.java
index 256f900..9207fb2 100644
--- a/tests/AccessoryDisplay/source/src/com/android/accessorydisplay/source/DisplaySourceService.java
+++ b/tests/AccessoryDisplay/source/src/com/android/accessorydisplay/source/DisplaySourceService.java
@@ -32,6 +32,7 @@ import android.os.Message;
import android.view.Display;
import android.view.Surface;
+import java.io.IOException;
import java.nio.ByteBuffer;
public class DisplaySourceService extends Service {
@@ -191,8 +192,13 @@ public class DisplaySourceService extends Service {
format.setInteger(MediaFormat.KEY_BIT_RATE, BIT_RATE);
format.setInteger(MediaFormat.KEY_FRAME_RATE, FRAME_RATE);
format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, I_FRAME_INTERVAL);
-
- MediaCodec codec = MediaCodec.createEncoderByType("video/avc");
+ MediaCodec codec;
+ try {
+ codec = MediaCodec.createEncoderByType("video/avc");
+ } catch (IOException e) {
+ throw new RuntimeException(
+ "IOException in MediaCodec.createEncoderByType for video/avc", e);
+ }
codec.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
Surface surface = codec.createInputSurface();
codec.start();
diff --git a/tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/decoder/AudioTrackDecoder.java b/tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/decoder/AudioTrackDecoder.java
index 0219fd7..fbea6cd 100644
--- a/tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/decoder/AudioTrackDecoder.java
+++ b/tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/decoder/AudioTrackDecoder.java
@@ -59,8 +59,15 @@ public class AudioTrackDecoder extends TrackDecoder {
@Override
protected MediaCodec initMediaCodec(MediaFormat format) {
- MediaCodec mediaCodec = MediaCodec.createDecoderByType(
- format.getString(MediaFormat.KEY_MIME));
+ MediaCodec mediaCodec;
+ try {
+ mediaCodec = MediaCodec.createDecoderByType(
+ format.getString(MediaFormat.KEY_MIME));
+ } catch (IOException e) {
+ throw new RuntimeException(
+ "IOException in MediaCodec.createDecoderByType for "
+ + format.getString(MediaFormat.KEY_MIME), e);
+ }
mediaCodec.configure(format, null, null, 0);
return mediaCodec;
}
diff --git a/tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/decoder/CpuVideoTrackDecoder.java b/tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/decoder/CpuVideoTrackDecoder.java
index 96f3059..f57eacf 100644
--- a/tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/decoder/CpuVideoTrackDecoder.java
+++ b/tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/decoder/CpuVideoTrackDecoder.java
@@ -29,6 +29,7 @@ import androidx.media.filterfw.Frame;
import androidx.media.filterfw.FrameImage2D;
import androidx.media.filterfw.PixelUtils;
+import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.Arrays;
import java.util.HashSet;
@@ -214,7 +215,13 @@ public class CpuVideoTrackDecoder extends VideoTrackDecoder {
return null;
} else {
String bestCodec = candidateCodecs.firstEntry().getValue();
- return MediaCodec.createByCodecName(bestCodec);
+ try {
+ return MediaCodec.createByCodecName(bestCodec);
+ } catch (IOException e) {
+ throw new RuntimeException(
+ "IOException in MediaCodec.createByCodecName for "
+ + bestCodec, e);
+ }
}
}
diff --git a/tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/decoder/GpuVideoTrackDecoder.java b/tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/decoder/GpuVideoTrackDecoder.java
index bbba9d8..546cdfc 100644
--- a/tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/decoder/GpuVideoTrackDecoder.java
+++ b/tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/decoder/GpuVideoTrackDecoder.java
@@ -28,6 +28,7 @@ import androidx.media.filterfw.FrameImage2D;
import androidx.media.filterfw.ImageShader;
import androidx.media.filterfw.TextureSource;
+import java.io.IOException;
import java.nio.ByteBuffer;
/**
@@ -86,9 +87,16 @@ public class GpuVideoTrackDecoder extends VideoTrackDecoder {
@Override
protected MediaCodec initMediaCodec(MediaFormat format) {
+ MediaCodec mediaCodec;
+ try {
+ mediaCodec = MediaCodec.createDecoderByType(
+ format.getString(MediaFormat.KEY_MIME));
+ } catch (IOException e) {
+ throw new RuntimeException(
+ "IOException in MediaCodec.createDecoderByType for "
+ + format.getString(MediaFormat.KEY_MIME), e);
+ }
Surface surface = new Surface(mSurfaceTexture);
- MediaCodec mediaCodec = MediaCodec.createDecoderByType(
- format.getString(MediaFormat.KEY_MIME));
mediaCodec.configure(format, surface, null, 0);
surface.release();
return mediaCodec;