mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 04:37:23 +02:00
minor refactoring
This commit is contained in:
parent
71c23eac1e
commit
bb2adb2721
2 changed files with 19 additions and 16 deletions
|
@ -35,7 +35,7 @@ InboundAudioStream::InboundAudioStream(int numFrameSamples, int numFramesCapacit
|
||||||
_interframeTimeGapStatsForJitterCalc(TIME_GAPS_FOR_JITTER_CALC_INTERVAL_SAMPLES, TIME_GAPS_FOR_JITTER_CALC_WINDOW_INTERVALS),
|
_interframeTimeGapStatsForJitterCalc(TIME_GAPS_FOR_JITTER_CALC_INTERVAL_SAMPLES, TIME_GAPS_FOR_JITTER_CALC_WINDOW_INTERVALS),
|
||||||
_interframeTimeGapStatsForStatsPacket(TIME_GAPS_FOR_STATS_PACKET_INTERVAL_SAMPLES, TIME_GAPS_FOR_STATS_PACKET_WINDOW_INTERVALS),
|
_interframeTimeGapStatsForStatsPacket(TIME_GAPS_FOR_STATS_PACKET_INTERVAL_SAMPLES, TIME_GAPS_FOR_STATS_PACKET_WINDOW_INTERVALS),
|
||||||
_framesAvailableStat(),
|
_framesAvailableStat(),
|
||||||
_framesAvailableAvg(0)
|
_currentJitterBufferFrames(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,13 +59,13 @@ void InboundAudioStream::resetStats() {
|
||||||
_interframeTimeGapStatsForJitterCalc.reset();
|
_interframeTimeGapStatsForJitterCalc.reset();
|
||||||
_interframeTimeGapStatsForStatsPacket.reset();
|
_interframeTimeGapStatsForStatsPacket.reset();
|
||||||
_framesAvailableStat.reset();
|
_framesAvailableStat.reset();
|
||||||
_framesAvailableAvg = 0;
|
_currentJitterBufferFrames = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InboundAudioStream::clearBuffer() {
|
void InboundAudioStream::clearBuffer() {
|
||||||
_ringBuffer.clear();
|
_ringBuffer.clear();
|
||||||
_framesAvailableStat.reset();
|
_framesAvailableStat.reset();
|
||||||
_framesAvailableAvg = 0;
|
_currentJitterBufferFrames = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int InboundAudioStream::parseData(const QByteArray& packet) {
|
int InboundAudioStream::parseData(const QByteArray& packet) {
|
||||||
|
@ -116,9 +116,9 @@ int InboundAudioStream::parseData(const QByteArray& packet) {
|
||||||
if (framesAvailable > _desiredJitterBufferFrames + _maxFramesOverDesired) {
|
if (framesAvailable > _desiredJitterBufferFrames + _maxFramesOverDesired) {
|
||||||
int framesToDrop = framesAvailable - (_desiredJitterBufferFrames + DESIRED_JITTER_BUFFER_FRAMES_PADDING);
|
int framesToDrop = framesAvailable - (_desiredJitterBufferFrames + DESIRED_JITTER_BUFFER_FRAMES_PADDING);
|
||||||
_ringBuffer.shiftReadPosition(framesToDrop * _ringBuffer.getNumFrameSamples());
|
_ringBuffer.shiftReadPosition(framesToDrop * _ringBuffer.getNumFrameSamples());
|
||||||
printf("dropped %d old frames\n", framesToDrop);
|
|
||||||
_framesAvailableStat.reset();
|
_framesAvailableStat.reset();
|
||||||
_framesAvailableAvg = 0;
|
_currentJitterBufferFrames = 0;
|
||||||
|
|
||||||
_oldFramesDropped += framesToDrop;
|
_oldFramesDropped += framesToDrop;
|
||||||
}
|
}
|
||||||
|
@ -158,10 +158,10 @@ bool InboundAudioStream::popFrames(int numFrames, bool starveOnFail) {
|
||||||
|
|
||||||
void InboundAudioStream::framesAvailableChanged() {
|
void InboundAudioStream::framesAvailableChanged() {
|
||||||
_framesAvailableStat.updateWithSample(_ringBuffer.framesAvailable());
|
_framesAvailableStat.updateWithSample(_ringBuffer.framesAvailable());
|
||||||
if (_framesAvailableStat.getElapsedUsecs() >= FRAMES_AVAILABLE_STATS_WINDOW_USECS) {
|
|
||||||
_framesAvailableAvg = (int)ceil(_framesAvailableStat.getAverage());
|
if (_framesAvailableStat.getElapsedUsecs() >= FRAMES_AVAILABLE_STAT_WINDOW_USECS) {
|
||||||
|
_currentJitterBufferFrames = (int)ceil(_framesAvailableStat.getAverage());
|
||||||
_framesAvailableStat.reset();
|
_framesAvailableStat.reset();
|
||||||
printf("10s samples filled; frames avail avg = %d\n", _framesAvailableAvg);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -245,17 +245,17 @@ int InboundAudioStream::writeDroppableSilentSamples(int numSilentSamples) {
|
||||||
int desiredJitterBufferFramesPlusPadding = _desiredJitterBufferFrames + DESIRED_JITTER_BUFFER_FRAMES_PADDING;
|
int desiredJitterBufferFramesPlusPadding = _desiredJitterBufferFrames + DESIRED_JITTER_BUFFER_FRAMES_PADDING;
|
||||||
int numSilentFramesToDrop = 0;
|
int numSilentFramesToDrop = 0;
|
||||||
|
|
||||||
if (numSilentSamples >= samplesPerFrame && _framesAvailableAvg > desiredJitterBufferFramesPlusPadding) {
|
if (numSilentSamples >= samplesPerFrame && _currentJitterBufferFrames > desiredJitterBufferFramesPlusPadding) {
|
||||||
|
|
||||||
// our avg jitter buffer size exceeds its desired value, so ignore some silent
|
// our avg jitter buffer size exceeds its desired value, so ignore some silent
|
||||||
// frames to get that size as close to desired as possible
|
// frames to get that size as close to desired as possible
|
||||||
int numSilentFramesToDropDesired = _framesAvailableAvg - desiredJitterBufferFramesPlusPadding;
|
int numSilentFramesToDropDesired = _currentJitterBufferFrames - desiredJitterBufferFramesPlusPadding;
|
||||||
int numSilentFramesReceived = numSilentSamples / samplesPerFrame;
|
int numSilentFramesReceived = numSilentSamples / samplesPerFrame;
|
||||||
numSilentFramesToDrop = std::min(numSilentFramesToDropDesired, numSilentFramesReceived);
|
numSilentFramesToDrop = std::min(numSilentFramesToDropDesired, numSilentFramesReceived);
|
||||||
|
|
||||||
// dont reset _framesAvailableAvg here; we want to be able to drop further silent frames
|
// dont reset _currentJitterBufferFrames here; we want to be able to drop further silent frames
|
||||||
// without waiting for _framesAvailableStat to fill up to 10s of samples.
|
// without waiting for _framesAvailableStat to fill up to 10s of samples.
|
||||||
_framesAvailableAvg -= numSilentFramesToDrop;
|
_currentJitterBufferFrames -= numSilentFramesToDrop;
|
||||||
_framesAvailableStat.reset();
|
_framesAvailableStat.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -277,7 +277,7 @@ AudioStreamStats InboundAudioStream::getAudioStreamStats() const {
|
||||||
streamStats._timeGapWindowAverage = _interframeTimeGapStatsForStatsPacket.getWindowAverage();
|
streamStats._timeGapWindowAverage = _interframeTimeGapStatsForStatsPacket.getWindowAverage();
|
||||||
|
|
||||||
streamStats._framesAvailable = _ringBuffer.framesAvailable();
|
streamStats._framesAvailable = _ringBuffer.framesAvailable();
|
||||||
streamStats._framesAvailableAverage = _framesAvailableAvg;
|
streamStats._framesAvailableAverage = _currentJitterBufferFrames;
|
||||||
streamStats._desiredJitterBufferFrames = _desiredJitterBufferFrames;
|
streamStats._desiredJitterBufferFrames = _desiredJitterBufferFrames;
|
||||||
streamStats._starveCount = _starveCount;
|
streamStats._starveCount = _starveCount;
|
||||||
streamStats._consecutiveNotMixedCount = _consecutiveNotMixedCount;
|
streamStats._consecutiveNotMixedCount = _consecutiveNotMixedCount;
|
||||||
|
|
|
@ -37,7 +37,7 @@ const int TIME_GAPS_FOR_JITTER_CALC_WINDOW_INTERVALS = 10;
|
||||||
const int TIME_GAPS_FOR_STATS_PACKET_INTERVAL_SAMPLES = USECS_PER_SECOND / BUFFER_SEND_INTERVAL_USECS;
|
const int TIME_GAPS_FOR_STATS_PACKET_INTERVAL_SAMPLES = USECS_PER_SECOND / BUFFER_SEND_INTERVAL_USECS;
|
||||||
const int TIME_GAPS_FOR_STATS_PACKET_WINDOW_INTERVALS = 30;
|
const int TIME_GAPS_FOR_STATS_PACKET_WINDOW_INTERVALS = 30;
|
||||||
|
|
||||||
const int FRAMES_AVAILABLE_STATS_WINDOW_USECS = 10 * USECS_PER_SECOND;
|
const int FRAMES_AVAILABLE_STAT_WINDOW_USECS = 10 * USECS_PER_SECOND;
|
||||||
|
|
||||||
// the internal history buffer of the incoming seq stats will cover 30s to calculate
|
// the internal history buffer of the incoming seq stats will cover 30s to calculate
|
||||||
// packet loss % over last 30s
|
// packet loss % over last 30s
|
||||||
|
@ -91,7 +91,7 @@ public:
|
||||||
int getNumFrameSamples() const { return _ringBuffer.getNumFrameSamples(); }
|
int getNumFrameSamples() const { return _ringBuffer.getNumFrameSamples(); }
|
||||||
int getFrameCapacity() const { return _ringBuffer.getFrameCapacity(); }
|
int getFrameCapacity() const { return _ringBuffer.getFrameCapacity(); }
|
||||||
int getFramesAvailable() const { return _ringBuffer.framesAvailable(); }
|
int getFramesAvailable() const { return _ringBuffer.framesAvailable(); }
|
||||||
double getFramesAvailableAverage() const { return _framesAvailableAvg; }
|
double getFramesAvailableAverage() const { return _framesAvailableStat.getAverage(); }
|
||||||
|
|
||||||
bool isStarved() const { return _isStarved; }
|
bool isStarved() const { return _isStarved; }
|
||||||
bool hasStarted() const { return _hasStarted; }
|
bool hasStarted() const { return _hasStarted; }
|
||||||
|
@ -165,7 +165,10 @@ protected:
|
||||||
MovingMinMaxAvg<quint64> _interframeTimeGapStatsForStatsPacket;
|
MovingMinMaxAvg<quint64> _interframeTimeGapStatsForStatsPacket;
|
||||||
|
|
||||||
TimeWeightedAvg<int> _framesAvailableStat;
|
TimeWeightedAvg<int> _framesAvailableStat;
|
||||||
int _framesAvailableAvg;
|
|
||||||
|
// this value is based on the time-weighted avg from _framesAvailableStat. it is only used for
|
||||||
|
// dropping silent frames right now.
|
||||||
|
int _currentJitterBufferFrames;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // hifi_InboundAudioStream_h
|
#endif // hifi_InboundAudioStream_h
|
||||||
|
|
Loading…
Reference in a new issue