media: handle MediaSyncTest video decoder callbacks on a separate thread
Bug: 22234976
Change-Id: I7d0e436c2ccb999aba0f6e2dac178f52cf3310ac
diff --git a/tests/tests/media/src/android/media/cts/MediaSyncTest.java b/tests/tests/media/src/android/media/cts/MediaSyncTest.java
index b334040..c4fe4c1 100644
--- a/tests/tests/media/src/android/media/cts/MediaSyncTest.java
+++ b/tests/tests/media/src/android/media/cts/MediaSyncTest.java
@@ -33,6 +33,8 @@
import android.media.MediaTimestamp;
import android.media.PlaybackParams;
import android.media.SyncParams;
+import android.os.Handler;
+import android.os.HandlerThread;
import android.test.ActivityInstrumentationTestCase2;
import android.util.Log;
import android.view.Surface;
@@ -554,6 +556,9 @@
}
}
+ private HandlerThread mHandlerThread;
+ private Handler mHandler;
+
Decoder(MediaSyncTest test, MediaSync sync, boolean isAudio) {
mMediaSyncTest = test;
mMediaSync = sync;
@@ -563,6 +568,10 @@
public boolean setup(int inputResourceId, Surface surface, long lastBufferTimestampUs) {
if (!mIsAudio) {
mSurface = surface;
+ // handle video callback in a separate thread as releaseOutputBuffer is blocking
+ mHandlerThread = new HandlerThread("SyncViewVidDec");
+ mHandlerThread.start();
+ mHandler = new Handler(mHandlerThread.getLooper());
}
mLastBufferTimestampUs = lastBufferTimestampUs;
try {
@@ -581,7 +590,7 @@
}
mDecoder = MediaCodec.createDecoderByType(mimeType);
mDecoder.configure(mediaFormat, mSurface, null, 0);
- mDecoder.setCallback(this);
+ mDecoder.setCallback(this, mHandler);
return true;
} catch (IOException e) {