1/*
2 *  Copyright (c) 2013 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
11package org.webrtc.webrtcdemo;
12
13public class VideoEngine {
14  private final long nativeVideoEngine;
15
16  // Keep in sync (including this comment) with webrtc/common_types.h:TraceLevel
17  public enum TraceLevel {
18    TRACE_NONE(0x0000),
19    TRACE_STATE_INFO(0x0001),
20    TRACE_WARNING(0x0002),
21    TRACE_ERROR(0x0004),
22    TRACE_CRITICAL(0x0008),
23    TRACE_API_CALL(0x0010),
24    TRACE_DEFAULT(0x00ff),
25    TRACE_MODULE_CALL(0x0020),
26    TRACE_MEMORY(0x0100),
27    TRACE_TIMER(0x0200),
28    TRACE_STREAM(0x0400),
29    TRACE_DEBUG(0x0800),
30    TRACE_INFO(0x1000),
31    TRACE_TERSE_INFO(0x2000),
32    TRACE_ALL(0xffff);
33
34    public final int level;
35    TraceLevel(int level) {
36      this.level = level;
37    }
38  };
39
40  // Keep in sync (including this comment) with
41  // webrtc/video_engine/include/vie_rtp_rtcp.h:ViEKeyFrameRequestMethod
42  public enum VieKeyFrameRequestMethod {
43    KEY_FRAME_REQUEST_NONE, KEY_FRAME_REQUEST_PLI_RTCP,
44    KEY_FRAME_REQUEST_FIR_RTP, KEY_FRAME_REQUEST_FIR_RTCP
45  }
46
47  // Keep in sync (including this comment) with
48  // webrtc/common_types.h:RtpDirections
49  public enum RtpDirections { INCOMING, OUTGOING }
50
51  public VideoEngine() {
52    nativeVideoEngine = create();
53  }
54
55  // API comments can be found in VideoEngine's native APIs. Not all native
56  // APIs are available.
57  private static native long create();
58  public native int init();
59  public native int setVoiceEngine(VoiceEngine voe);
60  public native void dispose();
61  public native int startSend(int channel);
62  public native int stopRender(int channel);
63  public native int stopSend(int channel);
64  public native int startReceive(int channel);
65  public native int stopReceive(int channel);
66  public native int createChannel();
67  public native int deleteChannel(int channel);
68  public native int connectAudioChannel(int videoChannel, int voiceChannel);
69  public native int setLocalReceiver(int channel, int port);
70  public native int setSendDestination(int channel, int port, String ipAddr);
71  public native int numberOfCodecs();
72  public native VideoCodecInst getCodec(int index);
73  public native int setReceiveCodec(int channel, VideoCodecInst codec);
74  public native int setSendCodec(int channel, VideoCodecInst codec);
75  public native int addRenderer(int channel, Object glSurface, int zOrder,
76      float left, float top,
77      float right, float bottom);
78  public native int removeRenderer(int channel);
79  public native int registerExternalReceiveCodec(int channel, int plType,
80      MediaCodecVideoDecoder decoder, boolean internal_source);
81  public native int deRegisterExternalReceiveCodec(int channel, int plType);
82  public native int startRender(int channel);
83  public native int numberOfCaptureDevices();
84  public native CameraDesc getCaptureDevice(int index);
85  public native int allocateCaptureDevice(CameraDesc camera);
86  public native int connectCaptureDevice(int cameraId, int channel);
87  public native int startCapture(int cameraId);
88  public native int stopCapture(int cameraId);
89  public native int releaseCaptureDevice(int cameraId);
90  public native int getOrientation(CameraDesc camera);
91  public native int setRotateCapturedFrames(int cameraId, int degrees);
92  public native int setNackStatus(int channel, boolean enable);
93  public int setKeyFrameRequestMethod(int channel,
94      VieKeyFrameRequestMethod requestMethod) {
95    return setKeyFrameRequestMethod(channel, requestMethod.ordinal());
96  }
97  private native int setKeyFrameRequestMethod(int channel,
98      int requestMethod);
99  public native RtcpStatistics getReceivedRtcpStatistics(int channel);
100  public native int registerObserver(int channel,
101      VideoDecodeEncodeObserver callback);
102  public native int deregisterObserver(int channel);
103  public native int setTraceFile(String fileName,
104      boolean fileCounter);
105  public int setTraceFilter(TraceLevel filter) {
106    return nativeSetTraceFilter(filter.level);
107  }
108  private native int nativeSetTraceFilter(int filter);
109  public int startRtpDump(int channel, String file,
110      RtpDirections direction) {
111    return startRtpDump(channel, file, direction.ordinal());
112  }
113  private native int startRtpDump(int channel, String file,
114      int direction);
115  public int stopRtpDump(int channel, RtpDirections direction) {
116    return stopRtpDump(channel, direction.ordinal());
117  }
118  private native int stopRtpDump(int channel, int direction);
119  public native int setLocalSSRC(int channel, int ssrc);
120}
121