package com.github.piasy.videocre; import java.util.Arrays; import java.util.List; import org.webrtc.Logging; import org.webrtc.VideoCapturer; import org.webrtc.VideoFrame; import org.webrtc.VideoRenderer; /** * Created by Piasy{github.com/Piasy} on 20/07/2017. */ public class VideoSink implements VideoCapturer.CapturerObserver { private static final String TAG = "VideoSink"; private final List<VideoRenderer.Callbacks> mCallbacks; private final MatrixHelper mMatrixHelper; private volatile boolean mFlipHorizontal; private volatile boolean mFlipVertical; private volatile float mRotateDegree; public VideoSink(final VideoRenderer.Callbacks... callbacks) { mCallbacks = Arrays.asList(callbacks); mMatrixHelper = new MatrixHelper(); } public void flipHorizontal(boolean flip) { mFlipHorizontal = flip; } public void flipVertical(boolean flip) { mFlipVertical = flip; } public void rotate(float rotateDegree) { mRotateDegree = rotateDegree; } @Override public void onCapturerStarted(final boolean success) { Logging.d(TAG, "onCapturerStarted " + success); } @Override public void onCapturerStopped() { Logging.d(TAG, "onCapturerStopped"); } @Override public void onByteBufferFrameCaptured(final byte[] data, final int width, final int height, final int rotation, final long timestamp) { } @Override public void onTextureFrameCaptured(final int width, final int height, final int oesTextureId, final float[] transformMatrix, final int rotation, final long timestamp) { mMatrixHelper.flip(transformMatrix, mFlipHorizontal, mFlipVertical); mMatrixHelper.rotate(transformMatrix, mRotateDegree); VideoRenderer.I420Frame frame = new VideoRenderer.I420Frame(width, height, rotation, oesTextureId, transformMatrix, 0, timestamp); for (int i = 0, n = mCallbacks.size(); i < n; i++) { mCallbacks.get(i).renderFrame(frame); } } @Override public void onFrameCaptured(final VideoFrame frame) { } }