Use scoped_ptr for ThreadWrapper::CreateThread.
BUG= R=henrika@webrtc.org, pbos@webrtc.org Review URL: https://webrtc-codereview.appspot.com/45799004 Cr-Commit-Position: refs/heads/master@{#8794} git-svn-id: http://webrtc.googlecode.com/svn/trunk@8794 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
@@ -531,39 +531,41 @@ void APITest::Perform() {
|
|||||||
//--- THREADS
|
//--- THREADS
|
||||||
// A
|
// A
|
||||||
// PUSH
|
// PUSH
|
||||||
ThreadWrapper* myPushAudioThreadA = ThreadWrapper::CreateThread(
|
rtc::scoped_ptr<ThreadWrapper> myPushAudioThreadA =
|
||||||
PushAudioThreadA, this, kNormalPriority, "PushAudioThreadA");
|
ThreadWrapper::CreateThread(PushAudioThreadA, this, kNormalPriority,
|
||||||
|
"PushAudioThreadA");
|
||||||
CHECK_THREAD_NULLITY(myPushAudioThreadA, "Unable to start A::PUSH thread");
|
CHECK_THREAD_NULLITY(myPushAudioThreadA, "Unable to start A::PUSH thread");
|
||||||
// PULL
|
// PULL
|
||||||
ThreadWrapper* myPullAudioThreadA = ThreadWrapper::CreateThread(
|
rtc::scoped_ptr<ThreadWrapper> myPullAudioThreadA =
|
||||||
PullAudioThreadA, this, kNormalPriority, "PullAudioThreadA");
|
ThreadWrapper::CreateThread(PullAudioThreadA, this, kNormalPriority,
|
||||||
|
"PullAudioThreadA");
|
||||||
CHECK_THREAD_NULLITY(myPullAudioThreadA, "Unable to start A::PULL thread");
|
CHECK_THREAD_NULLITY(myPullAudioThreadA, "Unable to start A::PULL thread");
|
||||||
// Process
|
// Process
|
||||||
ThreadWrapper* myProcessThreadA = ThreadWrapper::CreateThread(
|
rtc::scoped_ptr<ThreadWrapper> myProcessThreadA = ThreadWrapper::CreateThread(
|
||||||
ProcessThreadA, this, kNormalPriority, "ProcessThreadA");
|
ProcessThreadA, this, kNormalPriority, "ProcessThreadA");
|
||||||
CHECK_THREAD_NULLITY(myProcessThreadA, "Unable to start A::Process thread");
|
CHECK_THREAD_NULLITY(myProcessThreadA, "Unable to start A::Process thread");
|
||||||
// API
|
// API
|
||||||
ThreadWrapper* myAPIThreadA = ThreadWrapper::CreateThread(APIThreadA, this,
|
rtc::scoped_ptr<ThreadWrapper> myAPIThreadA = ThreadWrapper::CreateThread(
|
||||||
kNormalPriority,
|
APIThreadA, this, kNormalPriority, "APIThreadA");
|
||||||
"APIThreadA");
|
|
||||||
CHECK_THREAD_NULLITY(myAPIThreadA, "Unable to start A::API thread");
|
CHECK_THREAD_NULLITY(myAPIThreadA, "Unable to start A::API thread");
|
||||||
// B
|
// B
|
||||||
// PUSH
|
// PUSH
|
||||||
ThreadWrapper* myPushAudioThreadB = ThreadWrapper::CreateThread(
|
rtc::scoped_ptr<ThreadWrapper> myPushAudioThreadB =
|
||||||
PushAudioThreadB, this, kNormalPriority, "PushAudioThreadB");
|
ThreadWrapper::CreateThread(PushAudioThreadB, this, kNormalPriority,
|
||||||
|
"PushAudioThreadB");
|
||||||
CHECK_THREAD_NULLITY(myPushAudioThreadB, "Unable to start B::PUSH thread");
|
CHECK_THREAD_NULLITY(myPushAudioThreadB, "Unable to start B::PUSH thread");
|
||||||
// PULL
|
// PULL
|
||||||
ThreadWrapper* myPullAudioThreadB = ThreadWrapper::CreateThread(
|
rtc::scoped_ptr<ThreadWrapper> myPullAudioThreadB =
|
||||||
PullAudioThreadB, this, kNormalPriority, "PullAudioThreadB");
|
ThreadWrapper::CreateThread(PullAudioThreadB, this, kNormalPriority,
|
||||||
|
"PullAudioThreadB");
|
||||||
CHECK_THREAD_NULLITY(myPullAudioThreadB, "Unable to start B::PULL thread");
|
CHECK_THREAD_NULLITY(myPullAudioThreadB, "Unable to start B::PULL thread");
|
||||||
// Process
|
// Process
|
||||||
ThreadWrapper* myProcessThreadB = ThreadWrapper::CreateThread(
|
rtc::scoped_ptr<ThreadWrapper> myProcessThreadB = ThreadWrapper::CreateThread(
|
||||||
ProcessThreadB, this, kNormalPriority, "ProcessThreadB");
|
ProcessThreadB, this, kNormalPriority, "ProcessThreadB");
|
||||||
CHECK_THREAD_NULLITY(myProcessThreadB, "Unable to start B::Process thread");
|
CHECK_THREAD_NULLITY(myProcessThreadB, "Unable to start B::Process thread");
|
||||||
// API
|
// API
|
||||||
ThreadWrapper* myAPIThreadB = ThreadWrapper::CreateThread(APIThreadB, this,
|
rtc::scoped_ptr<ThreadWrapper> myAPIThreadB = ThreadWrapper::CreateThread(
|
||||||
kNormalPriority,
|
APIThreadB, this, kNormalPriority, "APIThreadB");
|
||||||
"APIThreadB");
|
|
||||||
CHECK_THREAD_NULLITY(myAPIThreadB, "Unable to start B::API thread");
|
CHECK_THREAD_NULLITY(myAPIThreadB, "Unable to start B::API thread");
|
||||||
|
|
||||||
//_apiEventA->StartTimer(true, 5000);
|
//_apiEventA->StartTimer(true, 5000);
|
||||||
@@ -603,20 +605,10 @@ void APITest::Perform() {
|
|||||||
myProcessThreadA->Stop();
|
myProcessThreadA->Stop();
|
||||||
myAPIThreadA->Stop();
|
myAPIThreadA->Stop();
|
||||||
|
|
||||||
delete myPushAudioThreadA;
|
|
||||||
delete myPullAudioThreadA;
|
|
||||||
delete myProcessThreadA;
|
|
||||||
delete myAPIThreadA;
|
|
||||||
|
|
||||||
myPushAudioThreadB->Stop();
|
myPushAudioThreadB->Stop();
|
||||||
myPullAudioThreadB->Stop();
|
myPullAudioThreadB->Stop();
|
||||||
myProcessThreadB->Stop();
|
myProcessThreadB->Stop();
|
||||||
myAPIThreadB->Stop();
|
myAPIThreadB->Stop();
|
||||||
|
|
||||||
delete myPushAudioThreadB;
|
|
||||||
delete myPullAudioThreadB;
|
|
||||||
delete myProcessThreadB;
|
|
||||||
delete myAPIThreadB;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void APITest::CheckVADStatus(char side) {
|
void APITest::CheckVADStatus(char side) {
|
||||||
|
|||||||
@@ -470,10 +470,8 @@ void OpenSlesInput::RecorderSimpleBufferQueueCallbackHandler(
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool OpenSlesInput::StartCbThreads() {
|
bool OpenSlesInput::StartCbThreads() {
|
||||||
rec_thread_.reset(ThreadWrapper::CreateThread(CbThread,
|
rec_thread_ = ThreadWrapper::CreateThread(CbThread, this, kRealtimePriority,
|
||||||
this,
|
"opensl_rec_thread");
|
||||||
kRealtimePriority,
|
|
||||||
"opensl_rec_thread"));
|
|
||||||
assert(rec_thread_.get());
|
assert(rec_thread_.get());
|
||||||
if (!rec_thread_->Start()) {
|
if (!rec_thread_->Start()) {
|
||||||
assert(false);
|
assert(false);
|
||||||
|
|||||||
@@ -510,10 +510,8 @@ void OpenSlesOutput::PlayerSimpleBufferQueueCallbackHandler(
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool OpenSlesOutput::StartCbThreads() {
|
bool OpenSlesOutput::StartCbThreads() {
|
||||||
play_thread_.reset(ThreadWrapper::CreateThread(CbThread,
|
play_thread_ = ThreadWrapper::CreateThread(CbThread, this, kRealtimePriority,
|
||||||
this,
|
"opensl_play_thread");
|
||||||
kRealtimePriority,
|
|
||||||
"opensl_play_thread"));
|
|
||||||
assert(play_thread_.get());
|
assert(play_thread_.get());
|
||||||
OPENSL_RETURN_ON_FAILURE(
|
OPENSL_RETURN_ON_FAILURE(
|
||||||
(*sles_player_itf_)->SetPlayState(sles_player_itf_,
|
(*sles_player_itf_)->SetPlayState(sles_player_itf_,
|
||||||
|
|||||||
@@ -35,8 +35,6 @@ FileAudioDevice::FileAudioDevice(const int32_t id,
|
|||||||
_recordingBufferSizeIn10MS(0),
|
_recordingBufferSizeIn10MS(0),
|
||||||
_recordingFramesIn10MS(0),
|
_recordingFramesIn10MS(0),
|
||||||
_playoutFramesIn10MS(0),
|
_playoutFramesIn10MS(0),
|
||||||
_ptrThreadRec(NULL),
|
|
||||||
_ptrThreadPlay(NULL),
|
|
||||||
_playing(false),
|
_playing(false),
|
||||||
_recording(false),
|
_recording(false),
|
||||||
_lastCallPlayoutMillis(0),
|
_lastCallPlayoutMillis(0),
|
||||||
@@ -212,12 +210,6 @@ int32_t FileAudioDevice::StartPlayout() {
|
|||||||
this,
|
this,
|
||||||
kRealtimePriority,
|
kRealtimePriority,
|
||||||
threadName);
|
threadName);
|
||||||
if (_ptrThreadPlay == NULL) {
|
|
||||||
_playing = false;
|
|
||||||
delete [] _playoutBuffer;
|
|
||||||
_playoutBuffer = NULL;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!_outputFilename.empty() && _outputFile.OpenFile(
|
if (!_outputFilename.empty() && _outputFile.OpenFile(
|
||||||
_outputFilename.c_str(), false, false, false) == -1) {
|
_outputFilename.c_str(), false, false, false) == -1) {
|
||||||
@@ -229,9 +221,8 @@ int32_t FileAudioDevice::StartPlayout() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!_ptrThreadPlay->Start()) {
|
if (!_ptrThreadPlay->Start()) {
|
||||||
|
_ptrThreadPlay.reset();
|
||||||
_playing = false;
|
_playing = false;
|
||||||
delete _ptrThreadPlay;
|
|
||||||
_ptrThreadPlay = NULL;
|
|
||||||
delete [] _playoutBuffer;
|
delete [] _playoutBuffer;
|
||||||
_playoutBuffer = NULL;
|
_playoutBuffer = NULL;
|
||||||
return -1;
|
return -1;
|
||||||
@@ -247,11 +238,9 @@ int32_t FileAudioDevice::StopPlayout() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// stop playout thread first
|
// stop playout thread first
|
||||||
if (_ptrThreadPlay && !_ptrThreadPlay->Stop()) {
|
if (_ptrThreadPlay) {
|
||||||
return -1;
|
_ptrThreadPlay->Stop();
|
||||||
} else {
|
_ptrThreadPlay.reset();
|
||||||
delete _ptrThreadPlay;
|
|
||||||
_ptrThreadPlay = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CriticalSectionScoped lock(&_critSect);
|
CriticalSectionScoped lock(&_critSect);
|
||||||
@@ -296,17 +285,10 @@ int32_t FileAudioDevice::StartRecording() {
|
|||||||
this,
|
this,
|
||||||
kRealtimePriority,
|
kRealtimePriority,
|
||||||
threadName);
|
threadName);
|
||||||
if (_ptrThreadRec == NULL) {
|
|
||||||
_recording = false;
|
|
||||||
delete [] _recordingBuffer;
|
|
||||||
_recordingBuffer = NULL;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!_ptrThreadRec->Start()) {
|
if (!_ptrThreadRec->Start()) {
|
||||||
|
_ptrThreadRec.reset();
|
||||||
_recording = false;
|
_recording = false;
|
||||||
delete _ptrThreadRec;
|
|
||||||
_ptrThreadRec = NULL;
|
|
||||||
delete [] _recordingBuffer;
|
delete [] _recordingBuffer;
|
||||||
_recordingBuffer = NULL;
|
_recordingBuffer = NULL;
|
||||||
return -1;
|
return -1;
|
||||||
@@ -322,11 +304,9 @@ int32_t FileAudioDevice::StopRecording() {
|
|||||||
_recording = false;
|
_recording = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_ptrThreadRec && !_ptrThreadRec->Stop()) {
|
if (_ptrThreadRec) {
|
||||||
return -1;
|
_ptrThreadRec->Stop();
|
||||||
} else {
|
_ptrThreadRec.reset();
|
||||||
delete _ptrThreadRec;
|
|
||||||
_ptrThreadRec = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CriticalSectionScoped lock(&_critSect);
|
CriticalSectionScoped lock(&_critSect);
|
||||||
|
|||||||
@@ -178,8 +178,8 @@ class FileAudioDevice : public AudioDeviceGeneric {
|
|||||||
uint32_t _recordingFramesIn10MS;
|
uint32_t _recordingFramesIn10MS;
|
||||||
uint32_t _playoutFramesIn10MS;
|
uint32_t _playoutFramesIn10MS;
|
||||||
|
|
||||||
ThreadWrapper* _ptrThreadRec;
|
rtc::scoped_ptr<ThreadWrapper> _ptrThreadRec;
|
||||||
ThreadWrapper* _ptrThreadPlay;
|
rtc::scoped_ptr<ThreadWrapper> _ptrThreadPlay;
|
||||||
|
|
||||||
bool _playing;
|
bool _playing;
|
||||||
bool _recording;
|
bool _recording;
|
||||||
|
|||||||
@@ -15,10 +15,9 @@
|
|||||||
|
|
||||||
#include "webrtc/modules/audio_device/audio_device_generic.h"
|
#include "webrtc/modules/audio_device/audio_device_generic.h"
|
||||||
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
||||||
|
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
class ThreadWrapper;
|
|
||||||
|
|
||||||
const uint32_t N_REC_SAMPLES_PER_SEC = 44000;
|
const uint32_t N_REC_SAMPLES_PER_SEC = 44000;
|
||||||
const uint32_t N_PLAY_SAMPLES_PER_SEC = 44000;
|
const uint32_t N_PLAY_SAMPLES_PER_SEC = 44000;
|
||||||
|
|
||||||
@@ -214,7 +213,7 @@ class AudioDeviceIOS : public AudioDeviceGeneric {
|
|||||||
|
|
||||||
CriticalSectionWrapper& _critSect;
|
CriticalSectionWrapper& _critSect;
|
||||||
|
|
||||||
ThreadWrapper* _captureWorkerThread;
|
rtc::scoped_ptr<ThreadWrapper> _captureWorkerThread;
|
||||||
|
|
||||||
int32_t _id;
|
int32_t _id;
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,6 @@
|
|||||||
|
|
||||||
#include "webrtc/modules/audio_device/ios/audio_device_ios.h"
|
#include "webrtc/modules/audio_device/ios/audio_device_ios.h"
|
||||||
|
|
||||||
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
|
||||||
#include "webrtc/system_wrappers/interface/trace.h"
|
#include "webrtc/system_wrappers/interface/trace.h"
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
@@ -21,7 +20,6 @@ AudioDeviceIOS::AudioDeviceIOS(const int32_t id)
|
|||||||
:
|
:
|
||||||
_ptrAudioBuffer(NULL),
|
_ptrAudioBuffer(NULL),
|
||||||
_critSect(*CriticalSectionWrapper::CreateCriticalSection()),
|
_critSect(*CriticalSectionWrapper::CreateCriticalSection()),
|
||||||
_captureWorkerThread(NULL),
|
|
||||||
_id(id),
|
_id(id),
|
||||||
_auVoiceProcessing(NULL),
|
_auVoiceProcessing(NULL),
|
||||||
_audioInterruptionObserver(NULL),
|
_audioInterruptionObserver(NULL),
|
||||||
@@ -108,17 +106,10 @@ int32_t AudioDeviceIOS::Init() {
|
|||||||
_isShutDown = false;
|
_isShutDown = false;
|
||||||
|
|
||||||
// Create and start capture thread
|
// Create and start capture thread
|
||||||
if (_captureWorkerThread == NULL) {
|
if (!_captureWorkerThread) {
|
||||||
_captureWorkerThread
|
_captureWorkerThread
|
||||||
= ThreadWrapper::CreateThread(RunCapture, this, kRealtimePriority,
|
= ThreadWrapper::CreateThread(RunCapture, this, kRealtimePriority,
|
||||||
"CaptureWorkerThread");
|
"CaptureWorkerThread");
|
||||||
|
|
||||||
if (_captureWorkerThread == NULL) {
|
|
||||||
WEBRTC_TRACE(kTraceCritical, kTraceAudioDevice,
|
|
||||||
_id, "CreateThread() error");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool res = _captureWorkerThread->Start();
|
bool res = _captureWorkerThread->Start();
|
||||||
WEBRTC_TRACE(kTraceDebug, kTraceAudioDevice,
|
WEBRTC_TRACE(kTraceDebug, kTraceAudioDevice,
|
||||||
_id, "CaptureWorkerThread started (res=%d)", res);
|
_id, "CaptureWorkerThread started (res=%d)", res);
|
||||||
@@ -146,14 +137,13 @@ int32_t AudioDeviceIOS::Terminate() {
|
|||||||
|
|
||||||
|
|
||||||
// Stop capture thread
|
// Stop capture thread
|
||||||
if (_captureWorkerThread != NULL) {
|
if (_captureWorkerThread) {
|
||||||
WEBRTC_TRACE(kTraceDebug, kTraceAudioDevice,
|
WEBRTC_TRACE(kTraceDebug, kTraceAudioDevice,
|
||||||
_id, "Stopping CaptureWorkerThread");
|
_id, "Stopping CaptureWorkerThread");
|
||||||
bool res = _captureWorkerThread->Stop();
|
bool res = _captureWorkerThread->Stop();
|
||||||
WEBRTC_TRACE(kTraceDebug, kTraceAudioDevice,
|
WEBRTC_TRACE(kTraceDebug, kTraceAudioDevice,
|
||||||
_id, "CaptureWorkerThread stopped (res=%d)", res);
|
_id, "CaptureWorkerThread stopped (res=%d)", res);
|
||||||
delete _captureWorkerThread;
|
_captureWorkerThread.reset();
|
||||||
_captureWorkerThread = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Shut down Audio Unit
|
// Shut down Audio Unit
|
||||||
|
|||||||
@@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
#include "webrtc/system_wrappers/interface/event_wrapper.h"
|
#include "webrtc/system_wrappers/interface/event_wrapper.h"
|
||||||
#include "webrtc/system_wrappers/interface/sleep.h"
|
#include "webrtc/system_wrappers/interface/sleep.h"
|
||||||
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
|
||||||
#include "webrtc/system_wrappers/interface/trace.h"
|
#include "webrtc/system_wrappers/interface/trace.h"
|
||||||
|
|
||||||
webrtc_adm_linux_alsa::AlsaSymbolTable AlsaSymbolTable;
|
webrtc_adm_linux_alsa::AlsaSymbolTable AlsaSymbolTable;
|
||||||
@@ -64,8 +63,6 @@ static const unsigned int ALSA_CAPTURE_WAIT_TIMEOUT = 5; // in ms
|
|||||||
AudioDeviceLinuxALSA::AudioDeviceLinuxALSA(const int32_t id) :
|
AudioDeviceLinuxALSA::AudioDeviceLinuxALSA(const int32_t id) :
|
||||||
_ptrAudioBuffer(NULL),
|
_ptrAudioBuffer(NULL),
|
||||||
_critSect(*CriticalSectionWrapper::CreateCriticalSection()),
|
_critSect(*CriticalSectionWrapper::CreateCriticalSection()),
|
||||||
_ptrThreadRec(NULL),
|
|
||||||
_ptrThreadPlay(NULL),
|
|
||||||
_id(id),
|
_id(id),
|
||||||
_mixerManager(id),
|
_mixerManager(id),
|
||||||
_inputDeviceIndex(0),
|
_inputDeviceIndex(0),
|
||||||
@@ -199,7 +196,6 @@ int32_t AudioDeviceLinuxALSA::Init()
|
|||||||
|
|
||||||
int32_t AudioDeviceLinuxALSA::Terminate()
|
int32_t AudioDeviceLinuxALSA::Terminate()
|
||||||
{
|
{
|
||||||
|
|
||||||
if (!_initialized)
|
if (!_initialized)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
@@ -212,19 +208,11 @@ int32_t AudioDeviceLinuxALSA::Terminate()
|
|||||||
// RECORDING
|
// RECORDING
|
||||||
if (_ptrThreadRec)
|
if (_ptrThreadRec)
|
||||||
{
|
{
|
||||||
ThreadWrapper* tmpThread = _ptrThreadRec;
|
ThreadWrapper* tmpThread = _ptrThreadRec.release();
|
||||||
_ptrThreadRec = NULL;
|
|
||||||
_critSect.Leave();
|
_critSect.Leave();
|
||||||
|
|
||||||
if (tmpThread->Stop())
|
tmpThread->Stop();
|
||||||
{
|
|
||||||
delete tmpThread;
|
delete tmpThread;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
|
|
||||||
" failed to close down the rec audio thread");
|
|
||||||
}
|
|
||||||
|
|
||||||
_critSect.Enter();
|
_critSect.Enter();
|
||||||
}
|
}
|
||||||
@@ -232,19 +220,11 @@ int32_t AudioDeviceLinuxALSA::Terminate()
|
|||||||
// PLAYOUT
|
// PLAYOUT
|
||||||
if (_ptrThreadPlay)
|
if (_ptrThreadPlay)
|
||||||
{
|
{
|
||||||
ThreadWrapper* tmpThread = _ptrThreadPlay;
|
ThreadWrapper* tmpThread = _ptrThreadPlay.release();
|
||||||
_ptrThreadPlay = NULL;
|
|
||||||
_critSect.Leave();
|
_critSect.Leave();
|
||||||
|
|
||||||
if (tmpThread->Stop())
|
tmpThread->Stop();
|
||||||
{
|
|
||||||
delete tmpThread;
|
delete tmpThread;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
|
|
||||||
" failed to close down the play audio thread");
|
|
||||||
}
|
|
||||||
|
|
||||||
_critSect.Enter();
|
_critSect.Enter();
|
||||||
}
|
}
|
||||||
@@ -1389,23 +1369,13 @@ int32_t AudioDeviceLinuxALSA::StartRecording()
|
|||||||
this,
|
this,
|
||||||
kRealtimePriority,
|
kRealtimePriority,
|
||||||
threadName);
|
threadName);
|
||||||
if (_ptrThreadRec == NULL)
|
|
||||||
{
|
|
||||||
WEBRTC_TRACE(kTraceCritical, kTraceAudioDevice, _id,
|
|
||||||
" failed to create the rec audio thread");
|
|
||||||
_recording = false;
|
|
||||||
delete [] _recordingBuffer;
|
|
||||||
_recordingBuffer = NULL;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!_ptrThreadRec->Start())
|
if (!_ptrThreadRec->Start())
|
||||||
{
|
{
|
||||||
WEBRTC_TRACE(kTraceCritical, kTraceAudioDevice, _id,
|
WEBRTC_TRACE(kTraceCritical, kTraceAudioDevice, _id,
|
||||||
" failed to start the rec audio thread");
|
" failed to start the rec audio thread");
|
||||||
_recording = false;
|
_recording = false;
|
||||||
delete _ptrThreadRec;
|
_ptrThreadRec.reset();
|
||||||
_ptrThreadRec = NULL;
|
|
||||||
delete [] _recordingBuffer;
|
delete [] _recordingBuffer;
|
||||||
_recordingBuffer = NULL;
|
_recordingBuffer = NULL;
|
||||||
return -1;
|
return -1;
|
||||||
@@ -1462,15 +1432,10 @@ int32_t AudioDeviceLinuxALSA::StopRecording()
|
|||||||
_recording = false;
|
_recording = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_ptrThreadRec && !_ptrThreadRec->Stop())
|
if (_ptrThreadRec)
|
||||||
{
|
{
|
||||||
WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
|
_ptrThreadRec->Stop();
|
||||||
" failed to stop the rec audio thread");
|
_ptrThreadRec.reset();
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
delete _ptrThreadRec;
|
|
||||||
_ptrThreadRec = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CriticalSectionScoped lock(&_critSect);
|
CriticalSectionScoped lock(&_critSect);
|
||||||
@@ -1559,23 +1524,12 @@ int32_t AudioDeviceLinuxALSA::StartPlayout()
|
|||||||
this,
|
this,
|
||||||
kRealtimePriority,
|
kRealtimePriority,
|
||||||
threadName);
|
threadName);
|
||||||
if (_ptrThreadPlay == NULL)
|
|
||||||
{
|
|
||||||
WEBRTC_TRACE(kTraceCritical, kTraceAudioDevice, _id,
|
|
||||||
" failed to create the play audio thread");
|
|
||||||
_playing = false;
|
|
||||||
delete [] _playoutBuffer;
|
|
||||||
_playoutBuffer = NULL;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!_ptrThreadPlay->Start())
|
if (!_ptrThreadPlay->Start())
|
||||||
{
|
{
|
||||||
WEBRTC_TRACE(kTraceCritical, kTraceAudioDevice, _id,
|
WEBRTC_TRACE(kTraceCritical, kTraceAudioDevice, _id,
|
||||||
" failed to start the play audio thread");
|
" failed to start the play audio thread");
|
||||||
_playing = false;
|
_playing = false;
|
||||||
delete _ptrThreadPlay;
|
_ptrThreadPlay.reset();
|
||||||
_ptrThreadPlay = NULL;
|
|
||||||
delete [] _playoutBuffer;
|
delete [] _playoutBuffer;
|
||||||
_playoutBuffer = NULL;
|
_playoutBuffer = NULL;
|
||||||
return -1;
|
return -1;
|
||||||
@@ -1614,15 +1568,10 @@ int32_t AudioDeviceLinuxALSA::StopPlayout()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// stop playout thread first
|
// stop playout thread first
|
||||||
if (_ptrThreadPlay && !_ptrThreadPlay->Stop())
|
if (_ptrThreadPlay)
|
||||||
{
|
{
|
||||||
WEBRTC_TRACE(kTraceError, kTraceAudioDevice, _id,
|
_ptrThreadPlay->Stop();
|
||||||
" failed to stop the play audio thread");
|
_ptrThreadPlay.reset();
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
delete _ptrThreadPlay;
|
|
||||||
_ptrThreadPlay = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CriticalSectionScoped lock(&_critSect);
|
CriticalSectionScoped lock(&_critSect);
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
#include "webrtc/modules/audio_device/audio_device_generic.h"
|
#include "webrtc/modules/audio_device/audio_device_generic.h"
|
||||||
#include "webrtc/modules/audio_device/linux/audio_mixer_manager_alsa_linux.h"
|
#include "webrtc/modules/audio_device/linux/audio_mixer_manager_alsa_linux.h"
|
||||||
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
||||||
|
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
||||||
|
|
||||||
#if defined(USE_X11)
|
#if defined(USE_X11)
|
||||||
#include <X11/Xlib.h>
|
#include <X11/Xlib.h>
|
||||||
@@ -26,7 +27,6 @@
|
|||||||
namespace webrtc
|
namespace webrtc
|
||||||
{
|
{
|
||||||
class EventWrapper;
|
class EventWrapper;
|
||||||
class ThreadWrapper;
|
|
||||||
|
|
||||||
class AudioDeviceLinuxALSA : public AudioDeviceGeneric
|
class AudioDeviceLinuxALSA : public AudioDeviceGeneric
|
||||||
{
|
{
|
||||||
@@ -185,8 +185,8 @@ private:
|
|||||||
|
|
||||||
CriticalSectionWrapper& _critSect;
|
CriticalSectionWrapper& _critSect;
|
||||||
|
|
||||||
ThreadWrapper* _ptrThreadRec;
|
rtc::scoped_ptr<ThreadWrapper> _ptrThreadRec;
|
||||||
ThreadWrapper* _ptrThreadPlay;
|
rtc::scoped_ptr<ThreadWrapper> _ptrThreadPlay;
|
||||||
|
|
||||||
int32_t _id;
|
int32_t _id;
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,6 @@
|
|||||||
#include "webrtc/modules/audio_device/linux/audio_device_pulse_linux.h"
|
#include "webrtc/modules/audio_device/linux/audio_device_pulse_linux.h"
|
||||||
|
|
||||||
#include "webrtc/system_wrappers/interface/event_wrapper.h"
|
#include "webrtc/system_wrappers/interface/event_wrapper.h"
|
||||||
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
|
||||||
#include "webrtc/system_wrappers/interface/trace.h"
|
#include "webrtc/system_wrappers/interface/trace.h"
|
||||||
|
|
||||||
webrtc_adm_linux_pulse::PulseAudioSymbolTable PaSymbolTable;
|
webrtc_adm_linux_pulse::PulseAudioSymbolTable PaSymbolTable;
|
||||||
@@ -40,8 +39,6 @@ AudioDeviceLinuxPulse::AudioDeviceLinuxPulse(const int32_t id) :
|
|||||||
_timeEventPlay(*EventWrapper::Create()),
|
_timeEventPlay(*EventWrapper::Create()),
|
||||||
_recStartEvent(*EventWrapper::Create()),
|
_recStartEvent(*EventWrapper::Create()),
|
||||||
_playStartEvent(*EventWrapper::Create()),
|
_playStartEvent(*EventWrapper::Create()),
|
||||||
_ptrThreadPlay(NULL),
|
|
||||||
_ptrThreadRec(NULL),
|
|
||||||
_id(id),
|
_id(id),
|
||||||
_mixerManager(id),
|
_mixerManager(id),
|
||||||
_inputDeviceIndex(0),
|
_inputDeviceIndex(0),
|
||||||
@@ -212,20 +209,12 @@ int32_t AudioDeviceLinuxPulse::Init()
|
|||||||
const char* threadName = "webrtc_audio_module_rec_thread";
|
const char* threadName = "webrtc_audio_module_rec_thread";
|
||||||
_ptrThreadRec = ThreadWrapper::CreateThread(RecThreadFunc, this,
|
_ptrThreadRec = ThreadWrapper::CreateThread(RecThreadFunc, this,
|
||||||
kRealtimePriority, threadName);
|
kRealtimePriority, threadName);
|
||||||
if (_ptrThreadRec == NULL)
|
|
||||||
{
|
|
||||||
WEBRTC_TRACE(kTraceCritical, kTraceAudioDevice, _id,
|
|
||||||
" failed to create the rec audio thread");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!_ptrThreadRec->Start())
|
if (!_ptrThreadRec->Start())
|
||||||
{
|
{
|
||||||
WEBRTC_TRACE(kTraceCritical, kTraceAudioDevice, _id,
|
WEBRTC_TRACE(kTraceCritical, kTraceAudioDevice, _id,
|
||||||
" failed to start the rec audio thread");
|
" failed to start the rec audio thread");
|
||||||
|
|
||||||
delete _ptrThreadRec;
|
_ptrThreadRec.reset();
|
||||||
_ptrThreadRec = NULL;
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -233,20 +222,12 @@ int32_t AudioDeviceLinuxPulse::Init()
|
|||||||
threadName = "webrtc_audio_module_play_thread";
|
threadName = "webrtc_audio_module_play_thread";
|
||||||
_ptrThreadPlay = ThreadWrapper::CreateThread(PlayThreadFunc, this,
|
_ptrThreadPlay = ThreadWrapper::CreateThread(PlayThreadFunc, this,
|
||||||
kRealtimePriority, threadName);
|
kRealtimePriority, threadName);
|
||||||
if (_ptrThreadPlay == NULL)
|
|
||||||
{
|
|
||||||
WEBRTC_TRACE(kTraceCritical, kTraceAudioDevice, _id,
|
|
||||||
" failed to create the play audio thread");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!_ptrThreadPlay->Start())
|
if (!_ptrThreadPlay->Start())
|
||||||
{
|
{
|
||||||
WEBRTC_TRACE(kTraceCritical, kTraceAudioDevice, _id,
|
WEBRTC_TRACE(kTraceCritical, kTraceAudioDevice, _id,
|
||||||
" failed to start the play audio thread");
|
" failed to start the play audio thread");
|
||||||
|
|
||||||
delete _ptrThreadPlay;
|
_ptrThreadPlay.reset();
|
||||||
_ptrThreadPlay = NULL;
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -270,19 +251,12 @@ int32_t AudioDeviceLinuxPulse::Terminate()
|
|||||||
// RECORDING
|
// RECORDING
|
||||||
if (_ptrThreadRec)
|
if (_ptrThreadRec)
|
||||||
{
|
{
|
||||||
ThreadWrapper* tmpThread = _ptrThreadRec;
|
ThreadWrapper* tmpThread = _ptrThreadRec.release();
|
||||||
_ptrThreadRec = NULL;
|
|
||||||
UnLock();
|
UnLock();
|
||||||
|
|
||||||
_timeEventRec.Set();
|
_timeEventRec.Set();
|
||||||
if (tmpThread->Stop())
|
tmpThread->Stop();
|
||||||
{
|
|
||||||
delete tmpThread;
|
delete tmpThread;
|
||||||
} else
|
|
||||||
{
|
|
||||||
WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
|
|
||||||
" failed to close down the rec audio thread");
|
|
||||||
}
|
|
||||||
// Lock again since we need to protect _ptrThreadPlay.
|
// Lock again since we need to protect _ptrThreadPlay.
|
||||||
Lock();
|
Lock();
|
||||||
}
|
}
|
||||||
@@ -290,19 +264,12 @@ int32_t AudioDeviceLinuxPulse::Terminate()
|
|||||||
// PLAYOUT
|
// PLAYOUT
|
||||||
if (_ptrThreadPlay)
|
if (_ptrThreadPlay)
|
||||||
{
|
{
|
||||||
ThreadWrapper* tmpThread = _ptrThreadPlay;
|
ThreadWrapper* tmpThread = _ptrThreadPlay.release();
|
||||||
_ptrThreadPlay = NULL;
|
|
||||||
_critSect.Leave();
|
_critSect.Leave();
|
||||||
|
|
||||||
_timeEventPlay.Set();
|
_timeEventPlay.Set();
|
||||||
if (tmpThread->Stop())
|
tmpThread->Stop();
|
||||||
{
|
|
||||||
delete tmpThread;
|
delete tmpThread;
|
||||||
} else
|
|
||||||
{
|
|
||||||
WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
|
|
||||||
" failed to close down the play audio thread");
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
UnLock();
|
UnLock();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
#include "webrtc/modules/audio_device/audio_device_generic.h"
|
#include "webrtc/modules/audio_device/audio_device_generic.h"
|
||||||
#include "webrtc/modules/audio_device/linux/audio_mixer_manager_pulse_linux.h"
|
#include "webrtc/modules/audio_device/linux/audio_mixer_manager_pulse_linux.h"
|
||||||
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
||||||
|
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
||||||
|
|
||||||
#include <X11/Xlib.h>
|
#include <X11/Xlib.h>
|
||||||
#include <pulse/pulseaudio.h>
|
#include <pulse/pulseaudio.h>
|
||||||
@@ -87,7 +88,6 @@ const uint32_t WEBRTC_PA_CAPTURE_BUFFER_LATENCY_ADJUSTMENT = 0;
|
|||||||
namespace webrtc
|
namespace webrtc
|
||||||
{
|
{
|
||||||
class EventWrapper;
|
class EventWrapper;
|
||||||
class ThreadWrapper;
|
|
||||||
|
|
||||||
class AudioDeviceLinuxPulse: public AudioDeviceGeneric
|
class AudioDeviceLinuxPulse: public AudioDeviceGeneric
|
||||||
{
|
{
|
||||||
@@ -288,8 +288,8 @@ private:
|
|||||||
EventWrapper& _recStartEvent;
|
EventWrapper& _recStartEvent;
|
||||||
EventWrapper& _playStartEvent;
|
EventWrapper& _playStartEvent;
|
||||||
|
|
||||||
ThreadWrapper* _ptrThreadPlay;
|
rtc::scoped_ptr<ThreadWrapper> _ptrThreadPlay;
|
||||||
ThreadWrapper* _ptrThreadRec;
|
rtc::scoped_ptr<ThreadWrapper> _ptrThreadRec;
|
||||||
int32_t _id;
|
int32_t _id;
|
||||||
|
|
||||||
AudioMixerManagerLinuxPulse _mixerManager;
|
AudioMixerManagerLinuxPulse _mixerManager;
|
||||||
|
|||||||
@@ -1754,9 +1754,9 @@ int32_t AudioDeviceMac::StartRecording()
|
|||||||
}
|
}
|
||||||
|
|
||||||
DCHECK(!capture_worker_thread_.get());
|
DCHECK(!capture_worker_thread_.get());
|
||||||
capture_worker_thread_.reset(
|
capture_worker_thread_ =
|
||||||
ThreadWrapper::CreateThread(RunCapture, this, kRealtimePriority,
|
ThreadWrapper::CreateThread(RunCapture, this, kRealtimePriority,
|
||||||
"CaptureWorkerThread"));
|
"CaptureWorkerThread");
|
||||||
DCHECK(capture_worker_thread_.get());
|
DCHECK(capture_worker_thread_.get());
|
||||||
capture_worker_thread_->Start();
|
capture_worker_thread_->Start();
|
||||||
|
|
||||||
@@ -1909,9 +1909,9 @@ int32_t AudioDeviceMac::StartPlayout()
|
|||||||
}
|
}
|
||||||
|
|
||||||
DCHECK(!render_worker_thread_.get());
|
DCHECK(!render_worker_thread_.get());
|
||||||
render_worker_thread_.reset(
|
render_worker_thread_ =
|
||||||
ThreadWrapper::CreateThread(RunRender, this, kRealtimePriority,
|
ThreadWrapper::CreateThread(RunRender, this, kRealtimePriority,
|
||||||
"RenderWorkerThread"));
|
"RenderWorkerThread");
|
||||||
render_worker_thread_->Start();
|
render_worker_thread_->Start();
|
||||||
|
|
||||||
if (_twoDevices || !_recording)
|
if (_twoDevices || !_recording)
|
||||||
|
|||||||
@@ -13,7 +13,6 @@
|
|||||||
#include "webrtc/modules/audio_device/win/audio_device_wave_win.h"
|
#include "webrtc/modules/audio_device/win/audio_device_wave_win.h"
|
||||||
|
|
||||||
#include "webrtc/system_wrappers/interface/event_wrapper.h"
|
#include "webrtc/system_wrappers/interface/event_wrapper.h"
|
||||||
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
|
||||||
#include "webrtc/system_wrappers/interface/trace.h"
|
#include "webrtc/system_wrappers/interface/trace.h"
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
@@ -56,7 +55,6 @@ AudioDeviceWindowsWave::AudioDeviceWindowsWave(const int32_t id) :
|
|||||||
_hSetCaptureVolumeThread(NULL),
|
_hSetCaptureVolumeThread(NULL),
|
||||||
_hShutdownSetVolumeEvent(NULL),
|
_hShutdownSetVolumeEvent(NULL),
|
||||||
_hSetCaptureVolumeEvent(NULL),
|
_hSetCaptureVolumeEvent(NULL),
|
||||||
_ptrThread(NULL),
|
|
||||||
_critSectCb(*CriticalSectionWrapper::CreateCriticalSection()),
|
_critSectCb(*CriticalSectionWrapper::CreateCriticalSection()),
|
||||||
_id(id),
|
_id(id),
|
||||||
_mixerManager(id),
|
_mixerManager(id),
|
||||||
@@ -234,19 +232,11 @@ int32_t AudioDeviceWindowsWave::Init()
|
|||||||
this,
|
this,
|
||||||
kRealtimePriority,
|
kRealtimePriority,
|
||||||
threadName);
|
threadName);
|
||||||
if (_ptrThread == NULL)
|
|
||||||
{
|
|
||||||
WEBRTC_TRACE(kTraceCritical, kTraceAudioDevice, _id,
|
|
||||||
"failed to create the audio thread");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!_ptrThread->Start())
|
if (!_ptrThread->Start())
|
||||||
{
|
{
|
||||||
WEBRTC_TRACE(kTraceCritical, kTraceAudioDevice, _id,
|
WEBRTC_TRACE(kTraceCritical, kTraceAudioDevice, _id,
|
||||||
"failed to start the audio thread");
|
"failed to start the audio thread");
|
||||||
delete _ptrThread;
|
_ptrThread.reset();
|
||||||
_ptrThread = NULL;
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -255,16 +245,8 @@ int32_t AudioDeviceWindowsWave::Init()
|
|||||||
{
|
{
|
||||||
WEBRTC_TRACE(kTraceCritical, kTraceAudioDevice, _id,
|
WEBRTC_TRACE(kTraceCritical, kTraceAudioDevice, _id,
|
||||||
"failed to start the timer event");
|
"failed to start the timer event");
|
||||||
if (_ptrThread->Stop())
|
_ptrThread->Stop();
|
||||||
{
|
_ptrThread.reset();
|
||||||
delete _ptrThread;
|
|
||||||
_ptrThread = NULL;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
|
|
||||||
"unable to stop the activated thread");
|
|
||||||
}
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id,
|
WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, _id,
|
||||||
@@ -323,25 +305,15 @@ int32_t AudioDeviceWindowsWave::Terminate()
|
|||||||
|
|
||||||
if (_ptrThread)
|
if (_ptrThread)
|
||||||
{
|
{
|
||||||
ThreadWrapper* tmpThread = _ptrThread;
|
ThreadWrapper* tmpThread = _ptrThread.release();
|
||||||
_ptrThread = NULL;
|
|
||||||
_critSect.Leave();
|
_critSect.Leave();
|
||||||
|
|
||||||
_timeEvent.Set();
|
_timeEvent.Set();
|
||||||
|
|
||||||
if (tmpThread->Stop())
|
tmpThread->Stop();
|
||||||
{
|
|
||||||
delete tmpThread;
|
delete tmpThread;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
_critSect.Leave();
|
|
||||||
WEBRTC_TRACE(kTraceWarning, kTraceAudioDevice, _id,
|
|
||||||
"failed to close down the audio thread");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
_critSect.Leave();
|
_critSect.Leave();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,12 +13,12 @@
|
|||||||
|
|
||||||
#include "webrtc/modules/audio_device/audio_device_generic.h"
|
#include "webrtc/modules/audio_device/audio_device_generic.h"
|
||||||
#include "webrtc/modules/audio_device/win/audio_mixer_manager_win.h"
|
#include "webrtc/modules/audio_device/win/audio_mixer_manager_win.h"
|
||||||
|
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
||||||
|
|
||||||
#pragma comment( lib, "winmm.lib" )
|
#pragma comment( lib, "winmm.lib" )
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
class EventWrapper;
|
class EventWrapper;
|
||||||
class ThreadWrapper;
|
|
||||||
|
|
||||||
const uint32_t TIMER_PERIOD_MS = 2;
|
const uint32_t TIMER_PERIOD_MS = 2;
|
||||||
const uint32_t REC_CHECK_TIME_PERIOD_MS = 4;
|
const uint32_t REC_CHECK_TIME_PERIOD_MS = 4;
|
||||||
@@ -221,7 +221,7 @@ private:
|
|||||||
HANDLE _hShutdownSetVolumeEvent;
|
HANDLE _hShutdownSetVolumeEvent;
|
||||||
HANDLE _hSetCaptureVolumeEvent;
|
HANDLE _hSetCaptureVolumeEvent;
|
||||||
|
|
||||||
ThreadWrapper* _ptrThread;
|
rtc::scoped_ptr<ThreadWrapper> _ptrThread;
|
||||||
|
|
||||||
CriticalSectionWrapper& _critSectCb;
|
CriticalSectionWrapper& _critSectCb;
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,6 @@
|
|||||||
|
|
||||||
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
||||||
#include "webrtc/system_wrappers/interface/event_wrapper.h"
|
#include "webrtc/system_wrappers/interface/event_wrapper.h"
|
||||||
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
|
||||||
#include "webrtc/system_wrappers/interface/tick_util.h"
|
#include "webrtc/system_wrappers/interface/tick_util.h"
|
||||||
|
|
||||||
using namespace webrtc;
|
using namespace webrtc;
|
||||||
@@ -891,22 +890,14 @@ MatlabEngine::MatlabEngine()
|
|||||||
:
|
:
|
||||||
_critSect(CriticalSectionWrapper::CreateCriticalSection()),
|
_critSect(CriticalSectionWrapper::CreateCriticalSection()),
|
||||||
_eventPtr(NULL),
|
_eventPtr(NULL),
|
||||||
_plotThread(NULL),
|
|
||||||
_running(false),
|
_running(false),
|
||||||
_numPlots(0)
|
_numPlots(0)
|
||||||
{
|
{
|
||||||
_eventPtr = EventWrapper::Create();
|
_eventPtr = EventWrapper::Create();
|
||||||
|
|
||||||
_plotThread = ThreadWrapper::CreateThread(MatlabEngine::PlotThread, this, kLowPriority, "MatlabPlot");
|
_plotThread = ThreadWrapper::CreateThread(MatlabEngine::PlotThread, this,
|
||||||
|
kLowPriority, "MatlabPlot");
|
||||||
if (_plotThread == NULL)
|
|
||||||
{
|
|
||||||
throw "Unable to start MatlabEngine thread";
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
_running = true;
|
_running = true;
|
||||||
|
|
||||||
_plotThread->Start();
|
_plotThread->Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -919,18 +910,11 @@ MatlabEngine::~MatlabEngine()
|
|||||||
_running = false;
|
_running = false;
|
||||||
_eventPtr->Set();
|
_eventPtr->Set();
|
||||||
|
|
||||||
while (!_plotThread->Stop())
|
_plotThread->Stop();
|
||||||
{
|
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
delete _plotThread;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_plots.clear();
|
_plots.clear();
|
||||||
|
|
||||||
_plotThread = NULL;
|
|
||||||
|
|
||||||
delete _eventPtr;
|
delete _eventPtr;
|
||||||
_eventPtr = NULL;
|
_eventPtr = NULL;
|
||||||
|
|
||||||
|
|||||||
@@ -16,11 +16,11 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "webrtc/typedefs.h"
|
#include "webrtc/typedefs.h"
|
||||||
|
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
class CriticalSectionWrapper;
|
class CriticalSectionWrapper;
|
||||||
class EventWrapper;
|
class EventWrapper;
|
||||||
class ThreadWrapper;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//#define PLOT_TESTING
|
//#define PLOT_TESTING
|
||||||
@@ -160,7 +160,7 @@ private:
|
|||||||
std::vector<MatlabPlot *> _plots;
|
std::vector<MatlabPlot *> _plots;
|
||||||
webrtc::CriticalSectionWrapper *_critSect;
|
webrtc::CriticalSectionWrapper *_critSect;
|
||||||
webrtc::EventWrapper *_eventPtr;
|
webrtc::EventWrapper *_eventPtr;
|
||||||
webrtc::ThreadWrapper* _plotThread;
|
rtc::scoped_ptr<webrtc::ThreadWrapper> _plotThread;
|
||||||
bool _running;
|
bool _running;
|
||||||
int _numPlots;
|
int _numPlots;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -17,7 +17,6 @@
|
|||||||
#include "webrtc/modules/rtp_rtcp/test/BWEStandAlone/TestSenderReceiver.h"
|
#include "webrtc/modules/rtp_rtcp/test/BWEStandAlone/TestSenderReceiver.h"
|
||||||
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
||||||
#include "webrtc/system_wrappers/interface/event_wrapper.h"
|
#include "webrtc/system_wrappers/interface/event_wrapper.h"
|
||||||
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
|
||||||
#include "webrtc/system_wrappers/interface/tick_util.h"
|
#include "webrtc/system_wrappers/interface/tick_util.h"
|
||||||
|
|
||||||
|
|
||||||
@@ -37,7 +36,6 @@ TestLoadGenerator::TestLoadGenerator(TestSenderReceiver *sender, int32_t rtpSamp
|
|||||||
:
|
:
|
||||||
_critSect(CriticalSectionWrapper::CreateCriticalSection()),
|
_critSect(CriticalSectionWrapper::CreateCriticalSection()),
|
||||||
_eventPtr(NULL),
|
_eventPtr(NULL),
|
||||||
_genThread(NULL),
|
|
||||||
_bitrateKbps(0),
|
_bitrateKbps(0),
|
||||||
_sender(sender),
|
_sender(sender),
|
||||||
_running(false),
|
_running(false),
|
||||||
@@ -78,13 +76,8 @@ int32_t TestLoadGenerator::Start (const char *threadName)
|
|||||||
|
|
||||||
_eventPtr = EventWrapper::Create();
|
_eventPtr = EventWrapper::Create();
|
||||||
|
|
||||||
_genThread = ThreadWrapper::CreateThread(SenderThreadFunction, this, kRealtimePriority, threadName);
|
_genThread = ThreadWrapper::CreateThread(SenderThreadFunction, this,
|
||||||
if (_genThread == NULL)
|
kRealtimePriority, threadName);
|
||||||
{
|
|
||||||
throw "Unable to start generator thread";
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
_running = true;
|
_running = true;
|
||||||
|
|
||||||
_genThread->Start();
|
_genThread->Start();
|
||||||
@@ -102,20 +95,13 @@ int32_t TestLoadGenerator::Stop ()
|
|||||||
_running = false;
|
_running = false;
|
||||||
_eventPtr->Set();
|
_eventPtr->Set();
|
||||||
|
|
||||||
while (!_genThread->Stop())
|
_genThread->Stop();
|
||||||
{
|
_genThread.reset();
|
||||||
_critSect.Leave();
|
|
||||||
_critSect.Enter();
|
|
||||||
}
|
|
||||||
|
|
||||||
delete _genThread;
|
|
||||||
_genThread = NULL;
|
|
||||||
|
|
||||||
delete _eventPtr;
|
delete _eventPtr;
|
||||||
_eventPtr = NULL;
|
_eventPtr = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
_genThread = NULL;
|
|
||||||
_critSect.Leave();
|
_critSect.Leave();
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,13 +14,13 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include "webrtc/modules/interface/module_common_types.h"
|
#include "webrtc/modules/interface/module_common_types.h"
|
||||||
|
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
||||||
#include "webrtc/typedefs.h"
|
#include "webrtc/typedefs.h"
|
||||||
|
|
||||||
class TestSenderReceiver;
|
class TestSenderReceiver;
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
class CriticalSectionWrapper;
|
class CriticalSectionWrapper;
|
||||||
class EventWrapper;
|
class EventWrapper;
|
||||||
class ThreadWrapper;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class TestLoadGenerator
|
class TestLoadGenerator
|
||||||
@@ -44,7 +44,7 @@ protected:
|
|||||||
|
|
||||||
webrtc::CriticalSectionWrapper* _critSect;
|
webrtc::CriticalSectionWrapper* _critSect;
|
||||||
webrtc::EventWrapper *_eventPtr;
|
webrtc::EventWrapper *_eventPtr;
|
||||||
webrtc::ThreadWrapper* _genThread;
|
rtc::scoped_ptr<webrtc::ThreadWrapper> _genThread;
|
||||||
int32_t _bitrateKbps;
|
int32_t _bitrateKbps;
|
||||||
TestSenderReceiver *_sender;
|
TestSenderReceiver *_sender;
|
||||||
bool _running;
|
bool _running;
|
||||||
|
|||||||
@@ -17,7 +17,6 @@
|
|||||||
#include "webrtc/modules/rtp_rtcp/test/BWEStandAlone/TestLoadGenerator.h"
|
#include "webrtc/modules/rtp_rtcp/test/BWEStandAlone/TestLoadGenerator.h"
|
||||||
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
||||||
#include "webrtc/system_wrappers/interface/event_wrapper.h"
|
#include "webrtc/system_wrappers/interface/event_wrapper.h"
|
||||||
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
|
||||||
#include "webrtc/system_wrappers/interface/tick_util.h"
|
#include "webrtc/system_wrappers/interface/tick_util.h"
|
||||||
#include "webrtc/test/channel_transport/udp_transport.h"
|
#include "webrtc/test/channel_transport/udp_transport.h"
|
||||||
|
|
||||||
@@ -40,7 +39,6 @@ TestSenderReceiver::TestSenderReceiver (void)
|
|||||||
:
|
:
|
||||||
_critSect(CriticalSectionWrapper::CreateCriticalSection()),
|
_critSect(CriticalSectionWrapper::CreateCriticalSection()),
|
||||||
_eventPtr(NULL),
|
_eventPtr(NULL),
|
||||||
_procThread(NULL),
|
|
||||||
_running(false),
|
_running(false),
|
||||||
_payloadType(0),
|
_payloadType(0),
|
||||||
_loadGenerator(NULL),
|
_loadGenerator(NULL),
|
||||||
@@ -165,12 +163,8 @@ int32_t TestSenderReceiver::Start()
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
_procThread = ThreadWrapper::CreateThread(ProcThreadFunction, this, kRealtimePriority, "TestSenderReceiver");
|
_procThread = ThreadWrapper::CreateThread(ProcThreadFunction, this,
|
||||||
if (_procThread == NULL)
|
kRealtimePriority, "TestSenderReceiver");
|
||||||
{
|
|
||||||
throw "Unable to create process thread";
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
_running = true;
|
_running = true;
|
||||||
|
|
||||||
@@ -201,18 +195,12 @@ int32_t TestSenderReceiver::Stop ()
|
|||||||
_running = false;
|
_running = false;
|
||||||
_eventPtr->Set();
|
_eventPtr->Set();
|
||||||
|
|
||||||
while (!_procThread->Stop())
|
_procThread->Stop();
|
||||||
{
|
_procThread.reset();
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
delete _eventPtr;
|
delete _eventPtr;
|
||||||
|
|
||||||
delete _procThread;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_procThread = NULL;
|
|
||||||
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
#include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp.h"
|
#include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp.h"
|
||||||
#include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp_defines.h"
|
#include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp_defines.h"
|
||||||
|
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
||||||
#include "webrtc/test/channel_transport/udp_transport.h"
|
#include "webrtc/test/channel_transport/udp_transport.h"
|
||||||
#include "webrtc/typedefs.h"
|
#include "webrtc/typedefs.h"
|
||||||
|
|
||||||
@@ -20,7 +21,6 @@ class TestLoadGenerator;
|
|||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
class CriticalSectionWrapper;
|
class CriticalSectionWrapper;
|
||||||
class EventWrapper;
|
class EventWrapper;
|
||||||
class ThreadWrapper;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
using namespace webrtc;
|
using namespace webrtc;
|
||||||
@@ -138,7 +138,7 @@ private:
|
|||||||
UdpTransport* _transport;
|
UdpTransport* _transport;
|
||||||
webrtc::CriticalSectionWrapper* _critSect;
|
webrtc::CriticalSectionWrapper* _critSect;
|
||||||
webrtc::EventWrapper *_eventPtr;
|
webrtc::EventWrapper *_eventPtr;
|
||||||
webrtc::ThreadWrapper* _procThread;
|
rtc::scoped_ptr<webrtc::ThreadWrapper> _procThread;
|
||||||
bool _running;
|
bool _running;
|
||||||
int8_t _payloadType;
|
int8_t _payloadType;
|
||||||
TestLoadGenerator* _loadGenerator;
|
TestLoadGenerator* _loadGenerator;
|
||||||
|
|||||||
@@ -69,8 +69,8 @@ void ProcessThreadImpl::Start() {
|
|||||||
for (ModuleCallback& m : modules_)
|
for (ModuleCallback& m : modules_)
|
||||||
m.module->ProcessThreadAttached(this);
|
m.module->ProcessThreadAttached(this);
|
||||||
|
|
||||||
thread_.reset(ThreadWrapper::CreateThread(
|
thread_ = ThreadWrapper::CreateThread(
|
||||||
&ProcessThreadImpl::Run, this, kNormalPriority, "ProcessThread"));
|
&ProcessThreadImpl::Run, this, kNormalPriority, "ProcessThread");
|
||||||
CHECK(thread_->Start());
|
CHECK(thread_->Start());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,6 @@
|
|||||||
#include "webrtc/modules/video_capture/linux/video_capture_linux.h"
|
#include "webrtc/modules/video_capture/linux/video_capture_linux.h"
|
||||||
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
||||||
#include "webrtc/system_wrappers/interface/ref_count.h"
|
#include "webrtc/system_wrappers/interface/ref_count.h"
|
||||||
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
|
||||||
#include "webrtc/system_wrappers/interface/trace.h"
|
#include "webrtc/system_wrappers/interface/trace.h"
|
||||||
|
|
||||||
namespace webrtc
|
namespace webrtc
|
||||||
@@ -48,7 +47,6 @@ VideoCaptureModule* VideoCaptureImpl::Create(const int32_t id,
|
|||||||
|
|
||||||
VideoCaptureModuleV4L2::VideoCaptureModuleV4L2(const int32_t id)
|
VideoCaptureModuleV4L2::VideoCaptureModuleV4L2(const int32_t id)
|
||||||
: VideoCaptureImpl(id),
|
: VideoCaptureImpl(id),
|
||||||
_captureThread(NULL),
|
|
||||||
_captureCritSect(CriticalSectionWrapper::CreateCriticalSection()),
|
_captureCritSect(CriticalSectionWrapper::CreateCriticalSection()),
|
||||||
_deviceId(-1),
|
_deviceId(-1),
|
||||||
_deviceFd(-1),
|
_deviceFd(-1),
|
||||||
@@ -305,23 +303,14 @@ int32_t VideoCaptureModuleV4L2::StopCapture()
|
|||||||
{
|
{
|
||||||
if (_captureThread) {
|
if (_captureThread) {
|
||||||
// Make sure the capture thread stop stop using the critsect.
|
// Make sure the capture thread stop stop using the critsect.
|
||||||
if (_captureThread->Stop()) {
|
_captureThread->Stop();
|
||||||
delete _captureThread;
|
_captureThread.reset();
|
||||||
_captureThread = NULL;
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
// Couldn't stop the thread, leak instead of crash.
|
|
||||||
WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, -1,
|
|
||||||
"%s: could not stop capture thread", __FUNCTION__);
|
|
||||||
assert(false);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CriticalSectionScoped cs(_captureCritSect);
|
CriticalSectionScoped cs(_captureCritSect);
|
||||||
if (_captureStarted)
|
if (_captureStarted)
|
||||||
{
|
{
|
||||||
_captureStarted = false;
|
_captureStarted = false;
|
||||||
_captureThread = NULL;
|
|
||||||
|
|
||||||
DeAllocateVideoBuffers();
|
DeAllocateVideoBuffers();
|
||||||
close(_deviceFd);
|
close(_deviceFd);
|
||||||
|
|||||||
@@ -13,11 +13,11 @@
|
|||||||
|
|
||||||
#include "webrtc/common_types.h"
|
#include "webrtc/common_types.h"
|
||||||
#include "webrtc/modules/video_capture/video_capture_impl.h"
|
#include "webrtc/modules/video_capture/video_capture_impl.h"
|
||||||
|
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
||||||
|
|
||||||
namespace webrtc
|
namespace webrtc
|
||||||
{
|
{
|
||||||
class CriticalSectionWrapper;
|
class CriticalSectionWrapper;
|
||||||
class ThreadWrapper;
|
|
||||||
namespace videocapturemodule
|
namespace videocapturemodule
|
||||||
{
|
{
|
||||||
class VideoCaptureModuleV4L2: public VideoCaptureImpl
|
class VideoCaptureModuleV4L2: public VideoCaptureImpl
|
||||||
@@ -39,7 +39,7 @@ private:
|
|||||||
bool AllocateVideoBuffers();
|
bool AllocateVideoBuffers();
|
||||||
bool DeAllocateVideoBuffers();
|
bool DeAllocateVideoBuffers();
|
||||||
|
|
||||||
ThreadWrapper* _captureThread;
|
rtc::scoped_ptr<ThreadWrapper> _captureThread;
|
||||||
CriticalSectionWrapper* _captureCritSect;
|
CriticalSectionWrapper* _captureCritSect;
|
||||||
|
|
||||||
int32_t _deviceId;
|
int32_t _deviceId;
|
||||||
|
|||||||
@@ -13,7 +13,6 @@
|
|||||||
#include "webrtc/modules/video_render/video_render_internal.h"
|
#include "webrtc/modules/video_render/video_render_internal.h"
|
||||||
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
||||||
#include "webrtc/system_wrappers/interface/event_wrapper.h"
|
#include "webrtc/system_wrappers/interface/event_wrapper.h"
|
||||||
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
|
||||||
#include "webrtc/system_wrappers/interface/tick_util.h"
|
#include "webrtc/system_wrappers/interface/tick_util.h"
|
||||||
|
|
||||||
#ifdef ANDROID
|
#ifdef ANDROID
|
||||||
@@ -49,8 +48,7 @@ VideoRenderAndroid::VideoRenderAndroid(
|
|||||||
_javaShutdownEvent(*EventWrapper::Create()),
|
_javaShutdownEvent(*EventWrapper::Create()),
|
||||||
_javaRenderEvent(*EventWrapper::Create()),
|
_javaRenderEvent(*EventWrapper::Create()),
|
||||||
_lastJavaRenderEvent(0),
|
_lastJavaRenderEvent(0),
|
||||||
_javaRenderJniEnv(NULL),
|
_javaRenderJniEnv(NULL) {
|
||||||
_javaRenderThread(NULL) {
|
|
||||||
}
|
}
|
||||||
|
|
||||||
VideoRenderAndroid::~VideoRenderAndroid() {
|
VideoRenderAndroid::~VideoRenderAndroid() {
|
||||||
@@ -146,11 +144,6 @@ int32_t VideoRenderAndroid::StartRender() {
|
|||||||
_javaRenderThread = ThreadWrapper::CreateThread(JavaRenderThreadFun, this,
|
_javaRenderThread = ThreadWrapper::CreateThread(JavaRenderThreadFun, this,
|
||||||
kRealtimePriority,
|
kRealtimePriority,
|
||||||
"AndroidRenderThread");
|
"AndroidRenderThread");
|
||||||
if (!_javaRenderThread) {
|
|
||||||
WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, _id,
|
|
||||||
"%s: No thread", __FUNCTION__);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_javaRenderThread->Start())
|
if (_javaRenderThread->Start())
|
||||||
WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id,
|
WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id,
|
||||||
@@ -177,16 +170,9 @@ int32_t VideoRenderAndroid::StopRender() {
|
|||||||
|
|
||||||
_javaShutdownEvent.Wait(3000);
|
_javaShutdownEvent.Wait(3000);
|
||||||
CriticalSectionScoped cs(&_critSect);
|
CriticalSectionScoped cs(&_critSect);
|
||||||
if (_javaRenderThread->Stop()) {
|
_javaRenderThread->Stop();
|
||||||
delete _javaRenderThread;
|
_javaRenderThread.reset();
|
||||||
_javaRenderThread = NULL;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
assert(false);
|
|
||||||
WEBRTC_TRACE(kTraceWarning, kTraceVideoRenderer, _id,
|
|
||||||
"%s: Not able to stop thread, leaking", __FUNCTION__);
|
|
||||||
_javaRenderThread = NULL;
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
#include "webrtc/modules/video_render/i_video_render.h"
|
#include "webrtc/modules/video_render/i_video_render.h"
|
||||||
|
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
||||||
|
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
@@ -24,7 +25,6 @@ namespace webrtc {
|
|||||||
|
|
||||||
class CriticalSectionWrapper;
|
class CriticalSectionWrapper;
|
||||||
class EventWrapper;
|
class EventWrapper;
|
||||||
class ThreadWrapper;
|
|
||||||
|
|
||||||
// The object a module user uses to send new frames to the java renderer
|
// The object a module user uses to send new frames to the java renderer
|
||||||
// Base class for android render streams.
|
// Base class for android render streams.
|
||||||
@@ -144,7 +144,7 @@ class VideoRenderAndroid: IVideoRender {
|
|||||||
EventWrapper& _javaRenderEvent;
|
EventWrapper& _javaRenderEvent;
|
||||||
int64_t _lastJavaRenderEvent;
|
int64_t _lastJavaRenderEvent;
|
||||||
JNIEnv* _javaRenderJniEnv; // JNIEnv for the java render thread.
|
JNIEnv* _javaRenderJniEnv; // JNIEnv for the java render thread.
|
||||||
ThreadWrapper* _javaRenderThread;
|
rtc::scoped_ptr<ThreadWrapper> _javaRenderThread;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace webrtc
|
} // namespace webrtc
|
||||||
|
|||||||
@@ -215,11 +215,10 @@ int32_t IncomingVideoStream::Stop() {
|
|||||||
ThreadWrapper* thread = NULL;
|
ThreadWrapper* thread = NULL;
|
||||||
{
|
{
|
||||||
CriticalSectionScoped cs_thread(&thread_critsect_);
|
CriticalSectionScoped cs_thread(&thread_critsect_);
|
||||||
if (incoming_render_thread_ != NULL) {
|
if (incoming_render_thread_) {
|
||||||
thread = incoming_render_thread_;
|
|
||||||
// Setting the incoming render thread to NULL marks that we're performing
|
// Setting the incoming render thread to NULL marks that we're performing
|
||||||
// a shutdown and will make IncomingVideoStreamProcess abort after wakeup.
|
// a shutdown and will make IncomingVideoStreamProcess abort after wakeup.
|
||||||
incoming_render_thread_ = NULL;
|
thread = incoming_render_thread_.release();
|
||||||
deliver_buffer_event_.StopTimer();
|
deliver_buffer_event_.StopTimer();
|
||||||
// Set the event to allow the thread to wake up and shut down without
|
// Set the event to allow the thread to wake up and shut down without
|
||||||
// waiting for a timeout.
|
// waiting for a timeout.
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ class IncomingVideoStream : public VideoRenderCallback {
|
|||||||
CriticalSectionWrapper& stream_critsect_;
|
CriticalSectionWrapper& stream_critsect_;
|
||||||
CriticalSectionWrapper& thread_critsect_;
|
CriticalSectionWrapper& thread_critsect_;
|
||||||
CriticalSectionWrapper& buffer_critsect_;
|
CriticalSectionWrapper& buffer_critsect_;
|
||||||
ThreadWrapper* incoming_render_thread_;
|
rtc::scoped_ptr<ThreadWrapper> incoming_render_thread_;
|
||||||
EventWrapper& deliver_buffer_event_;
|
EventWrapper& deliver_buffer_event_;
|
||||||
bool running_;
|
bool running_;
|
||||||
|
|
||||||
|
|||||||
@@ -17,12 +17,12 @@
|
|||||||
#include "webrtc/base/scoped_ptr.h"
|
#include "webrtc/base/scoped_ptr.h"
|
||||||
#include "webrtc/modules/video_render/ios/video_render_ios_channel.h"
|
#include "webrtc/modules/video_render/ios/video_render_ios_channel.h"
|
||||||
#include "webrtc/modules/video_render/ios/video_render_ios_view.h"
|
#include "webrtc/modules/video_render/ios/video_render_ios_view.h"
|
||||||
|
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
|
|
||||||
class CriticalSectionWrapper;
|
class CriticalSectionWrapper;
|
||||||
class EventWrapper;
|
class EventWrapper;
|
||||||
class ThreadWrapper;
|
|
||||||
|
|
||||||
class VideoRenderIosGles20 {
|
class VideoRenderIosGles20 {
|
||||||
public:
|
public:
|
||||||
@@ -64,7 +64,7 @@ class VideoRenderIosGles20 {
|
|||||||
private:
|
private:
|
||||||
rtc::scoped_ptr<CriticalSectionWrapper> gles_crit_sec_;
|
rtc::scoped_ptr<CriticalSectionWrapper> gles_crit_sec_;
|
||||||
EventWrapper* screen_update_event_;
|
EventWrapper* screen_update_event_;
|
||||||
ThreadWrapper* screen_update_thread_;
|
rtc::scoped_ptr<ThreadWrapper> screen_update_thread_;
|
||||||
|
|
||||||
VideoRenderIosView* view_;
|
VideoRenderIosView* view_;
|
||||||
Rect window_rect_;
|
Rect window_rect_;
|
||||||
|
|||||||
@@ -15,7 +15,6 @@
|
|||||||
#include "webrtc/modules/video_render/ios/video_render_ios_gles20.h"
|
#include "webrtc/modules/video_render/ios/video_render_ios_gles20.h"
|
||||||
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
||||||
#include "webrtc/system_wrappers/interface/event_wrapper.h"
|
#include "webrtc/system_wrappers/interface/event_wrapper.h"
|
||||||
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
|
||||||
|
|
||||||
using namespace webrtc;
|
using namespace webrtc;
|
||||||
|
|
||||||
@@ -24,7 +23,6 @@ VideoRenderIosGles20::VideoRenderIosGles20(VideoRenderIosView* view,
|
|||||||
int render_id)
|
int render_id)
|
||||||
: gles_crit_sec_(CriticalSectionWrapper::CreateCriticalSection()),
|
: gles_crit_sec_(CriticalSectionWrapper::CreateCriticalSection()),
|
||||||
screen_update_event_(0),
|
screen_update_event_(0),
|
||||||
screen_update_thread_(0),
|
|
||||||
view_(view),
|
view_(view),
|
||||||
window_rect_(),
|
window_rect_(),
|
||||||
window_width_(0),
|
window_width_(0),
|
||||||
@@ -42,16 +40,14 @@ VideoRenderIosGles20::VideoRenderIosGles20(VideoRenderIosView* view,
|
|||||||
|
|
||||||
VideoRenderIosGles20::~VideoRenderIosGles20() {
|
VideoRenderIosGles20::~VideoRenderIosGles20() {
|
||||||
// Signal event to exit thread, then delete it
|
// Signal event to exit thread, then delete it
|
||||||
ThreadWrapper* thread_wrapper = screen_update_thread_;
|
ThreadWrapper* thread_wrapper = screen_update_thread_.release();
|
||||||
screen_update_thread_ = NULL;
|
|
||||||
|
|
||||||
if (thread_wrapper) {
|
if (thread_wrapper) {
|
||||||
screen_update_event_->Set();
|
screen_update_event_->Set();
|
||||||
screen_update_event_->StopTimer();
|
screen_update_event_->StopTimer();
|
||||||
|
|
||||||
if (thread_wrapper->Stop()) {
|
thread_wrapper->Stop();
|
||||||
delete thread_wrapper;
|
delete thread_wrapper;
|
||||||
}
|
|
||||||
delete screen_update_event_;
|
delete screen_update_event_;
|
||||||
screen_update_event_ = NULL;
|
screen_update_event_ = NULL;
|
||||||
is_rendering_ = FALSE;
|
is_rendering_ = FALSE;
|
||||||
@@ -78,10 +74,6 @@ VideoRenderIosGles20::~VideoRenderIosGles20() {
|
|||||||
int VideoRenderIosGles20::Init() {
|
int VideoRenderIosGles20::Init() {
|
||||||
CriticalSectionScoped cs(gles_crit_sec_.get());
|
CriticalSectionScoped cs(gles_crit_sec_.get());
|
||||||
|
|
||||||
if (!screen_update_thread_) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!view_) {
|
if (!view_) {
|
||||||
view_ = [[VideoRenderIosView alloc] init];
|
view_ = [[VideoRenderIosView alloc] init];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,6 @@
|
|||||||
#include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
|
#include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
|
||||||
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
||||||
#include "webrtc/system_wrappers/interface/event_wrapper.h"
|
#include "webrtc/system_wrappers/interface/event_wrapper.h"
|
||||||
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
|
||||||
#include "webrtc/system_wrappers/interface/trace.h"
|
#include "webrtc/system_wrappers/interface/trace.h"
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
@@ -368,7 +367,6 @@ _windowRef( windowRef),
|
|||||||
_fullScreen( fullscreen),
|
_fullScreen( fullscreen),
|
||||||
_id( iId),
|
_id( iId),
|
||||||
_renderCritSec(*CriticalSectionWrapper::CreateCriticalSection()),
|
_renderCritSec(*CriticalSectionWrapper::CreateCriticalSection()),
|
||||||
_screenUpdateThread( 0),
|
|
||||||
_screenUpdateEvent( 0),
|
_screenUpdateEvent( 0),
|
||||||
_isHIViewRef( false),
|
_isHIViewRef( false),
|
||||||
_aglContext( 0),
|
_aglContext( 0),
|
||||||
@@ -485,7 +483,6 @@ _windowRef( 0),
|
|||||||
_fullScreen( fullscreen),
|
_fullScreen( fullscreen),
|
||||||
_id( iId),
|
_id( iId),
|
||||||
_renderCritSec(*CriticalSectionWrapper::CreateCriticalSection()),
|
_renderCritSec(*CriticalSectionWrapper::CreateCriticalSection()),
|
||||||
_screenUpdateThread( 0),
|
|
||||||
_screenUpdateEvent( 0),
|
_screenUpdateEvent( 0),
|
||||||
_isHIViewRef( false),
|
_isHIViewRef( false),
|
||||||
_aglContext( 0),
|
_aglContext( 0),
|
||||||
@@ -678,18 +675,15 @@ VideoRenderAGL::~VideoRenderAGL()
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Signal event to exit thread, then delete it
|
// Signal event to exit thread, then delete it
|
||||||
ThreadWrapper* tmpPtr = _screenUpdateThread;
|
ThreadWrapper* tmpPtr = _screenUpdateThread.release();
|
||||||
_screenUpdateThread = NULL;
|
|
||||||
|
|
||||||
if (tmpPtr)
|
if (tmpPtr)
|
||||||
{
|
{
|
||||||
_screenUpdateEvent->Set();
|
_screenUpdateEvent->Set();
|
||||||
_screenUpdateEvent->StopTimer();
|
_screenUpdateEvent->StopTimer();
|
||||||
|
|
||||||
if (tmpPtr->Stop())
|
tmpPtr->Stop();
|
||||||
{
|
|
||||||
delete tmpPtr;
|
delete tmpPtr;
|
||||||
}
|
|
||||||
delete _screenUpdateEvent;
|
delete _screenUpdateEvent;
|
||||||
_screenUpdateEvent = NULL;
|
_screenUpdateEvent = NULL;
|
||||||
}
|
}
|
||||||
@@ -859,16 +853,15 @@ int VideoRenderAGL::DeleteAGLChannel(int channel)
|
|||||||
int VideoRenderAGL::StopThread()
|
int VideoRenderAGL::StopThread()
|
||||||
{
|
{
|
||||||
CriticalSectionScoped cs(&_renderCritSec);
|
CriticalSectionScoped cs(&_renderCritSec);
|
||||||
ThreadWrapper* tmpPtr = _screenUpdateThread;
|
ThreadWrapper* tmpPtr = _screenUpdateThread.release();
|
||||||
//_screenUpdateThread = NULL;
|
|
||||||
|
|
||||||
if (tmpPtr)
|
if (tmpPtr)
|
||||||
{
|
{
|
||||||
_screenUpdateEvent->Set();
|
_screenUpdateEvent->Set();
|
||||||
if (tmpPtr->Stop())
|
_renderCritSec.Leave();
|
||||||
{
|
tmpPtr->Stop();
|
||||||
delete tmpPtr;
|
delete tmpPtr;
|
||||||
}
|
_renderCritSec.Enter();
|
||||||
}
|
}
|
||||||
|
|
||||||
delete _screenUpdateEvent;
|
delete _screenUpdateEvent;
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
#define WEBRTC_MODULES_VIDEO_RENDER_MAIN_SOURCE_MAC_VIDEO_RENDER_AGL_H_
|
#define WEBRTC_MODULES_VIDEO_RENDER_MAIN_SOURCE_MAC_VIDEO_RENDER_AGL_H_
|
||||||
|
|
||||||
#include "webrtc/modules/video_render/include/video_render_defines.h"
|
#include "webrtc/modules/video_render/include/video_render_defines.h"
|
||||||
|
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
||||||
|
|
||||||
#define NEW_HIVIEW_PARENT_EVENT_HANDLER 1
|
#define NEW_HIVIEW_PARENT_EVENT_HANDLER 1
|
||||||
#define NEW_HIVIEW_EVENT_HANDLER 1
|
#define NEW_HIVIEW_EVENT_HANDLER 1
|
||||||
@@ -34,7 +35,6 @@ class VideoRenderAGL;
|
|||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
class CriticalSectionWrapper;
|
class CriticalSectionWrapper;
|
||||||
class EventWrapper;
|
class EventWrapper;
|
||||||
class ThreadWrapper;
|
|
||||||
|
|
||||||
class VideoChannelAGL : public VideoRenderCallback {
|
class VideoChannelAGL : public VideoRenderCallback {
|
||||||
public:
|
public:
|
||||||
@@ -143,7 +143,7 @@ class VideoRenderAGL {
|
|||||||
bool _fullScreen;
|
bool _fullScreen;
|
||||||
int _id;
|
int _id;
|
||||||
webrtc::CriticalSectionWrapper& _renderCritSec;
|
webrtc::CriticalSectionWrapper& _renderCritSec;
|
||||||
webrtc::ThreadWrapper* _screenUpdateThread;
|
rtc::scoped_ptr<webrtc::ThreadWrapper> _screenUpdateThread;
|
||||||
webrtc::EventWrapper* _screenUpdateEvent;
|
webrtc::EventWrapper* _screenUpdateEvent;
|
||||||
bool _isHIViewRef;
|
bool _isHIViewRef;
|
||||||
AGLContext _aglContext;
|
AGLContext _aglContext;
|
||||||
|
|||||||
@@ -169,7 +169,7 @@ private: // variables
|
|||||||
bool _fullScreen;
|
bool _fullScreen;
|
||||||
int _id;
|
int _id;
|
||||||
CriticalSectionWrapper& _nsglContextCritSec;
|
CriticalSectionWrapper& _nsglContextCritSec;
|
||||||
ThreadWrapper* _screenUpdateThread;
|
rtc::scoped_ptr<ThreadWrapper> _screenUpdateThread;
|
||||||
EventWrapper* _screenUpdateEvent;
|
EventWrapper* _screenUpdateEvent;
|
||||||
NSOpenGLContext* _nsglContext;
|
NSOpenGLContext* _nsglContext;
|
||||||
NSOpenGLContext* _nsglFullScreenContext;
|
NSOpenGLContext* _nsglFullScreenContext;
|
||||||
|
|||||||
@@ -367,7 +367,6 @@ _windowRef( (CocoaRenderView*)windowRef),
|
|||||||
_fullScreen( fullScreen),
|
_fullScreen( fullScreen),
|
||||||
_id( iId),
|
_id( iId),
|
||||||
_nsglContextCritSec( *CriticalSectionWrapper::CreateCriticalSection()),
|
_nsglContextCritSec( *CriticalSectionWrapper::CreateCriticalSection()),
|
||||||
_screenUpdateThread( 0),
|
|
||||||
_screenUpdateEvent( 0),
|
_screenUpdateEvent( 0),
|
||||||
_nsglContext( 0),
|
_nsglContext( 0),
|
||||||
_nsglFullScreenContext( 0),
|
_nsglFullScreenContext( 0),
|
||||||
@@ -658,8 +657,7 @@ VideoRenderNSOpenGL::~VideoRenderNSOpenGL()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Signal event to exit thread, then delete it
|
// Signal event to exit thread, then delete it
|
||||||
ThreadWrapper* tmpPtr = _screenUpdateThread;
|
ThreadWrapper* tmpPtr = _screenUpdateThread.release();
|
||||||
_screenUpdateThread = NULL;
|
|
||||||
|
|
||||||
if (tmpPtr)
|
if (tmpPtr)
|
||||||
{
|
{
|
||||||
@@ -865,9 +863,9 @@ int32_t VideoRenderNSOpenGL::GetChannelProperties(const uint16_t streamId,
|
|||||||
int VideoRenderNSOpenGL::StopThread()
|
int VideoRenderNSOpenGL::StopThread()
|
||||||
{
|
{
|
||||||
|
|
||||||
ThreadWrapper* tmpPtr = _screenUpdateThread;
|
ThreadWrapper* tmpPtr = _screenUpdateThread.release();
|
||||||
WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "%s Stopping thread ", __FUNCTION__, _screenUpdateThread);
|
WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id,
|
||||||
_screenUpdateThread = NULL;
|
"%s Stopping thread ", __FUNCTION__, tmpPtr);
|
||||||
|
|
||||||
if (tmpPtr)
|
if (tmpPtr)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -18,7 +18,6 @@
|
|||||||
#include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
|
#include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
|
||||||
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
||||||
#include "webrtc/system_wrappers/interface/event_wrapper.h"
|
#include "webrtc/system_wrappers/interface/event_wrapper.h"
|
||||||
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
|
||||||
#include "webrtc/system_wrappers/interface/trace.h"
|
#include "webrtc/system_wrappers/interface/trace.h"
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
@@ -287,7 +286,6 @@ VideoRenderDirect3D9::VideoRenderDirect3D9(Trace* trace,
|
|||||||
_pD3D(NULL),
|
_pD3D(NULL),
|
||||||
_d3dChannels(),
|
_d3dChannels(),
|
||||||
_d3dZorder(),
|
_d3dZorder(),
|
||||||
_screenUpdateThread(NULL),
|
|
||||||
_screenUpdateEvent(NULL),
|
_screenUpdateEvent(NULL),
|
||||||
_logoLeft(0),
|
_logoLeft(0),
|
||||||
_logoTop(0),
|
_logoTop(0),
|
||||||
@@ -308,18 +306,15 @@ VideoRenderDirect3D9::~VideoRenderDirect3D9()
|
|||||||
//NOTE: we should not enter CriticalSection in here!
|
//NOTE: we should not enter CriticalSection in here!
|
||||||
|
|
||||||
// Signal event to exit thread, then delete it
|
// Signal event to exit thread, then delete it
|
||||||
ThreadWrapper* tmpPtr = _screenUpdateThread;
|
ThreadWrapper* tmpPtr = _screenUpdateThread.release();
|
||||||
_screenUpdateThread = NULL;
|
|
||||||
if (tmpPtr)
|
if (tmpPtr)
|
||||||
{
|
{
|
||||||
_screenUpdateEvent->Set();
|
_screenUpdateEvent->Set();
|
||||||
_screenUpdateEvent->StopTimer();
|
_screenUpdateEvent->StopTimer();
|
||||||
|
|
||||||
if (tmpPtr->Stop())
|
tmpPtr->Stop();
|
||||||
{
|
|
||||||
delete tmpPtr;
|
delete tmpPtr;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
delete _screenUpdateEvent;
|
delete _screenUpdateEvent;
|
||||||
|
|
||||||
//close d3d device
|
//close d3d device
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
#ifndef WEBRTC_MODULES_VIDEO_RENDER_MAIN_SOURCE_WINDOWS_VIDEO_RENDER_DIRECT3D9_H_
|
#ifndef WEBRTC_MODULES_VIDEO_RENDER_MAIN_SOURCE_WINDOWS_VIDEO_RENDER_DIRECT3D9_H_
|
||||||
#define WEBRTC_MODULES_VIDEO_RENDER_MAIN_SOURCE_WINDOWS_VIDEO_RENDER_DIRECT3D9_H_
|
#define WEBRTC_MODULES_VIDEO_RENDER_MAIN_SOURCE_WINDOWS_VIDEO_RENDER_DIRECT3D9_H_
|
||||||
|
|
||||||
// WebRtc includes
|
|
||||||
#include "webrtc/modules/video_render/windows/i_video_render_win.h"
|
#include "webrtc/modules/video_render/windows/i_video_render_win.h"
|
||||||
|
|
||||||
#include <d3d9.h>
|
#include <d3d9.h>
|
||||||
@@ -22,6 +21,7 @@
|
|||||||
|
|
||||||
// Added
|
// Added
|
||||||
#include "webrtc/modules/video_render/include/video_render_defines.h"
|
#include "webrtc/modules/video_render/include/video_render_defines.h"
|
||||||
|
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
||||||
|
|
||||||
#pragma comment(lib, "d3d9.lib") // located in DirectX SDK
|
#pragma comment(lib, "d3d9.lib") // located in DirectX SDK
|
||||||
|
|
||||||
@@ -29,7 +29,6 @@ namespace webrtc {
|
|||||||
class CriticalSectionWrapper;
|
class CriticalSectionWrapper;
|
||||||
class EventWrapper;
|
class EventWrapper;
|
||||||
class Trace;
|
class Trace;
|
||||||
class ThreadWrapper;
|
|
||||||
|
|
||||||
class D3D9Channel: public VideoRenderCallback
|
class D3D9Channel: public VideoRenderCallback
|
||||||
{
|
{
|
||||||
@@ -205,7 +204,7 @@ private:
|
|||||||
|
|
||||||
CriticalSectionWrapper& _refD3DCritsect;
|
CriticalSectionWrapper& _refD3DCritsect;
|
||||||
Trace* _trace;
|
Trace* _trace;
|
||||||
ThreadWrapper* _screenUpdateThread;
|
rtc::scoped_ptr<ThreadWrapper> _screenUpdateThread;
|
||||||
EventWrapper* _screenUpdateEvent;
|
EventWrapper* _screenUpdateEvent;
|
||||||
|
|
||||||
HWND _hWnd;
|
HWND _hWnd;
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "webrtc/base/scoped_ptr.h"
|
#include "webrtc/base/scoped_ptr.h"
|
||||||
|
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
||||||
#include "webrtc/typedefs.h"
|
#include "webrtc/typedefs.h"
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
@@ -31,7 +32,6 @@ class CriticalSectionWrapper;
|
|||||||
class EventWrapper;
|
class EventWrapper;
|
||||||
class LogTable;
|
class LogTable;
|
||||||
class RWLockWrapper;
|
class RWLockWrapper;
|
||||||
class ThreadWrapper;
|
|
||||||
|
|
||||||
// All container classes need to implement a ToString-function to be
|
// All container classes need to implement a ToString-function to be
|
||||||
// writable to file. Enforce this via the Container interface.
|
// writable to file. Enforce this via the Container interface.
|
||||||
@@ -146,7 +146,7 @@ class DataLogImpl {
|
|||||||
int counter_;
|
int counter_;
|
||||||
TableMap tables_;
|
TableMap tables_;
|
||||||
EventWrapper* flush_event_;
|
EventWrapper* flush_event_;
|
||||||
ThreadWrapper* file_writer_thread_;
|
rtc::scoped_ptr<ThreadWrapper> file_writer_thread_;
|
||||||
RWLockWrapper* tables_lock_;
|
RWLockWrapper* tables_lock_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
#ifndef WEBRTC_SYSTEM_WRAPPERS_INTERFACE_THREAD_WRAPPER_H_
|
#ifndef WEBRTC_SYSTEM_WRAPPERS_INTERFACE_THREAD_WRAPPER_H_
|
||||||
#define WEBRTC_SYSTEM_WRAPPERS_INTERFACE_THREAD_WRAPPER_H_
|
#define WEBRTC_SYSTEM_WRAPPERS_INTERFACE_THREAD_WRAPPER_H_
|
||||||
|
|
||||||
|
#include "webrtc/base/scoped_ptr.h"
|
||||||
#include "webrtc/common_types.h"
|
#include "webrtc/common_types.h"
|
||||||
#include "webrtc/typedefs.h"
|
#include "webrtc/typedefs.h"
|
||||||
|
|
||||||
@@ -37,6 +38,8 @@ enum ThreadPriority {
|
|||||||
// Represents a simple worker thread. The implementation must be assumed
|
// Represents a simple worker thread. The implementation must be assumed
|
||||||
// to be single threaded, meaning that all methods of the class, must be
|
// to be single threaded, meaning that all methods of the class, must be
|
||||||
// called from the same thread, including instantiation.
|
// called from the same thread, including instantiation.
|
||||||
|
// TODO(tommi): There's no need for this to be a virtual interface since there's
|
||||||
|
// only ever a single implementation of it.
|
||||||
class ThreadWrapper {
|
class ThreadWrapper {
|
||||||
public:
|
public:
|
||||||
virtual ~ThreadWrapper() {}
|
virtual ~ThreadWrapper() {}
|
||||||
@@ -51,9 +54,8 @@ class ThreadWrapper {
|
|||||||
// debugger.
|
// debugger.
|
||||||
// TODO(tommi): Remove the priority argument and provide a setter instead.
|
// TODO(tommi): Remove the priority argument and provide a setter instead.
|
||||||
// TODO(tommi): Make thread_name non-optional (i.e. no default value).
|
// TODO(tommi): Make thread_name non-optional (i.e. no default value).
|
||||||
static ThreadWrapper* CreateThread(ThreadRunFunction func,
|
static rtc::scoped_ptr<ThreadWrapper> CreateThread(ThreadRunFunction func,
|
||||||
void* obj,
|
void* obj, ThreadPriority prio = kNormalPriority,
|
||||||
ThreadPriority prio = kNormalPriority,
|
|
||||||
const char* thread_name = 0);
|
const char* thread_name = 0);
|
||||||
|
|
||||||
// Get the current thread's thread ID.
|
// Get the current thread's thread ID.
|
||||||
|
|||||||
@@ -158,14 +158,13 @@ class CondVarTest : public ::testing::Test {
|
|||||||
ASSERT_TRUE(baton_.Pass(kShortWaitMs));
|
ASSERT_TRUE(baton_.Pass(kShortWaitMs));
|
||||||
ASSERT_TRUE(baton_.Grab(kShortWaitMs));
|
ASSERT_TRUE(baton_.Grab(kShortWaitMs));
|
||||||
ASSERT_TRUE(thread_->Stop());
|
ASSERT_TRUE(thread_->Stop());
|
||||||
delete thread_;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Baton baton_;
|
Baton baton_;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ThreadWrapper* thread_;
|
rtc::scoped_ptr<ThreadWrapper> thread_;
|
||||||
};
|
};
|
||||||
|
|
||||||
// The SetUp and TearDown functions use condition variables.
|
// The SetUp and TearDown functions use condition variables.
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ TEST_F(CritSectTest, ThreadWakesOnce) NO_THREAD_SAFETY_ANALYSIS {
|
|||||||
CriticalSectionWrapper* crit_sect =
|
CriticalSectionWrapper* crit_sect =
|
||||||
CriticalSectionWrapper::CreateCriticalSection();
|
CriticalSectionWrapper::CreateCriticalSection();
|
||||||
ProtectedCount count(crit_sect);
|
ProtectedCount count(crit_sect);
|
||||||
ThreadWrapper* thread = ThreadWrapper::CreateThread(
|
rtc::scoped_ptr<ThreadWrapper> thread = ThreadWrapper::CreateThread(
|
||||||
&LockUnlockThenStopRunFunction, &count);
|
&LockUnlockThenStopRunFunction, &count);
|
||||||
crit_sect->Enter();
|
crit_sect->Enter();
|
||||||
ASSERT_TRUE(thread->Start());
|
ASSERT_TRUE(thread->Start());
|
||||||
@@ -91,7 +91,6 @@ TEST_F(CritSectTest, ThreadWakesOnce) NO_THREAD_SAFETY_ANALYSIS {
|
|||||||
crit_sect->Leave(); // This frees the thread to act.
|
crit_sect->Leave(); // This frees the thread to act.
|
||||||
EXPECT_TRUE(WaitForCount(1, &count));
|
EXPECT_TRUE(WaitForCount(1, &count));
|
||||||
EXPECT_TRUE(thread->Stop());
|
EXPECT_TRUE(thread->Stop());
|
||||||
delete thread;
|
|
||||||
delete crit_sect;
|
delete crit_sect;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -106,8 +105,8 @@ TEST_F(CritSectTest, ThreadWakesTwice) NO_THREAD_SAFETY_ANALYSIS {
|
|||||||
CriticalSectionWrapper* crit_sect =
|
CriticalSectionWrapper* crit_sect =
|
||||||
CriticalSectionWrapper::CreateCriticalSection();
|
CriticalSectionWrapper::CreateCriticalSection();
|
||||||
ProtectedCount count(crit_sect);
|
ProtectedCount count(crit_sect);
|
||||||
ThreadWrapper* thread = ThreadWrapper::CreateThread(&LockUnlockRunFunction,
|
rtc::scoped_ptr<ThreadWrapper> thread = ThreadWrapper::CreateThread(
|
||||||
&count);
|
&LockUnlockRunFunction, &count);
|
||||||
crit_sect->Enter(); // Make sure counter stays 0 until we wait for it.
|
crit_sect->Enter(); // Make sure counter stays 0 until we wait for it.
|
||||||
ASSERT_TRUE(thread->Start());
|
ASSERT_TRUE(thread->Start());
|
||||||
crit_sect->Leave();
|
crit_sect->Leave();
|
||||||
@@ -130,7 +129,6 @@ TEST_F(CritSectTest, ThreadWakesTwice) NO_THREAD_SAFETY_ANALYSIS {
|
|||||||
SwitchProcess();
|
SwitchProcess();
|
||||||
EXPECT_TRUE(WaitForCount(count_before + 1, &count));
|
EXPECT_TRUE(WaitForCount(count_before + 1, &count));
|
||||||
EXPECT_TRUE(thread->Stop());
|
EXPECT_TRUE(thread->Stop());
|
||||||
delete thread;
|
|
||||||
delete crit_sect;
|
delete crit_sect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,6 @@
|
|||||||
#include "webrtc/system_wrappers/interface/event_wrapper.h"
|
#include "webrtc/system_wrappers/interface/event_wrapper.h"
|
||||||
#include "webrtc/system_wrappers/interface/file_wrapper.h"
|
#include "webrtc/system_wrappers/interface/file_wrapper.h"
|
||||||
#include "webrtc/system_wrappers/interface/rw_lock_wrapper.h"
|
#include "webrtc/system_wrappers/interface/rw_lock_wrapper.h"
|
||||||
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
|
|
||||||
@@ -322,14 +321,12 @@ DataLogImpl::DataLogImpl()
|
|||||||
: counter_(1),
|
: counter_(1),
|
||||||
tables_(),
|
tables_(),
|
||||||
flush_event_(EventWrapper::Create()),
|
flush_event_(EventWrapper::Create()),
|
||||||
file_writer_thread_(NULL),
|
|
||||||
tables_lock_(RWLockWrapper::CreateRWLock()) {
|
tables_lock_(RWLockWrapper::CreateRWLock()) {
|
||||||
}
|
}
|
||||||
|
|
||||||
DataLogImpl::~DataLogImpl() {
|
DataLogImpl::~DataLogImpl() {
|
||||||
StopThread();
|
StopThread();
|
||||||
Flush(); // Write any remaining rows
|
Flush(); // Write any remaining rows
|
||||||
delete file_writer_thread_;
|
|
||||||
delete flush_event_;
|
delete flush_event_;
|
||||||
for (TableMap::iterator it = tables_.begin(); it != tables_.end();) {
|
for (TableMap::iterator it = tables_.begin(); it != tables_.end();) {
|
||||||
delete static_cast<LogTable*>(it->second);
|
delete static_cast<LogTable*>(it->second);
|
||||||
@@ -356,8 +353,6 @@ int DataLogImpl::Init() {
|
|||||||
instance_,
|
instance_,
|
||||||
kHighestPriority,
|
kHighestPriority,
|
||||||
"DataLog");
|
"DataLog");
|
||||||
if (file_writer_thread_ == NULL)
|
|
||||||
return -1;
|
|
||||||
bool success = file_writer_thread_->Start();
|
bool success = file_writer_thread_->Start();
|
||||||
if (!success)
|
if (!success)
|
||||||
return -1;
|
return -1;
|
||||||
@@ -413,7 +408,7 @@ int DataLogImpl::NextRow(const std::string& table_name) {
|
|||||||
if (tables_.count(table_name) == 0)
|
if (tables_.count(table_name) == 0)
|
||||||
return -1;
|
return -1;
|
||||||
tables_[table_name]->NextRow();
|
tables_[table_name]->NextRow();
|
||||||
if (file_writer_thread_ == NULL) {
|
if (!file_writer_thread_) {
|
||||||
// Write every row to file as they get complete.
|
// Write every row to file as they get complete.
|
||||||
tables_[table_name]->Flush();
|
tables_[table_name]->Flush();
|
||||||
} else {
|
} else {
|
||||||
@@ -442,11 +437,9 @@ void DataLogImpl::Process() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void DataLogImpl::StopThread() {
|
void DataLogImpl::StopThread() {
|
||||||
if (file_writer_thread_ != NULL) {
|
if (file_writer_thread_) {
|
||||||
flush_event_->Set();
|
flush_event_->Set();
|
||||||
// Call Stop() repeatedly, waiting for the Flush() call in Process() to
|
file_writer_thread_->Stop();
|
||||||
// finish.
|
|
||||||
while (!file_writer_thread_->Stop()) continue;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -218,9 +218,7 @@ bool EventPosix::StopTimer() {
|
|||||||
if (!timer_thread_->Stop()) {
|
if (!timer_thread_->Stop()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
timer_thread_.reset();
|
||||||
delete timer_thread_;
|
|
||||||
timer_thread_ = 0;
|
|
||||||
}
|
}
|
||||||
if (timer_event_) {
|
if (timer_event_) {
|
||||||
delete timer_event_;
|
delete timer_event_;
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ class EventPosix : public EventWrapper {
|
|||||||
pthread_mutex_t mutex_;
|
pthread_mutex_t mutex_;
|
||||||
bool event_set_;
|
bool event_set_;
|
||||||
|
|
||||||
ThreadWrapper* timer_thread_;
|
rtc::scoped_ptr<ThreadWrapper> timer_thread_;
|
||||||
EventPosix* timer_event_;
|
EventPosix* timer_event_;
|
||||||
timespec created_at_;
|
timespec created_at_;
|
||||||
|
|
||||||
|
|||||||
@@ -18,14 +18,17 @@
|
|||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
|
|
||||||
ThreadWrapper* ThreadWrapper::CreateThread(ThreadRunFunction func,
|
|
||||||
void* obj, ThreadPriority prio,
|
|
||||||
const char* thread_name) {
|
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
return new ThreadWindows(func, obj, prio, thread_name);
|
typedef ThreadWindows ThreadType;
|
||||||
#else
|
#else
|
||||||
return new ThreadPosix(func, obj, prio, thread_name);
|
typedef ThreadPosix ThreadType;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
rtc::scoped_ptr<ThreadWrapper> ThreadWrapper::CreateThread(
|
||||||
|
ThreadRunFunction func, void* obj, ThreadPriority prio,
|
||||||
|
const char* thread_name) {
|
||||||
|
return rtc::scoped_ptr<ThreadWrapper>(
|
||||||
|
new ThreadType(func, obj, prio, thread_name)).Pass();
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace webrtc
|
} // namespace webrtc
|
||||||
|
|||||||
@@ -23,10 +23,10 @@ bool NullRunFunction(void* obj) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST(ThreadTest, StartStop) {
|
TEST(ThreadTest, StartStop) {
|
||||||
ThreadWrapper* thread = ThreadWrapper::CreateThread(&NullRunFunction, NULL);
|
rtc::scoped_ptr<ThreadWrapper> thread = ThreadWrapper::CreateThread(
|
||||||
|
&NullRunFunction, NULL);
|
||||||
ASSERT_TRUE(thread->Start());
|
ASSERT_TRUE(thread->Start());
|
||||||
EXPECT_TRUE(thread->Stop());
|
EXPECT_TRUE(thread->Stop());
|
||||||
delete thread;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Function that sets a boolean.
|
// Function that sets a boolean.
|
||||||
@@ -39,8 +39,8 @@ bool SetFlagRunFunction(void* obj) {
|
|||||||
|
|
||||||
TEST(ThreadTest, RunFunctionIsCalled) {
|
TEST(ThreadTest, RunFunctionIsCalled) {
|
||||||
bool flag = false;
|
bool flag = false;
|
||||||
ThreadWrapper* thread = ThreadWrapper::CreateThread(&SetFlagRunFunction,
|
rtc::scoped_ptr<ThreadWrapper> thread = ThreadWrapper::CreateThread(
|
||||||
&flag);
|
&SetFlagRunFunction, &flag);
|
||||||
ASSERT_TRUE(thread->Start());
|
ASSERT_TRUE(thread->Start());
|
||||||
|
|
||||||
// At this point, the flag may be either true or false.
|
// At this point, the flag may be either true or false.
|
||||||
@@ -48,7 +48,6 @@ TEST(ThreadTest, RunFunctionIsCalled) {
|
|||||||
|
|
||||||
// We expect the thread to have run at least once.
|
// We expect the thread to have run at least once.
|
||||||
EXPECT_TRUE(flag);
|
EXPECT_TRUE(flag);
|
||||||
delete thread;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace webrtc
|
} // namespace webrtc
|
||||||
|
|||||||
@@ -520,7 +520,6 @@ int32_t UdpSocket2WorkerWindows::_numOfWorkers = 0;
|
|||||||
|
|
||||||
UdpSocket2WorkerWindows::UdpSocket2WorkerWindows(HANDLE ioCompletionHandle)
|
UdpSocket2WorkerWindows::UdpSocket2WorkerWindows(HANDLE ioCompletionHandle)
|
||||||
: _ioCompletionHandle(ioCompletionHandle),
|
: _ioCompletionHandle(ioCompletionHandle),
|
||||||
_pThread(NULL),
|
|
||||||
_init(false)
|
_init(false)
|
||||||
{
|
{
|
||||||
_workerNumber = _numOfWorkers++;
|
_workerNumber = _numOfWorkers++;
|
||||||
@@ -530,10 +529,6 @@ UdpSocket2WorkerWindows::UdpSocket2WorkerWindows(HANDLE ioCompletionHandle)
|
|||||||
|
|
||||||
UdpSocket2WorkerWindows::~UdpSocket2WorkerWindows()
|
UdpSocket2WorkerWindows::~UdpSocket2WorkerWindows()
|
||||||
{
|
{
|
||||||
if(_pThread)
|
|
||||||
{
|
|
||||||
delete _pThread;
|
|
||||||
}
|
|
||||||
WEBRTC_TRACE(kTraceMemory, kTraceTransport, -1,
|
WEBRTC_TRACE(kTraceMemory, kTraceTransport, -1,
|
||||||
"UdpSocket2WorkerWindows deleted");
|
"UdpSocket2WorkerWindows deleted");
|
||||||
}
|
}
|
||||||
@@ -559,16 +554,6 @@ int32_t UdpSocket2WorkerWindows::Init()
|
|||||||
const char* threadName = "UdpSocket2ManagerWindows_thread";
|
const char* threadName = "UdpSocket2ManagerWindows_thread";
|
||||||
_pThread = ThreadWrapper::CreateThread(Run, this, kRealtimePriority,
|
_pThread = ThreadWrapper::CreateThread(Run, this, kRealtimePriority,
|
||||||
threadName);
|
threadName);
|
||||||
if(_pThread == NULL)
|
|
||||||
{
|
|
||||||
WEBRTC_TRACE(
|
|
||||||
kTraceError,
|
|
||||||
kTraceTransport,
|
|
||||||
-1,
|
|
||||||
"UdpSocket2WorkerWindows(%d)::Init(), error creating thread!",
|
|
||||||
_workerNumber);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
_init = true;
|
_init = true;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -105,7 +105,7 @@ protected:
|
|||||||
bool Process();
|
bool Process();
|
||||||
private:
|
private:
|
||||||
HANDLE _ioCompletionHandle;
|
HANDLE _ioCompletionHandle;
|
||||||
ThreadWrapper*_pThread;
|
rtc::scoped_ptr<ThreadWrapper> _pThread;
|
||||||
static int32_t _numOfWorkers;
|
static int32_t _numOfWorkers;
|
||||||
int32_t _workerNumber;
|
int32_t _workerNumber;
|
||||||
volatile bool _stop;
|
volatile bool _stop;
|
||||||
|
|||||||
@@ -198,11 +198,6 @@ UdpSocketManagerPosixImpl::UdpSocketManagerPosixImpl()
|
|||||||
|
|
||||||
UdpSocketManagerPosixImpl::~UdpSocketManagerPosixImpl()
|
UdpSocketManagerPosixImpl::~UdpSocketManagerPosixImpl()
|
||||||
{
|
{
|
||||||
if(_thread != NULL)
|
|
||||||
{
|
|
||||||
delete _thread;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_critSectList != NULL)
|
if (_critSectList != NULL)
|
||||||
{
|
{
|
||||||
UpdateSocketMap();
|
UpdateSocketMap();
|
||||||
@@ -226,7 +221,7 @@ UdpSocketManagerPosixImpl::~UdpSocketManagerPosixImpl()
|
|||||||
|
|
||||||
bool UdpSocketManagerPosixImpl::Start()
|
bool UdpSocketManagerPosixImpl::Start()
|
||||||
{
|
{
|
||||||
if (_thread == NULL)
|
if (!_thread)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -238,7 +233,7 @@ bool UdpSocketManagerPosixImpl::Start()
|
|||||||
|
|
||||||
bool UdpSocketManagerPosixImpl::Stop()
|
bool UdpSocketManagerPosixImpl::Stop()
|
||||||
{
|
{
|
||||||
if (_thread == NULL)
|
if (!_thread)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ protected:
|
|||||||
private:
|
private:
|
||||||
typedef std::list<UdpSocketWrapper*> SocketList;
|
typedef std::list<UdpSocketWrapper*> SocketList;
|
||||||
typedef std::list<SOCKET> FdList;
|
typedef std::list<SOCKET> FdList;
|
||||||
ThreadWrapper* _thread;
|
rtc::scoped_ptr<ThreadWrapper> _thread;
|
||||||
CriticalSectionWrapper* _critSectList;
|
CriticalSectionWrapper* _critSectList;
|
||||||
|
|
||||||
fd_set _readFds;
|
fd_set _readFds;
|
||||||
|
|||||||
@@ -55,8 +55,8 @@ int32_t FakeAudioDevice::Init() {
|
|||||||
|
|
||||||
if (!tick_->StartTimer(true, 10))
|
if (!tick_->StartTimer(true, 10))
|
||||||
return -1;
|
return -1;
|
||||||
thread_.reset(ThreadWrapper::CreateThread(
|
thread_ = ThreadWrapper::CreateThread(
|
||||||
FakeAudioDevice::Run, this, webrtc::kHighPriority, "FakeAudioDevice"));
|
FakeAudioDevice::Run, this, webrtc::kHighPriority, "FakeAudioDevice");
|
||||||
if (thread_.get() == NULL)
|
if (thread_.get() == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
if (!thread_->Start()) {
|
if (!thread_->Start()) {
|
||||||
|
|||||||
@@ -90,10 +90,10 @@ bool FrameGeneratorCapturer::Init() {
|
|||||||
|
|
||||||
if (!tick_->StartTimer(true, 1000 / target_fps_))
|
if (!tick_->StartTimer(true, 1000 / target_fps_))
|
||||||
return false;
|
return false;
|
||||||
thread_.reset(ThreadWrapper::CreateThread(FrameGeneratorCapturer::Run,
|
thread_ = ThreadWrapper::CreateThread(FrameGeneratorCapturer::Run,
|
||||||
this,
|
this,
|
||||||
webrtc::kHighPriority,
|
webrtc::kHighPriority,
|
||||||
"FrameGeneratorCapturer"));
|
"FrameGeneratorCapturer");
|
||||||
if (thread_.get() == NULL)
|
if (thread_.get() == NULL)
|
||||||
return false;
|
return false;
|
||||||
if (!thread_->Start()) {
|
if (!thread_->Start()) {
|
||||||
|
|||||||
@@ -108,10 +108,10 @@ class VideoAnalyzer : public PacketReceiver,
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (uint32_t i = 0; i < num_cores; ++i) {
|
for (uint32_t i = 0; i < num_cores; ++i) {
|
||||||
ThreadWrapper* thread =
|
rtc::scoped_ptr<ThreadWrapper> thread =
|
||||||
ThreadWrapper::CreateThread(&FrameComparisonThread, this);
|
ThreadWrapper::CreateThread(&FrameComparisonThread, this);
|
||||||
comparison_thread_pool_.push_back(thread);
|
|
||||||
EXPECT_TRUE(thread->Start());
|
EXPECT_TRUE(thread->Start());
|
||||||
|
comparison_thread_pool_.push_back(thread.release());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
#define WEBRTC_VIDEO_ENGINE_MAIN_TEST_AUTOTEST_INTERFACE_VIE_AUTOTEST_WINDOWS_H_
|
#define WEBRTC_VIDEO_ENGINE_MAIN_TEST_AUTOTEST_INTERFACE_VIE_AUTOTEST_WINDOWS_H_
|
||||||
|
|
||||||
#include "webrtc/engine_configurations.h"
|
#include "webrtc/engine_configurations.h"
|
||||||
|
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
||||||
#include "webrtc/video_engine/test/auto_test/interface/vie_autotest_window_manager_interface.h"
|
#include "webrtc/video_engine/test/auto_test/interface/vie_autotest_window_manager_interface.h"
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
@@ -19,7 +20,6 @@
|
|||||||
|
|
||||||
// Forward declaration
|
// Forward declaration
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
class ThreadWrapper;
|
|
||||||
class CriticalSectionWrapper;
|
class CriticalSectionWrapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -48,7 +48,7 @@ private:
|
|||||||
void* _window2;
|
void* _window2;
|
||||||
|
|
||||||
bool _terminate;
|
bool _terminate;
|
||||||
webrtc::ThreadWrapper& _eventThread;
|
rtc::scoped_ptr<webrtc::ThreadWrapper> _eventThread;
|
||||||
webrtc::CriticalSectionWrapper& _crit;
|
webrtc::CriticalSectionWrapper& _crit;
|
||||||
HWND _hwndMain;
|
HWND _hwndMain;
|
||||||
HWND _hwnd1;
|
HWND _hwnd1;
|
||||||
|
|||||||
@@ -17,7 +17,6 @@
|
|||||||
|
|
||||||
#include "webrtc/engine_configurations.h"
|
#include "webrtc/engine_configurations.h"
|
||||||
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
||||||
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
|
||||||
#include "webrtc/video_engine/test/auto_test/interface/vie_autotest_defines.h"
|
#include "webrtc/video_engine/test/auto_test/interface/vie_autotest_defines.h"
|
||||||
#include "webrtc/video_engine/test/auto_test/interface/vie_autotest_main.h"
|
#include "webrtc/video_engine/test/auto_test/interface/vie_autotest_main.h"
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,6 @@
|
|||||||
|
|
||||||
#include "webrtc/engine_configurations.h"
|
#include "webrtc/engine_configurations.h"
|
||||||
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
||||||
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
@@ -47,7 +46,7 @@ ViEAutoTestWindowManager::ViEAutoTestWindowManager()
|
|||||||
: _window1(NULL),
|
: _window1(NULL),
|
||||||
_window2(NULL),
|
_window2(NULL),
|
||||||
_terminate(false),
|
_terminate(false),
|
||||||
_eventThread(*webrtc::ThreadWrapper::CreateThread(
|
_eventThread(webrtc::ThreadWrapper::CreateThread(
|
||||||
EventProcess, this, webrtc::kNormalPriority,
|
EventProcess, this, webrtc::kNormalPriority,
|
||||||
"ViEAutotestEventThread")),
|
"ViEAutotestEventThread")),
|
||||||
_crit(*webrtc::CriticalSectionWrapper::CreateCriticalSection()),
|
_crit(*webrtc::CriticalSectionWrapper::CreateCriticalSection()),
|
||||||
@@ -86,7 +85,7 @@ int ViEAutoTestWindowManager::CreateWindows(AutoTestRect window1Size,
|
|||||||
memcpy(_hwnd1Title, window1Title, TITLE_LENGTH);
|
memcpy(_hwnd1Title, window1Title, TITLE_LENGTH);
|
||||||
memcpy(_hwnd2Title, window2Title, TITLE_LENGTH);
|
memcpy(_hwnd2Title, window2Title, TITLE_LENGTH);
|
||||||
|
|
||||||
_eventThread.Start();
|
_eventThread->Start();
|
||||||
|
|
||||||
do {
|
do {
|
||||||
_crit.Enter();
|
_crit.Enter();
|
||||||
@@ -102,11 +101,10 @@ int ViEAutoTestWindowManager::CreateWindows(AutoTestRect window1Size,
|
|||||||
|
|
||||||
int ViEAutoTestWindowManager::TerminateWindows() {
|
int ViEAutoTestWindowManager::TerminateWindows() {
|
||||||
_terminate = true;
|
_terminate = true;
|
||||||
if (_eventThread.Stop()) {
|
_eventThread->Stop();
|
||||||
_crit.Enter();
|
_crit.Enter();
|
||||||
delete &_eventThread;
|
_eventThread.reset();
|
||||||
_crit.Leave();
|
_crit.Leave();
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,6 @@
|
|||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
|
||||||
#include "webrtc/video_engine/include/vie_capture.h"
|
#include "webrtc/video_engine/include/vie_capture.h"
|
||||||
#include "webrtc/video_engine/test/libvietest/include/vie_file_capture_device.h"
|
#include "webrtc/video_engine/test/libvietest/include/vie_file_capture_device.h"
|
||||||
|
|
||||||
@@ -34,7 +33,6 @@ bool StreamVideoFileRepeatedlyIntoCaptureDevice(void* data) {
|
|||||||
ViEFakeCamera::ViEFakeCamera(webrtc::ViECapture* capture_interface)
|
ViEFakeCamera::ViEFakeCamera(webrtc::ViECapture* capture_interface)
|
||||||
: capture_interface_(capture_interface),
|
: capture_interface_(capture_interface),
|
||||||
capture_id_(-1),
|
capture_id_(-1),
|
||||||
camera_thread_(NULL),
|
|
||||||
file_capture_device_(NULL) {
|
file_capture_device_(NULL) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,7 +75,7 @@ bool ViEFakeCamera::StopCamera() {
|
|||||||
|
|
||||||
int result = capture_interface_->ReleaseCaptureDevice(capture_id_);
|
int result = capture_interface_->ReleaseCaptureDevice(capture_id_);
|
||||||
|
|
||||||
delete camera_thread_;
|
camera_thread_.reset();
|
||||||
delete file_capture_device_;
|
delete file_capture_device_;
|
||||||
camera_thread_ = NULL;
|
camera_thread_ = NULL;
|
||||||
file_capture_device_ = NULL;
|
file_capture_device_ = NULL;
|
||||||
|
|||||||
@@ -19,12 +19,12 @@
|
|||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
#include "webrtc/common_types.h"
|
#include "webrtc/common_types.h"
|
||||||
|
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
||||||
|
|
||||||
namespace webrtc
|
namespace webrtc
|
||||||
{
|
{
|
||||||
class CriticalSectionWrapper;
|
class CriticalSectionWrapper;
|
||||||
class EventWrapper;
|
class EventWrapper;
|
||||||
class ThreadWrapper;
|
|
||||||
class ViENetwork;
|
class ViENetwork;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -147,7 +147,7 @@ private:
|
|||||||
int sender_channel_;
|
int sender_channel_;
|
||||||
SsrcChannelMap* receive_channels_;
|
SsrcChannelMap* receive_channels_;
|
||||||
webrtc::ViENetwork& _vieNetwork;
|
webrtc::ViENetwork& _vieNetwork;
|
||||||
webrtc::ThreadWrapper& _thread;
|
rtc::scoped_ptr<webrtc::ThreadWrapper> _thread;
|
||||||
webrtc::EventWrapper& _event;
|
webrtc::EventWrapper& _event;
|
||||||
webrtc::CriticalSectionWrapper& _crit;
|
webrtc::CriticalSectionWrapper& _crit;
|
||||||
webrtc::CriticalSectionWrapper& _statCrit;
|
webrtc::CriticalSectionWrapper& _statCrit;
|
||||||
|
|||||||
@@ -11,10 +11,10 @@
|
|||||||
#define SRC_VIDEO_ENGINE_MAIN_TEST_AUTOTEST_HELPERS_VIE_FAKE_CAMERA_H_
|
#define SRC_VIDEO_ENGINE_MAIN_TEST_AUTOTEST_HELPERS_VIE_FAKE_CAMERA_H_
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
class ViECapture;
|
class ViECapture;
|
||||||
class ThreadWrapper;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class ViEFileCaptureDevice;
|
class ViEFileCaptureDevice;
|
||||||
@@ -43,7 +43,7 @@ class ViEFakeCamera {
|
|||||||
webrtc::ViECapture* capture_interface_;
|
webrtc::ViECapture* capture_interface_;
|
||||||
|
|
||||||
int capture_id_;
|
int capture_id_;
|
||||||
webrtc::ThreadWrapper* camera_thread_;
|
rtc::scoped_ptr<webrtc::ThreadWrapper> camera_thread_;
|
||||||
ViEFileCaptureDevice* file_capture_device_;
|
ViEFileCaptureDevice* file_capture_device_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,6 @@
|
|||||||
|
|
||||||
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
||||||
#include "webrtc/system_wrappers/interface/event_wrapper.h"
|
#include "webrtc/system_wrappers/interface/event_wrapper.h"
|
||||||
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
|
||||||
#include "webrtc/system_wrappers/interface/tick_util.h"
|
#include "webrtc/system_wrappers/interface/tick_util.h"
|
||||||
#include "webrtc/video_engine/include/vie_network.h"
|
#include "webrtc/video_engine/include/vie_network.h"
|
||||||
|
|
||||||
@@ -41,7 +40,7 @@ TbExternalTransport::TbExternalTransport(
|
|||||||
sender_channel_(sender_channel),
|
sender_channel_(sender_channel),
|
||||||
receive_channels_(receive_channels),
|
receive_channels_(receive_channels),
|
||||||
_vieNetwork(vieNetwork),
|
_vieNetwork(vieNetwork),
|
||||||
_thread(*webrtc::ThreadWrapper::CreateThread(
|
_thread(webrtc::ThreadWrapper::CreateThread(
|
||||||
ViEExternalTransportRun, this, webrtc::kHighPriority,
|
ViEExternalTransportRun, this, webrtc::kHighPriority,
|
||||||
"AutotestTransport")),
|
"AutotestTransport")),
|
||||||
_event(*webrtc::EventWrapper::Create()),
|
_event(*webrtc::EventWrapper::Create()),
|
||||||
@@ -77,17 +76,15 @@ TbExternalTransport::TbExternalTransport(
|
|||||||
{
|
{
|
||||||
srand((int) webrtc::TickTime::MicrosecondTimestamp());
|
srand((int) webrtc::TickTime::MicrosecondTimestamp());
|
||||||
memset(&network_parameters_, 0, sizeof(NetworkParameters));
|
memset(&network_parameters_, 0, sizeof(NetworkParameters));
|
||||||
_thread.Start();
|
_thread->Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
TbExternalTransport::~TbExternalTransport()
|
TbExternalTransport::~TbExternalTransport()
|
||||||
{
|
{
|
||||||
_event.Set();
|
_event.Set();
|
||||||
if (_thread.Stop())
|
_thread->Stop();
|
||||||
{
|
|
||||||
delete &_thread;
|
|
||||||
delete &_event;
|
delete &_event;
|
||||||
}
|
|
||||||
for (std::list<VideoPacket*>::iterator it = _rtpPackets.begin();
|
for (std::list<VideoPacket*>::iterator it = _rtpPackets.begin();
|
||||||
it != _rtpPackets.end(); ++it) {
|
it != _rtpPackets.end(); ++it) {
|
||||||
delete *it;
|
delete *it;
|
||||||
|
|||||||
@@ -20,7 +20,6 @@
|
|||||||
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
||||||
#include "webrtc/system_wrappers/interface/event_wrapper.h"
|
#include "webrtc/system_wrappers/interface/event_wrapper.h"
|
||||||
#include "webrtc/system_wrappers/interface/logging.h"
|
#include "webrtc/system_wrappers/interface/logging.h"
|
||||||
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
|
||||||
#include "webrtc/system_wrappers/interface/tick_util.h"
|
#include "webrtc/system_wrappers/interface/tick_util.h"
|
||||||
#include "webrtc/system_wrappers/interface/trace_event.h"
|
#include "webrtc/system_wrappers/interface/trace_event.h"
|
||||||
#include "webrtc/video_engine/include/vie_image_process.h"
|
#include "webrtc/video_engine/include/vie_image_process.h"
|
||||||
@@ -69,7 +68,7 @@ ViECapturer::ViECapturer(int capture_id,
|
|||||||
module_process_thread_(module_process_thread),
|
module_process_thread_(module_process_thread),
|
||||||
capture_id_(capture_id),
|
capture_id_(capture_id),
|
||||||
incoming_frame_cs_(CriticalSectionWrapper::CreateCriticalSection()),
|
incoming_frame_cs_(CriticalSectionWrapper::CreateCriticalSection()),
|
||||||
capture_thread_(*ThreadWrapper::CreateThread(ViECaptureThreadFunction,
|
capture_thread_(ThreadWrapper::CreateThread(ViECaptureThreadFunction,
|
||||||
this,
|
this,
|
||||||
kHighPriority,
|
kHighPriority,
|
||||||
"ViECaptureThread")),
|
"ViECaptureThread")),
|
||||||
@@ -93,7 +92,7 @@ ViECapturer::ViECapturer(int capture_id,
|
|||||||
overuse_detector_(
|
overuse_detector_(
|
||||||
new OveruseFrameDetector(Clock::GetRealTimeClock(),
|
new OveruseFrameDetector(Clock::GetRealTimeClock(),
|
||||||
cpu_overuse_metrics_observer_.get())) {
|
cpu_overuse_metrics_observer_.get())) {
|
||||||
capture_thread_.Start();
|
capture_thread_->Start();
|
||||||
module_process_thread_.RegisterModule(overuse_detector_.get());
|
module_process_thread_.RegisterModule(overuse_detector_.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,14 +110,10 @@ ViECapturer::~ViECapturer() {
|
|||||||
capture_module_->Release();
|
capture_module_->Release();
|
||||||
capture_module_ = NULL;
|
capture_module_ = NULL;
|
||||||
}
|
}
|
||||||
if (capture_thread_.Stop()) {
|
|
||||||
// Thread stopped.
|
capture_thread_->Stop();
|
||||||
delete &capture_thread_;
|
|
||||||
delete &capture_event_;
|
delete &capture_event_;
|
||||||
delete &deliver_event_;
|
delete &deliver_event_;
|
||||||
} else {
|
|
||||||
assert(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (image_proc_module_) {
|
if (image_proc_module_) {
|
||||||
VideoProcessingModule::Destroy(image_proc_module_);
|
VideoProcessingModule::Destroy(image_proc_module_);
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
#include "webrtc/modules/video_coding/main/interface/video_coding.h"
|
#include "webrtc/modules/video_coding/main/interface/video_coding.h"
|
||||||
#include "webrtc/modules/video_processing/main/interface/video_processing.h"
|
#include "webrtc/modules/video_processing/main/interface/video_processing.h"
|
||||||
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
||||||
|
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
||||||
#include "webrtc/typedefs.h"
|
#include "webrtc/typedefs.h"
|
||||||
#include "webrtc/video_engine/include/vie_base.h"
|
#include "webrtc/video_engine/include/vie_base.h"
|
||||||
#include "webrtc/video_engine/include/vie_capture.h"
|
#include "webrtc/video_engine/include/vie_capture.h"
|
||||||
@@ -37,7 +38,6 @@ class EventWrapper;
|
|||||||
class CpuOveruseObserver;
|
class CpuOveruseObserver;
|
||||||
class OveruseFrameDetector;
|
class OveruseFrameDetector;
|
||||||
class ProcessThread;
|
class ProcessThread;
|
||||||
class ThreadWrapper;
|
|
||||||
class ViEEffectFilter;
|
class ViEEffectFilter;
|
||||||
class ViEEncoder;
|
class ViEEncoder;
|
||||||
struct ViEPicture;
|
struct ViEPicture;
|
||||||
@@ -163,7 +163,7 @@ class ViECapturer
|
|||||||
I420VideoFrame incoming_frame_;
|
I420VideoFrame incoming_frame_;
|
||||||
|
|
||||||
// Capture thread.
|
// Capture thread.
|
||||||
ThreadWrapper& capture_thread_;
|
rtc::scoped_ptr<ThreadWrapper> capture_thread_;
|
||||||
EventWrapper& capture_event_;
|
EventWrapper& capture_event_;
|
||||||
EventWrapper& deliver_event_;
|
EventWrapper& deliver_event_;
|
||||||
|
|
||||||
|
|||||||
@@ -122,7 +122,6 @@ ViEChannel::ViEChannel(int32_t channel_id,
|
|||||||
external_transport_(NULL),
|
external_transport_(NULL),
|
||||||
decoder_reset_(true),
|
decoder_reset_(true),
|
||||||
wait_for_key_frame_(false),
|
wait_for_key_frame_(false),
|
||||||
decode_thread_(NULL),
|
|
||||||
effect_filter_(NULL),
|
effect_filter_(NULL),
|
||||||
color_enhancement_(false),
|
color_enhancement_(false),
|
||||||
mtu_(0),
|
mtu_(0),
|
||||||
@@ -1854,8 +1853,7 @@ int32_t ViEChannel::StopDecodeThread() {
|
|||||||
vcm_->TriggerDecoderShutdown();
|
vcm_->TriggerDecoderShutdown();
|
||||||
|
|
||||||
decode_thread_->Stop();
|
decode_thread_->Stop();
|
||||||
delete decode_thread_;
|
decode_thread_.reset();
|
||||||
decode_thread_ = NULL;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -536,7 +536,7 @@ class ViEChannel
|
|||||||
// Current receive codec used for codec change callback.
|
// Current receive codec used for codec change callback.
|
||||||
VideoCodec receive_codec_;
|
VideoCodec receive_codec_;
|
||||||
bool wait_for_key_frame_;
|
bool wait_for_key_frame_;
|
||||||
ThreadWrapper* decode_thread_;
|
rtc::scoped_ptr<ThreadWrapper> decode_thread_;
|
||||||
|
|
||||||
ViEEffectFilter* effect_filter_;
|
ViEEffectFilter* effect_filter_;
|
||||||
bool color_enhancement_;
|
bool color_enhancement_;
|
||||||
|
|||||||
@@ -177,23 +177,16 @@ private:
|
|||||||
static bool Run(void* ptr);
|
static bool Run(void* ptr);
|
||||||
bool Process();
|
bool Process();
|
||||||
private:
|
private:
|
||||||
ThreadWrapper* _thread;
|
rtc::scoped_ptr<ThreadWrapper> _thread;
|
||||||
};
|
};
|
||||||
|
|
||||||
ThreadTest::~ThreadTest()
|
ThreadTest::~ThreadTest()
|
||||||
{
|
{
|
||||||
if (_thread)
|
if (_thread)
|
||||||
{
|
_thread->Stop();
|
||||||
if (_thread->Stop())
|
|
||||||
{
|
|
||||||
delete _thread;
|
|
||||||
_thread = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ThreadTest::ThreadTest() :
|
ThreadTest::ThreadTest()
|
||||||
_thread(NULL)
|
|
||||||
{
|
{
|
||||||
_thread = ThreadWrapper::CreateThread(Run, this, kNormalPriority,
|
_thread = ThreadWrapper::CreateThread(Run, this, kNormalPriority,
|
||||||
"ThreadTest thread");
|
"ThreadTest thread");
|
||||||
|
|||||||
@@ -18,7 +18,6 @@
|
|||||||
|
|
||||||
FakeExternalTransport::FakeExternalTransport(webrtc::VoENetwork* ptr)
|
FakeExternalTransport::FakeExternalTransport(webrtc::VoENetwork* ptr)
|
||||||
: my_network_(ptr),
|
: my_network_(ptr),
|
||||||
thread_(NULL),
|
|
||||||
lock_(NULL),
|
lock_(NULL),
|
||||||
event_(NULL),
|
event_(NULL),
|
||||||
length_(0),
|
length_(0),
|
||||||
@@ -38,16 +37,13 @@ FakeExternalTransport::FakeExternalTransport(webrtc::VoENetwork* ptr)
|
|||||||
FakeExternalTransport::~FakeExternalTransport() {
|
FakeExternalTransport::~FakeExternalTransport() {
|
||||||
if (thread_) {
|
if (thread_) {
|
||||||
event_->Set();
|
event_->Set();
|
||||||
if (thread_->Stop()) {
|
thread_->Stop();
|
||||||
delete thread_;
|
|
||||||
thread_ = NULL;
|
|
||||||
delete event_;
|
delete event_;
|
||||||
event_ = NULL;
|
event_ = NULL;
|
||||||
delete lock_;
|
delete lock_;
|
||||||
lock_ = NULL;
|
lock_ = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
bool FakeExternalTransport::Run(void* ptr) {
|
bool FakeExternalTransport::Run(void* ptr) {
|
||||||
return static_cast<FakeExternalTransport*> (ptr)->Process();
|
return static_cast<FakeExternalTransport*> (ptr)->Process();
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ class FakeExternalTransport : public webrtc::Transport {
|
|||||||
static bool Run(void* ptr);
|
static bool Run(void* ptr);
|
||||||
bool Process();
|
bool Process();
|
||||||
private:
|
private:
|
||||||
webrtc::ThreadWrapper* thread_;
|
rtc::scoped_ptr<webrtc::ThreadWrapper> thread_;
|
||||||
webrtc::CriticalSectionWrapper* lock_;
|
webrtc::CriticalSectionWrapper* lock_;
|
||||||
webrtc::EventWrapper* event_;
|
webrtc::EventWrapper* event_;
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -26,7 +26,6 @@
|
|||||||
|
|
||||||
#include "webrtc/base/scoped_ptr.h"
|
#include "webrtc/base/scoped_ptr.h"
|
||||||
#include "webrtc/system_wrappers/interface/sleep.h"
|
#include "webrtc/system_wrappers/interface/sleep.h"
|
||||||
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
|
||||||
#include "webrtc/test/channel_transport/include/channel_transport.h"
|
#include "webrtc/test/channel_transport/include/channel_transport.h"
|
||||||
#include "webrtc/voice_engine/test/auto_test/voe_standard_test.h"
|
#include "webrtc/voice_engine/test/auto_test/voe_standard_test.h"
|
||||||
#include "webrtc/voice_engine/test/auto_test/voe_test_defines.h"
|
#include "webrtc/voice_engine/test/auto_test/voe_test_defines.h"
|
||||||
@@ -368,7 +367,6 @@ int VoEStressTest::MultipleThreadsTest() {
|
|||||||
|
|
||||||
// Stop extra thread
|
// Stop extra thread
|
||||||
VALIDATE_STRESS(!_ptrExtraApiThread->Stop());
|
VALIDATE_STRESS(!_ptrExtraApiThread->Stop());
|
||||||
delete _ptrExtraApiThread;
|
|
||||||
|
|
||||||
///////////// End test /////////////
|
///////////// End test /////////////
|
||||||
|
|
||||||
|
|||||||
@@ -11,9 +11,7 @@
|
|||||||
#ifndef WEBRTC_VOICE_ENGINE_VOE_STRESS_TEST_H
|
#ifndef WEBRTC_VOICE_ENGINE_VOE_STRESS_TEST_H
|
||||||
#define WEBRTC_VOICE_ENGINE_VOE_STRESS_TEST_H
|
#define WEBRTC_VOICE_ENGINE_VOE_STRESS_TEST_H
|
||||||
|
|
||||||
namespace webrtc {
|
#include "webrtc/system_wrappers/interface/thread_wrapper.h"
|
||||||
class ThreadWrapper;
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace voetest {
|
namespace voetest {
|
||||||
// TODO(andrew): using directives are not permitted.
|
// TODO(andrew): using directives are not permitted.
|
||||||
@@ -23,8 +21,7 @@ class VoETestManager;
|
|||||||
|
|
||||||
class VoEStressTest {
|
class VoEStressTest {
|
||||||
public:
|
public:
|
||||||
VoEStressTest(VoETestManager& mgr) :
|
VoEStressTest(VoETestManager& mgr) : _mgr(mgr) {
|
||||||
_mgr(mgr), _ptrExtraApiThread(NULL) {
|
|
||||||
}
|
}
|
||||||
~VoEStressTest() {
|
~VoEStressTest() {
|
||||||
}
|
}
|
||||||
@@ -41,7 +38,7 @@ class VoEStressTest {
|
|||||||
|
|
||||||
VoETestManager& _mgr;
|
VoETestManager& _mgr;
|
||||||
|
|
||||||
ThreadWrapper* _ptrExtraApiThread;
|
rtc::scoped_ptr<ThreadWrapper> _ptrExtraApiThread;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace voetest
|
} // namespace voetest
|
||||||
|
|||||||
Reference in New Issue
Block a user