| Index: webrtc/examples/android/media_demo/jni/voice_engine_jni.cc
|
| diff --git a/webrtc/examples/android/media_demo/jni/voice_engine_jni.cc b/webrtc/examples/android/media_demo/jni/voice_engine_jni.cc
|
| deleted file mode 100644
|
| index 7d5b99b9da690c7c2c1603b496f402a3e3403cee..0000000000000000000000000000000000000000
|
| --- a/webrtc/examples/android/media_demo/jni/voice_engine_jni.cc
|
| +++ /dev/null
|
| @@ -1,423 +0,0 @@
|
| -/*
|
| - * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
|
| - *
|
| - * Use of this source code is governed by a BSD-style license
|
| - * that can be found in the LICENSE file in the root of the source
|
| - * tree. An additional intellectual property rights grant can be found
|
| - * in the file PATENTS. All contributing project authors may
|
| - * be found in the AUTHORS file in the root of the source tree.
|
| - */
|
| -
|
| -// This file contains JNI for the voice engine interfaces.
|
| -// The native functions are found using jni's auto discovery.
|
| -
|
| -#include "webrtc/examples/android/media_demo/jni/voice_engine_jni.h"
|
| -
|
| -#include <map>
|
| -#include <string>
|
| -
|
| -#include "webrtc/base/arraysize.h"
|
| -#include "webrtc/examples/android/media_demo/jni/jni_helpers.h"
|
| -#include "webrtc/modules/utility/include/helpers_android.h"
|
| -#include "webrtc/test/channel_transport/include/channel_transport.h"
|
| -#include "webrtc/voice_engine/include/voe_audio_processing.h"
|
| -#include "webrtc/voice_engine/include/voe_base.h"
|
| -#include "webrtc/voice_engine/include/voe_codec.h"
|
| -#include "webrtc/voice_engine/include/voe_file.h"
|
| -#include "webrtc/voice_engine/include/voe_hardware.h"
|
| -#include "webrtc/voice_engine/include/voe_network.h"
|
| -#include "webrtc/voice_engine/include/voe_rtp_rtcp.h"
|
| -#include "webrtc/voice_engine/include/voe_volume_control.h"
|
| -
|
| -// Macro for native functions that can be found by way of jni-auto discovery.
|
| -// Note extern "C" is needed for "discovery" of native methods to work.
|
| -#define JOWW(rettype, name) \
|
| - extern "C" rettype JNIEXPORT JNICALL Java_org_webrtc_webrtcdemo_##name
|
| -
|
| -namespace {
|
| -
|
| -static JavaVM* g_vm = NULL;
|
| -static ClassReferenceHolder* g_class_reference_holder = NULL;
|
| -
|
| -jclass GetClass(JNIEnv* jni, const char* name) {
|
| - CHECK(g_class_reference_holder, "Class reference holder NULL");
|
| - return g_class_reference_holder->GetClass(name);
|
| -}
|
| -
|
| -static const char* g_classes[] = {"org/webrtc/webrtcdemo/CodecInst"};
|
| -
|
| -template<typename T>
|
| -void ReleaseSubApi(T instance) {
|
| - CHECK(instance->Release() >= 0, "failed to release instance")
|
| -}
|
| -
|
| -class VoiceEngineData {
|
| - public:
|
| - VoiceEngineData()
|
| - : ve(webrtc::VoiceEngine::Create()),
|
| - base(webrtc::VoEBase::GetInterface(ve)),
|
| - codec(webrtc::VoECodec::GetInterface(ve)),
|
| - file(webrtc::VoEFile::GetInterface(ve)),
|
| - netw(webrtc::VoENetwork::GetInterface(ve)),
|
| - apm(webrtc::VoEAudioProcessing::GetInterface(ve)),
|
| - volume(webrtc::VoEVolumeControl::GetInterface(ve)),
|
| - hardware(webrtc::VoEHardware::GetInterface(ve)),
|
| - rtp(webrtc::VoERTP_RTCP::GetInterface(ve)) {
|
| - CHECK(ve != NULL, "Voice engine instance failed to be created");
|
| - CHECK(base != NULL, "Failed to acquire base interface");
|
| - CHECK(codec != NULL, "Failed to acquire codec interface");
|
| - CHECK(file != NULL, "Failed to acquire file interface");
|
| - CHECK(netw != NULL, "Failed to acquire netw interface");
|
| - CHECK(apm != NULL, "Failed to acquire apm interface");
|
| - CHECK(volume != NULL, "Failed to acquire volume interface");
|
| - CHECK(hardware != NULL, "Failed to acquire hardware interface");
|
| - CHECK(rtp != NULL, "Failed to acquire rtp interface");
|
| - }
|
| -
|
| - ~VoiceEngineData() {
|
| - CHECK(channel_transports_.empty(),
|
| - "VoE transports must be deleted before terminating");
|
| - CHECK(base->Terminate() == 0, "VoE failed to terminate");
|
| - ReleaseSubApi(base);
|
| - ReleaseSubApi(codec);
|
| - ReleaseSubApi(file);
|
| - ReleaseSubApi(netw);
|
| - ReleaseSubApi(apm);
|
| - ReleaseSubApi(volume);
|
| - ReleaseSubApi(hardware);
|
| - ReleaseSubApi(rtp);
|
| - webrtc::VoiceEngine* ve_instance = ve;
|
| - CHECK(webrtc::VoiceEngine::Delete(ve_instance), "VoE failed to be deleted");
|
| - }
|
| -
|
| - int CreateChannel() {
|
| - int channel = base->CreateChannel();
|
| - if (channel == -1) {
|
| - return -1;
|
| - }
|
| - CreateTransport(channel);
|
| - return channel;
|
| - }
|
| -
|
| - int DeleteChannel(int channel) {
|
| - if (base->DeleteChannel(channel) != 0) {
|
| - return -1;
|
| - }
|
| - DeleteTransport(channel);
|
| - return 0;
|
| - }
|
| -
|
| - webrtc::test::VoiceChannelTransport* GetTransport(int channel) {
|
| - ChannelTransports::iterator found = channel_transports_.find(channel);
|
| - if (found == channel_transports_.end()) {
|
| - return NULL;
|
| - }
|
| - return found->second;
|
| - }
|
| -
|
| - webrtc::VoiceEngine* const ve;
|
| - webrtc::VoEBase* const base;
|
| - webrtc::VoECodec* const codec;
|
| - webrtc::VoEFile* const file;
|
| - webrtc::VoENetwork* const netw;
|
| - webrtc::VoEAudioProcessing* const apm;
|
| - webrtc::VoEVolumeControl* const volume;
|
| - webrtc::VoEHardware* const hardware;
|
| - webrtc::VoERTP_RTCP* const rtp;
|
| -
|
| - private:
|
| - // Voice engine no longer provides a socket implementation. There is,
|
| - // however, a socket implementation in webrtc::test.
|
| - typedef std::map<int, webrtc::test::VoiceChannelTransport*>
|
| - ChannelTransports;
|
| -
|
| - void CreateTransport(int channel) {
|
| - CHECK(GetTransport(channel) == NULL,
|
| - "Transport already created for VoE channel, inconsistent state");
|
| - channel_transports_[channel] =
|
| - new webrtc::test::VoiceChannelTransport(netw, channel);
|
| - }
|
| - void DeleteTransport(int channel) {
|
| - CHECK(GetTransport(channel) != NULL,
|
| - "VoE channel missing transport, inconsistent state");
|
| - delete channel_transports_[channel];
|
| - channel_transports_.erase(channel);
|
| - }
|
| -
|
| - ChannelTransports channel_transports_;
|
| -};
|
| -
|
| -webrtc::CodecInst* GetCodecInst(JNIEnv* jni, jobject j_codec) {
|
| - jclass j_codec_class = jni->GetObjectClass(j_codec);
|
| - jfieldID native_codec_id =
|
| - jni->GetFieldID(j_codec_class, "nativeCodecInst", "J");
|
| - jlong j_p = jni->GetLongField(j_codec, native_codec_id);
|
| - return reinterpret_cast<webrtc::CodecInst*>(j_p);
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -namespace webrtc_examples {
|
| -
|
| -void SetVoeDeviceObjects(JavaVM* vm) {
|
| - CHECK(vm, "Trying to register NULL vm");
|
| - g_vm = vm;
|
| - webrtc::AttachThreadScoped ats(g_vm);
|
| - JNIEnv* jni = ats.env();
|
| - g_class_reference_holder = new ClassReferenceHolder(
|
| - jni, g_classes, arraysize(g_classes));
|
| -}
|
| -
|
| -void ClearVoeDeviceObjects() {
|
| - CHECK(g_vm, "Clearing vm without it being set");
|
| - {
|
| - webrtc::AttachThreadScoped ats(g_vm);
|
| - g_class_reference_holder->FreeReferences(ats.env());
|
| - }
|
| - g_vm = NULL;
|
| - delete g_class_reference_holder;
|
| - g_class_reference_holder = NULL;
|
| -}
|
| -
|
| -} // namespace webrtc_examples
|
| -
|
| -VoiceEngineData* GetVoiceEngineData(JNIEnv* jni, jobject j_voe) {
|
| - jclass j_voe_class = jni->GetObjectClass(j_voe);
|
| - jfieldID native_voe_id =
|
| - jni->GetFieldID(j_voe_class, "nativeVoiceEngine", "J");
|
| - jlong j_p = jni->GetLongField(j_voe, native_voe_id);
|
| - return reinterpret_cast<VoiceEngineData*>(j_p);
|
| -}
|
| -
|
| -webrtc::VoiceEngine* GetVoiceEngine(JNIEnv* jni, jobject j_voe) {
|
| - return GetVoiceEngineData(jni, j_voe)->ve;
|
| -}
|
| -
|
| -JOWW(jlong, VoiceEngine_create)(JNIEnv* jni, jclass) {
|
| - VoiceEngineData* voe_data = new VoiceEngineData();
|
| - return jlongFromPointer(voe_data);
|
| -}
|
| -
|
| -JOWW(void, VoiceEngine_dispose)(JNIEnv* jni, jobject j_voe) {
|
| - VoiceEngineData* voe_data = GetVoiceEngineData(jni, j_voe);
|
| - delete voe_data;
|
| -}
|
| -
|
| -JOWW(jint, VoiceEngine_init)(JNIEnv* jni, jobject j_voe) {
|
| - VoiceEngineData* voe_data = GetVoiceEngineData(jni, j_voe);
|
| - return voe_data->base->Init();
|
| -}
|
| -
|
| -JOWW(jint, VoiceEngine_createChannel)(JNIEnv* jni, jobject j_voe) {
|
| - VoiceEngineData* voe_data = GetVoiceEngineData(jni, j_voe);
|
| - return voe_data->CreateChannel();
|
| -}
|
| -
|
| -JOWW(jint, VoiceEngine_deleteChannel)(JNIEnv* jni, jobject j_voe,
|
| - jint channel) {
|
| - VoiceEngineData* voe_data = GetVoiceEngineData(jni, j_voe);
|
| - return voe_data->DeleteChannel(channel);
|
| -}
|
| -
|
| -JOWW(jint, VoiceEngine_setLocalReceiver)(JNIEnv* jni, jobject j_voe,
|
| - jint channel, jint port) {
|
| - VoiceEngineData* voe_data = GetVoiceEngineData(jni, j_voe);
|
| - webrtc::test::VoiceChannelTransport* transport =
|
| - voe_data->GetTransport(channel);
|
| - return transport->SetLocalReceiver(port);
|
| -}
|
| -
|
| -JOWW(jint, VoiceEngine_setSendDestination)(JNIEnv* jni, jobject j_voe,
|
| - jint channel, jint port,
|
| - jstring j_addr) {
|
| - VoiceEngineData* voe_data = GetVoiceEngineData(jni, j_voe);
|
| - std::string addr = JavaToStdString(jni, j_addr);
|
| - webrtc::test::VoiceChannelTransport* transport =
|
| - voe_data->GetTransport(channel);
|
| - return transport->SetSendDestination(addr.c_str(), port);
|
| -}
|
| -
|
| -JOWW(jint, VoiceEngine_startListen)(JNIEnv* jni, jobject j_voe, jint channel) {
|
| - VoiceEngineData* voe_data = GetVoiceEngineData(jni, j_voe);
|
| - return voe_data->base->StartReceive(channel);
|
| -}
|
| -
|
| -JOWW(jint, VoiceEngine_startPlayout)(JNIEnv* jni, jobject j_voe, jint channel) {
|
| - VoiceEngineData* voe_data = GetVoiceEngineData(jni, j_voe);
|
| - return voe_data->base->StartPlayout(channel);
|
| -}
|
| -
|
| -JOWW(jint, VoiceEngine_startSend)(JNIEnv* jni, jobject j_voe, jint channel) {
|
| - VoiceEngineData* voe_data = GetVoiceEngineData(jni, j_voe);
|
| - return voe_data->base->StartSend(channel);
|
| -}
|
| -
|
| -JOWW(jint, VoiceEngine_stopListen)(JNIEnv* jni, jobject j_voe, jint channel) {
|
| - VoiceEngineData* voe_data = GetVoiceEngineData(jni, j_voe);
|
| - return voe_data->base->StartReceive(channel);
|
| -}
|
| -
|
| -JOWW(jint, VoiceEngine_stopPlayout)(JNIEnv* jni, jobject j_voe, jint channel) {
|
| - VoiceEngineData* voe_data = GetVoiceEngineData(jni, j_voe);
|
| - return voe_data->base->StopPlayout(channel);
|
| -}
|
| -
|
| -JOWW(jint, VoiceEngine_stopSend)(JNIEnv* jni, jobject j_voe, jint channel) {
|
| - VoiceEngineData* voe_data = GetVoiceEngineData(jni, j_voe);
|
| - return voe_data->base->StopSend(channel);
|
| -}
|
| -
|
| -JOWW(jint, VoiceEngine_setSpeakerVolume)(JNIEnv* jni, jobject j_voe,
|
| - jint level) {
|
| - VoiceEngineData* voe_data = GetVoiceEngineData(jni, j_voe);
|
| - return voe_data->volume->SetSpeakerVolume(level);
|
| -}
|
| -
|
| -JOWW(jint, VoiceEngine_startPlayingFileLocally)(JNIEnv* jni, jobject j_voe,
|
| - jint channel,
|
| - jstring j_filename,
|
| - jboolean loop) {
|
| - VoiceEngineData* voe_data = GetVoiceEngineData(jni, j_voe);
|
| - std::string filename = JavaToStdString(jni, j_filename);
|
| - return voe_data->file->StartPlayingFileLocally(channel,
|
| - filename.c_str(),
|
| - loop);
|
| -}
|
| -
|
| -JOWW(jint, VoiceEngine_stopPlayingFileLocally)(JNIEnv* jni, jobject j_voe,
|
| - jint channel) {
|
| - VoiceEngineData* voe_data = GetVoiceEngineData(jni, j_voe);
|
| - return voe_data->file->StopPlayingFileLocally(channel);
|
| -}
|
| -
|
| -JOWW(jint, VoiceEngine_startPlayingFileAsMicrophone)(JNIEnv* jni, jobject j_voe,
|
| - jint channel,
|
| - jstring j_filename,
|
| - jboolean loop) {
|
| - VoiceEngineData* voe_data = GetVoiceEngineData(jni, j_voe);
|
| - std::string filename = JavaToStdString(jni, j_filename);
|
| - return voe_data->file->StartPlayingFileAsMicrophone(channel,
|
| - filename.c_str(),
|
| - loop);
|
| -}
|
| -
|
| -JOWW(jint, VoiceEngine_stopPlayingFileAsMicrophone)(JNIEnv* jni, jobject j_voe,
|
| - jint channel) {
|
| - VoiceEngineData* voe_data = GetVoiceEngineData(jni, j_voe);
|
| - return voe_data->file->StopPlayingFileAsMicrophone(channel);
|
| -}
|
| -
|
| -JOWW(jint, VoiceEngine_numOfCodecs)(JNIEnv* jni, jobject j_voe) {
|
| - VoiceEngineData* voe_data = GetVoiceEngineData(jni, j_voe);
|
| - return voe_data->codec->NumOfCodecs();
|
| -}
|
| -
|
| -JOWW(jobject, VoiceEngine_getCodec)(JNIEnv* jni, jobject j_voe, jint index) {
|
| - VoiceEngineData* voe_data = GetVoiceEngineData(jni, j_voe);
|
| - webrtc::CodecInst* codec = new webrtc::CodecInst();
|
| - CHECK(voe_data->codec->GetCodec(index, *codec) == 0,
|
| - "getCodec must be called with valid index");
|
| - jclass j_codec_class = GetClass(jni, "org/webrtc/webrtcdemo/CodecInst");
|
| - jmethodID j_codec_ctor = GetMethodID(jni, j_codec_class, "<init>", "(J)V");
|
| - jobject j_codec =
|
| - jni->NewObject(j_codec_class, j_codec_ctor, jlongFromPointer(codec));
|
| - CHECK_JNI_EXCEPTION(jni, "error during NewObject");
|
| - return j_codec;
|
| -}
|
| -
|
| -JOWW(jint, VoiceEngine_setSendCodec)(JNIEnv* jni, jobject j_voe, jint channel,
|
| - jobject j_codec) {
|
| - VoiceEngineData* voe_data = GetVoiceEngineData(jni, j_voe);
|
| - webrtc::CodecInst* inst = GetCodecInst(jni, j_codec);
|
| - return voe_data->codec->SetSendCodec(channel, *inst);
|
| -}
|
| -
|
| -JOWW(jint, VoiceEngine_setEcStatus)(JNIEnv* jni, jobject j_voe, jboolean enable,
|
| - jint ec_mode) {
|
| - VoiceEngineData* voe_data = GetVoiceEngineData(jni, j_voe);
|
| - return voe_data->apm->SetEcStatus(enable,
|
| - static_cast<webrtc::EcModes>(ec_mode));
|
| -}
|
| -
|
| -JOWW(jint, VoiceEngine_setAecmMode)(JNIEnv* jni, jobject j_voe, jint aecm_mode,
|
| - jboolean cng) {
|
| - VoiceEngineData* voe_data = GetVoiceEngineData(jni, j_voe);
|
| - return voe_data->apm->SetAecmMode(static_cast<webrtc::AecmModes>(aecm_mode),
|
| - cng);
|
| -}
|
| -
|
| -JOWW(jint, VoiceEngine_setAgcStatus)(JNIEnv* jni, jobject j_voe,
|
| - jboolean enable, jint agc_mode) {
|
| - VoiceEngineData* voe_data = GetVoiceEngineData(jni, j_voe);
|
| - return voe_data->apm->SetAgcStatus(enable,
|
| - static_cast<webrtc::AgcModes>(agc_mode));
|
| -}
|
| -
|
| -// Returns the native AgcConfig object associated with the Java object
|
| -// |j_codec|.
|
| -void GetNativeAgcConfig(JNIEnv* jni, jobject j_codec,
|
| - webrtc::AgcConfig* agc_config) {
|
| - jclass j_codec_class = jni->GetObjectClass(j_codec);
|
| - jfieldID dBOv_id = jni->GetFieldID(j_codec_class, "targetLevelDbOv", "I");
|
| - agc_config->targetLeveldBOv = jni->GetIntField(j_codec, dBOv_id);
|
| - jfieldID gain_id =
|
| - jni->GetFieldID(j_codec_class, "digitalCompressionGaindB", "I");
|
| - agc_config->digitalCompressionGaindB = jni->GetIntField(j_codec, gain_id);
|
| - jfieldID limiter_id = jni->GetFieldID(j_codec_class, "limiterEnable", "Z");
|
| - agc_config->limiterEnable = jni->GetBooleanField(j_codec, limiter_id);
|
| -}
|
| -
|
| -JOWW(jint, VoiceEngine_setAgcConfig)(JNIEnv* jni, jobject j_voe,
|
| - jobject j_config) {
|
| - VoiceEngineData* voe_data = GetVoiceEngineData(jni, j_voe);
|
| - webrtc::AgcConfig config;
|
| - GetNativeAgcConfig(jni, j_config, &config);
|
| - return voe_data->apm->SetAgcConfig(config);
|
| -}
|
| -
|
| -JOWW(jint, VoiceEngine_setNsStatus)(JNIEnv* jni, jobject j_voe, jboolean enable,
|
| - jint ns_mode) {
|
| - VoiceEngineData* voe_data = GetVoiceEngineData(jni, j_voe);
|
| - return voe_data->apm->SetNsStatus(enable,
|
| - static_cast<webrtc::NsModes>(ns_mode));
|
| -}
|
| -
|
| -JOWW(jint, VoiceEngine_startDebugRecording)(JNIEnv* jni, jobject j_voe,
|
| - jstring j_filename) {
|
| - VoiceEngineData* voe_data = GetVoiceEngineData(jni, j_voe);
|
| - std::string filename = JavaToStdString(jni, j_filename);
|
| - return voe_data->apm->StartDebugRecording(filename.c_str());
|
| -}
|
| -
|
| -JOWW(jint, VoiceEngine_stopDebugRecording)(JNIEnv* jni, jobject j_voe) {
|
| - VoiceEngineData* voe_data = GetVoiceEngineData(jni, j_voe);
|
| - return voe_data->apm->StopDebugRecording();
|
| -}
|
| -
|
| -JOWW(void, CodecInst_dispose)(JNIEnv* jni, jobject j_codec) {
|
| - delete GetCodecInst(jni, j_codec);
|
| -}
|
| -
|
| -JOWW(jint, CodecInst_plType)(JNIEnv* jni, jobject j_codec) {
|
| - return GetCodecInst(jni, j_codec)->pltype;
|
| -}
|
| -
|
| -JOWW(jstring, CodecInst_name)(JNIEnv* jni, jobject j_codec) {
|
| - return jni->NewStringUTF(GetCodecInst(jni, j_codec)->plname);
|
| -}
|
| -
|
| -JOWW(jint, CodecInst_plFrequency)(JNIEnv* jni, jobject j_codec) {
|
| - return GetCodecInst(jni, j_codec)->plfreq;
|
| -}
|
| -
|
| -JOWW(jint, CodecInst_pacSize)(JNIEnv* jni, jobject j_codec) {
|
| - return GetCodecInst(jni, j_codec)->pacsize;
|
| -}
|
| -
|
| -JOWW(jint, CodecInst_channels)(JNIEnv* jni, jobject j_codec) {
|
| - return GetCodecInst(jni, j_codec)->channels;
|
| -}
|
| -
|
| -JOWW(jint, CodecInst_rate)(JNIEnv* jni, jobject j_codec) {
|
| - return GetCodecInst(jni, j_codec)->rate;
|
| -}
|
|
|