mirror of
https://github.com/danog/libtgvoip.git
synced 2024-11-26 12:14:39 +01:00
Various android bugfixes
This commit is contained in:
parent
1ba8738c9f
commit
5629256fbf
53
Android.mk
53
Android.mk
@ -20,31 +20,34 @@ endif
|
||||
|
||||
LOCAL_CFLAGS += $(TGVOIP_ADDITIONAL_CFLAGS)
|
||||
|
||||
LOCAL_SRC_FILES := \
|
||||
./tools/logging.cpp \
|
||||
LOCAL_SRC_FILES := ./TgVoip.cpp \
|
||||
./VoIPController.cpp \
|
||||
./tools/Buffers.cpp \
|
||||
./tools/BlockingQueue.cpp \
|
||||
./audio/AudioInput.cpp \
|
||||
./os/android/AudioInputOpenSLES.cpp \
|
||||
./controller/MediaStreamItf.cpp \
|
||||
./audio/AudioOutput.cpp \
|
||||
./controller/audio/OpusEncoder.cpp \
|
||||
./os/android/AudioOutputOpenSLES.cpp \
|
||||
./controller/net/JitterBuffer.cpp \
|
||||
./controller/audio/OpusDecoder.cpp \
|
||||
./os/android/OpenSLEngineWrapper.cpp \
|
||||
./os/android/AudioInputAndroid.cpp \
|
||||
./os/android/AudioOutputAndroid.cpp \
|
||||
./controller/audio/EchoCanceller.cpp \
|
||||
./controller/net/CongestionControl.cpp \
|
||||
./VoIPServerConfig.cpp \
|
||||
./audio/Resampler.cpp \
|
||||
./controller/net/NetworkSocket.cpp \
|
||||
./os/posix/NetworkSocketPosix.cpp \
|
||||
./controller/PacketReassembler.cpp \
|
||||
./controller/audio/EchoCanceller.cpp \
|
||||
./controller/net/JitterBuffer.cpp \
|
||||
./tools/logging.cpp \
|
||||
./controller/media/MediaStreamItf.cpp \
|
||||
./tools/MessageThread.cpp \
|
||||
./tools/json11.cpp \
|
||||
./controller/net/NetworkSocket.cpp \
|
||||
./controller/net/Endpoint.cpp \
|
||||
./controller/audio/OpusDecoder.cpp \
|
||||
./controller/audio/OpusEncoder.cpp \
|
||||
./controller/audio/AudioPacketSender.cpp \
|
||||
./controller/net/PacketReassembler.cpp \
|
||||
./controller/protocol/packets/PacketManager.cpp \
|
||||
./controller/protocol/packets/PacketSender.cpp \
|
||||
./controller/protocol/packets/PacketStructs.cpp \
|
||||
./controller/protocol/Stream.cpp \
|
||||
./controller/protocol/protocol/Extra.cpp \
|
||||
./VoIPServerConfig.cpp \
|
||||
./audio/AudioIO.cpp \
|
||||
./audio/AudioInput.cpp \
|
||||
./audio/AudioOutput.cpp \
|
||||
./audio/Resampler.cpp \
|
||||
./audio/AudioInputTester.cpp \
|
||||
./os/posix/NetworkSocketPosix.cpp \
|
||||
\
|
||||
./audio/AudioIO.cpp \
|
||||
./video/VideoRenderer.cpp \
|
||||
./video/VideoSource.cpp \
|
||||
@ -55,7 +58,13 @@ LOCAL_SRC_FILES := \
|
||||
./video/cm256/gf256.$(CPP_NEON) \
|
||||
./os/android/VideoSourceAndroid.cpp \
|
||||
./os/android/VideoRendererAndroid.cpp \
|
||||
./client/android/tg_voip_jni.cpp
|
||||
./client/android/tg_voip_jni.cpp \
|
||||
./os/android/AudioInputOpenSLES.cpp \
|
||||
./os/android/AudioOutputOpenSLES.cpp \
|
||||
./os/android/OpenSLEngineWrapper.cpp \
|
||||
./os/android/AudioInputAndroid.cpp \
|
||||
./os/android/AudioOutputAndroid.cpp \
|
||||
./tools/json11.cpp
|
||||
|
||||
# WebRTC signal processing
|
||||
|
||||
|
@ -11,7 +11,9 @@
|
||||
extern "C"
|
||||
{
|
||||
#include <openssl/aes.h>
|
||||
#ifndef ANDROID
|
||||
#include <openssl/modes.h>
|
||||
#endif
|
||||
#include <openssl/rand.h>
|
||||
#include <openssl/sha.h>
|
||||
}
|
||||
@ -49,7 +51,11 @@ void tgvoip_openssl_aes_ctr_encrypt(uint8_t *inout, size_t length, uint8_t *key,
|
||||
{
|
||||
AES_KEY akey;
|
||||
AES_set_encrypt_key(key, 32 * 8, &akey);
|
||||
#ifdef ANDROID
|
||||
AES_ctr128_encrypt(inout, inout, length, &akey, iv, ecount, num);
|
||||
#else
|
||||
CRYPTO_ctr128_encrypt(inout, inout, length, &akey, iv, ecount, num, (block128_f)AES_encrypt);
|
||||
#endif
|
||||
}
|
||||
|
||||
void tgvoip_openssl_aes_cbc_encrypt(uint8_t *in, uint8_t *out, size_t length, uint8_t *key, uint8_t *iv)
|
||||
|
@ -19,13 +19,15 @@
|
||||
#include "../../os/android/VideoRendererAndroid.h"
|
||||
#include "../../audio/Resampler.h"
|
||||
#include "../../os/android/JNIUtilities.h"
|
||||
#include "../../controller/PrivateDefines.h"
|
||||
#include "../../VoIPController.h"
|
||||
#include "../../tools/logging.h"
|
||||
|
||||
#ifdef TGVOIP_HAS_CONFIG
|
||||
#include <tgvoip_config.h>
|
||||
#endif
|
||||
|
||||
#define TGVOIP_NO_GROUP_CALLS 1
|
||||
|
||||
JavaVM* sharedJVM;
|
||||
jfieldID audioRecordInstanceFld=NULL;
|
||||
jfieldID audioTrackInstanceFld=NULL;
|
||||
@ -71,6 +73,7 @@ namespace tgvoip {
|
||||
jni::AttachAndCallVoidMethod(setSignalBarsMethod, impl->javaObject, count);
|
||||
}
|
||||
|
||||
/*
|
||||
void updateGroupCallStreams(VoIPGroupController *cntrlr, unsigned char *streams, size_t len){
|
||||
ImplDataAndroid *impl=(ImplDataAndroid *) cntrlr->implData;
|
||||
if(!impl->javaObject)
|
||||
@ -84,7 +87,7 @@ namespace tgvoip {
|
||||
env->CallVoidMethod(impl->javaObject, setSelfStreamsMethod, jstreams);
|
||||
}
|
||||
});
|
||||
}
|
||||
}*/
|
||||
|
||||
void groupCallKeyReceived(VoIPController *cntrlr, const unsigned char *key){
|
||||
ImplDataAndroid *impl=(ImplDataAndroid *) cntrlr->implData;
|
||||
@ -110,23 +113,24 @@ namespace tgvoip {
|
||||
ImplDataAndroid *impl=(ImplDataAndroid *) cntrlr->implData;
|
||||
jni::AttachAndCallVoidMethod(callUpgradeRequestReceivedMethod, impl->javaObject);
|
||||
}
|
||||
/*
|
||||
|
||||
void updateParticipantAudioState(VoIPGroupController *cntrlr, int32_t userID, bool enabled){
|
||||
ImplDataAndroid *impl=(ImplDataAndroid *) cntrlr->implData;
|
||||
jni::AttachAndCallVoidMethod(setParticipantAudioEnabledMethod, impl->javaObject, userID, enabled);
|
||||
}
|
||||
}*/
|
||||
|
||||
#pragma mark - VoIPController
|
||||
|
||||
uint32_t AndroidCodecToFOURCC(std::string mime){
|
||||
if(mime=="video/avc")
|
||||
return CODEC_AVC;
|
||||
return Codec::Avc;
|
||||
else if(mime=="video/hevc")
|
||||
return CODEC_HEVC;
|
||||
return Codec::Hevc;
|
||||
else if(mime=="video/x-vnd.on2.vp8")
|
||||
return CODEC_VP8;
|
||||
return Codec::Vp8;
|
||||
else if(mime=="video/x-vnd.on2.vp9")
|
||||
return CODEC_VP9;
|
||||
return Codec::Vp9;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -202,7 +206,7 @@ namespace tgvoip {
|
||||
|
||||
void VoIPController_nativeSetEncryptionKey(JNIEnv* env, jobject thiz, jlong inst, jbyteArray key, jboolean isOutgoing){
|
||||
jbyte* akey=env->GetByteArrayElements(key, NULL);
|
||||
((VoIPController*)(intptr_t)inst)->SetEncryptionKey((char *) akey, isOutgoing);
|
||||
((VoIPController*)(intptr_t)inst)->SetEncryptionKey(std::vector<uint8_t>(akey, akey+256), isOutgoing);
|
||||
env->ReleaseByteArrayElements(key, akey, JNI_ABORT);
|
||||
}
|
||||
|
||||
@ -304,7 +308,6 @@ namespace tgvoip {
|
||||
}
|
||||
|
||||
void VoIPController_nativeDebugCtl(JNIEnv* env, jobject thiz, jlong inst, jint request, jint param){
|
||||
((VoIPController*)(intptr_t)inst)->DebugCtl(request, param);
|
||||
}
|
||||
|
||||
jstring VoIPController_nativeGetVersion(JNIEnv* env, jclass clasz){
|
||||
@ -405,6 +408,7 @@ namespace tgvoip {
|
||||
return (jint)tgvoip::audio::Resampler::Convert48To44((int16_t *) env->GetDirectBufferAddress(from), (int16_t *) env->GetDirectBufferAddress(to), (size_t) (env->GetDirectBufferCapacity(from)/2), (size_t) (env->GetDirectBufferCapacity(to)/2));
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - VoIPGroupController
|
||||
|
||||
#ifndef TGVOIP_NO_GROUP_CALLS
|
||||
@ -571,7 +575,7 @@ namespace tgvoip {
|
||||
|
||||
extern "C" void tgvoipRegisterNatives(JNIEnv* env){
|
||||
jclass controller=env->FindClass(TGVOIP_PACKAGE_PATH "/VoIPController");
|
||||
jclass groupController=env->FindClass(TGVOIP_PACKAGE_PATH "/VoIPGroupController");
|
||||
//jclass groupController=env->FindClass(TGVOIP_PACKAGE_PATH "/VoIPGroupController");
|
||||
if(env->ExceptionCheck()){
|
||||
env->ExceptionClear(); // is returning NULL from FindClass not enough?
|
||||
}
|
||||
|
@ -7,8 +7,9 @@
|
||||
#include "controller/audio/OpusDecoder.h"
|
||||
#include "audio/Resampler.h"
|
||||
#include "tools/logging.h"
|
||||
#include <assert.h>
|
||||
#include <math.h>
|
||||
#include <cassert>
|
||||
#include <cmath>
|
||||
#include <cstdlib>
|
||||
#include <algorithm>
|
||||
|
||||
#if defined HAVE_CONFIG_H || defined TGVOIP_USE_INSTALLED_OPUS
|
||||
@ -52,7 +53,11 @@ void tgvoip::OpusDecoder::Initialize(bool isAsync, bool needEC)
|
||||
ecDec = opus_decoder_create(48000, 1, NULL);
|
||||
else
|
||||
ecDec = NULL;
|
||||
buffer = reinterpret_cast<unsigned char*>(aligned_alloc(2, 8192));
|
||||
#ifdef ANDROID
|
||||
buffer = reinterpret_cast<unsigned char*>(std::malloc(8192));
|
||||
#else
|
||||
buffer = reinterpret_cast<unsigned char*>(std::aligned_alloc(2, 8192));
|
||||
#endif
|
||||
lastDecoded = NULL;
|
||||
outputBufferSize = 0;
|
||||
echoCanceller = NULL;
|
||||
|
@ -71,7 +71,7 @@ private:
|
||||
//BufferPool<JITTER_SLOT_SIZE, JITTER_SLOT_COUNT> bufferPool;
|
||||
Mutex mutex;
|
||||
uint32_t step;
|
||||
std::array<jitter_packet_t, JITTER_SLOT_COUNT> slots{0};
|
||||
std::array<jitter_packet_t, JITTER_SLOT_COUNT> slots;
|
||||
std::atomic<int64_t> nextFetchTimestamp{0}; // What frame to read next (protected for GetSeqTooLate)
|
||||
std::atomic<double> minDelay{6};
|
||||
uint32_t minMinDelay;
|
||||
|
@ -477,12 +477,12 @@ void VoIPController::SendExtra(Wrapped<Extra> &&extra, int64_t endpointId)
|
||||
|
||||
auto type = extra.getID();
|
||||
LOGV("Sending extra type %s", extra.print().c_str());
|
||||
for (auto &extra : currentExtras)
|
||||
for (auto &curExtra : currentExtras)
|
||||
{
|
||||
if (extra.data.getID() == type && extra.endpointId == endpointId)
|
||||
if (curExtra.data.getID() == type && curExtra.endpointId == endpointId)
|
||||
{
|
||||
extra.seqs.Reset();
|
||||
extra.data = std::move(extra.data);
|
||||
curExtra.seqs.Reset();
|
||||
curExtra.data = std::move(extra);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -17,8 +17,8 @@ public:
|
||||
|
||||
AudioOutputAndroid();
|
||||
virtual ~AudioOutputAndroid();
|
||||
virtual void Start();
|
||||
virtual void Stop();
|
||||
virtual void Start() override;
|
||||
virtual void Stop() override;
|
||||
virtual bool IsPlaying() override;
|
||||
void HandleCallback(JNIEnv* env, jbyteArray buffer);
|
||||
static jmethodID initMethod;
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
#include "VideoRendererAndroid.h"
|
||||
#include "JNIUtilities.h"
|
||||
#include "../../controller/PrivateDefines.h"
|
||||
#include "../../VoIPController.h"
|
||||
#include "../../tools/logging.h"
|
||||
|
||||
using namespace tgvoip;
|
||||
@ -112,16 +112,16 @@ void VideoRendererAndroid::RunThread(){
|
||||
}
|
||||
std::string codecStr="";
|
||||
switch(codec){
|
||||
case CODEC_AVC:
|
||||
case Codec::Avc:
|
||||
codecStr="video/avc";
|
||||
break;
|
||||
case CODEC_HEVC:
|
||||
case Codec::Hevc:
|
||||
codecStr="video/hevc";
|
||||
break;
|
||||
case CODEC_VP8:
|
||||
case Codec::Vp8:
|
||||
codecStr="video/x-vnd.on2.vp8";
|
||||
break;
|
||||
case CODEC_VP9:
|
||||
case Codec::Vp9:
|
||||
codecStr="video/x-vnd.on2.vp9";
|
||||
break;
|
||||
}
|
||||
|
@ -5,7 +5,7 @@
|
||||
#include "VideoSourceAndroid.h"
|
||||
#include "JNIUtilities.h"
|
||||
#include "../../tools/logging.h"
|
||||
#include "../../controller/PrivateDefines.h"
|
||||
#include "../../VoIPController.h"
|
||||
|
||||
using namespace tgvoip;
|
||||
using namespace tgvoip::video;
|
||||
@ -58,16 +58,16 @@ void VideoSourceAndroid::Reset(uint32_t codec, int maxResolution){
|
||||
jni::DoWithJNI([&](JNIEnv* env){
|
||||
std::string codecStr="";
|
||||
switch(codec){
|
||||
case CODEC_AVC:
|
||||
case Codec::Avc:
|
||||
codecStr="video/avc";
|
||||
break;
|
||||
case CODEC_HEVC:
|
||||
case Codec::Hevc:
|
||||
codecStr="video/hevc";
|
||||
break;
|
||||
case CODEC_VP8:
|
||||
case Codec::Vp8:
|
||||
codecStr="video/x-vnd.on2.vp8";
|
||||
break;
|
||||
case CODEC_VP9:
|
||||
case Codec::Vp9:
|
||||
codecStr="video/x-vnd.on2.vp9";
|
||||
break;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user