diff --git a/library/core/src/main/java/com/google/android/exoplayer2/video/BitmapFactoryVideoRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/video/BitmapFactoryVideoRenderer.java index 36b67c12b7..fe571b1e9b 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/video/BitmapFactoryVideoRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/video/BitmapFactoryVideoRenderer.java @@ -152,28 +152,15 @@ public class BitmapFactoryVideoRenderer extends BaseRenderer { } class RenderRunnable implements Runnable { - final DecoderInputBuffer decoderInputBuffer; - final long renderUs; + private DecoderInputBuffer decoderInputBuffer; + private final long renderUs; - RenderRunnable(final DecoderInputBuffer decoderInputBuffer, long renderUs) { + RenderRunnable(@NonNull final DecoderInputBuffer decoderInputBuffer, long renderUs) { this.decoderInputBuffer = decoderInputBuffer; this.renderUs = renderUs; } public void run() { - synchronized (eventDispatcher) { - while (currentTimeUs < renderUs) { - try { - thread = Thread.currentThread(); - eventDispatcher.wait(); - } catch (InterruptedException e) { - //If we are interrupted, treat as a cancel - return; - } finally { - thread = null; - } - } - } @Nullable final ByteBuffer byteBuffer = decoderInputBuffer.data; @Nullable @@ -190,6 +177,21 @@ public class BitmapFactoryVideoRenderer extends BaseRenderer { eventDispatcher.videoCodecError(new NullPointerException("Decode bytes failed")); return; } + decoderInputBuffer = null; + //Wait for time to advance to display the Bitmap + synchronized (eventDispatcher) { + while (currentTimeUs < renderUs) { + try { + thread = Thread.currentThread(); + eventDispatcher.wait(); + } catch (InterruptedException e) { + //If we are interrupted, treat as a cancel + return; + } finally { + thread = null; + } + } + } //Log.d(TAG, "Drawing: " + bitmap.getWidth() + "x" + bitmap.getHeight()); final Canvas canvas = surface.lockCanvas(null);