mirror of
https://github.com/qTox/qTox.git
synced 2024-03-22 14:00:36 +08:00
Core update
This commit is contained in:
parent
9eb7e6e915
commit
36d4460fef
12
src/core.cpp
12
src/core.cpp
|
@ -251,14 +251,13 @@ void Core::start()
|
||||||
toxav_register_callstate_callback(toxav, onAvReject, av_OnReject, this);
|
toxav_register_callstate_callback(toxav, onAvReject, av_OnReject, this);
|
||||||
toxav_register_callstate_callback(toxav, onAvEnd, av_OnEnd, this);
|
toxav_register_callstate_callback(toxav, onAvEnd, av_OnEnd, this);
|
||||||
toxav_register_callstate_callback(toxav, onAvRinging, av_OnRinging, this);
|
toxav_register_callstate_callback(toxav, onAvRinging, av_OnRinging, this);
|
||||||
toxav_register_callstate_callback(toxav, onAvStarting, av_OnStarting, this);
|
toxav_register_callstate_callback(toxav, onAvMediaChange, av_OnPeerCSChange, this);
|
||||||
toxav_register_callstate_callback(toxav, onAvEnding, av_OnEnding, this);
|
toxav_register_callstate_callback(toxav, onAvMediaChange, av_OnSelfCSChange, this);
|
||||||
toxav_register_callstate_callback(toxav, onAvMediaChange, av_OnMediaChange, this);
|
|
||||||
toxav_register_callstate_callback(toxav, onAvRequestTimeout, av_OnRequestTimeout, this);
|
toxav_register_callstate_callback(toxav, onAvRequestTimeout, av_OnRequestTimeout, this);
|
||||||
toxav_register_callstate_callback(toxav, onAvPeerTimeout, av_OnPeerTimeout, this);
|
toxav_register_callstate_callback(toxav, onAvPeerTimeout, av_OnPeerTimeout, this);
|
||||||
|
|
||||||
toxav_register_audio_recv_callback(toxav, playCallAudio, this);
|
toxav_register_audio_callback(playCallAudio, this);
|
||||||
toxav_register_video_recv_callback(toxav, playCallVideo, this);
|
toxav_register_video_callback(playCallVideo, this);
|
||||||
|
|
||||||
QPixmap pic = Settings::getInstance().getSavedAvatar(getSelfId().toString());
|
QPixmap pic = Settings::getInstance().getSavedAvatar(getSelfId().toString());
|
||||||
if (!pic.isNull() && !pic.size().isEmpty())
|
if (!pic.isNull() && !pic.size().isEmpty())
|
||||||
|
@ -294,6 +293,7 @@ void Core::process()
|
||||||
|
|
||||||
static int tolerance = CORE_DISCONNECT_TOLERANCE;
|
static int tolerance = CORE_DISCONNECT_TOLERANCE;
|
||||||
tox_do(tox);
|
tox_do(tox);
|
||||||
|
toxav_do(toxav);
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
//we want to see the debug messages immediately
|
//we want to see the debug messages immediately
|
||||||
|
@ -307,7 +307,7 @@ void Core::process()
|
||||||
bootstrapDht();
|
bootstrapDht();
|
||||||
}
|
}
|
||||||
|
|
||||||
toxTimer->start(tox_do_interval(tox));
|
toxTimer->start(qMin(tox_do_interval(tox), toxav_do_interval(toxav)));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Core::checkConnection()
|
bool Core::checkConnection()
|
||||||
|
|
|
@ -244,8 +244,6 @@ private:
|
||||||
static void onAvReject(void* toxav, int32_t call_index, void* core);
|
static void onAvReject(void* toxav, int32_t call_index, void* core);
|
||||||
static void onAvEnd(void* toxav, int32_t call_index, void* core);
|
static void onAvEnd(void* toxav, int32_t call_index, void* core);
|
||||||
static void onAvRinging(void* toxav, int32_t call_index, void* core);
|
static void onAvRinging(void* toxav, int32_t call_index, void* core);
|
||||||
static void onAvStarting(void* toxav, int32_t call_index, void* core);
|
|
||||||
static void onAvEnding(void* toxav, int32_t call_index, void* core);
|
|
||||||
static void onAvRequestTimeout(void* toxav, int32_t call_index, void* core);
|
static void onAvRequestTimeout(void* toxav, int32_t call_index, void* core);
|
||||||
static void onAvPeerTimeout(void* toxav, int32_t call_index, void* core);
|
static void onAvPeerTimeout(void* toxav, int32_t call_index, void* core);
|
||||||
static void onAvMediaChange(void *toxav, int32_t call_index, void* core);
|
static void onAvMediaChange(void *toxav, int32_t call_index, void* core);
|
||||||
|
@ -256,10 +254,10 @@ private:
|
||||||
|
|
||||||
static void prepareCall(int friendId, int callId, ToxAv *toxav, bool videoEnabled);
|
static void prepareCall(int friendId, int callId, ToxAv *toxav, bool videoEnabled);
|
||||||
static void cleanupCall(int callId);
|
static void cleanupCall(int callId);
|
||||||
static void playCallAudio(ToxAv *toxav, int32_t callId, int16_t *data, int samples, void *user_data); // Callback
|
static void playCallAudio(void *toxav, int32_t callId, const int16_t *data, uint16_t samples, void *user_data); // Callback
|
||||||
static void sendCallAudio(int callId, ToxAv* toxav);
|
static void sendCallAudio(int callId, ToxAv* toxav);
|
||||||
static void playAudioBuffer(ALuint alSource, const int16_t *data, int samples, unsigned channels, int sampleRate);
|
static void playAudioBuffer(ALuint alSource, const int16_t *data, int samples, unsigned channels, int sampleRate);
|
||||||
static void playCallVideo(ToxAv* toxav, int32_t callId, vpx_image_t* img, void *user_data);
|
static void playCallVideo(void *toxav, int32_t callId, const vpx_image_t* img, void *user_data);
|
||||||
void sendCallVideo(int callId);
|
void sendCallVideo(int callId);
|
||||||
|
|
||||||
bool checkConnection();
|
bool checkConnection();
|
||||||
|
|
116
src/coreav.cpp
116
src/coreav.cpp
|
@ -45,7 +45,7 @@ void Core::prepareCall(int friendId, int callId, ToxAv* toxav, bool videoEnabled
|
||||||
calls[callId].codecSettings.max_video_width = TOXAV_MAX_VIDEO_WIDTH;
|
calls[callId].codecSettings.max_video_width = TOXAV_MAX_VIDEO_WIDTH;
|
||||||
calls[callId].codecSettings.max_video_height = TOXAV_MAX_VIDEO_HEIGHT;
|
calls[callId].codecSettings.max_video_height = TOXAV_MAX_VIDEO_HEIGHT;
|
||||||
calls[callId].videoEnabled = videoEnabled;
|
calls[callId].videoEnabled = videoEnabled;
|
||||||
int r = toxav_prepare_transmission(toxav, callId, av_jbufdc, av_VADd, videoEnabled);
|
int r = toxav_prepare_transmission(toxav, callId, videoEnabled);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
qWarning() << QString("Error starting call %1: toxav_prepare_transmission failed with %2").arg(callId).arg(r);
|
qWarning() << QString("Error starting call %1: toxav_prepare_transmission failed with %2").arg(callId).arg(r);
|
||||||
|
|
||||||
|
@ -79,7 +79,7 @@ void Core::onAvMediaChange(void* toxav, int32_t callId, void* core)
|
||||||
|
|
||||||
qDebug() << "Core: Received media change from friend "<<friendId;
|
qDebug() << "Core: Received media change from friend "<<friendId;
|
||||||
|
|
||||||
if (settings.call_type == TypeAudio)
|
if (settings.call_type == av_TypeAudio)
|
||||||
{
|
{
|
||||||
calls[callId].videoEnabled = false;
|
calls[callId].videoEnabled = false;
|
||||||
calls[callId].sendVideoTimer->stop();
|
calls[callId].sendVideoTimer->stop();
|
||||||
|
@ -111,14 +111,14 @@ void Core::answerCall(int callId)
|
||||||
|
|
||||||
ToxAvCSettings* transSettings = new ToxAvCSettings;
|
ToxAvCSettings* transSettings = new ToxAvCSettings;
|
||||||
int err = toxav_get_peer_csettings(toxav, callId, 0, transSettings);
|
int err = toxav_get_peer_csettings(toxav, callId, 0, transSettings);
|
||||||
if (err != ErrorNone)
|
if (err != av_ErrorNone)
|
||||||
{
|
{
|
||||||
qWarning() << "Core::answerCall: error getting call settings";
|
qWarning() << "Core::answerCall: error getting call settings";
|
||||||
delete transSettings;
|
delete transSettings;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (transSettings->call_type == TypeVideo)
|
if (transSettings->call_type == av_TypeVideo)
|
||||||
{
|
{
|
||||||
qDebug() << QString("Core: answering call %1 with video").arg(callId);
|
qDebug() << QString("Core: answering call %1 with video").arg(callId);
|
||||||
toxav_answer(toxav, callId, transSettings);
|
toxav_answer(toxav, callId, transSettings);
|
||||||
|
@ -148,7 +148,7 @@ void Core::startCall(int friendId, bool video)
|
||||||
if (video)
|
if (video)
|
||||||
{
|
{
|
||||||
qDebug() << QString("Core: Starting new call with %1 with video").arg(friendId);
|
qDebug() << QString("Core: Starting new call with %1 with video").arg(friendId);
|
||||||
cSettings.call_type = TypeVideo;
|
cSettings.call_type = av_TypeVideo;
|
||||||
if (toxav_call(toxav, &callId, friendId, &cSettings, TOXAV_RINGING_TIME) == 0)
|
if (toxav_call(toxav, &callId, friendId, &cSettings, TOXAV_RINGING_TIME) == 0)
|
||||||
{
|
{
|
||||||
calls[callId].videoEnabled=true;
|
calls[callId].videoEnabled=true;
|
||||||
|
@ -163,7 +163,7 @@ void Core::startCall(int friendId, bool video)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
qDebug() << QString("Core: Starting new call with %1 without video").arg(friendId);
|
qDebug() << QString("Core: Starting new call with %1 without video").arg(friendId);
|
||||||
cSettings.call_type = TypeAudio;
|
cSettings.call_type = av_TypeAudio;
|
||||||
if (toxav_call(toxav, &callId, friendId, &cSettings, TOXAV_RINGING_TIME) == 0)
|
if (toxav_call(toxav, &callId, friendId, &cSettings, TOXAV_RINGING_TIME) == 0)
|
||||||
{
|
{
|
||||||
calls[callId].videoEnabled=false;
|
calls[callId].videoEnabled=false;
|
||||||
|
@ -196,7 +196,7 @@ void Core::cleanupCall(int callId)
|
||||||
Audio::unsuscribeInput();
|
Audio::unsuscribeInput();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Core::playCallAudio(ToxAv* toxav, int32_t callId, int16_t *data, int samples, void *user_data)
|
void Core::playCallAudio(void* toxav, int32_t callId, const int16_t *data, uint16_t samples, void *user_data)
|
||||||
{
|
{
|
||||||
Q_UNUSED(user_data);
|
Q_UNUSED(user_data);
|
||||||
|
|
||||||
|
@ -207,7 +207,7 @@ void Core::playCallAudio(ToxAv* toxav, int32_t callId, int16_t *data, int sample
|
||||||
alGenSources(1, &calls[callId].alSource);
|
alGenSources(1, &calls[callId].alSource);
|
||||||
|
|
||||||
ToxAvCSettings dest;
|
ToxAvCSettings dest;
|
||||||
if(toxav_get_peer_csettings(toxav, callId, 0, &dest) == 0)
|
if(toxav_get_peer_csettings((ToxAv*)toxav, callId, 0, &dest) == 0)
|
||||||
playAudioBuffer(calls[callId].alSource, data, samples, dest.audio_channels, dest.audio_sample_rate);
|
playAudioBuffer(calls[callId].alSource, data, samples, dest.audio_channels, dest.audio_sample_rate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -252,7 +252,7 @@ void Core::sendCallAudio(int callId, ToxAv* toxav)
|
||||||
calls[callId].sendAudioTimer->start();
|
calls[callId].sendAudioTimer->start();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Core::playCallVideo(ToxAv*, int32_t callId, vpx_image_t* img, void *user_data)
|
void Core::playCallVideo(void*, int32_t callId, const vpx_image_t* img, void *user_data)
|
||||||
{
|
{
|
||||||
Q_UNUSED(user_data);
|
Q_UNUSED(user_data);
|
||||||
|
|
||||||
|
@ -260,8 +260,6 @@ void Core::playCallVideo(ToxAv*, int32_t callId, vpx_image_t* img, void *user_da
|
||||||
return;
|
return;
|
||||||
|
|
||||||
calls[callId].videoSource.pushVPXFrame(img);
|
calls[callId].videoSource.pushVPXFrame(img);
|
||||||
|
|
||||||
vpx_img_free(img);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Core::sendCallVideo(int callId)
|
void Core::sendCallVideo(int callId)
|
||||||
|
@ -381,58 +379,58 @@ void Core::onAvRinging(void* _toxav, int32_t call_index, void* core)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Core::onAvStarting(void* _toxav, int32_t call_index, void* core)
|
//void Core::onAvStarting(void* _toxav, int32_t call_index, void* core)
|
||||||
{
|
//{
|
||||||
ToxAv* toxav = static_cast<ToxAv*>(_toxav);
|
// ToxAv* toxav = static_cast<ToxAv*>(_toxav);
|
||||||
|
|
||||||
int friendId = toxav_get_peer_id(toxav, call_index, 0);
|
// int friendId = toxav_get_peer_id(toxav, call_index, 0);
|
||||||
if (friendId < 0)
|
// if (friendId < 0)
|
||||||
{
|
// {
|
||||||
qWarning() << "Core: Received invalid AV starting";
|
// qWarning() << "Core: Received invalid AV starting";
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
|
|
||||||
ToxAvCSettings* transSettings = new ToxAvCSettings;
|
// ToxAvCSettings* transSettings = new ToxAvCSettings;
|
||||||
int err = toxav_get_peer_csettings(toxav, call_index, 0, transSettings);
|
// int err = toxav_get_peer_csettings(toxav, call_index, 0, transSettings);
|
||||||
if (err != ErrorNone)
|
// if (err != ErrorNone)
|
||||||
{
|
// {
|
||||||
qWarning() << "Core::onAvStarting: error getting call type";
|
// qWarning() << "Core::onAvStarting: error getting call type";
|
||||||
delete transSettings;
|
// delete transSettings;
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
|
|
||||||
if (transSettings->call_type == TypeVideo)
|
// if (transSettings->call_type == TypeVideo)
|
||||||
{
|
// {
|
||||||
qDebug() << QString("Core: AV starting from %1 with video").arg(friendId);
|
// qDebug() << QString("Core: AV starting from %1 with video").arg(friendId);
|
||||||
prepareCall(friendId, call_index, toxav, true);
|
// prepareCall(friendId, call_index, toxav, true);
|
||||||
emit static_cast<Core*>(core)->avStarting(friendId, call_index, true);
|
// emit static_cast<Core*>(core)->avStarting(friendId, call_index, true);
|
||||||
}
|
// }
|
||||||
else
|
// else
|
||||||
{
|
// {
|
||||||
qDebug() << QString("Core: AV starting from %1 without video").arg(friendId);
|
// qDebug() << QString("Core: AV starting from %1 without video").arg(friendId);
|
||||||
prepareCall(friendId, call_index, toxav, false);
|
// prepareCall(friendId, call_index, toxav, false);
|
||||||
emit static_cast<Core*>(core)->avStarting(friendId, call_index, false);
|
// emit static_cast<Core*>(core)->avStarting(friendId, call_index, false);
|
||||||
}
|
// }
|
||||||
|
|
||||||
delete transSettings;
|
// delete transSettings;
|
||||||
}
|
//}
|
||||||
|
|
||||||
void Core::onAvEnding(void* _toxav, int32_t call_index, void* core)
|
//void Core::onAvEnding(void* _toxav, int32_t call_index, void* core)
|
||||||
{
|
//{
|
||||||
ToxAv* toxav = static_cast<ToxAv*>(_toxav);
|
// ToxAv* toxav = static_cast<ToxAv*>(_toxav);
|
||||||
|
|
||||||
int friendId = toxav_get_peer_id(toxav, call_index, 0);
|
// int friendId = toxav_get_peer_id(toxav, call_index, 0);
|
||||||
if (friendId < 0)
|
// if (friendId < 0)
|
||||||
{
|
// {
|
||||||
qWarning() << "Core: Received invalid AV ending";
|
// qWarning() << "Core: Received invalid AV ending";
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
qDebug() << QString("Core: AV ending from %1").arg(friendId);
|
// qDebug() << QString("Core: AV ending from %1").arg(friendId);
|
||||||
|
|
||||||
cleanupCall(call_index);
|
// cleanupCall(call_index);
|
||||||
|
|
||||||
emit static_cast<Core*>(core)->avEnding(friendId, call_index);
|
// emit static_cast<Core*>(core)->avEnding(friendId, call_index);
|
||||||
}
|
//}
|
||||||
|
|
||||||
void Core::onAvRequestTimeout(void* _toxav, int32_t call_index, void* core)
|
void Core::onAvRequestTimeout(void* _toxav, int32_t call_index, void* core)
|
||||||
{
|
{
|
||||||
|
@ -482,14 +480,14 @@ void Core::onAvInvite(void* _toxav, int32_t call_index, void* core)
|
||||||
|
|
||||||
ToxAvCSettings* transSettings = new ToxAvCSettings;
|
ToxAvCSettings* transSettings = new ToxAvCSettings;
|
||||||
int err = toxav_get_peer_csettings(toxav, call_index, 0, transSettings);
|
int err = toxav_get_peer_csettings(toxav, call_index, 0, transSettings);
|
||||||
if (err != ErrorNone)
|
if (err != av_ErrorNone)
|
||||||
{
|
{
|
||||||
qWarning() << "Core::onAvInvite: error getting call type";
|
qWarning() << "Core::onAvInvite: error getting call type";
|
||||||
delete transSettings;
|
delete transSettings;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (transSettings->call_type == TypeVideo)
|
if (transSettings->call_type == av_TypeVideo)
|
||||||
{
|
{
|
||||||
qDebug() << QString("Core: AV invite from %1 with video").arg(friendId);
|
qDebug() << QString("Core: AV invite from %1 with video").arg(friendId);
|
||||||
emit static_cast<Core*>(core)->avInvite(friendId, call_index, true);
|
emit static_cast<Core*>(core)->avInvite(friendId, call_index, true);
|
||||||
|
@ -516,14 +514,14 @@ void Core::onAvStart(void* _toxav, int32_t call_index, void* core)
|
||||||
|
|
||||||
ToxAvCSettings* transSettings = new ToxAvCSettings;
|
ToxAvCSettings* transSettings = new ToxAvCSettings;
|
||||||
int err = toxav_get_peer_csettings(toxav, call_index, 0, transSettings);
|
int err = toxav_get_peer_csettings(toxav, call_index, 0, transSettings);
|
||||||
if (err != ErrorNone)
|
if (err != av_ErrorNone)
|
||||||
{
|
{
|
||||||
qWarning() << "Core::onAvStart: error getting call type";
|
qWarning() << "Core::onAvStart: error getting call type";
|
||||||
delete transSettings;
|
delete transSettings;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (transSettings->call_type == TypeVideo)
|
if (transSettings->call_type == av_TypeVideo)
|
||||||
{
|
{
|
||||||
qDebug() << QString("Core: AV start from %1 with video").arg(friendId);
|
qDebug() << QString("Core: AV start from %1 with video").arg(friendId);
|
||||||
prepareCall(friendId, call_index, toxav, true);
|
prepareCall(friendId, call_index, toxav, true);
|
||||||
|
|
|
@ -28,7 +28,7 @@ void NetVideoSource::pushFrame(VideoFrame frame)
|
||||||
emit frameAvailable(frame);
|
emit frameAvailable(frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetVideoSource::pushVPXFrame(vpx_image *image)
|
void NetVideoSource::pushVPXFrame(const vpx_image *image)
|
||||||
{
|
{
|
||||||
const int dw = image->d_w;
|
const int dw = image->d_w;
|
||||||
const int dh = image->d_h;
|
const int dh = image->d_h;
|
||||||
|
|
|
@ -27,7 +27,7 @@ public:
|
||||||
NetVideoSource();
|
NetVideoSource();
|
||||||
|
|
||||||
void pushFrame(VideoFrame frame);
|
void pushFrame(VideoFrame frame);
|
||||||
void pushVPXFrame(vpx_image* image);
|
void pushVPXFrame(const vpx_image *image);
|
||||||
|
|
||||||
virtual void subscribe() {}
|
virtual void subscribe() {}
|
||||||
virtual void unsubscribe() {}
|
virtual void unsubscribe() {}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user