| Index: talk/app/webrtc/androidtests/src/org/webrtc/VideoCapturerAndroidTestFixtures.java
|
| diff --git a/talk/app/webrtc/androidtests/src/org/webrtc/VideoCapturerAndroidTestFixtures.java b/talk/app/webrtc/androidtests/src/org/webrtc/VideoCapturerAndroidTestFixtures.java
|
| index da450281aab5a38a3907532ca678419286f8fbd8..2bd49beba23515f41803fdc2cab76c8a4a07eb3e 100644
|
| --- a/talk/app/webrtc/androidtests/src/org/webrtc/VideoCapturerAndroidTestFixtures.java
|
| +++ b/talk/app/webrtc/androidtests/src/org/webrtc/VideoCapturerAndroidTestFixtures.java
|
| @@ -43,16 +43,32 @@ public class VideoCapturerAndroidTestFixtures {
|
| static class RendererCallbacks implements VideoRenderer.Callbacks {
|
| private int framesRendered = 0;
|
| private Object frameLock = 0;
|
| + private int width = 0;
|
| + private int height = 0;
|
|
|
| @Override
|
| public void renderFrame(I420Frame frame) {
|
| synchronized (frameLock) {
|
| ++framesRendered;
|
| + width = frame.rotatedWidth();
|
| + height = frame.rotatedHeight();
|
| frameLock.notify();
|
| }
|
| VideoRenderer.renderFrameDone(frame);
|
| }
|
|
|
| + public int frameWidth() {
|
| + synchronized (frameLock) {
|
| + return width;
|
| + }
|
| + }
|
| +
|
| + public int frameHeight() {
|
| + synchronized (frameLock) {
|
| + return height;
|
| + }
|
| + }
|
| +
|
| public int WaitForNextFrameToRender() throws InterruptedException {
|
| synchronized (frameLock) {
|
| frameLock.wait();
|
| @@ -541,4 +557,43 @@ public class VideoCapturerAndroidTestFixtures {
|
| capturer.dispose();
|
| assertTrue(capturer.isReleased());
|
| }
|
| +
|
| + static public void scaleCameraOutput(VideoCapturerAndroid capturer) throws InterruptedException {
|
| + PeerConnectionFactory factory = new PeerConnectionFactory();
|
| + VideoSource source =
|
| + factory.createVideoSource(capturer, new MediaConstraints());
|
| + VideoTrack track = factory.createVideoTrack("dummy", source);
|
| + RendererCallbacks renderer = new RendererCallbacks();
|
| + track.addRenderer(new VideoRenderer(renderer));
|
| + assertTrue(renderer.WaitForNextFrameToRender() > 0);
|
| +
|
| + final int startWidth = renderer.frameWidth();
|
| + final int startHeight = renderer.frameHeight();
|
| + final int frameRate = 30;
|
| + final int scaledWidth = startWidth / 2;
|
| + final int scaledHeight = startHeight / 2;
|
| +
|
| + // Request the captured frames to be scaled.
|
| + capturer.onOutputFormatRequest(scaledWidth, scaledHeight, frameRate);
|
| +
|
| + boolean gotExpectedResolution = false;
|
| + int numberOfInspectedFrames = 0;
|
| +
|
| + do {
|
| + renderer.WaitForNextFrameToRender();
|
| + ++numberOfInspectedFrames;
|
| +
|
| + gotExpectedResolution = (renderer.frameWidth() == scaledWidth
|
| + && renderer.frameHeight() == scaledHeight);
|
| + } while (!gotExpectedResolution && numberOfInspectedFrames < 30);
|
| +
|
| + source.stop();
|
| + track.dispose();
|
| + source.dispose();
|
| + factory.dispose();
|
| + assertTrue(capturer.isReleased());
|
| +
|
| + assertTrue(gotExpectedResolution);
|
| + }
|
| +
|
| }
|
|
|