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

113 Commits

Author SHA1 Message Date
Diadlo
f8eda7eb57
style(core): Style fixes 2016-07-13 01:54:37 +03:00
Diadlo
1ddc1371a0
fix(videoframe): Added correct image copy 2016-06-25 14:20:13 +03:00
Nils Fenner
792103f8b0
refactor(filter_audio): completely remove filter_audio dependency
The filter_audio API is not working for qTox/Tox and thus disabled by default via compiler switch. In current qTox UI, it is not configurable, even when this switch is enabled. According to issue #3194 the library is no longer maintained as well. I don't see any reason to keep it in qTox.
2016-06-04 22:12:27 +02:00
sudden6
5339ad978b
fix(groupaudio): don't play audio while call is inactive
This also avoids logspam, because toxcore keeps recieving audio data
even if the call is inactive.
2016-04-24 14:34:49 +02:00
sudden6
afcd146a5b
fix(groupaudio): avoid deadlock when ending groupcall
The offending statement caused a deadlock, because the audioLock was
locked twice by the audio thread.
2016-04-24 14:34:49 +02:00
Nils Fenner
356543ca3b
feat(audio): add (repair) support for group audio calls 2016-04-24 14:34:49 +02:00
tux3
ce2f8fd1d5
Cleanup and improve audio input
We now subscribe to an event and wait for frames when capturing audio
input, the big avdantage is that we only have to fetch the frames from
the hardware once, and we don't need to cache anything.
The frames are simply dispatched to the client's callbacks immediately.

Also removes some outdated ifdefs that did not apply anymore.
2016-01-23 16:45:25 +01:00
Nils Fenner
0615c7c3c6
reimplement audio in/out subscription concept 2015-12-20 09:45:43 +01:00
Nils Fenner
08c43d0b83
cleanup OpenAL compatibility code in audio class 2015-12-20 09:45:43 +01:00
Nils Fenner
a1b87194b8
fix #2504
We need to filter samples * channels; also cleaned up data types
2015-12-20 09:45:43 +01:00
Nils Fenner
bb7d2a72b7
privatized audio interface 2015-12-20 09:45:22 +01:00
tux3
a6bbd31b12
Retry sending audio frames on sync/lock error 2015-12-05 03:22:00 +01:00
tux3
333d10e6d5
Log type of audio send error 2015-12-05 02:35:11 +01:00
tux3
7f5f807bde
Fix filter audio
Fixes #2504

Fixes #2517

Fixes #1565
2015-12-04 18:20:47 +01:00
tux3
37075dbfb5
Improve video quality
Double the allowed bitrate, this is especially noticeable on desktop streaming. Desktop streaming is still completely broken, with what looks like iframes silently getting dropped on a regular basis.

Retry 5 times to send a frame when there's an internal toxav lock sync error, this allows us to drop way less frames.
2015-12-04 12:53:58 +01:00
tux3
db52ef6e6a
Disable buggy automatic bitrate adjustements
For some users on poor connections, toxav would suggest lower and lower bitratres until reaching zero and disabling audio/video entirely, toxav would then not raise the bitrate back and the only way to re-enable audio/video would have been to change A/V sources or restart the call

We now log toxav's recommendation, but ignore it
2015-11-14 23:51:30 +01:00
tux3
523e419adf
Fix theoritical A/V deadlock
Could only be hit by pausing at a key point in a debugger until the call timed-out.

Having one thread going up the call stack and acquiring locks (toxcore callbacks), while another thread goes down taking locks in the other order (CoreAV calling toxav functions) creates some pretty freezy situations.

The deadlock was caused by the GUI thread calling the CoreAV thread, acquiring the CoreAV callback, then right before calling a toxav function, not schedule the thread until the call times out. At this point the toxcore thread fires its state callback to tell us the call is over, locking internal toxcore/toxav mutexes, it reaches our callback function which tries to switch to the CoreAV thread to clean up the call data structures, but has to wait since the CoreAV thread holds its own lock. At this point if we resume the CoreAV thread, it'll be busy calling into a toxav function, which tries to acquire internal toxav locks, those locks are held by the toxcore callback so we deadlock.

Our solution is that when getting a toxcore callback, we immediately switch to a temporary thread, allowing toxcore to release the locks it held, and that temporary thread tries to switch to do work on call data structures. Meanwhile if the CoreAV thread needs internal toxcore locks, it can get them.
2015-11-08 00:32:32 +01:00
tux3
7dc608818c
Automatic AV bitrate management
Makes progress on #2134
2015-11-06 23:05:51 +01:00
tux3
d41a578735
Fix crash on audio -> video call promotion
We just ignore it and not show the received video for now.
Fixes #2505
2015-11-06 20:47:42 +01:00
tux3
f107858252
Properly exit CoreAV thread 2015-10-25 13:53:04 +01:00
tux3
c902543ae4
Fix call race leading to deadlock and memory leak
A call cancel/accepted race was locking up both UI and AV threads, while the stream thread was shoveling more and more video frames on the AV thread's event queue
2015-10-25 00:17:45 +02:00
tux3
a776579732
Don't assert if a call dies while we answer it
This error condition only happens when a peer cancels its outgoing call in the middle of us answering it. We can simply ignore the error and things should nicely fall back into place. Since this race should be pretty rare in normal usage, it's nice to leave a log message, as it might mean we're being fuzzed.

We can prograssively replace more of those asserts by fallbacks and log messages now that everything has been shown to work fine, and the race conditions are harmless.

I feel like writing a novel today. Good thing nobody looks at these!
2015-10-24 21:41:19 +02:00
tux3
37e2d2e75f
CoreAV: Fix BlockingQueued connections deadlock
Having a deadlock problem? The solution is more locks!
2015-10-24 15:35:08 +02:00
tux3
c0d8703368
Properly signal when we stop sending video
And properly handle toxav happily delivering things out of order,
like firing a video frame callback right after a callback setting the bitrate to 0,
when the peer sent these commands in the right order
2015-10-24 04:26:39 +02:00
tux3
1dc7e4cca5
Add 45s call ringing timeout 2015-10-24 01:53:10 +02:00
tux3
ae243b2089
Delete CoreAV's timer from the CoreAV thread 2015-10-23 20:05:30 +02:00
tux3
4d9aeeec39 Fix bitrate callback to match toxav update 2015-10-23 17:52:46 +02:00
tux3
6dc91b156a Use actual mutexes for CameraSource
That homemade spinlock thing was insane, VTune says we were spending 1.5s spinning for no reason when openning a device for example
2015-10-23 17:52:46 +02:00
tux3
477554ffba Clean up callback hell between AV UI and CoreAV 2015-10-23 17:52:46 +02:00
tux3
a505e06f83 Multithread CoreAV
This is a little less insane, gives an overall 2x speedup on debug builds video calls
2015-10-23 17:52:45 +02:00
tux3
41e0212f77 Cleanup UI/CoreAV interface 2015-10-23 17:52:45 +02:00
tux3
73a4f40744 Fix call start/call invite race condition
Would result in an assert failure
2015-10-23 17:52:45 +02:00
tux3
f45256baf1 Implement group calls 2015-10-23 17:52:45 +02:00
tux3
6cbd507ca8 Clean up dead code in CoreAV 2015-10-23 17:39:08 +02:00
tux3
69b8a90277 Implement video calls 2015-10-23 17:39:08 +02:00
tux3
e0aa8dd4a2 Implement audio calls 2015-10-23 17:39:08 +02:00
tux3
2b888ddc05 Better data structure for tox calls 2015-10-23 17:19:16 +02:00
tux3
512dc8de2d Implement basic call logic
We can now make New AV calls, but without any audio/video. Just opening a link.
2015-10-23 17:09:53 +02:00
tux3
dbbc702c60 Strip out old AV code 2015-10-23 17:02:01 +02:00
Nils Fenner
b7cf4df13f
Get rid of static methods and bugs 2015-10-20 03:46:44 +02:00
TheSpiritXIII
dc2c6532a5
Audio: Fix unclosed audio when hanging up 2015-10-18 22:21:08 +02:00
agilob
7c6ac40d21
add debugging messages to camerasource, code reformatting to make it more readable and ogranized better 2015-10-11 07:38:44 +01:00
tux3
2ab55568f2
Make the video code a singleton, fix multithreading bugs
There can now only be one CameraSource running.

Video frames are decoded in their own thread, and then converted by users in the user's threads.
The CameraSource API is entirely thread-safe and controls the video decoding thread.

The video device only stays open as long as there are users subscribed to the CameraSource.

We use a dangerous combination of spinlocks and memory fences to keep things synchronized.
2015-06-26 18:34:48 +02:00
tux3
7513725a3d
Fix wrong assert 2015-06-06 22:11:54 +02:00
tux3
89e9b18cf3
Better checks before cleanupCall 2015-06-06 21:57:09 +02:00
tux3
d76fb459cf
Fix #1817 2015-06-06 21:09:32 +02:00
tux3
6d8bcbb9cd
Workaround for #1817 2015-06-06 17:04:56 +02:00
Zetok Zalbavar
67e9aeec63
Fix incorrect copyright headers
The qTox Project is not associated with the Tox Project in any way, with the
exception of "qTox" using the Tox Projet's "toxcore" collection of libraries.
In particular, the Tox Projet does not own copyright over the qTox Project's
"qTox" collection of software, source code, and assets.
The qTox Project's assets are under the sole copyright of the qTox
contributors, and no partiular rights are granted to the Tox Project.
2015-06-06 14:51:28 +01:00
tux3
20f254651d
Reorganize files 2015-06-06 01:44:47 +02:00
tux3
0fd489fbba
Properly kill all calls in ~Core 2015-06-05 18:53:27 +02:00
tux3
c180fa15de
Fix nullptr dereference on A/V timeout 2015-06-03 19:33:17 +02:00
tux3
d53b426750 Replace OpenCV with FFmpeg 2015-06-03 02:10:52 +02:00
PKEv
0791c64efd Correct_after_cpp_check
style and typos
2015-05-30 23:44:56 +03:00
Daniel Hrabovcak
051a88a7e8 For range loops 2015-05-25 12:38:52 -04:00
Daniel Hrabovcak
992e648f64 Fix compile issues 2015-05-25 12:32:34 -04:00
Daniel Hrabovcak
bd2f8b5db5 Add al delete to group leave 2015-05-25 12:19:56 -04:00
tux3
600401a606
Fix vol/mic toggle buttons
They were suffering from double-connection syndrom, and the way muting worked was now conflicting with how the output sound level setting works

Fixes #1442
2015-05-12 02:45:04 +02:00
tux3
4a40269698
Implement and enable the audio sliders
It was about time
2015-05-12 01:27:32 +02:00
sudden6
1506a9a30e Change log messages to fit new log format 2015-05-11 15:37:56 +02:00
tux3
67e09de085
Save memory with lazy loading
Load the setting's cameria preview opengl context lazily and destroy it when done. Only preallocte Core's video buffer if we have any calls active, free up when all calls are done
2015-05-10 00:05:30 +02:00
tux3
bb5f2e066d
Fix crash on video calls lowered to audio calls
Toxcore would incorrectly report the call as a video call in the call settings, and then crash while trying to send a video frame in the audio call. We workaround that by using another API that correctly reports the type of the call
2015-05-09 22:35:15 +02:00
Zetok Zalbavar
92f3b6a20f Code style improvements 2015-04-24 15:43:57 +02:00
tux3
e4859efe18
Refactor Core
Refactor Core's file transfer callbacks into their CoreFile class and files

Move all core*.{h|cpp} into a core/ folder
2015-04-24 02:32:09 +02:00