diff --git a/sdk/android/src/java/org/webrtc/AndroidVideoDecoder.java b/sdk/android/src/java/org/webrtc/AndroidVideoDecoder.java index 651774ee0e..ad40898e4c 100644 --- a/sdk/android/src/java/org/webrtc/AndroidVideoDecoder.java +++ b/sdk/android/src/java/org/webrtc/AndroidVideoDecoder.java @@ -264,9 +264,9 @@ class AndroidVideoDecoder implements VideoDecoder, VideoSink { ByteBuffer buffer; try { - buffer = codec.getInputBuffers()[index]; + buffer = codec.getInputBuffer(index); } catch (IllegalStateException e) { - Logging.e(TAG, "getInputBuffers failed", e); + Logging.e(TAG, "getInputBuffer with index=" + index + " failed", e); return VideoCodecStatus.ERROR; } @@ -377,14 +377,14 @@ class AndroidVideoDecoder implements VideoDecoder, VideoSink { // exceeded, deliverDecodedFrame() will be called again on the next iteration of the output // thread's loop. Blocking here prevents the output thread from busy-waiting while the codec // is idle. - int result = codec.dequeueOutputBuffer(info, DEQUEUE_OUTPUT_BUFFER_TIMEOUT_US); - if (result == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) { + int index = codec.dequeueOutputBuffer(info, DEQUEUE_OUTPUT_BUFFER_TIMEOUT_US); + if (index == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) { reformat(codec.getOutputFormat()); return; } - if (result < 0) { - Logging.v(TAG, "dequeueOutputBuffer returned " + result); + if (index < 0) { + Logging.v(TAG, "dequeueOutputBuffer returned " + index); return; } @@ -399,9 +399,9 @@ class AndroidVideoDecoder implements VideoDecoder, VideoSink { hasDecodedFirstFrame = true; if (surfaceTextureHelper != null) { - deliverTextureFrame(result, info, rotation, decodeTimeMs); + deliverTextureFrame(index, info, rotation, decodeTimeMs); } else { - deliverByteFrame(result, info, rotation, decodeTimeMs); + deliverByteFrame(index, info, rotation, decodeTimeMs); } } catch (IllegalStateException e) { @@ -452,7 +452,7 @@ class AndroidVideoDecoder implements VideoDecoder, VideoSink { } private void deliverByteFrame( - int result, MediaCodec.BufferInfo info, int rotation, Integer decodeTimeMs) { + int index, MediaCodec.BufferInfo info, int rotation, Integer decodeTimeMs) { // Load dimensions from shared memory under the dimension lock. int width; int height; @@ -479,7 +479,7 @@ class AndroidVideoDecoder implements VideoDecoder, VideoSink { stride = info.size * 2 / (height * 3); } - ByteBuffer buffer = codec.getOutputBuffers()[result]; + ByteBuffer buffer = codec.getOutputBuffer(index); buffer.position(info.offset); buffer.limit(info.offset + info.size); buffer = buffer.slice(); @@ -491,7 +491,7 @@ class AndroidVideoDecoder implements VideoDecoder, VideoSink { // All other supported color formats are NV12. frameBuffer = copyNV12ToI420Buffer(buffer, stride, sliceHeight, width, height); } - codec.releaseOutputBuffer(result, /* render= */ false); + codec.releaseOutputBuffer(index, /* render= */ false); long presentationTimeNs = info.presentationTimeUs * 1000; VideoFrame frame = new VideoFrame(frameBuffer, rotation, presentationTimeNs); diff --git a/sdk/android/src/java/org/webrtc/HardwareVideoEncoder.java b/sdk/android/src/java/org/webrtc/HardwareVideoEncoder.java index 743edb0b85..42a3ccfbfd 100644 --- a/sdk/android/src/java/org/webrtc/HardwareVideoEncoder.java +++ b/sdk/android/src/java/org/webrtc/HardwareVideoEncoder.java @@ -56,7 +56,7 @@ class HardwareVideoEncoder implements VideoEncoder { /** * Keeps track of the number of output buffers that have been passed down the pipeline and not yet * released. We need to wait for this to go down to zero before operations invalidating the output - * buffers, i.e., stop() and getOutputBuffers(). + * buffers, i.e., stop() and getOutputBuffer(). */ private static class BusyCount { private final Object countLock = new Object(); @@ -132,7 +132,6 @@ class HardwareVideoEncoder implements VideoEncoder { // --- Valid and immutable while an encoding session is running. @Nullable private MediaCodecWrapper codec; - @Nullable private ByteBuffer[] outputBuffers; // Thread that delivers encoded frames to the user callback. @Nullable private Thread outputThread; @@ -285,7 +284,6 @@ class HardwareVideoEncoder implements VideoEncoder { sliceHeight = getSliceHeight(inputFormat, height); codec.start(); - outputBuffers = codec.getOutputBuffers(); } catch (IllegalStateException e) { Logging.e(TAG, "initEncodeInternal failed", e); release(); @@ -335,7 +333,6 @@ class HardwareVideoEncoder implements VideoEncoder { outputBuilders.clear(); codec = null; - outputBuffers = null; outputThread = null; // Allow changing thread after release. @@ -454,9 +451,9 @@ class HardwareVideoEncoder implements VideoEncoder { ByteBuffer buffer; try { - buffer = codec.getInputBuffers()[index]; + buffer = codec.getInputBuffer(index); } catch (IllegalStateException e) { - Logging.e(TAG, "getInputBuffers failed", e); + Logging.e(TAG, "getInputBuffer with index=" + index + " failed", e); return VideoCodecStatus.ERROR; } fillInputBuffer(buffer, videoFrameBuffer); @@ -582,12 +579,11 @@ class HardwareVideoEncoder implements VideoEncoder { if (index < 0) { if (index == MediaCodec.INFO_OUTPUT_BUFFERS_CHANGED) { outputBuffersBusyCount.waitForZero(); - outputBuffers = codec.getOutputBuffers(); } return; } - ByteBuffer codecOutputBuffer = outputBuffers[index]; + ByteBuffer codecOutputBuffer = codec.getOutputBuffer(index); codecOutputBuffer.position(info.offset); codecOutputBuffer.limit(info.offset + info.size); diff --git a/sdk/android/src/java/org/webrtc/MediaCodecWrapper.java b/sdk/android/src/java/org/webrtc/MediaCodecWrapper.java index 89f392d3bd..60c853df35 100644 --- a/sdk/android/src/java/org/webrtc/MediaCodecWrapper.java +++ b/sdk/android/src/java/org/webrtc/MediaCodecWrapper.java @@ -45,9 +45,9 @@ interface MediaCodecWrapper { MediaFormat getOutputFormat(); - ByteBuffer[] getInputBuffers(); + ByteBuffer getInputBuffer(int index); - ByteBuffer[] getOutputBuffers(); + ByteBuffer getOutputBuffer(int index); Surface createInputSurface(); diff --git a/sdk/android/src/java/org/webrtc/MediaCodecWrapperFactoryImpl.java b/sdk/android/src/java/org/webrtc/MediaCodecWrapperFactoryImpl.java index 3b4647bcb6..2ba62ac7d6 100644 --- a/sdk/android/src/java/org/webrtc/MediaCodecWrapperFactoryImpl.java +++ b/sdk/android/src/java/org/webrtc/MediaCodecWrapperFactoryImpl.java @@ -88,13 +88,13 @@ class MediaCodecWrapperFactoryImpl implements MediaCodecWrapperFactory { } @Override - public ByteBuffer[] getInputBuffers() { - return mediaCodec.getInputBuffers(); + public ByteBuffer getInputBuffer(int index) { + return mediaCodec.getInputBuffer(index); } @Override - public ByteBuffer[] getOutputBuffers() { - return mediaCodec.getOutputBuffers(); + public ByteBuffer getOutputBuffer(int index) { + return mediaCodec.getOutputBuffer(index); } @Override diff --git a/sdk/android/tests/src/org/webrtc/AndroidVideoDecoderTest.java b/sdk/android/tests/src/org/webrtc/AndroidVideoDecoderTest.java index da7539879c..535187e99e 100644 --- a/sdk/android/tests/src/org/webrtc/AndroidVideoDecoderTest.java +++ b/sdk/android/tests/src/org/webrtc/AndroidVideoDecoderTest.java @@ -283,7 +283,7 @@ public class AndroidVideoDecoderTest { /* presentationTimeUs= */ anyLong(), /* flags= */ eq(0)); - ByteBuffer inputBuffer = fakeMediaCodecWrapper.getInputBuffers()[indexCaptor.getValue()]; + ByteBuffer inputBuffer = fakeMediaCodecWrapper.getInputBuffer(indexCaptor.getValue()); CodecTestHelper.assertEqualContents( ENCODED_TEST_DATA, inputBuffer, offsetCaptor.getValue(), sizeCaptor.getValue()); } diff --git a/sdk/android/tests/src/org/webrtc/FakeMediaCodecWrapper.java b/sdk/android/tests/src/org/webrtc/FakeMediaCodecWrapper.java index c5e69498e0..fb7aba4700 100644 --- a/sdk/android/tests/src/org/webrtc/FakeMediaCodecWrapper.java +++ b/sdk/android/tests/src/org/webrtc/FakeMediaCodecWrapper.java @@ -292,13 +292,13 @@ public class FakeMediaCodecWrapper implements MediaCodecWrapper { } @Override - public ByteBuffer[] getInputBuffers() { - return inputBuffers; + public ByteBuffer getInputBuffer(int index) { + return inputBuffers[index]; } @Override - public ByteBuffer[] getOutputBuffers() { - return outputBuffers; + public ByteBuffer getOutputBuffer(int index) { + return outputBuffers[index]; } @Override diff --git a/sdk/android/tests/src/org/webrtc/HardwareVideoEncoderTest.java b/sdk/android/tests/src/org/webrtc/HardwareVideoEncoderTest.java index 635fffb140..bd4a642f00 100644 --- a/sdk/android/tests/src/org/webrtc/HardwareVideoEncoderTest.java +++ b/sdk/android/tests/src/org/webrtc/HardwareVideoEncoderTest.java @@ -216,7 +216,7 @@ public class HardwareVideoEncoderTest { verify(fakeMediaCodecWrapper) .queueInputBuffer(indexCaptor.capture(), offsetCaptor.capture(), sizeCaptor.capture(), anyLong(), anyInt()); - ByteBuffer buffer = fakeMediaCodecWrapper.getInputBuffers()[indexCaptor.getValue()]; + ByteBuffer buffer = fakeMediaCodecWrapper.getInputBuffer(indexCaptor.getValue()); CodecTestHelper.assertEqualContents( i420, buffer, offsetCaptor.getValue(), sizeCaptor.getValue()); }