| /* |
| * Copyright 2018 The WebRTC project authors. All Rights Reserved. |
| * |
| * Use of this source code is governed by a BSD-style license |
| * that can be found in the LICENSE file in the root of the source |
| * tree. An additional intellectual property rights grant can be found |
| * in the file PATENTS. All contributing project authors may |
| * be found in the AUTHORS file in the root of the source tree. |
| */ |
| |
| package org.webrtc; |
| |
| import static com.google.common.truth.Truth.assertThat; |
| import static com.google.common.truth.Truth.assertWithMessage; |
| |
| import java.nio.ByteBuffer; |
| import java.util.Random; |
| import org.webrtc.JavaI420Buffer; |
| import org.webrtc.VideoFrame; |
| |
| /** |
| * Helper methods for {@link HardwareVideoEncoderTest} and {@link HardwareVideoDecoderTest}. |
| */ |
| class CodecTestHelper { |
| static void assertEqualContents(byte[] expected, ByteBuffer actual, int offset, int size) { |
| assertThat(size).isEqualTo(expected.length); |
| assertThat(actual.capacity()).isAtLeast(offset + size); |
| for (int i = 0; i < expected.length; i++) { |
| assertWithMessage("At index: " + i).that(actual.get(offset + i)).isEqualTo(expected[i]); |
| } |
| } |
| |
| static byte[] generateRandomData(int length) { |
| Random random = new Random(); |
| byte[] data = new byte[length]; |
| random.nextBytes(data); |
| return data; |
| } |
| |
| static VideoFrame.I420Buffer wrapI420(int width, int height, byte[] data) { |
| final int posY = 0; |
| final int posU = width * height; |
| final int posV = posU + width * height / 4; |
| final int endV = posV + width * height / 4; |
| |
| ByteBuffer buffer = ByteBuffer.allocateDirect(data.length); |
| buffer.put(data); |
| |
| buffer.limit(posU); |
| buffer.position(posY); |
| ByteBuffer dataY = buffer.slice(); |
| |
| buffer.limit(posV); |
| buffer.position(posU); |
| ByteBuffer dataU = buffer.slice(); |
| |
| buffer.limit(endV); |
| buffer.position(posV); |
| ByteBuffer dataV = buffer.slice(); |
| |
| return JavaI420Buffer.wrap(width, height, dataY, width, dataU, width / 2, dataV, width / 2, |
| /* releaseCallback= */ null); |
| } |
| } |