1a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org/* 2a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 3a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org * 4a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org * Use of this source code is governed by a BSD-style license 5a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org * that can be found in the LICENSE file in the root of the source 6a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org * tree. An additional intellectual property rights grant can be found 7a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org * in the file PATENTS. All contributing project authors may 8a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org */ 10a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 11a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org// This file contains JNI for the video engine interfaces. 12a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org// The native functions are found using jni's auto discovery. 13a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 14a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org#include "webrtc/examples/android/media_demo/jni/video_engine_jni.h" 15a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 16a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org#include <map> 17a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org#include <string> 18a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 19a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org#include "webrtc/common_types.h" 20a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org#include "webrtc/examples/android/media_demo/jni/jni_helpers.h" 21a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org#include "webrtc/examples/android/media_demo/jni/media_codec_video_decoder.h" 22a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org#include "webrtc/examples/android/media_demo/jni/voice_engine_jni.h" 23a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org#include "webrtc/modules/utility/interface/helpers_android.h" 24a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org#include "webrtc/test/channel_transport/include/channel_transport.h" 25a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org#include "webrtc/video_engine/include/vie_base.h" 26a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org#include "webrtc/video_engine/include/vie_capture.h" 27a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org#include "webrtc/video_engine/include/vie_codec.h" 28a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org#include "webrtc/video_engine/include/vie_external_codec.h" 29a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org#include "webrtc/video_engine/include/vie_network.h" 30a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org#include "webrtc/video_engine/include/vie_render.h" 31a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org#include "webrtc/video_engine/include/vie_rtp_rtcp.h" 32a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 33a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org// Macro for native functions that can be found by way of jni-auto discovery. 34a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org// Note extern "C" is needed for "discovery" of native methods to work. 35a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org#define JOWW(rettype, name) \ 36a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org extern "C" rettype JNIEXPORT JNICALL Java_org_webrtc_webrtcdemo_##name 37a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 38a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgnamespace { 39a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 40a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgstatic JavaVM* g_vm = NULL; 41a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgstatic ClassReferenceHolder* g_class_reference_holder = NULL; 42a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 43a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgjclass GetClass(const char* name) { 44a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org CHECK(g_class_reference_holder, "Class reference holder NULL"); 45a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return g_class_reference_holder->GetClass(name); 46a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 47a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 48a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org// C(++) description of a camera. This class is created by Java native calls 49a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org// and associated with the CameraDesc Java class. The Java class is used in the 50a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org// Java code but it is just a thin wrapper of the C(++) class that contain the 51a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org// actual information. The information is stored in C(++) as it is used to 52a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org// call video engine APIs. 53a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgstruct CameraDesc { 54a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org // The name and id corresponds to ViECapture's |device_nameUTF8| and 55a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org // |unique_idUTF8|. 56a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org char name[64]; 57a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org char unique_id[64]; 58a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org}; 59a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 60a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org// C++ callback class that can be used to register for callbacks from the 61a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org// video engine. It further propagates the callbacks to 62a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org// VideoDecodeEncodeObserver.java interface. The memory associated with this 63a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org// class is managed globally by the VideoEngineData class when registering and 64a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org// unregistering VideoDecodeEncodeObserver.java to receive callbacks. 65a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgclass VideoDecodeEncodeObserver : public webrtc::ViEDecoderObserver, 66a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org public webrtc::ViEEncoderObserver { 67a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org public: 68a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org explicit VideoDecodeEncodeObserver(jobject j_observer) 69a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org : j_observer_(j_observer) { 70a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org webrtc::AttachThreadScoped ats(g_vm); 71a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org JNIEnv* jni = ats.env(); 72a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jclass j_observer_class = jni->GetObjectClass(j_observer_); 73a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org incoming_rate_ = 74a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org GetMethodID(jni, j_observer_class, "incomingRate", "(III)V"); 75a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org incoming_codec_changed_ = 76a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org GetMethodID(jni, j_observer_class, "incomingCodecChanged", 77a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org "(ILorg/webrtc/webrtcdemo/VideoCodecInst;)V"); 78a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org request_new_keyframe_ = 79a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org GetMethodID(jni, j_observer_class, "requestNewKeyFrame", "(I)V"); 80a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org outgoing_rate_ = 81a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org GetMethodID(jni, j_observer_class, "outgoingRate", "(III)V"); 82a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org j_observer_ = jni->NewGlobalRef(j_observer_); 83a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org } 84a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 85a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org ~VideoDecodeEncodeObserver() { 86a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org webrtc::AttachThreadScoped ats(g_vm); 87a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org JNIEnv* jni = ats.env(); 88a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jni->DeleteGlobalRef(j_observer_); 89a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org } 90a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 91a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org virtual void IncomingRate(const int video_channel, 92a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org const unsigned int framerate, 93a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org const unsigned int bitrate) { 94a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org webrtc::AttachThreadScoped ats(g_vm); 95a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org JNIEnv* jni = ats.env(); 96a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jni->CallVoidMethod(j_observer_, incoming_rate_, video_channel, 97a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org static_cast<int>(framerate), static_cast<int>(bitrate)); 98a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org } 99a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 100a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org virtual void DecoderTiming(int decode_ms, int max_decode_ms, 101a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org int current_delay_ms, int target_delay_ms, 102a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org int jitter_buffer_ms, int min_playout_delay_ms, 103a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org int render_delay_ms) { 104a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org // TODO(fischman): consider plumbing this through to Java. 105a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org } 106a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 107a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org virtual void IncomingCodecChanged(const int video_channel, 108a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org const webrtc::VideoCodec& video_codec) { 109a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org webrtc::AttachThreadScoped ats(g_vm); 110a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org JNIEnv* jni = ats.env(); 111a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org webrtc::VideoCodec* codec = new webrtc::VideoCodec(video_codec); 112a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jclass j_codec_class = 113a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org GetClass("org/webrtc/webrtcdemo/VideoCodecInst"); 114a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jmethodID j_codec_ctor = GetMethodID(jni, j_codec_class, "<init>", "(J)V"); 115a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jobject j_codec = 116a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jni->NewObject(j_codec_class, j_codec_ctor, jlongFromPointer(codec)); 117a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org CHECK_EXCEPTION(jni, "error during NewObject"); 118a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jni->CallVoidMethod(j_observer_, incoming_codec_changed_, video_channel, 119a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org j_codec); 120a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org } 121a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 122a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org virtual void RequestNewKeyFrame(const int video_channel) { 123a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org webrtc::AttachThreadScoped ats(g_vm); 124a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org JNIEnv* jni = ats.env(); 125a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jni->CallVoidMethod(j_observer_, request_new_keyframe_, video_channel); 126a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org } 127a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 128a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org virtual void OutgoingRate(const int video_channel, 129a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org const unsigned int framerate, 130a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org const unsigned int bitrate) { 131a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org webrtc::AttachThreadScoped ats(g_vm); 132a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org JNIEnv* jni = ats.env(); 133a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jni->CallVoidMethod(j_observer_, outgoing_rate_, video_channel, 134a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org static_cast<int>(framerate), static_cast<int>(bitrate)); 135a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org } 136a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 137a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org virtual void SuspendChange(int video_channel, bool is_suspended) {} 138a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 139a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org private: 140a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jobject j_observer_; 141a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jmethodID incoming_rate_; 142a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jmethodID incoming_codec_changed_; 143a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jmethodID request_new_keyframe_; 144a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jmethodID outgoing_rate_; 145a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org}; 146a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 147a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgtemplate<typename T> 148a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgvoid ReleaseSubApi(T instance) { 149a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org CHECK(instance->Release() == 0, "failed to release instance") 150a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 151a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 152a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgclass VideoEngineData { 153a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org public: 154a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData() 155a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org : vie(webrtc::VideoEngine::Create()), 156a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org base(webrtc::ViEBase::GetInterface(vie)), 157a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org codec(webrtc::ViECodec::GetInterface(vie)), 158a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org network(webrtc::ViENetwork::GetInterface(vie)), 159a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org rtp(webrtc::ViERTP_RTCP::GetInterface(vie)), 160a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org render(webrtc::ViERender::GetInterface(vie)), 161a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org capture(webrtc::ViECapture::GetInterface(vie)), 162a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org externalCodec(webrtc::ViEExternalCodec::GetInterface(vie)) { 163a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org CHECK(vie != NULL, "Video engine instance failed to be created"); 164a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org CHECK(base != NULL, "Failed to acquire base interface"); 165a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org CHECK(codec != NULL, "Failed to acquire codec interface"); 166a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org CHECK(network != NULL, "Failed to acquire network interface"); 167a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org CHECK(rtp != NULL, "Failed to acquire rtp interface"); 168a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org CHECK(render != NULL, "Failed to acquire render interface"); 169a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org CHECK(capture != NULL, "Failed to acquire capture interface"); 170a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org CHECK(externalCodec != NULL, "Failed to acquire externalCodec interface"); 171a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org } 172a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 173a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org ~VideoEngineData() { 174a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org CHECK(channel_transports_.empty(), 175a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org "ViE transports must be deleted before terminating"); 176a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org CHECK(observers_.empty(), 177a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org "ViE observers must be deleted before terminating"); 178a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org CHECK(external_decoders_.empty(), 179a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org "ViE external decoders must be deleted before terminating"); 180a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org ReleaseSubApi(externalCodec); 181a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org ReleaseSubApi(capture); 182a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org ReleaseSubApi(render); 183a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org ReleaseSubApi(rtp); 184a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org ReleaseSubApi(network); 185a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org ReleaseSubApi(codec); 186a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org ReleaseSubApi(base); 187a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org webrtc::VideoEngine* vie_pointer = vie; 188a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org CHECK(webrtc::VideoEngine::Delete(vie_pointer), "ViE failed to be deleted"); 189a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org } 190a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 191a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org int CreateChannel() { 192a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org int channel; 193a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org CHECK(base->CreateChannel(channel) == 0, "Failed to create channel"); 194a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org CreateTransport(channel); 195a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return channel; 196a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org } 197a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 198a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org int DeleteChannel(int channel) { 199a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org if (base->DeleteChannel(channel) != 0) { 200a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return -1; 201a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org } 202a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org DeleteTransport(channel); 203a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return 0; 204a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org } 205a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 206a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org webrtc::test::VideoChannelTransport* GetTransport(int channel) { 207a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org ChannelTransports::iterator found = channel_transports_.find(channel); 208a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org if (found == channel_transports_.end()) { 209a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return NULL; 210a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org } 211a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return found->second; 212a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org } 213a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 214a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org int RegisterObserver(int channel, jobject j_observer) { 215a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org CHECK(observers_.find(channel) == observers_.end(), 216a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org "Observer already created for channel, inconsistent state"); 217a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org observers_[channel] = new VideoDecodeEncodeObserver(j_observer); 218a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org int ret_val = codec->RegisterDecoderObserver(channel, *observers_[channel]); 219a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org ret_val |= codec->RegisterEncoderObserver(channel, *observers_[channel]); 220a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return ret_val; 221a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org } 222a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 223a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org int DeregisterObserver(int channel) { 224a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org Observers::iterator found = observers_.find(channel); 225a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org if (observers_.find(channel) == observers_.end()) { 226a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return -1; 227a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org } 228a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org int ret_val = codec->DeregisterDecoderObserver(channel); 229a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org ret_val |= codec->DeregisterEncoderObserver(channel); 230a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org delete found->second; 231a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org observers_.erase(found); 232a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return ret_val; 233a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org } 234a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 235a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org int RegisterExternalReceiveCodec(jint channel, jint pl_type, jobject decoder, 236a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org bool internal_source) { 237a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org CHECK(external_decoders_.find(channel) == external_decoders_.end(), 238a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org "External decoder already created for channel, inconsistent state"); 239a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org external_decoders_[channel] = 240a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org new webrtc::MediaCodecVideoDecoder(g_vm, decoder); 241a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return externalCodec->RegisterExternalReceiveCodec( 242a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org channel, pl_type, external_decoders_[channel], internal_source); 243a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org } 244a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 245a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org int DeRegisterExternalReceiveCodec(jint channel, jint pl_type) { 246a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org ExternalDecoders::iterator found = external_decoders_.find(channel); 247a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org CHECK(found != external_decoders_.end(), 248a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org "ViE channel missing external decoder, inconsistent state"); 249a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org CHECK(externalCodec->DeRegisterExternalReceiveCodec(channel, pl_type) == 0, 250a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org "Failed to register external receive decoder"); 251a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org delete found->second; 252a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org external_decoders_.erase(found); 253a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return 0; 254a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org } 255a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 256a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org webrtc::VideoEngine* const vie; 257a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org webrtc::ViEBase* const base; 258a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org webrtc::ViECodec* const codec; 259a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org webrtc::ViENetwork* const network; 260a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org webrtc::ViERTP_RTCP* const rtp; 261a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org webrtc::ViERender* const render; 262a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org webrtc::ViECapture* const capture; 263a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org webrtc::ViEExternalCodec* const externalCodec; 264a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 265a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org private: 266a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org // Video engine no longer provides a socket implementation. There is, 267a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org // however, a socket implementation in webrtc::test. 268a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org typedef std::map<int, webrtc::test::VideoChannelTransport*> 269a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org ChannelTransports; 270a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org typedef std::map<int, VideoDecodeEncodeObserver*> Observers; 271a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org typedef std::map<int, webrtc::MediaCodecVideoDecoder*> ExternalDecoders; 272a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 273a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org void CreateTransport(int channel) { 274a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org CHECK(GetTransport(channel) == NULL, 275a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org "Transport already created for ViE channel, inconsistent state"); 276a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org channel_transports_[channel] = 277a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org new webrtc::test::VideoChannelTransport(network, channel); 278a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org } 279a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org void DeleteTransport(int channel) { 280a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org CHECK(GetTransport(channel) != NULL, 281a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org "ViE channel missing transport, inconsistent state"); 282a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org delete channel_transports_[channel]; 283a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org channel_transports_.erase(channel); 284a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org } 285a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 286a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org ChannelTransports channel_transports_; 287a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org Observers observers_; 288a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org ExternalDecoders external_decoders_; 289a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org}; 290a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 291a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgwebrtc::VideoCodec* GetCodecInst(JNIEnv* jni, jobject j_codec) { 292a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jclass j_codec_class = jni->GetObjectClass(j_codec); 293a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jfieldID native_codec_id = 294a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jni->GetFieldID(j_codec_class, "nativeCodecInst", "J"); 295a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jlong j_p = jni->GetLongField(j_codec, native_codec_id); 296a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return reinterpret_cast<webrtc::VideoCodec*>(j_p); 297a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 298a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 299a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgCameraDesc* GetCameraDesc(JNIEnv* jni, jobject j_camera) { 300a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jclass j_camera_class = jni->GetObjectClass(j_camera); 301a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jfieldID native_camera_id = 302a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jni->GetFieldID(j_camera_class, "nativeCameraDesc", "J"); 303a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jlong j_p = jni->GetLongField(j_camera, native_camera_id); 304a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return reinterpret_cast<CameraDesc*>(j_p); 305a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 306a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 307a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgVideoEngineData* GetVideoEngineData(JNIEnv* jni, jobject j_vie) { 308a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jclass j_vie_class = jni->GetObjectClass(j_vie); 309a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jfieldID native_vie_id = 310a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jni->GetFieldID(j_vie_class, "nativeVideoEngine", "J"); 311a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jlong j_p = jni->GetLongField(j_vie, native_vie_id); 312a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return reinterpret_cast<VideoEngineData*>(j_p); 313a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 314a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 315a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} // namespace 316a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 317a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgnamespace webrtc_examples { 318a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 319a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgstatic const char* g_classes[] = { 320a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org "org/webrtc/webrtcdemo/CameraDesc", 321a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org "org/webrtc/webrtcdemo/RtcpStatistics", 322a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org "org/webrtc/webrtcdemo/VideoCodecInst", 323a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org "org/webrtc/webrtcdemo/VideoDecodeEncodeObserver", 324a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org "org/webrtc/webrtcdemo/MediaCodecVideoDecoder"}; 325a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 326a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgvoid SetVieDeviceObjects(JavaVM* vm) { 327a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org CHECK(vm, "Trying to register NULL vm"); 328a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org CHECK(!g_vm, "Trying to re-register vm"); 329a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org g_vm = vm; 330a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org webrtc::AttachThreadScoped ats(g_vm); 331a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org JNIEnv* jni = ats.env(); 332a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org g_class_reference_holder = new ClassReferenceHolder( 333a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jni, g_classes, ARRAYSIZE(g_classes)); 334a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 335a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 336a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgvoid ClearVieDeviceObjects() { 337a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org CHECK(g_vm, "Clearing vm without it being set"); 338a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org { 339a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org webrtc::AttachThreadScoped ats(g_vm); 340a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org g_class_reference_holder->FreeReferences(ats.env()); 341a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org } 342a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org g_vm = NULL; 343a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org delete g_class_reference_holder; 344a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org g_class_reference_holder = NULL; 345a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 346a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 347a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} // namespace webrtc_examples 348a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 349a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jlong, VideoEngine_create)(JNIEnv* jni, jclass) { 350a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = new VideoEngineData(); 351a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return jlongFromPointer(vie_data); 352a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 353a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 354a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoEngine_init)(JNIEnv* jni, jobject j_vie) { 355a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 356a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return vie_data->base->Init(); 357a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 358a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 359a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoEngine_setVoiceEngine)(JNIEnv* jni, jobject j_vie, 360a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jobject j_voe) { 361a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 362a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org webrtc::VoiceEngine* voe = GetVoiceEngine(jni, j_voe); 363a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return vie_data->base->SetVoiceEngine(voe); 364a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 365a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 366a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(void, VideoEngine_dispose)(JNIEnv* jni, jobject j_vie) { 367a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 368a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org delete vie_data; 369a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 370a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 371a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoEngine_startSend)(JNIEnv* jni, jobject j_vie, jint channel) { 372a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 373a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return vie_data->base->StartSend(channel); 374a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 375a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 376a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoEngine_stopRender)(JNIEnv* jni, jobject j_vie, jint channel) { 377a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 378a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return vie_data->render->StopRender(channel); 379a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 380a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 381a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoEngine_stopSend)(JNIEnv* jni, jobject j_vie, jint channel) { 382a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 383a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return vie_data->base->StopSend(channel); 384a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 385a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 386a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoEngine_startReceive)(JNIEnv* jni, jobject j_vie, jint channel) { 387a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 388a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return vie_data->base->StartReceive(channel); 389a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 390a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 391a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoEngine_stopReceive)(JNIEnv* jni, jobject j_vie, jint channel) { 392a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 393a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return vie_data->base->StopReceive(channel); 394a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 395a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 396a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoEngine_createChannel)(JNIEnv* jni, jobject j_vie) { 397a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 398a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return vie_data->CreateChannel(); 399a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 400a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 401a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoEngine_deleteChannel)(JNIEnv* jni, jobject j_vie, 402a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jint channel) { 403a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 404a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return vie_data->DeleteChannel(channel); 405a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 406a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 407a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, 408a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngine_connectAudioChannel(JNIEnv* jni, jobject j_vie, 409a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jint video_channel, jint audio_channel)) { 410a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 411a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return vie_data->base->ConnectAudioChannel(video_channel, audio_channel); 412a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 413a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 414a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoEngine_setLocalReceiver)(JNIEnv* jni, jobject j_vie, 415a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jint channel, jint port) { 416a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 417a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return vie_data->GetTransport(channel)->SetLocalReceiver(port); 418a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 419a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 420a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoEngine_setSendDestination)(JNIEnv* jni, jobject j_vie, 421a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jint channel, jint port, 422a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jstring j_addr) { 423a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 424a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org std::string addr = JavaToStdString(jni, j_addr); 425a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org webrtc::test::VideoChannelTransport* transport = 426a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org vie_data->GetTransport(channel); 427a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return transport->SetSendDestination(addr.c_str(), port); 428a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 429a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 430a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoEngine_setReceiveCodec)(JNIEnv* jni, jobject j_vie, 431a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jint channel, jobject j_codec) { 432a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 433a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org webrtc::VideoCodec* codec = GetCodecInst(jni, j_codec); 434a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return vie_data->codec->SetReceiveCodec(channel, *codec); 435a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 436a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 437a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoEngine_setSendCodec)(JNIEnv* jni, jobject j_vie, jint channel, 438a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jobject j_codec) { 439a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 440a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org webrtc::VideoCodec* codec = GetCodecInst(jni, j_codec); 441a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return vie_data->codec->SetSendCodec(channel, *codec); 442a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 443a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 444a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoEngine_numberOfCodecs)(JNIEnv* jni, jobject j_vie) { 445a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 446a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return vie_data->codec->NumberOfCodecs(); 447a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 448a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 449a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jobject, VideoEngine_getCodec)(JNIEnv* jni, jobject j_vie, jint index) { 450a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 451a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org webrtc::VideoCodec* codec = new webrtc::VideoCodec(); 452a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org CHECK(vie_data->codec->GetCodec(index, *codec) == 0, 453a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org "getCodec must be called with valid index"); 454a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jclass j_codec_class = GetClass("org/webrtc/webrtcdemo/VideoCodecInst"); 455a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jmethodID j_codec_ctor = GetMethodID(jni, j_codec_class, "<init>", "(J)V"); 456a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jobject j_codec = 457a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jni->NewObject(j_codec_class, j_codec_ctor, jlongFromPointer(codec)); 458a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org CHECK_EXCEPTION(jni, "error during NewObject"); 459a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return j_codec; 460a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 461a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 462a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoEngine_addRenderer)(JNIEnv* jni, jobject j_vie, jint channel, 463a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jobject gl_surface, jint z_order, 464a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jfloat left, jfloat top, jfloat right, 465a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jfloat bottom) { 466a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 467a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return vie_data->render->AddRenderer(channel, gl_surface, z_order, left, top, 468a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org right, bottom); 469a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 470a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 471a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoEngine_removeRenderer)(JNIEnv* jni, jobject j_vie, 472a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jint channel) { 473a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 474a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return vie_data->render->RemoveRenderer(channel); 475a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 476a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 477a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoEngine_registerExternalReceiveCodec)(JNIEnv* jni, jobject j_vie, 478a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jint channel, jint pl_type, 479a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jobject decoder, 480a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org bool internal_source) { 481a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 482a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return vie_data->RegisterExternalReceiveCodec(channel, pl_type, decoder, 483a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org true); 484a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 485a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 486a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, 487a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngine_deRegisterExternalReceiveCodec)(JNIEnv* jni, jobject j_vie, 488a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jint channel, jint pl_type) { 489a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 490a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return vie_data->DeRegisterExternalReceiveCodec(channel, pl_type); 491a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 492a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 493a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoEngine_startRender)(JNIEnv* jni, jobject j_vie, jint channel) { 494a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 495a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return vie_data->render->StartRender(channel); 496a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 497a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 498a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoEngine_numberOfCaptureDevices)(JNIEnv* jni, jobject j_vie) { 499a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 500a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return vie_data->capture->NumberOfCaptureDevices(); 501a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 502a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 503a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jobject, 504a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngine_getCaptureDevice(JNIEnv* jni, jobject j_vie, jint index)) { 505a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 506a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org CameraDesc* camera_info = new CameraDesc(); 507a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org if (vie_data->capture->GetCaptureDevice( 508a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org index, camera_info->name, sizeof(camera_info->name), 509a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org camera_info->unique_id, sizeof(camera_info->unique_id)) != 0) { 510a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org delete camera_info; 511a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return NULL; 512a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org } 513a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jclass j_camera_class = GetClass("org/webrtc/webrtcdemo/CameraDesc"); 514a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jmethodID j_camera_ctor = GetMethodID(jni, j_camera_class, "<init>", "(J)V"); 515a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jobject j_camera = jni->NewObject(j_camera_class, j_camera_ctor, 516a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jlongFromPointer(camera_info)); 517a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org CHECK_EXCEPTION(jni, "error during NewObject"); 518a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return j_camera; 519a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 520a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 521a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoEngine_allocateCaptureDevice)(JNIEnv* jni, jobject j_vie, 522a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jobject j_camera) { 523a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 524a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org CameraDesc* camera_info = GetCameraDesc(jni, j_camera); 525a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jint capture_id; 526a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org if (vie_data->capture->AllocateCaptureDevice(camera_info->unique_id, 527a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org sizeof(camera_info->unique_id), 528a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org capture_id) != 0) { 529a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return -1; 530a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org } 531a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return capture_id; 532a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 533a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 534a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoEngine_connectCaptureDevice)(JNIEnv* jni, jobject j_vie, 535a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jint camera_num, jint channel) { 536a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 537a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return vie_data->capture->ConnectCaptureDevice(camera_num, channel); 538a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 539a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 540a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoEngine_startCapture)(JNIEnv* jni, jobject j_vie, 541a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jint camera_num) { 542a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 543a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return vie_data->capture->StartCapture(camera_num); 544a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 545a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 546a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoEngine_stopCapture)(JNIEnv* jni, jobject j_vie, 547a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jint camera_id) { 548a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 549a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return vie_data->capture->StopCapture(camera_id); 550a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 551a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 552a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoEngine_releaseCaptureDevice)(JNIEnv* jni, jobject j_vie, 553a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jint camera_id) { 554a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 555a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return vie_data->capture->ReleaseCaptureDevice(camera_id); 556a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 557a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 558a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoEngine_getOrientation)(JNIEnv* jni, jobject j_vie, 559a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jobject j_camera) { 560a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 561a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org CameraDesc* camera_info = GetCameraDesc(jni, j_camera); 562a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org webrtc::RotateCapturedFrame orientation; 563a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org if (vie_data->capture->GetOrientation(camera_info->unique_id, orientation) != 564a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 0) { 565a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return -1; 566a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org } 567a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return static_cast<jint>(orientation); 568a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 569a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 570a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoEngine_setRotateCapturedFrames)(JNIEnv* jni, jobject j_vie, 571a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jint capture_id, jint degrees) { 572a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 573a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return vie_data->capture->SetRotateCapturedFrames( 574a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org capture_id, static_cast<webrtc::RotateCapturedFrame>(degrees)); 575a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 576a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 577a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoEngine_setNackStatus)(JNIEnv* jni, jobject j_vie, jint channel, 578a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jboolean enable) { 579a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 580a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return vie_data->rtp->SetNACKStatus(channel, enable); 581a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 582a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 583a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoEngine_setKeyFrameRequestMethod)(JNIEnv* jni, jobject j_vie, 584a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jint channel, 585a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jint request_method) { 586a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 587a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return vie_data->rtp->SetKeyFrameRequestMethod( 588a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org channel, static_cast<webrtc::ViEKeyFrameRequestMethod>(request_method)); 589a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 590a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 591a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jobject, VideoEngine_getReceivedRtcpStatistics)(JNIEnv* jni, jobject j_vie, 592a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jint channel) { 593a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org unsigned short fraction_lost; // NOLINT 594a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org unsigned int cumulative_lost; // NOLINT 595a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org unsigned int extended_max; // NOLINT 596a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org unsigned int jitter; // NOLINT 597a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org int rtt_ms; 598a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 599a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org if (vie_data->rtp->GetReceivedRTCPStatistics(channel, fraction_lost, 600a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org cumulative_lost, extended_max, 601a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jitter, rtt_ms) != 0) { 602a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return NULL; 603a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org } 604a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jclass j_rtcp_statistics_class = 605a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org GetClass("org/webrtc/webrtcdemo/RtcpStatistics"); 606a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jmethodID j_rtcp_statistics_ctor = 607a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org GetMethodID(jni, j_rtcp_statistics_class, "<init>", "(IIIII)V"); 608a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jobject j_rtcp_statistics = 609a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jni->NewObject(j_rtcp_statistics_class, j_rtcp_statistics_ctor, 610a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org fraction_lost, cumulative_lost, extended_max, jitter, 611a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org rtt_ms); 612a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org CHECK_EXCEPTION(jni, "error during NewObject"); 613a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return j_rtcp_statistics; 614a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 615a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 616a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoEngine_registerObserver)(JNIEnv* jni, jobject j_vie, 617a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jint channel, jobject callback) { 618a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 619a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return vie_data->RegisterObserver(channel, callback); 620a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 621a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 622a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoEngine_deregisterObserver)(JNIEnv* jni, jobject j_vie, 623a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jint channel) { 624a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 625a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return vie_data->DeregisterObserver(channel); 626a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 627a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 628a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoEngine_setTraceFile)(JNIEnv* jni, jobject, jstring j_filename, 629a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jboolean file_counter) { 630a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org std::string filename = JavaToStdString(jni, j_filename); 631a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return webrtc::VideoEngine::SetTraceFile(filename.c_str(), file_counter); 632a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 633a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 634c9d06348141937ae7dc655b2564fa41580edbc75braveyao@webrtc.orgJOWW(jint, VideoEngine_nativeSetTraceFilter)(JNIEnv* jni, jobject, 635c9d06348141937ae7dc655b2564fa41580edbc75braveyao@webrtc.org jint filter) { 636a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return webrtc::VideoEngine::SetTraceFilter(filter); 637a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 638a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 639a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoEngine_startRtpDump)(JNIEnv* jni, jobject j_vie, jint channel, 640a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jstring j_filename, jint direction) { 641a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 642a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org std::string filename = JavaToStdString(jni, j_filename); 643a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return vie_data->rtp->StartRTPDump( 644a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org channel, filename.c_str(), static_cast<webrtc::RTPDirections>(direction)); 645a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 646a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 647a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoEngine_stopRtpDump)(JNIEnv* jni, jobject j_vie, jint channel, 648a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jint direction) { 649a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org VideoEngineData* vie_data = GetVideoEngineData(jni, j_vie); 650a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return vie_data->rtp->StopRTPDump( 651a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org channel, static_cast<webrtc::RTPDirections>(direction)); 652a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 653a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 654a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(void, VideoCodecInst_dispose)(JNIEnv* jni, jobject j_codec) { 655a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org delete GetCodecInst(jni, j_codec); 656a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 657a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 658a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoCodecInst_plType)(JNIEnv* jni, jobject j_codec) { 659a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return GetCodecInst(jni, j_codec)->plType; 660a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 661a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 662a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jstring, VideoCodecInst_name)(JNIEnv* jni, jobject j_codec) { 663a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return jni->NewStringUTF(GetCodecInst(jni, j_codec)->plName); 664a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 665a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 666a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoCodecInst_width)(JNIEnv* jni, jobject j_codec) { 667a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return GetCodecInst(jni, j_codec)->width; 668a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 669a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 670a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(void, VideoCodecInst_setWidth)(JNIEnv* jni, jobject j_codec, jint width) { 671a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org GetCodecInst(jni, j_codec)->width = width; 672a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 673a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 674a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoCodecInst_height)(JNIEnv* jni, jobject j_codec) { 675a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return GetCodecInst(jni, j_codec)->height; 676a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 677a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 678a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(void, VideoCodecInst_setHeight)(JNIEnv* jni, jobject j_codec, 679a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jint height) { 680a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org GetCodecInst(jni, j_codec)->height = height; 681a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 682a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 683a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoCodecInst_startBitRate)(JNIEnv* jni, jobject j_codec) { 684a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return GetCodecInst(jni, j_codec)->startBitrate; 685a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 686a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 687a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(void, VideoCodecInst_setStartBitRate)(JNIEnv* jni, jobject j_codec, 688a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jint bitrate) { 689a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org GetCodecInst(jni, j_codec)->startBitrate = bitrate; 690a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 691a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 692a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoCodecInst_maxBitRate)(JNIEnv* jni, jobject j_codec) { 693a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return GetCodecInst(jni, j_codec)->maxBitrate; 694a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 695a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 696a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(void, VideoCodecInst_setMaxBitRate)(JNIEnv* jni, jobject j_codec, 697a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jint bitrate) { 698a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org GetCodecInst(jni, j_codec)->maxBitrate = bitrate; 699a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 700a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 701a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(jint, VideoCodecInst_maxFrameRate)(JNIEnv* jni, jobject j_codec) { 702a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org return GetCodecInst(jni, j_codec)->maxFramerate; 703a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 704a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 705a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(void, VideoCodecInst_setMaxFrameRate)(JNIEnv* jni, jobject j_codec, 706a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org jint framerate) { 707a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org GetCodecInst(jni, j_codec)->maxFramerate = framerate; 708a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 709a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org 710a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.orgJOWW(void, CameraDesc_dispose)(JNIEnv* jni, jobject j_camera) { 711a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org delete GetCameraDesc(jni, j_camera); 712a48c91dfb4588346b42c1a47b5f8265881581648henrike@webrtc.org} 713