1
0
mirror of https://github.com/qTox/qTox.git synced 2024-03-22 14:00:36 +08:00

Core update

This commit is contained in:
mannol 2014-11-17 23:17:54 +01:00
parent 9eb7e6e915
commit 36d4460fef
5 changed files with 67 additions and 71 deletions

View File

@ -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()

View File

@ -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();

View File

@ -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);

View File

@ -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;

View File

@ -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() {}