diff options
Diffstat (limited to 'media/java/android')
| -rw-r--r-- | media/java/android/media/ImageReader.java | 9 | ||||
| -rw-r--r-- | media/java/android/media/MediaCodec.java | 32 | ||||
| -rw-r--r-- | media/java/android/media/MediaCodecList.java | 2 | ||||
| -rw-r--r-- | media/java/android/media/browse/MediaBrowser.java | 1 | ||||
| -rw-r--r-- | media/java/android/media/session/MediaController.java | 3 | ||||
| -rw-r--r-- | media/java/android/media/session/MediaSession.java | 2 |
6 files changed, 37 insertions, 12 deletions
diff --git a/media/java/android/media/ImageReader.java b/media/java/android/media/ImageReader.java index b786f94..b541454 100644 --- a/media/java/android/media/ImageReader.java +++ b/media/java/android/media/ImageReader.java @@ -642,7 +642,7 @@ public class ImageReader implements AutoCloseable { private void createSurfacePlanes() { mPlanes = new SurfacePlane[ImageReader.this.mNumPlanes]; for (int i = 0; i < ImageReader.this.mNumPlanes; i++) { - mPlanes[i] = nativeCreatePlane(i); + mPlanes[i] = nativeCreatePlane(i, ImageReader.this.mFormat); } } private class SurfacePlane extends android.media.Image.Plane { @@ -661,7 +661,8 @@ public class ImageReader implements AutoCloseable { if (mBuffer != null) { return mBuffer; } else { - mBuffer = SurfaceImage.this.nativeImageGetBuffer(mIndex); + mBuffer = SurfaceImage.this.nativeImageGetBuffer(mIndex, + ImageReader.this.mFormat); // Set the byteBuffer order according to host endianness (native order), // otherwise, the byteBuffer order defaults to ByteOrder.BIG_ENDIAN. return mBuffer.order(ByteOrder.nativeOrder()); @@ -711,8 +712,8 @@ public class ImageReader implements AutoCloseable { private SurfacePlane[] mPlanes; private boolean mIsImageValid; - private synchronized native ByteBuffer nativeImageGetBuffer(int idx); - private synchronized native SurfacePlane nativeCreatePlane(int idx); + private synchronized native ByteBuffer nativeImageGetBuffer(int idx, int readerFormat); + private synchronized native SurfacePlane nativeCreatePlane(int idx, int readerFormat); } private synchronized native void nativeInit(Object weakSelf, int w, int h, diff --git a/media/java/android/media/MediaCodec.java b/media/java/android/media/MediaCodec.java index 5fb4f12..420510a 100644 --- a/media/java/android/media/MediaCodec.java +++ b/media/java/android/media/MediaCodec.java @@ -827,8 +827,13 @@ final public class MediaCodec { invalidateByteBuffer(mCachedInputBuffers, index); mDequeuedInputBuffers.remove(index); } - native_queueInputBuffer( - index, offset, size, presentationTimeUs, flags); + try { + native_queueInputBuffer( + index, offset, size, presentationTimeUs, flags); + } catch (CryptoException | IllegalStateException e) { + revalidateByteBuffer(mCachedInputBuffers, index); + throw e; + } } private native final void native_queueInputBuffer( @@ -947,8 +952,13 @@ final public class MediaCodec { invalidateByteBuffer(mCachedInputBuffers, index); mDequeuedInputBuffers.remove(index); } - native_queueSecureInputBuffer( - index, offset, info, presentationTimeUs, flags); + try { + native_queueSecureInputBuffer( + index, offset, info, presentationTimeUs, flags); + } catch (CryptoException | IllegalStateException e) { + revalidateByteBuffer(mCachedInputBuffers, index); + throw e; + } } private native final void native_queueSecureInputBuffer( @@ -1270,6 +1280,18 @@ final public class MediaCodec { } } + private final void revalidateByteBuffer( + ByteBuffer[] buffers, int index) { + synchronized(mBufferLock) { + if (buffers != null && index >= 0 && index < buffers.length) { + ByteBuffer buffer = buffers[index]; + if (buffer != null) { + buffer.setAccessible(true); + } + } + } + } + private final void validateOutputByteBuffer( ByteBuffer[] buffers, int index, BufferInfo info) { if (buffers != null && index >= 0 && index < buffers.length) { @@ -1307,7 +1329,7 @@ final public class MediaCodec { } private final void freeAllTrackedBuffers() { - synchronized (mBufferLock) { + synchronized(mBufferLock) { freeByteBuffers(mCachedInputBuffers); freeByteBuffers(mCachedOutputBuffers); mCachedInputBuffers = null; diff --git a/media/java/android/media/MediaCodecList.java b/media/java/android/media/MediaCodecList.java index 0dcbd65..bb848d9 100644 --- a/media/java/android/media/MediaCodecList.java +++ b/media/java/android/media/MediaCodecList.java @@ -204,7 +204,7 @@ final public class MediaCodecList { * requests, or {@code null} if no such codec has been found. */ public final String findEncoderForFormat(MediaFormat format) { - return findCodecForFormat(false /* encoder */, format); + return findCodecForFormat(true /* encoder */, format); } private String findCodecForFormat(boolean encoder, MediaFormat format) { diff --git a/media/java/android/media/browse/MediaBrowser.java b/media/java/android/media/browse/MediaBrowser.java index 0f9bded..3e5919f 100644 --- a/media/java/android/media/browse/MediaBrowser.java +++ b/media/java/android/media/browse/MediaBrowser.java @@ -713,6 +713,7 @@ public final class MediaBrowser { // We make a new mServiceCallbacks each time we connect so that we can drop // responses from previous connections. mServiceCallbacks = getNewServiceCallbacks(); + mState = CONNECT_STATE_CONNECTING; // Call connect, which is async. When we get a response from that we will // say that we're connected. diff --git a/media/java/android/media/session/MediaController.java b/media/java/android/media/session/MediaController.java index cfbf3af..e490c2b 100644 --- a/media/java/android/media/session/MediaController.java +++ b/media/java/android/media/session/MediaController.java @@ -918,7 +918,8 @@ public final class MediaController { @Override public void onQueueChanged(ParceledListSlice parceledQueue) { - List<MediaSession.QueueItem> queue = parceledQueue.getList(); + List<MediaSession.QueueItem> queue = parceledQueue == null ? null : parceledQueue + .getList(); MediaController controller = mController.get(); if (controller != null) { controller.postMessage(MSG_UPDATE_QUEUE, queue, null); diff --git a/media/java/android/media/session/MediaSession.java b/media/java/android/media/session/MediaSession.java index 2c38697..ad018ad 100644 --- a/media/java/android/media/session/MediaSession.java +++ b/media/java/android/media/session/MediaSession.java @@ -427,7 +427,7 @@ public final class MediaSession { */ public void setQueue(@Nullable List<QueueItem> queue) { try { - mBinder.setQueue(new ParceledListSlice<QueueItem>(queue)); + mBinder.setQueue(queue == null ? null : new ParceledListSlice<QueueItem>(queue)); } catch (RemoteException e) { Log.wtf("Dead object in setQueue.", e); } |
