• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 package org.webrtc.examples.androidnativeapi;
12 
13 import android.content.Context;
14 import android.os.Handler;
15 import android.os.HandlerThread;
16 import org.webrtc.CapturerObserver;
17 import org.webrtc.SurfaceTextureHelper;
18 import org.webrtc.VideoCapturer;
19 import org.webrtc.VideoSink;
20 
21 public class CallClient {
22   private static final String TAG = "CallClient";
23   private static final int CAPTURE_WIDTH = 640;
24   private static final int CAPTURE_HEIGHT = 480;
25   private static final int CAPTURE_FPS = 30;
26 
27   private final Context applicationContext;
28   private final HandlerThread thread;
29   private final Handler handler;
30 
31   private long nativeClient;
32   private SurfaceTextureHelper surfaceTextureHelper;
33   private VideoCapturer videoCapturer;
34 
CallClient(Context applicationContext)35   public CallClient(Context applicationContext) {
36     this.applicationContext = applicationContext;
37     thread = new HandlerThread(TAG + "Thread");
38     thread.start();
39     handler = new Handler(thread.getLooper());
40     handler.post(() -> { nativeClient = nativeCreateClient(); });
41   }
42 
call(VideoSink localSink, VideoSink remoteSink, VideoCapturer videoCapturer, SurfaceTextureHelper videoCapturerSurfaceTextureHelper)43   public void call(VideoSink localSink, VideoSink remoteSink, VideoCapturer videoCapturer,
44       SurfaceTextureHelper videoCapturerSurfaceTextureHelper) {
45     handler.post(() -> {
46       nativeCall(nativeClient, localSink, remoteSink);
47       videoCapturer.initialize(videoCapturerSurfaceTextureHelper, applicationContext,
48           nativeGetJavaVideoCapturerObserver(nativeClient));
49       videoCapturer.startCapture(CAPTURE_WIDTH, CAPTURE_HEIGHT, CAPTURE_FPS);
50     });
51   }
52 
hangup()53   public void hangup() {
54     handler.post(() -> { nativeHangup(nativeClient); });
55   }
56 
close()57   public void close() {
58     handler.post(() -> {
59       nativeDelete(nativeClient);
60       nativeClient = 0;
61     });
62     thread.quitSafely();
63   }
64 
nativeCreateClient()65   private static native long nativeCreateClient();
nativeCall( long nativeAndroidCallClient, VideoSink localSink, VideoSink remoteSink)66   private static native void nativeCall(
67       long nativeAndroidCallClient, VideoSink localSink, VideoSink remoteSink);
nativeHangup(long nativeAndroidCallClient)68   private static native void nativeHangup(long nativeAndroidCallClient);
nativeDelete(long nativeAndroidCallClient)69   private static native void nativeDelete(long nativeAndroidCallClient);
nativeGetJavaVideoCapturerObserver( long nativeAndroidCallClient)70   private static native CapturerObserver nativeGetJavaVideoCapturerObserver(
71       long nativeAndroidCallClient);
72 }
73