Better locking on jitter buffer stats printing

// FREEBIE
This commit is contained in:
Moxie Marlinspike 2015-11-04 17:30:09 -08:00
parent 09c57f3f44
commit c15d8ebd2e
6 changed files with 33 additions and 4 deletions

View File

@ -15,7 +15,7 @@ class CallAudioManager {
private:
volatile int running;
int finished;
volatile int finished;
SLObjectItf engineObject;
SLEngineItf engineEngine;
AudioCodec audioCodec;

View File

@ -1,4 +1,5 @@
#include "WebRtcJitterBuffer.h"
#include <time.h>
#define TAG "WebRtcJitterBuffer"
@ -14,7 +15,9 @@ int WebRtcJitterBuffer::init() {
webrtc::NetEq::Config config;
config.sample_rate_hz = 8000;
pthread_mutex_lock(&lock);
neteq = webrtc::NetEq::Create(config);
pthread_mutex_unlock(&lock);
if (neteq == NULL) {
__android_log_print(ANDROID_LOG_WARN, TAG, "Failed to construct NetEq!");
@ -26,8 +29,7 @@ int WebRtcJitterBuffer::init() {
return -1;
}
pthread_t thread;
pthread_create(&thread, NULL, &WebRtcJitterBuffer::collectStats, this);
pthread_create(&stats, NULL, &WebRtcJitterBuffer::collectStats, this);
return 0;
}
@ -65,13 +67,21 @@ int WebRtcJitterBuffer::getAudio(short *rawData, int maxRawData) {
}
void WebRtcJitterBuffer::stop() {
pthread_mutex_lock(&lock);
running = 0;
pthread_cond_signal(&condition);
pthread_mutex_unlock(&lock);
pthread_join(stats, NULL);
}
void WebRtcJitterBuffer::collectStats() {
while (running) {
webrtc::NetEqNetworkStatistics stats;
pthread_mutex_lock(&lock);
neteq->NetworkStatistics(&stats);
pthread_mutex_unlock(&lock);
__android_log_print(ANDROID_LOG_WARN, "WebRtcJitterBuffer",
"Jitter Stats:\n{\n" \
@ -96,7 +106,22 @@ void WebRtcJitterBuffer::collectStats() {
stats.accelerate_rate,
stats.clockdrift_ppm,
stats.added_zero_samples);
sleep(30);
struct timespec timeToWait;
struct timeval now;
gettimeofday(&now, NULL);
timeToWait.tv_sec = now.tv_sec;
timeToWait.tv_nsec = now.tv_usec * 1000;
timeToWait.tv_sec += 30;
pthread_mutex_lock(&lock);
if (running) {
pthread_cond_timedwait(&condition, &lock, &timeToWait);
}
pthread_mutex_unlock(&lock);
}
}

View File

@ -18,6 +18,10 @@ private:
webrtc::NetEq *neteq;
WebRtcCodec webRtcCodec;
pthread_t stats;
pthread_mutex_t lock;
pthread_cond_t condition;
public:
WebRtcJitterBuffer(AudioCodec &codec);
~WebRtcJitterBuffer();

Binary file not shown.

Binary file not shown.