From e1b8b7bf0f58754f469945a47099fb20ce7ea5bb Mon Sep 17 00:00:00 2001 From: Wonsik Kim Date: Mon, 2 Oct 2017 16:16:34 -0700 Subject: [PATCH] fix AmrInputStream.read() hang Test: AmrInputStream.read() no longer hangs Change-Id: I5b3e1c7667891ce250e447c32213511077c5b5df --- media/java/android/media/AmrInputStream.java | 24 ++++++++------------ 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/media/java/android/media/AmrInputStream.java b/media/java/android/media/AmrInputStream.java index 13c3ac468882f..efaf2244e26c1 100644 --- a/media/java/android/media/AmrInputStream.java +++ b/media/java/android/media/AmrInputStream.java @@ -30,7 +30,7 @@ import android.util.Log; */ public final class AmrInputStream extends InputStream { private final static String TAG = "AmrInputStream"; - + // frame is 20 msec at 8.000 khz private final static int SAMPLES_PER_FRAME = 8000 * 20 / 1000; @@ -140,19 +140,15 @@ public final class AmrInputStream extends InputStream { } } - // now read encoded data from the encoder (blocking, since we just filled up the - // encoder's input with data it should be able to output at least one buffer) - while (true) { - int index = mCodec.dequeueOutputBuffer(mInfo, -1); - if (index >= 0) { - mBufIn = mInfo.size; - ByteBuffer out = mCodec.getOutputBuffer(index); - out.get(mBuf, 0 /* offset */, mBufIn /* length */); - mCodec.releaseOutputBuffer(index, false /* render */); - if ((mInfo.flags & MediaCodec.BUFFER_FLAG_END_OF_STREAM) != 0) { - mSawOutputEOS = true; - } - break; + // now read encoded data from the encoder + int index = mCodec.dequeueOutputBuffer(mInfo, 0); + if (index >= 0) { + mBufIn = mInfo.size; + ByteBuffer out = mCodec.getOutputBuffer(index); + out.get(mBuf, 0 /* offset */, mBufIn /* length */); + mCodec.releaseOutputBuffer(index, false /* render */); + if ((mInfo.flags & MediaCodec.BUFFER_FLAG_END_OF_STREAM) != 0) { + mSawOutputEOS = true; } } }