@ -99,6 +99,7 @@ CoreAV::CoreAV(std::unique_ptr<ToxAV, ToxAVDeleter> toxav_, CompatibleRecursiveM
@@ -99,6 +99,7 @@ CoreAV::CoreAV(std::unique_ptr<ToxAV, ToxAVDeleter> toxav_, CompatibleRecursiveM
connect ( iterateTimer , & QTimer : : timeout , this , & CoreAV : : process ) ;
connect ( coreavThread . get ( ) , & QThread : : finished , iterateTimer , & QTimer : : stop ) ;
connect ( coreavThread . get ( ) , & QThread : : started , this , & CoreAV : : process ) ;
qRegisterMetaType < ToxFriendCallPtr > ( " ToxFriendCallPtr " ) ;
}
void CoreAV : : connectCallbacks ( )
@ -210,7 +211,7 @@ bool CoreAV::isCallActive(const Group* g) const
@@ -210,7 +211,7 @@ bool CoreAV::isCallActive(const Group* g) const
return it - > second - > isActive ( ) ;
}
CoreAV : : ToxFriendCallPtr CoreAV : : answerCall ( uint32_t friendNum , bool video )
bool CoreAV : : answerCall ( uint32_t friendNum , bool video )
{
QWriteLocker locker { & callsLock } ;
QMutexLocker coreLocker { & coreLock } ;
@ -224,14 +225,14 @@ CoreAV::ToxFriendCallPtr CoreAV::answerCall(uint32_t friendNum, bool video)
@@ -224,14 +225,14 @@ CoreAV::ToxFriendCallPtr CoreAV::answerCall(uint32_t friendNum, bool video)
if ( toxav_answer ( toxav . get ( ) , friendNum , audioSettings . getAudioBitrate ( ) ,
videoBitrate , & err ) ) {
it - > second - > setActive ( true ) ;
return it - > second ;
return true ;
} else {
qWarning ( ) < < " Failed to answer call with error " < < err ;
Toxav_Err_Call_Control controlErr ;
toxav_call_control ( toxav . get ( ) , friendNum , TOXAV_CALL_CONTROL_CANCEL , & controlErr ) ;
PARSE_ERR ( controlErr ) ;
calls . erase ( it ) ;
return { } ;
return false ;
}
}
@ -262,7 +263,7 @@ CoreAV::ToxFriendCallPtr CoreAV::startCall(uint32_t friendNum, bool video)
@@ -262,7 +263,7 @@ CoreAV::ToxFriendCallPtr CoreAV::startCall(uint32_t friendNum, bool video)
// Call object must be owned by this thread or there will be locking problems with Audio
call - > moveToThread ( thread ( ) ) ;
assert ( call ! = nullptr ) ;
calls . emplace ( friendNum , call ) ;
calls . emplace ( friendNum , call . get ( ) ) ;
return call ;
}
@ -273,7 +274,6 @@ bool CoreAV::cancelCall(uint32_t friendNum)
@@ -273,7 +274,6 @@ bool CoreAV::cancelCall(uint32_t friendNum)
auto it = calls . find ( friendNum ) ;
if ( it = = calls . end ( ) ) {
qWarning ( ) < < QString ( " Can't cancel call with %1, it doesn't exist! " ) . arg ( friendNum ) ;
return false ;
}
@ -539,7 +539,7 @@ void CoreAV::callCallback(ToxAV* toxav, uint32_t friendNum, bool audio, bool vid
@@ -539,7 +539,7 @@ void CoreAV::callCallback(ToxAV* toxav, uint32_t friendNum, bool audio, bool vid
call - > moveToThread ( self - > thread ( ) ) ;
assert ( call ! = nullptr ) ;
auto it = self - > calls . emplace ( friendNum , std : : move ( call ) ) ;
auto it = self - > calls . emplace ( friendNum , call . get ( ) ) ;
if ( it . second = = false ) {
qWarning ( ) < < QString ( " Rejecting call invite from %1, we're already in that call! " ) . arg ( friendNum ) ;
Toxav_Err_Call_Control err ;
@ -560,7 +560,7 @@ void CoreAV::callCallback(ToxAV* toxav, uint32_t friendNum, bool audio, bool vid
@@ -560,7 +560,7 @@ void CoreAV::callCallback(ToxAV* toxav, uint32_t friendNum, bool audio, bool vid
// Must explicitely unlock, because a deadlock can happen via ChatForm/Audio
locker . unlock ( ) ;
emit self - > avInvite ( friendNum , video ) ;
emit self - > avInvite ( friendNum , video , call ) ;
}
void CoreAV : : stateCallback ( ToxAV * toxav , uint32_t friendNum , uint32_t state , void * vSelf )