From 5a07fb4e59196b499dbea4d07965e1e0c997749f Mon Sep 17 00:00:00 2001 From: Pawin Vongmasa Date: Thu, 31 Oct 2019 21:58:14 -0700 Subject: MediaCodec: Release lock before calling onFrameRendered() Test: atest CtsMediaTestCases -- \ --module-arg CtsMediaTestCases:size:small Bug: 143672592 Change-Id: I4fb55eb8a90913544a793097c977fee539e09776 --- media/java/android/media/MediaCodec.java | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/media/java/android/media/MediaCodec.java b/media/java/android/media/MediaCodec.java index 510ee442f852..c9d79784004c 100644 --- a/media/java/android/media/MediaCodec.java +++ b/media/java/android/media/MediaCodec.java @@ -1702,20 +1702,22 @@ final public class MediaCodec { break; } case EVENT_FRAME_RENDERED: - synchronized (mListenerLock) { - Map map = (Map)msg.obj; - for (int i = 0; ; ++i) { - Object mediaTimeUs = map.get(i + "-media-time-us"); - Object systemNano = map.get(i + "-system-nano"); - if (mediaTimeUs == null || systemNano == null - || mOnFrameRenderedListener == null) { - break; - } - mOnFrameRenderedListener.onFrameRendered( - mCodec, (long)mediaTimeUs, (long)systemNano); + Map map = (Map)msg.obj; + for (int i = 0; ; ++i) { + Object mediaTimeUs = map.get(i + "-media-time-us"); + Object systemNano = map.get(i + "-system-nano"); + OnFrameRenderedListener onFrameRenderedListener; + synchronized (mListenerLock) { + onFrameRenderedListener = mOnFrameRenderedListener; } - break; + if (mediaTimeUs == null || systemNano == null + || onFrameRenderedListener == null) { + break; + } + onFrameRenderedListener.onFrameRendered( + mCodec, (long)mediaTimeUs, (long)systemNano); } + break; default: { break; -- cgit v1.2.3-59-g8ed1b