finished: support for 64 samples OPUS packets in the client (if a sound card buffer size larger or equal than 128 samples is chosen, the legacy 128 samples OPUS packets are used)
This commit is contained in:
parent
e0c9ea5b6d
commit
c5d9b29aaa
5 changed files with 21 additions and 20 deletions
12
ChangeLog
12
ChangeLog
|
@ -1,20 +1,26 @@
|
|||
|
||||
|
||||
|
||||
3.4.8git
|
||||
3.5.0git
|
||||
|
||||
* added support for 64 samples OPUS packets in the client (if a sound card buffer size
|
||||
larger or equal than 128 samples is chosen, the legacy 128 samples OPUS packets are used)
|
||||
|
||||
* refresh server list if the Central Server address type is changed
|
||||
|
||||
* bug fix: the server welcome message may appear twice if the server list was double clicked
|
||||
|
||||
|
||||
TODO client: larger sound card buffers are managed by conversion buffer, not in processintern for loop (note iSndCrdFrameSizeFactor!)
|
||||
maybe let the use select all possible sound card buffer sizes, this should solve Ticket #53
|
||||
TODO check for audio fade in time at the server with newest version -> is it still correct?
|
||||
|
||||
TODO mixer faders linear -> log gain is better: CalcFaderGain() -> x = -50:1:0; plot(x, (10 .^ (x / 10)))
|
||||
|
||||
TODO offer the Jamulus ASIO settingspanel in case of an ASIO ERROR to fix, e.g., incorrect sample rate (https://sourceforge.net/p/llcon/discussion/533517/thread/777663cf94/#035f)
|
||||
|
||||
TODO issue with Mac audio interface: https://sourceforge.net/p/llcon/discussion/software/thread/7c443f2ed9/#eeab
|
||||
|
||||
TODO let the user select all possible sound card buffer sizes, this should solve Ticket #53
|
||||
|
||||
TODO auto jitter buffer performance not good at 64 samples frame size -> to be checked again
|
||||
|
||||
TODO for different frame sizes (64/128) the start value of 6 for the jitter buffer might be too low
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
VERSION = 3.4.8git
|
||||
VERSION = 3.5.0git
|
||||
|
||||
# use target name which does not use a captital letter at the beginning
|
||||
contains(CONFIG, "noupcasename") {
|
||||
|
|
|
@ -1146,12 +1146,15 @@ fflush(pFileDelay);
|
|||
|
||||
int CClient::EstimatedOverallDelay ( const int iPingTimeMs )
|
||||
{
|
||||
const double dSystemBlockDurationMs = static_cast<double> ( iOPUSFrameSizeSamples ) /
|
||||
SYSTEM_SAMPLE_RATE_HZ * 1000;
|
||||
|
||||
// If the jitter buffers are set effectively, i.e. they are exactly the
|
||||
// size of the network jitter, then the delay of the buffer is the buffer
|
||||
// length. Since that is usually not the case but the buffers are usually
|
||||
// a bit larger than necessary, we introduce some factor for compensation.
|
||||
// Consider the jitter buffer on the client and on the server side, too.
|
||||
const double dTotalJitterBufferDelayMs = SYSTEM_BLOCK_DURATION_MS_FLOAT *
|
||||
const double dTotalJitterBufferDelayMs = dSystemBlockDurationMs *
|
||||
static_cast<double> ( GetSockBufNumFrames() +
|
||||
GetServerSockBufNumFrames() ) * 0.7;
|
||||
|
||||
|
@ -1187,9 +1190,8 @@ int CClient::EstimatedOverallDelay ( const int iPingTimeMs )
|
|||
const double dDelayToFillNetworkPacketsMs =
|
||||
GetSystemMonoBlSize() * 1000 / SYSTEM_SAMPLE_RATE_HZ;
|
||||
|
||||
// CELT additional delay at small frame sizes is half a frame size
|
||||
const double dAdditionalAudioCodecDelayMs =
|
||||
SYSTEM_BLOCK_DURATION_MS_FLOAT / 2;
|
||||
// OPUS additional delay at small frame sizes is half a frame size
|
||||
const double dAdditionalAudioCodecDelayMs = dSystemBlockDurationMs / 2;
|
||||
|
||||
const double dTotalBufferDelayMs =
|
||||
dDelayToFillNetworkPacketsMs +
|
||||
|
|
|
@ -163,7 +163,7 @@ CServerDlg::CServerDlg ( CServer* pNServP,
|
|||
|
||||
// set up list view for connected clients
|
||||
lvwClients->setColumnWidth ( 0, 170 );
|
||||
lvwClients->setColumnWidth ( 1, 130 );
|
||||
lvwClients->setColumnWidth ( 1, 200 );
|
||||
lvwClients->clear();
|
||||
|
||||
|
||||
|
@ -175,6 +175,7 @@ lvwClients->setMinimumHeight ( 140 );
|
|||
// insert items in reverse order because in Windows all of them are
|
||||
// always visible -> put first item on the top
|
||||
vecpListViewItems.Init ( MAX_NUM_CHANNELS );
|
||||
|
||||
for ( int i = MAX_NUM_CHANNELS - 1; i >= 0; i-- )
|
||||
{
|
||||
vecpListViewItems[i] = new QTreeWidgetItem ( lvwClients );
|
||||
|
@ -488,12 +489,6 @@ void CServerDlg::OnTimer()
|
|||
vecpListViewItems[i]->setText ( 2,
|
||||
QString().setNum ( veciJitBufNumFrames[i] ) );
|
||||
|
||||
// out network block size
|
||||
vecpListViewItems[i]->setText ( 3,
|
||||
QString().setNum ( static_cast<double> (
|
||||
veciNetwFrameSizeFact[i] * SYSTEM_BLOCK_DURATION_MS_FLOAT
|
||||
), 'f', 2 ) );
|
||||
|
||||
vecpListViewItems[i]->setHidden ( false );
|
||||
}
|
||||
else
|
||||
|
|
|
@ -26,6 +26,9 @@
|
|||
<property name="rootIsDecorated">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="columnCount">
|
||||
<number>3</number>
|
||||
</property>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Client IP:Port</string>
|
||||
|
@ -41,11 +44,6 @@
|
|||
<string>Jitter Buffer Size</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Block Size Out/ms</string>
|
||||
</property>
|
||||
</column>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
|
|
Loading…
Reference in a new issue