1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 #include <math.h>
12 #include "webrtc/test/testsupport/fileutils.h"
13 #include "webrtc/voice_engine/test/win_test/WinTest.h"
14 #include "webrtc/voice_engine/test/win_test/WinTestDlg.h"
15 #include "webrtc/voice_engine/test/win_test/stdafx.h"
16
17 #ifdef _DEBUG
18 #define new DEBUG_NEW
19 #endif
20
21 using namespace webrtc;
22
23 unsigned char key[30] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
24
25 // Hack to convert char to TCHAR, using two buffers to be able to
26 // call twice in the same statement
27 TCHAR convertTemp1[256] = {0};
28 TCHAR convertTemp2[256] = {0};
29 bool convertBufferSwitch(false);
CharToTchar(const char * str,int len)30 TCHAR* CharToTchar(const char* str, int len)
31 {
32 #ifdef _UNICODE
33 TCHAR* temp = convertBufferSwitch ? convertTemp1 : convertTemp2;
34 convertBufferSwitch = !convertBufferSwitch;
35 memset(temp, 0, sizeof(convertTemp1));
36 MultiByteToWideChar(CP_UTF8, 0, str, len, temp, 256);
37 return temp;
38 #else
39 return str;
40 #endif
41 }
42
43 // Hack to convert TCHAR to char
44 char convertTemp3[256] = {0};
TcharToChar(TCHAR * str,int len)45 char* TcharToChar(TCHAR* str, int len)
46 {
47 #ifdef _UNICODE
48 memset(convertTemp3, 0, sizeof(convertTemp3));
49 WideCharToMultiByte(CP_UTF8, 0, str, len, convertTemp3, 256, 0, 0);
50 return convertTemp3;
51 #else
52 return str;
53 #endif
54 }
55
56 // ----------------------------------------------------------------------------
57 // VoiceEngineObserver
58 // ----------------------------------------------------------------------------
59
CallbackOnError(int channel,int errCode)60 void CWinTestDlg::CallbackOnError(int channel, int errCode)
61 {
62 _nErrorCallbacks++;
63
64 CString str;
65 str.Format(_T("[#%d] CallbackOnError(channel=%d) => errCode = %d"), _nErrorCallbacks, channel, errCode);
66 if (errCode == VE_RECEIVE_PACKET_TIMEOUT)
67 {
68 str += _T(" <=> VE_RECEIVE_PACKET_TIMEOUT");
69 }
70 else if (errCode == VE_PACKET_RECEIPT_RESTARTED)
71 {
72 str += _T(" <=> VE_PACKET_RECEIPT_RESTARTED");
73 }
74 else if (errCode == VE_RUNTIME_PLAY_WARNING)
75 {
76 str += _T(" <=> VE_RUNTIME_PLAY_WARNING");
77 }
78 else if (errCode == VE_RUNTIME_REC_WARNING)
79 {
80 str += _T(" <=> VE_RUNTIME_REC_WARNING");
81 }
82 else if (errCode == VE_RUNTIME_PLAY_ERROR)
83 {
84 str += _T(" <=> VE_RUNTIME_PLAY_ERROR");
85 }
86 else if (errCode == VE_RUNTIME_REC_ERROR)
87 {
88 str += _T(" <=> VE_RUNTIME_REC_ERROR");
89 }
90 else if (errCode == VE_SATURATION_WARNING)
91 {
92 str += _T(" <=> VE_SATURATION_WARNING");
93 }
94 else if (errCode == VE_TYPING_NOISE_WARNING)
95 {
96 str += _T(" <=> VE_TYPING_NOISE_WARNING");
97 }
98 else if (errCode == VE_REC_DEVICE_REMOVED)
99 {
100 str += _T(" <=> VE_REC_DEVICE_REMOVED");
101 }
102 // AfxMessageBox((LPCTSTR)str, MB_OK);
103 SetDlgItemText(IDC_EDIT_ERROR_CALLBACK, (LPCTSTR)str);
104 }
105
106 // ----------------------------------------------------------------------------
107 // VoERTPObserver
108 // ----------------------------------------------------------------------------
109
OnIncomingCSRCChanged(int channel,unsigned int CSRC,bool added)110 void CWinTestDlg::OnIncomingCSRCChanged(int channel, unsigned int CSRC, bool added)
111 {
112 CString str;
113 str.Format(_T("OnIncomingCSRCChanged(channel=%d) => CSRC=%u, added=%d"), channel, CSRC, added);
114 SetDlgItemText(IDC_EDIT_ERROR_CALLBACK, (LPCTSTR)str);
115 }
116
OnIncomingSSRCChanged(int channel,unsigned int SSRC)117 void CWinTestDlg::OnIncomingSSRCChanged(int channel, unsigned int SSRC)
118 {
119 CString str;
120 str.Format(_T("OnIncomingSSRCChanged(channel=%d) => SSRC=%u"), channel, SSRC);
121 SetDlgItemText(IDC_EDIT_ERROR_CALLBACK, (LPCTSTR)str);
122 }
123
124 // ----------------------------------------------------------------------------
125 // Transport
126 // ----------------------------------------------------------------------------
127
128 class MyTransport : public Transport
129 {
130 public:
131 MyTransport(VoENetwork* veNetwork);
132 int SendPacket(int channel, const void* data, size_t len) override;
133 int SendRTCPPacket(int channel, const void* data, size_t len) override;
134
135 private:
136 VoENetwork* _veNetworkPtr;
137 };
138
MyTransport(VoENetwork * veNetwork)139 MyTransport::MyTransport(VoENetwork* veNetwork) :
140 _veNetworkPtr(veNetwork)
141 {
142 }
143
144 int
SendPacket(int channel,const void * data,size_t len)145 MyTransport::SendPacket(int channel, const void *data, size_t len)
146 {
147 _veNetworkPtr->ReceivedRTPPacket(channel, data, len);
148 return len;
149 }
150
151 int
SendRTCPPacket(int channel,const void * data,size_t len)152 MyTransport::SendRTCPPacket(int channel, const void *data, size_t len)
153 {
154 _veNetworkPtr->ReceivedRTCPPacket(channel, data, len);
155 return len;
156 }
157
158 // ----------------------------------------------------------------------------
159 // VoEMediaProcess
160 // ----------------------------------------------------------------------------
161
162 class MediaProcessImpl : public VoEMediaProcess
163 {
164 public:
165 MediaProcessImpl();
166 virtual void Process(int channel,
167 ProcessingTypes type,
168 int16_t audio_10ms[],
169 int length,
170 int samplingFreqHz,
171 bool stereo);
172 };
173
MediaProcessImpl()174 MediaProcessImpl::MediaProcessImpl()
175 {
176 }
177
Process(int channel,ProcessingTypes type,int16_t audio_10ms[],int length,int samplingFreqHz,bool stereo)178 void MediaProcessImpl::Process(int channel,
179 ProcessingTypes type,
180 int16_t audio_10ms[],
181 int length,
182 int samplingFreqHz,
183 bool stereo)
184 {
185 int x = rand() % 100;
186
187 for (int i = 0; i < length; i++)
188 {
189 if (channel == -1)
190 {
191 if (type == kPlaybackAllChannelsMixed)
192 {
193 // playout: scale up
194 if (!stereo)
195 {
196 audio_10ms[i] = (audio_10ms[i] << 2);
197 }
198 else
199 {
200 audio_10ms[2*i] = (audio_10ms[2*i] << 2);
201 audio_10ms[2*i+1] = (audio_10ms[2*i+1] << 2);
202 }
203 }
204 else
205 {
206 // recording: emulate packet loss by "dropping" 10% of the packets
207 if (x >= 0 && x < 10)
208 {
209 if (!stereo)
210 {
211 audio_10ms[i] = 0;
212 }
213 else
214 {
215 audio_10ms[2*i] = 0;
216 audio_10ms[2*i+1] = 0;
217 }
218 }
219 }
220 }
221 else
222 {
223 if (type == kPlaybackPerChannel)
224 {
225 // playout: mute
226 if (!stereo)
227 {
228 audio_10ms[i] = 0;
229 }
230 else
231 {
232 audio_10ms[2*i] = 0;
233 audio_10ms[2*i+1] = 0;
234 }
235 }
236 else
237 {
238 // recording: emulate packet loss by "dropping" 50% of the packets
239 if (x >= 0 && x < 50)
240 {
241 if (!stereo)
242 {
243 audio_10ms[i] = 0;
244 }
245 else
246 {
247 audio_10ms[2*i] = 0;
248 audio_10ms[2*i+1] = 0;
249 }
250 }
251 }
252 }
253 }
254 }
255
256 // ----------------------------------------------------------------------------
257 // TelephoneEventObserver
258 // ----------------------------------------------------------------------------
259
260 class TelephoneEventObserver: public VoETelephoneEventObserver
261 {
262 public:
263 TelephoneEventObserver(CWnd* editControlOut, CWnd* editControlIn);
264 virtual void OnReceivedTelephoneEventInband(int channel, int eventCode,
265 bool endOfEvent);
266 virtual void OnReceivedTelephoneEventOutOfBand(int channel, int eventCode,
267 bool endOfEvent);
268 private:
269 CWnd* _editControlOutPtr;
270 CWnd* _editControlInPtr;
271 };
272
TelephoneEventObserver(CWnd * editControlOut,CWnd * editControlIn)273 TelephoneEventObserver::TelephoneEventObserver(CWnd* editControlOut, CWnd* editControlIn) :
274 _editControlOutPtr(editControlOut),
275 _editControlInPtr(editControlIn)
276 {
277 }
278
OnReceivedTelephoneEventInband(int channel,int eventCode,bool endOfEvent)279 void TelephoneEventObserver::OnReceivedTelephoneEventInband(int channel,
280 int eventCode,
281 bool endOfEvent)
282 {
283 CString msg;
284 if (endOfEvent)
285 {
286 msg.AppendFormat(_T("%d [END]"), eventCode);
287 _editControlInPtr->SetWindowText((LPCTSTR)msg);
288 }
289 else
290 {
291 msg.AppendFormat(_T("%d [START]"), eventCode);
292 _editControlInPtr->SetWindowText((LPCTSTR)msg);
293 }
294 }
295
OnReceivedTelephoneEventOutOfBand(int channel,int eventCode,bool endOfEvent)296 void TelephoneEventObserver::OnReceivedTelephoneEventOutOfBand(int channel,
297 int eventCode,
298 bool endOfEvent)
299 {
300 CString msg;
301 if (endOfEvent)
302 {
303 msg.AppendFormat(_T("%d [END]"), eventCode);
304 _editControlOutPtr->SetWindowText((LPCTSTR)msg);
305 }
306 else
307 {
308 msg.AppendFormat(_T("%d [START]"), eventCode);
309 _editControlOutPtr->SetWindowText((LPCTSTR)msg);
310 }
311 }
312
313 // ----------------------------------------------------------------------------
314 // RxVadCallback
315 // ----------------------------------------------------------------------------
316
317 class RxCallback : public VoERxVadCallback
318 {
319 public:
RxCallback()320 RxCallback() : vad_decision(-1) {};
321
OnRxVad(int,int vadDecision)322 virtual void OnRxVad(int , int vadDecision)
323 {
324 vad_decision = vadDecision;
325 }
326
327 int vad_decision;
328 };
329
330 // ----------------------------------------------------------------------------
331 // CAboutDlg dialog
332 // ----------------------------------------------------------------------------
333
334 class CAboutDlg : public CDialog
335 {
336 public:
337 CAboutDlg();
338
339 // Dialog Data
340 enum { IDD = IDD_ABOUTBOX };
341
342 protected:
343 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
344
345 // Implementation
346 protected:
347 DECLARE_MESSAGE_MAP()
348 };
349
CAboutDlg()350 CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
351 {
352 }
353
DoDataExchange(CDataExchange * pDX)354 void CAboutDlg::DoDataExchange(CDataExchange* pDX)
355 {
356 CDialog::DoDataExchange(pDX);
357 }
358
359 BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
360 END_MESSAGE_MAP()
361
362 // ----------------------------------------------------------------------------
363 // CTelephonyEvent dialog
364 // ----------------------------------------------------------------------------
365
366 class CTelephonyEvent : public CDialog
367 {
368 DECLARE_DYNAMIC(CTelephonyEvent)
369
370 public:
371 CTelephonyEvent(VoiceEngine* voiceEngine, int channel, CDialog* pParentDialog, CWnd* pParent = NULL); // standard constructor
372 virtual ~CTelephonyEvent();
373
374 // Dialog Data
375 enum { IDD = IDD_DTMF_DIALOG };
376
377 protected:
378 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
379 virtual BOOL OnInitDialog();
380
381 DECLARE_MESSAGE_MAP()
382 public:
383 afx_msg void OnBnClickedButton1();
384 afx_msg void OnBnClickedButton2();
385 afx_msg void OnBnClickedButton3();
386 afx_msg void OnBnClickedButton4();
387 afx_msg void OnBnClickedButton5();
388 afx_msg void OnBnClickedButton6();
389 afx_msg void OnBnClickedButton7();
390 afx_msg void OnBnClickedButton8();
391 afx_msg void OnBnClickedButton9();
392 afx_msg void OnBnClickedButton10();
393 afx_msg void OnBnClickedButton11();
394 afx_msg void OnBnClickedButton12();
395 afx_msg void OnBnClickedButtonA();
396 afx_msg void OnBnClickedButtonB();
397 afx_msg void OnBnClickedButtonC();
398 afx_msg void OnBnClickedButtonD();
399 afx_msg void OnBnClickedCheckDtmfPlayoutRx();
400 afx_msg void OnBnClickedCheckDtmfPlayTone();
401 afx_msg void OnBnClickedCheckStartStopMode();
402 afx_msg void OnBnClickedCheckEventInband();
403 afx_msg void OnBnClickedCheckDtmfFeedback();
404 afx_msg void OnBnClickedCheckDirectFeedback();
405 afx_msg void OnBnClickedRadioSingle();
406 afx_msg void OnBnClickedRadioMulti();
407 afx_msg void OnBnClickedRadioStartStop();
408 afx_msg void OnBnClickedButtonSetRxTelephonePt();
409 afx_msg void OnBnClickedButtonSetTxTelephonePt();
410 afx_msg void OnBnClickedButtonSendTelephoneEvent();
411 afx_msg void OnBnClickedCheckDetectInband();
412 afx_msg void OnBnClickedCheckDetectOutOfBand();
413 afx_msg void OnBnClickedCheckEventDetection();
414
415 private:
416 void SendTelephoneEvent(unsigned char eventCode);
417
418 private:
419 VoiceEngine* _vePtr;
420 VoEBase* _veBasePtr;
421 VoEDtmf* _veDTMFPtr;
422 VoECodec* _veCodecPtr;
423 int _channel;
424 CString _strMsg;
425 CDialog* _parentDialogPtr;
426 TelephoneEventObserver* _telephoneEventObserverPtr;
427 bool _PlayDtmfToneLocally;
428 bool _modeStartStop;
429 bool _modeSingle;
430 bool _modeSequence;
431 bool _playingDTMFTone;
432 bool _outOfBandEventDetection;
433 bool _inbandEventDetection;
434 };
435
IMPLEMENT_DYNAMIC(CTelephonyEvent,CDialog)436 IMPLEMENT_DYNAMIC(CTelephonyEvent, CDialog)
437
438 CTelephonyEvent::CTelephonyEvent(VoiceEngine* voiceEngine,
439 int channel,
440 CDialog* pParentDialog,
441 CWnd* pParent /*=NULL*/)
442 : _vePtr(voiceEngine),
443 _channel(channel),
444 _PlayDtmfToneLocally(false),
445 _modeStartStop(false),
446 _modeSingle(true),
447 _modeSequence(false),
448 _playingDTMFTone(false),
449 _outOfBandEventDetection(true),
450 _inbandEventDetection(false),
451 _parentDialogPtr(pParentDialog),
452 _telephoneEventObserverPtr(NULL),
453 CDialog(CTelephonyEvent::IDD, pParent)
454 {
455 _veBasePtr = VoEBase::GetInterface(_vePtr);
456 _veDTMFPtr = VoEDtmf::GetInterface(_vePtr);
457 _veCodecPtr = VoECodec::GetInterface(_vePtr);
458 }
459
~CTelephonyEvent()460 CTelephonyEvent::~CTelephonyEvent()
461 {
462 _veDTMFPtr->Release();
463 _veCodecPtr->Release();
464 _veBasePtr->Release();
465
466 if (_telephoneEventObserverPtr)
467 {
468 _veDTMFPtr->DeRegisterTelephoneEventDetection(_channel);
469 delete _telephoneEventObserverPtr;
470 _telephoneEventObserverPtr = NULL;
471 }
472 }
473
DoDataExchange(CDataExchange * pDX)474 void CTelephonyEvent::DoDataExchange(CDataExchange* pDX)
475 {
476 CDialog::DoDataExchange(pDX);
477 }
478
479
BEGIN_MESSAGE_MAP(CTelephonyEvent,CDialog)480 BEGIN_MESSAGE_MAP(CTelephonyEvent, CDialog)
481 ON_BN_CLICKED(IDC_BUTTON_1, &CTelephonyEvent::OnBnClickedButton1)
482 ON_BN_CLICKED(IDC_BUTTON_2, &CTelephonyEvent::OnBnClickedButton2)
483 ON_BN_CLICKED(IDC_BUTTON_3, &CTelephonyEvent::OnBnClickedButton3)
484 ON_BN_CLICKED(IDC_BUTTON_4, &CTelephonyEvent::OnBnClickedButton4)
485 ON_BN_CLICKED(IDC_BUTTON_5, &CTelephonyEvent::OnBnClickedButton5)
486 ON_BN_CLICKED(IDC_BUTTON_6, &CTelephonyEvent::OnBnClickedButton6)
487 ON_BN_CLICKED(IDC_BUTTON_7, &CTelephonyEvent::OnBnClickedButton7)
488 ON_BN_CLICKED(IDC_BUTTON_8, &CTelephonyEvent::OnBnClickedButton8)
489 ON_BN_CLICKED(IDC_BUTTON_9, &CTelephonyEvent::OnBnClickedButton9)
490 ON_BN_CLICKED(IDC_BUTTON_10, &CTelephonyEvent::OnBnClickedButton10)
491 ON_BN_CLICKED(IDC_BUTTON_11, &CTelephonyEvent::OnBnClickedButton11)
492 ON_BN_CLICKED(IDC_BUTTON_12, &CTelephonyEvent::OnBnClickedButton12)
493 ON_BN_CLICKED(IDC_BUTTON_13, &CTelephonyEvent::OnBnClickedButtonA)
494 ON_BN_CLICKED(IDC_BUTTON_14, &CTelephonyEvent::OnBnClickedButtonB)
495 ON_BN_CLICKED(IDC_BUTTON_15, &CTelephonyEvent::OnBnClickedButtonC)
496 ON_BN_CLICKED(IDC_BUTTON_16, &CTelephonyEvent::OnBnClickedButtonD)
497 ON_BN_CLICKED(IDC_CHECK_DTMF_PLAYOUT_RX, &CTelephonyEvent::OnBnClickedCheckDtmfPlayoutRx)
498 ON_BN_CLICKED(IDC_CHECK_DTMF_PLAY_TONE, &CTelephonyEvent::OnBnClickedCheckDtmfPlayTone)
499 ON_BN_CLICKED(IDC_CHECK_EVENT_INBAND, &CTelephonyEvent::OnBnClickedCheckEventInband)
500 ON_BN_CLICKED(IDC_CHECK_DTMF_FEEDBACK, &CTelephonyEvent::OnBnClickedCheckDtmfFeedback)
501 ON_BN_CLICKED(IDC_CHECK_DIRECT_FEEDBACK, &CTelephonyEvent::OnBnClickedCheckDirectFeedback)
502 ON_BN_CLICKED(IDC_RADIO_SINGLE, &CTelephonyEvent::OnBnClickedRadioSingle)
503 ON_BN_CLICKED(IDC_RADIO_MULTI, &CTelephonyEvent::OnBnClickedRadioMulti)
504 ON_BN_CLICKED(IDC_RADIO_START_STOP, &CTelephonyEvent::OnBnClickedRadioStartStop)
505 ON_BN_CLICKED(IDC_BUTTON_SET_RX_TELEPHONE_PT, &CTelephonyEvent::OnBnClickedButtonSetRxTelephonePt)
506 ON_BN_CLICKED(IDC_BUTTON_SET_TX_TELEPHONE_PT, &CTelephonyEvent::OnBnClickedButtonSetTxTelephonePt)
507 ON_BN_CLICKED(IDC_BUTTON_SEND_TELEPHONE_EVENT, &CTelephonyEvent::OnBnClickedButtonSendTelephoneEvent)
508 ON_BN_CLICKED(IDC_CHECK_DETECT_INBAND, &CTelephonyEvent::OnBnClickedCheckDetectInband)
509 ON_BN_CLICKED(IDC_CHECK_DETECT_OUT_OF_BAND, &CTelephonyEvent::OnBnClickedCheckDetectOutOfBand)
510 ON_BN_CLICKED(IDC_CHECK_EVENT_DETECTION, &CTelephonyEvent::OnBnClickedCheckEventDetection)
511 END_MESSAGE_MAP()
512
513
514 // CTelephonyEvent message handlers
515
516 BOOL CTelephonyEvent::OnInitDialog()
517 {
518 CDialog::OnInitDialog();
519
520 CString str;
521 GetWindowText(str);
522 str.AppendFormat(_T(" [channel = %d]"), _channel);
523 SetWindowText(str);
524
525 // Update dialog with latest playout state
526 bool enabled(false);
527 _veDTMFPtr->GetDtmfPlayoutStatus(_channel, enabled);
528 CButton* button = (CButton*)GetDlgItem(IDC_CHECK_DTMF_PLAYOUT_RX);
529 button->SetCheck(enabled ? BST_CHECKED : BST_UNCHECKED);
530
531 // Update dialog with latest feedback state
532 bool directFeedback(false);
533 _veDTMFPtr->GetDtmfFeedbackStatus(enabled, directFeedback);
534 button = (CButton*)GetDlgItem(IDC_CHECK_DTMF_FEEDBACK);
535 button->SetCheck(enabled ? BST_CHECKED : BST_UNCHECKED);
536 button = (CButton*)GetDlgItem(IDC_CHECK_DIRECT_FEEDBACK);
537 button->SetCheck(directFeedback ? BST_CHECKED : BST_UNCHECKED);
538
539 // Default event length is 160 ms
540 SetDlgItemInt(IDC_EDIT_EVENT_LENGTH, 160);
541
542 // Default event attenuation is 10 (<-> -10dBm0)
543 SetDlgItemInt(IDC_EDIT_EVENT_ATTENUATION, 10);
544
545 // Current event-detection status
546 TelephoneEventDetectionMethods detectionMethod(kOutOfBand);
547 if (_veDTMFPtr->GetTelephoneEventDetectionStatus(_channel, enabled, detectionMethod) == 0)
548 {
549 // DTMF detection is supported
550 if (enabled)
551 {
552 button = (CButton*)GetDlgItem(IDC_CHECK_EVENT_DETECTION);
553 button->SetCheck(BST_CHECKED);
554 }
555 if (detectionMethod == kOutOfBand || detectionMethod == kInAndOutOfBand)
556 {
557 button = (CButton*)GetDlgItem(IDC_CHECK_DETECT_OUT_OF_BAND);
558 button->SetCheck(BST_CHECKED);
559 }
560 if (detectionMethod == kInBand || detectionMethod == kInAndOutOfBand)
561 {
562 button = (CButton*)GetDlgItem(IDC_CHECK_DETECT_INBAND);
563 button->SetCheck(BST_CHECKED);
564 }
565 }
566 else
567 {
568 // DTMF detection is not supported
569 GetDlgItem(IDC_CHECK_EVENT_DETECTION)->EnableWindow(FALSE);
570 GetDlgItem(IDC_CHECK_DETECT_OUT_OF_BAND)->EnableWindow(FALSE);
571 GetDlgItem(IDC_CHECK_DETECT_INBAND)->EnableWindow(FALSE);
572 GetDlgItem(IDC_EDIT_ON_EVENT_INBAND)->EnableWindow(FALSE);
573 GetDlgItem(IDC_EDIT_ON_EVENT_OUT_OF_BAND)->EnableWindow(FALSE);
574 }
575
576 // Telephone-event PTs
577 unsigned char pt(0);
578 _veDTMFPtr->GetSendTelephoneEventPayloadType(_channel, pt);
579 SetDlgItemInt(IDC_EDIT_EVENT_TX_PT, pt);
580
581 CodecInst codec;
582 strcpy_s(codec.plname, 32, "telephone-event"); codec.channels = 1; codec.plfreq = 8000;
583 _veCodecPtr->GetRecPayloadType(_channel, codec);
584 SetDlgItemInt(IDC_EDIT_EVENT_RX_PT, codec.pltype);
585
586 if (_modeSingle)
587 {
588 ((CButton*)GetDlgItem(IDC_RADIO_SINGLE))->SetCheck(BST_CHECKED);
589 }
590 else if (_modeStartStop)
591 {
592 ((CButton*)GetDlgItem(IDC_RADIO_START_STOP))->SetCheck(BST_CHECKED);
593 }
594 else if (_modeSequence)
595 {
596 ((CButton*)GetDlgItem(IDC_RADIO_MULTI))->SetCheck(BST_CHECKED);
597 }
598
599 return TRUE; // return TRUE unless you set the focus to a control
600 }
SendTelephoneEvent(unsigned char eventCode)601 void CTelephonyEvent::SendTelephoneEvent(unsigned char eventCode)
602 {
603 BOOL ret;
604 int lengthMs(0);
605 int attenuationDb(0);
606 bool outBand(false);
607 int res(0);
608
609 // tone length
610 if (!_modeStartStop)
611 {
612 lengthMs = GetDlgItemInt(IDC_EDIT_EVENT_LENGTH, &ret);
613 if (ret == FALSE)
614 {
615 // use default length if edit field is empty
616 lengthMs = 160;
617 }
618 }
619
620 // attenuation
621 attenuationDb = GetDlgItemInt(IDC_EDIT_EVENT_ATTENUATION, &ret);
622 if (ret == FALSE)
623 {
624 // use default length if edit field is empty
625 attenuationDb = 10;
626 }
627
628 // out-band or in-band
629 CButton* button = (CButton*)GetDlgItem(IDC_CHECK_EVENT_INBAND);
630 int check = button->GetCheck();
631 outBand = (check == BST_UNCHECKED);
632
633 if (eventCode < 16)
634 SetDlgItemInt(IDC_EDIT_DTMF_EVENT, eventCode);
635
636 if (_PlayDtmfToneLocally)
637 {
638 // --- PlayDtmfTone
639
640 if (_modeSingle)
641 {
642 TEST2(_veDTMFPtr->PlayDtmfTone(eventCode, lengthMs, attenuationDb) == 0,
643 _T("PlayDtmfTone(eventCode=%u, lengthMs=%d, attenuationDb=%d)"), eventCode, lengthMs, attenuationDb);
644 }
645 else if (_modeStartStop)
646 {
647 if (!_playingDTMFTone)
648 {
649 TEST2((res = _veDTMFPtr->StartPlayingDtmfTone(eventCode, attenuationDb)) == 0,
650 _T("StartPlayingDtmfTone(eventCode=%u, attenuationDb=%d)"), eventCode, attenuationDb);
651 }
652 else
653 {
654 TEST2((res = _veDTMFPtr->StopPlayingDtmfTone()) == 0,
655 _T("StopPlayingDTMFTone()"));
656 }
657 if (res == 0)
658 _playingDTMFTone = !_playingDTMFTone;
659 }
660 else if (_modeSequence)
661 {
662 int nTones(1);
663 int sleepMs(0);
664 int lenMult(1);
665 if (eventCode == 1)
666 {
667 nTones = 2;
668 sleepMs = lengthMs;
669 lenMult = 1;
670 }
671 else if (eventCode == 2)
672 {
673 nTones = 2;
674 sleepMs = lengthMs/2;
675 lenMult = 2;
676 }
677 else if (eventCode == 3)
678 {
679 nTones = 3;
680 sleepMs = 0;
681 lenMult = 1;
682 }
683 for (int i = 0; i < nTones; i++)
684 {
685 TEST2(_veDTMFPtr->PlayDtmfTone(eventCode, lengthMs, attenuationDb) == 0,
686 _T("PlayDtmfTone(eventCode=%u, outBand=%d, lengthMs=%d, attenuationDb=%d)"), eventCode, lengthMs, attenuationDb);
687 Sleep(sleepMs);
688 lengthMs = lenMult*lengthMs;
689 eventCode++;
690 }
691 }
692 }
693 else
694 {
695 // --- SendTelephoneEvent
696
697 if (_modeSingle)
698 {
699 TEST2(_veDTMFPtr->SendTelephoneEvent(_channel, eventCode, outBand, lengthMs, attenuationDb) == 0,
700 _T("SendTelephoneEvent(channel=%d, eventCode=%u, outBand=%d, lengthMs=%d, attenuationDb=%d)"), _channel, eventCode, outBand, lengthMs, attenuationDb);
701 }
702 else if (_modeStartStop)
703 {
704 TEST2(false, _T("*** NOT IMPLEMENTED ***"));
705 }
706 else if (_modeSequence)
707 {
708 int nTones(1);
709 int sleepMs(0);
710 int lenMult(1);
711 if (eventCode == 1)
712 {
713 nTones = 2;
714 sleepMs = lengthMs;
715 lenMult = 1;
716 }
717 else if (eventCode == 2)
718 {
719 eventCode = 1;
720 nTones = 2;
721 sleepMs = lengthMs/2;
722 lenMult = 2;
723 }
724 else if (eventCode == 3)
725 {
726 eventCode = 1;
727 nTones = 3;
728 sleepMs = 0;
729 lenMult = 1;
730 }
731 for (int i = 0; i < nTones; i++)
732 {
733 TEST2(_veDTMFPtr->SendTelephoneEvent(_channel, eventCode, outBand, lengthMs, attenuationDb) == 0,
734 _T("SendTelephoneEvent(channel=%d, eventCode=%u, outBand=%d, lengthMs=%d, attenuationDb=%d)"), _channel, eventCode, outBand, lengthMs, attenuationDb);
735 Sleep(sleepMs);
736 lengthMs = lenMult*lengthMs;
737 eventCode++;
738 }
739 }
740 }
741 }
742
OnBnClickedButtonSendTelephoneEvent()743 void CTelephonyEvent::OnBnClickedButtonSendTelephoneEvent()
744 {
745 BOOL ret;
746 unsigned char eventCode(0);
747
748 eventCode = (unsigned char)GetDlgItemInt(IDC_EDIT_EVENT_CODE, &ret);
749 if (ret == FALSE)
750 {
751 return;
752 }
753 SendTelephoneEvent(eventCode);
754 }
755
OnBnClickedButton1()756 void CTelephonyEvent::OnBnClickedButton1()
757 {
758 SendTelephoneEvent(1);
759 }
760
OnBnClickedButton2()761 void CTelephonyEvent::OnBnClickedButton2()
762 {
763 SendTelephoneEvent(2);
764 }
765
OnBnClickedButton3()766 void CTelephonyEvent::OnBnClickedButton3()
767 {
768 SendTelephoneEvent(3);
769 }
770
OnBnClickedButton4()771 void CTelephonyEvent::OnBnClickedButton4()
772 {
773 SendTelephoneEvent(4);
774 }
775
OnBnClickedButton5()776 void CTelephonyEvent::OnBnClickedButton5()
777 {
778 SendTelephoneEvent(5);
779 }
780
OnBnClickedButton6()781 void CTelephonyEvent::OnBnClickedButton6()
782 {
783 SendTelephoneEvent(6);
784 }
785
OnBnClickedButton7()786 void CTelephonyEvent::OnBnClickedButton7()
787 {
788 SendTelephoneEvent(7);
789 }
790
OnBnClickedButton8()791 void CTelephonyEvent::OnBnClickedButton8()
792 {
793 SendTelephoneEvent(8);
794 }
795
OnBnClickedButton9()796 void CTelephonyEvent::OnBnClickedButton9()
797 {
798 SendTelephoneEvent(9);
799 }
800
OnBnClickedButton10()801 void CTelephonyEvent::OnBnClickedButton10()
802 {
803 // *
804 SendTelephoneEvent(10);
805 }
806
OnBnClickedButton11()807 void CTelephonyEvent::OnBnClickedButton11()
808 {
809 SendTelephoneEvent(0);
810 }
811
OnBnClickedButton12()812 void CTelephonyEvent::OnBnClickedButton12()
813 {
814 // #
815 SendTelephoneEvent(11);
816 }
817
OnBnClickedButtonA()818 void CTelephonyEvent::OnBnClickedButtonA()
819 {
820 SendTelephoneEvent(12);
821 }
822
OnBnClickedButtonB()823 void CTelephonyEvent::OnBnClickedButtonB()
824 {
825 SendTelephoneEvent(13);
826 }
827
OnBnClickedButtonC()828 void CTelephonyEvent::OnBnClickedButtonC()
829 {
830 SendTelephoneEvent(14);
831 }
832
OnBnClickedButtonD()833 void CTelephonyEvent::OnBnClickedButtonD()
834 {
835 SendTelephoneEvent(15);
836 }
837
OnBnClickedCheckDtmfPlayoutRx()838 void CTelephonyEvent::OnBnClickedCheckDtmfPlayoutRx()
839 {
840 CButton* button = (CButton*)GetDlgItem(IDC_CHECK_DTMF_PLAYOUT_RX);
841 int check = button->GetCheck();
842 const bool enable = (check == BST_CHECKED);
843 TEST2(_veDTMFPtr->SetDtmfPlayoutStatus(_channel, enable) == 0, _T("SetDtmfPlayoutStatus(channel=%d, enable=%d)"), _channel, enable);
844 }
845
OnBnClickedCheckDtmfPlayTone()846 void CTelephonyEvent::OnBnClickedCheckDtmfPlayTone()
847 {
848 CButton* button = (CButton*)GetDlgItem(IDC_CHECK_DTMF_PLAY_TONE);
849 int check = button->GetCheck();
850 _PlayDtmfToneLocally = (check == BST_CHECKED);
851 }
852
OnBnClickedRadioSingle()853 void CTelephonyEvent::OnBnClickedRadioSingle()
854 {
855 _modeStartStop = false;
856 _modeSingle = true;
857 _modeSequence = false;
858 }
859
OnBnClickedRadioMulti()860 void CTelephonyEvent::OnBnClickedRadioMulti()
861 {
862 _modeStartStop = false;
863 _modeSingle = false;
864 _modeSequence = true;
865 }
866
OnBnClickedRadioStartStop()867 void CTelephonyEvent::OnBnClickedRadioStartStop()
868 {
869 // CButton* button = (CButton*)GetDlgItem(IDC_RADIO_START_STOP);
870 // int check = button->GetCheck();
871 _modeStartStop = true;
872 _modeSingle = false;
873 _modeSequence = false;
874 // GetDlgItem(IDC_EDIT_EVENT_LENGTH)->EnableWindow();
875 }
876
OnBnClickedCheckEventInband()877 void CTelephonyEvent::OnBnClickedCheckEventInband()
878 {
879 CButton* button = (CButton*)GetDlgItem(IDC_CHECK_EVENT_INBAND);
880 int check = button->GetCheck();
881 GetDlgItem(IDC_EDIT_EVENT_CODE)->EnableWindow(check?FALSE:TRUE);
882 GetDlgItem(IDC_BUTTON_SEND_TELEPHONE_EVENT)->EnableWindow(check?FALSE:TRUE);
883 }
884
OnBnClickedCheckDtmfFeedback()885 void CTelephonyEvent::OnBnClickedCheckDtmfFeedback()
886 {
887 CButton* button(NULL);
888
889 // Retrieve feedback state
890 button = (CButton*)GetDlgItem(IDC_CHECK_DTMF_FEEDBACK);
891 int check = button->GetCheck();
892 const bool enable = (check == BST_CHECKED);
893
894 // Retrieve direct-feedback setting
895 button = (CButton*)GetDlgItem(IDC_CHECK_DIRECT_FEEDBACK);
896 check = button->GetCheck();
897 const bool directFeedback = (check == BST_CHECKED);
898
899 // GetDlgItem(IDC_CHECK_DIRECT_FEEDBACK)->EnableWindow(enable ? TRUE : FALSE);
900
901 TEST2(_veDTMFPtr->SetDtmfFeedbackStatus(enable, directFeedback) == 0,
902 _T("SetDtmfFeedbackStatus(enable=%d, directFeedback=%d)"), enable, directFeedback);
903 }
904
OnBnClickedCheckDirectFeedback()905 void CTelephonyEvent::OnBnClickedCheckDirectFeedback()
906 {
907 CButton* button(NULL);
908
909 // Retrieve feedback state
910 button = (CButton*)GetDlgItem(IDC_CHECK_DTMF_FEEDBACK);
911 int check = button->GetCheck();
912 const bool enable = (check == BST_CHECKED);
913
914 // Retrieve new direct-feedback setting
915 button = (CButton*)GetDlgItem(IDC_CHECK_DIRECT_FEEDBACK);
916 check = button->GetCheck();
917 const bool directFeedback = (check == BST_CHECKED);
918
919 TEST2(_veDTMFPtr->SetDtmfFeedbackStatus(enable, directFeedback) == 0,
920 _T("SetDtmfFeedbackStatus(enable=%d, directFeedback=%d)"), enable, directFeedback);
921 }
922
OnBnClickedButtonSetRxTelephonePt()923 void CTelephonyEvent::OnBnClickedButtonSetRxTelephonePt()
924 {
925 BOOL ret;
926 int pt = GetDlgItemInt(IDC_EDIT_EVENT_RX_PT, &ret);
927 if (ret == FALSE || pt < 0 || pt > 127)
928 return;
929 CodecInst codec;
930 strcpy_s(codec.plname, 32, "telephone-event");
931 codec.pltype = pt;
932 codec.channels = 1;
933 codec.plfreq = 8000;
934 TEST2(_veCodecPtr->SetRecPayloadType(_channel, codec) == 0,
935 _T("SetRecPayloadType(channel=%d, codec.pltype=%d)"), _channel,
936 codec.pltype);
937 }
938
OnBnClickedButtonSetTxTelephonePt()939 void CTelephonyEvent::OnBnClickedButtonSetTxTelephonePt()
940 {
941 BOOL ret;
942 int pt = GetDlgItemInt(IDC_EDIT_EVENT_TX_PT, &ret);
943 if (ret == FALSE || pt < 0 || pt > 127)
944 return;
945 TEST2(_veDTMFPtr->SetSendTelephoneEventPayloadType(_channel, pt) == 0,
946 _T("SetSendTelephoneEventPayloadType(channel=%d, type=%d)"), _channel,
947 pt);
948 }
949
OnBnClickedCheckDetectInband()950 void CTelephonyEvent::OnBnClickedCheckDetectInband()
951 {
952 CButton* button = (CButton*)GetDlgItem(IDC_CHECK_DETECT_INBAND);
953 int check = button->GetCheck();
954 _inbandEventDetection = (check == BST_CHECKED);
955
956 bool enabled(false);
957 TelephoneEventDetectionMethods detectionMethod;
958 _veDTMFPtr->GetTelephoneEventDetectionStatus(_channel, enabled, detectionMethod);
959 if (enabled)
960 {
961 // deregister
962 _veDTMFPtr->DeRegisterTelephoneEventDetection(_channel);
963 delete _telephoneEventObserverPtr;
964 _telephoneEventObserverPtr = NULL;
965 SetDlgItemText(IDC_EDIT_ON_EVENT_INBAND,_T(""));
966 SetDlgItemText(IDC_EDIT_ON_EVENT_OUT_OF_BAND,_T(""));
967 }
968 OnBnClickedCheckEventDetection();
969 }
970
OnBnClickedCheckDetectOutOfBand()971 void CTelephonyEvent::OnBnClickedCheckDetectOutOfBand()
972 {
973 CButton* button = (CButton*)GetDlgItem(IDC_CHECK_DETECT_OUT_OF_BAND);
974 int check = button->GetCheck();
975 _outOfBandEventDetection = (check == BST_CHECKED);
976
977 bool enabled(false);
978 TelephoneEventDetectionMethods detectionMethod;
979 _veDTMFPtr->GetTelephoneEventDetectionStatus(_channel, enabled, detectionMethod);
980 if (enabled)
981 {
982 // deregister
983 _veDTMFPtr->DeRegisterTelephoneEventDetection(_channel);
984 delete _telephoneEventObserverPtr;
985 _telephoneEventObserverPtr = NULL;
986 SetDlgItemText(IDC_EDIT_ON_EVENT_INBAND,_T(""));
987 SetDlgItemText(IDC_EDIT_ON_EVENT_OUT_OF_BAND,_T(""));
988 }
989 OnBnClickedCheckEventDetection();
990 }
991
OnBnClickedCheckEventDetection()992 void CTelephonyEvent::OnBnClickedCheckEventDetection()
993 {
994 CButton* button = (CButton*)GetDlgItem(IDC_CHECK_EVENT_DETECTION);
995 int check = button->GetCheck();
996 const bool enable = (check == BST_CHECKED);
997
998 if (enable)
999 {
1000 TelephoneEventDetectionMethods method(kInBand);
1001 if (_inbandEventDetection && !_outOfBandEventDetection)
1002 method = kInBand;
1003 else if (!_inbandEventDetection && _outOfBandEventDetection)
1004 method = kOutOfBand;
1005 else if (_inbandEventDetection && _outOfBandEventDetection)
1006 method = kInAndOutOfBand;
1007
1008 CWnd* wndOut = GetDlgItem(IDC_EDIT_ON_EVENT_OUT_OF_BAND);
1009 CWnd* wndIn = GetDlgItem(IDC_EDIT_ON_EVENT_INBAND);
1010 _telephoneEventObserverPtr = new TelephoneEventObserver(wndOut, wndIn);
1011
1012 TEST2(_veDTMFPtr->RegisterTelephoneEventDetection(_channel, method, *_telephoneEventObserverPtr) == 0,
1013 _T("RegisterTelephoneEventDetection(channel=%d, detectionMethod=%d)"), _channel, method);
1014 }
1015 else
1016 {
1017 TEST2(_veDTMFPtr->DeRegisterTelephoneEventDetection(_channel) == 0,
1018 _T("DeRegisterTelephoneEventDetection(channel=%d)"), _channel);
1019 delete _telephoneEventObserverPtr;
1020 _telephoneEventObserverPtr = NULL;
1021 SetDlgItemText(IDC_EDIT_ON_EVENT_INBAND,_T(""));
1022 SetDlgItemText(IDC_EDIT_ON_EVENT_OUT_OF_BAND,_T(""));
1023 }
1024 }
1025
1026 // ============================================================================
1027 // CWinTestDlg dialog
1028 // ============================================================================
1029
CWinTestDlg(CWnd * pParent)1030 CWinTestDlg::CWinTestDlg(CWnd* pParent /*=NULL*/)
1031 : CDialog(CWinTestDlg::IDD, pParent),
1032 _failCount(0),
1033 _vePtr(NULL),
1034 _veBasePtr(NULL),
1035 _veCodecPtr(NULL),
1036 _veNetworkPtr(NULL),
1037 _veFilePtr(NULL),
1038 _veHardwarePtr(NULL),
1039 _veExternalMediaPtr(NULL),
1040 _veApmPtr(NULL),
1041 _veRtpRtcpPtr(NULL),
1042 _transportPtr(NULL),
1043 _externalMediaPtr(NULL),
1044 _externalTransport(false),
1045 _externalTransportBuild(false),
1046 _checkPlayFileIn(0),
1047 _checkPlayFileIn1(0),
1048 _checkPlayFileIn2(0),
1049 _checkPlayFileOut1(0),
1050 _checkPlayFileOut2(0),
1051 _checkAGC(0),
1052 _checkAGC1(0),
1053 _checkNS(0),
1054 _checkNS1(0),
1055 _checkEC(0),
1056 _checkVAD1(0),
1057 _checkVAD2(0),
1058 _checkSrtpTx1(0),
1059 _checkSrtpTx2(0),
1060 _checkSrtpRx1(0),
1061 _checkSrtpRx2(0),
1062 _checkConference1(0),
1063 _checkConference2(0),
1064 _checkOnHold1(0),
1065 _checkOnHold2(0),
1066 _strComboIp1(_T("")),
1067 _strComboIp2(_T("")),
1068 _delayEstimate1(false),
1069 _delayEstimate2(false),
1070 _rxVad(false),
1071 _nErrorCallbacks(0),
1072 _timerTicks(0)
1073 {
1074 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
1075
1076 _vePtr = VoiceEngine::Create();
1077
1078 VoiceEngine::SetTraceFilter(kTraceNone);
1079 // VoiceEngine::SetTraceFilter(kTraceAll);
1080 // VoiceEngine::SetTraceFilter(kTraceStream | kTraceStateInfo | kTraceWarning | kTraceError | kTraceCritical | kTraceApiCall | kTraceModuleCall | kTraceMemory | kTraceDebug | kTraceInfo);
1081 // VoiceEngine::SetTraceFilter(kTraceStateInfo | kTraceWarning | kTraceError | kTraceCritical | kTraceApiCall | kTraceModuleCall | kTraceMemory | kTraceInfo);
1082
1083 VoiceEngine::SetTraceFile("ve_win_test.txt");
1084 VoiceEngine::SetTraceCallback(NULL);
1085
1086 if (_vePtr)
1087 {
1088 _veExternalMediaPtr = VoEExternalMedia::GetInterface(_vePtr);
1089 _veVolumeControlPtr = VoEVolumeControl::GetInterface(_vePtr);
1090 _veVideoSyncPtr = VoEVideoSync::GetInterface(_vePtr);
1091 _veNetworkPtr = VoENetwork::GetInterface(_vePtr);
1092 _veFilePtr = VoEFile::GetInterface(_vePtr);
1093 _veApmPtr = VoEAudioProcessing::GetInterface(_vePtr);
1094
1095 _veBasePtr = VoEBase::GetInterface(_vePtr);
1096 _veCodecPtr = VoECodec::GetInterface(_vePtr);
1097 _veHardwarePtr = VoEHardware::GetInterface(_vePtr);
1098 _veRtpRtcpPtr = VoERTP_RTCP::GetInterface(_vePtr);
1099 _transportPtr = new MyTransport(_veNetworkPtr);
1100 _externalMediaPtr = new MediaProcessImpl();
1101 _rxVadObserverPtr = new RxCallback();
1102 }
1103
1104 _veBasePtr->RegisterVoiceEngineObserver(*this);
1105
1106 std::string resource_path = webrtc::test::ProjectRootPath();
1107 if (resource_path == webrtc::test::kCannotFindProjectRootDir) {
1108 _long_audio_file_path = "./";
1109 } else {
1110 _long_audio_file_path = resource_path + "data\\voice_engine\\";
1111 }
1112 }
1113
~CWinTestDlg()1114 CWinTestDlg::~CWinTestDlg()
1115 {
1116 if (_externalMediaPtr) delete _externalMediaPtr;
1117 if (_transportPtr) delete _transportPtr;
1118 if (_rxVadObserverPtr) delete _rxVadObserverPtr;
1119
1120 if (_veExternalMediaPtr) _veExternalMediaPtr->Release();
1121 if (_veVideoSyncPtr) _veVideoSyncPtr->Release();
1122 if (_veVolumeControlPtr) _veVolumeControlPtr->Release();
1123
1124 if (_veBasePtr) _veBasePtr->Terminate();
1125 if (_veBasePtr) _veBasePtr->Release();
1126
1127 if (_veCodecPtr) _veCodecPtr->Release();
1128 if (_veNetworkPtr) _veNetworkPtr->Release();
1129 if (_veFilePtr) _veFilePtr->Release();
1130 if (_veHardwarePtr) _veHardwarePtr->Release();
1131 if (_veApmPtr) _veApmPtr->Release();
1132 if (_veRtpRtcpPtr) _veRtpRtcpPtr->Release();
1133 if (_vePtr)
1134 {
1135 VoiceEngine::Delete(_vePtr);
1136 }
1137 VoiceEngine::SetTraceFilter(kTraceNone);
1138 }
1139
DoDataExchange(CDataExchange * pDX)1140 void CWinTestDlg::DoDataExchange(CDataExchange* pDX)
1141 {
1142 CDialog::DoDataExchange(pDX);
1143 DDX_CBString(pDX, IDC_COMBO_IP_1, _strComboIp1);
1144 DDX_CBString(pDX, IDC_COMBO_IP_2, _strComboIp2);
1145 }
1146
BEGIN_MESSAGE_MAP(CWinTestDlg,CDialog)1147 BEGIN_MESSAGE_MAP(CWinTestDlg, CDialog)
1148 ON_WM_SYSCOMMAND()
1149 ON_WM_PAINT()
1150 ON_WM_QUERYDRAGICON()
1151 ON_WM_TIMER()
1152 //}}AFX_MSG_MAP
1153 ON_BN_CLICKED(IDC_BUTTON_CREATE_1, &CWinTestDlg::OnBnClickedButtonCreate1)
1154 ON_BN_CLICKED(IDC_BUTTON_DELETE_1, &CWinTestDlg::OnBnClickedButtonDelete1)
1155 ON_BN_CLICKED(IDC_BUTTON_CREATE_2, &CWinTestDlg::OnBnClickedButtonCreate2)
1156 ON_BN_CLICKED(IDC_BUTTON_DELETE_2, &CWinTestDlg::OnBnClickedButtonDelete2)
1157 ON_CBN_SELCHANGE(IDC_COMBO_CODEC_1, &CWinTestDlg::OnCbnSelchangeComboCodec1)
1158 ON_BN_CLICKED(IDC_BUTTON_START_LISTEN_1, &CWinTestDlg::OnBnClickedButtonStartListen1)
1159 ON_BN_CLICKED(IDC_BUTTON_STOP_LISTEN_1, &CWinTestDlg::OnBnClickedButtonStopListen1)
1160 ON_BN_CLICKED(IDC_BUTTON_START_PLAYOUT_1, &CWinTestDlg::OnBnClickedButtonStartPlayout1)
1161 ON_BN_CLICKED(IDC_BUTTON_STOP_PLAYOUT_1, &CWinTestDlg::OnBnClickedButtonStopPlayout1)
1162 ON_BN_CLICKED(IDC_BUTTON_START_SEND_1, &CWinTestDlg::OnBnClickedButtonStartSend1)
1163 ON_BN_CLICKED(IDC_BUTTON_STOP_SEND_1, &CWinTestDlg::OnBnClickedButtonStopSend1)
1164 ON_CBN_SELCHANGE(IDC_COMBO_IP_2, &CWinTestDlg::OnCbnSelchangeComboIp2)
1165 ON_CBN_SELCHANGE(IDC_COMBO_IP_1, &CWinTestDlg::OnCbnSelchangeComboIp1)
1166 ON_CBN_SELCHANGE(IDC_COMBO_CODEC_2, &CWinTestDlg::OnCbnSelchangeComboCodec2)
1167 ON_BN_CLICKED(IDC_BUTTON_START_LISTEN_2, &CWinTestDlg::OnBnClickedButtonStartListen2)
1168 ON_BN_CLICKED(IDC_BUTTON_STOP_LISTEN_2, &CWinTestDlg::OnBnClickedButtonStopListen2)
1169 ON_BN_CLICKED(IDC_BUTTON_START_PLAYOUT_2, &CWinTestDlg::OnBnClickedButtonStartPlayout2)
1170 ON_BN_CLICKED(IDC_BUTTON_STOP_PLAYOUT_2, &CWinTestDlg::OnBnClickedButtonStopPlayout2)
1171 ON_BN_CLICKED(IDC_BUTTON_START_SEND_2, &CWinTestDlg::OnBnClickedButtonStartSend2)
1172 ON_BN_CLICKED(IDC_BUTTON_STOP_SEND_2, &CWinTestDlg::OnBnClickedButtonStopSend2)
1173 ON_BN_CLICKED(IDC_CHECK_EXT_TRANS_1, &CWinTestDlg::OnBnClickedCheckExtTrans1)
1174 ON_BN_CLICKED(IDC_CHECK_PLAY_FILE_IN_1, &CWinTestDlg::OnBnClickedCheckPlayFileIn1)
1175 ON_BN_CLICKED(IDC_CHECK_PLAY_FILE_OUT_1, &CWinTestDlg::OnBnClickedCheckPlayFileOut1)
1176 ON_BN_CLICKED(IDC_CHECK_EXT_TRANS_2, &CWinTestDlg::OnBnClickedCheckExtTrans2)
1177 ON_BN_CLICKED(IDC_CHECK_PLAY_FILE_IN_2, &CWinTestDlg::OnBnClickedCheckPlayFileIn2)
1178 ON_BN_CLICKED(IDC_CHECK_PLAY_FILE_OUT_2, &CWinTestDlg::OnBnClickedCheckPlayFileOut2)
1179 ON_BN_CLICKED(IDC_CHECK_PLAY_FILE_IN, &CWinTestDlg::OnBnClickedCheckPlayFileIn)
1180 ON_CBN_SELCHANGE(IDC_COMBO_REC_DEVICE, &CWinTestDlg::OnCbnSelchangeComboRecDevice)
1181 ON_CBN_SELCHANGE(IDC_COMBO_PLAY_DEVICE, &CWinTestDlg::OnCbnSelchangeComboPlayDevice)
1182 ON_BN_CLICKED(IDC_CHECK_EXT_MEDIA_IN_1, &CWinTestDlg::OnBnClickedCheckExtMediaIn1)
1183 ON_BN_CLICKED(IDC_CHECK_EXT_MEDIA_OUT_1, &CWinTestDlg::OnBnClickedCheckExtMediaOut1)
1184 ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER_INPUT_VOLUME, &CWinTestDlg::OnNMReleasedcaptureSliderInputVolume)
1185 ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER_OUTPUT_VOLUME, &CWinTestDlg::OnNMReleasedcaptureSliderOutputVolume)
1186 ON_BN_CLICKED(IDC_CHECK_AGC, &CWinTestDlg::OnBnClickedCheckAgc)
1187 ON_BN_CLICKED(IDC_CHECK_NS, &CWinTestDlg::OnBnClickedCheckNs)
1188 ON_BN_CLICKED(IDC_CHECK_EC, &CWinTestDlg::OnBnClickedCheckEc)
1189 ON_BN_CLICKED(IDC_CHECK_VAD_1, &CWinTestDlg::OnBnClickedCheckVad1)
1190 ON_BN_CLICKED(IDC_CHECK_VAD_3, &CWinTestDlg::OnBnClickedCheckVad2)
1191 ON_BN_CLICKED(IDC_CHECK_EXT_MEDIA_IN_2, &CWinTestDlg::OnBnClickedCheckExtMediaIn2)
1192 ON_BN_CLICKED(IDC_CHECK_EXT_MEDIA_OUT_2, &CWinTestDlg::OnBnClickedCheckExtMediaOut2)
1193 ON_BN_CLICKED(IDC_CHECK_MUTE_IN, &CWinTestDlg::OnBnClickedCheckMuteIn)
1194 ON_BN_CLICKED(IDC_CHECK_MUTE_IN_1, &CWinTestDlg::OnBnClickedCheckMuteIn1)
1195 ON_BN_CLICKED(IDC_CHECK_MUTE_IN_2, &CWinTestDlg::OnBnClickedCheckMuteIn2)
1196 ON_BN_CLICKED(IDC_CHECK_SRTP_TX_1, &CWinTestDlg::OnBnClickedCheckSrtpTx1)
1197 ON_BN_CLICKED(IDC_CHECK_SRTP_RX_1, &CWinTestDlg::OnBnClickedCheckSrtpRx1)
1198 ON_BN_CLICKED(IDC_CHECK_SRTP_TX_2, &CWinTestDlg::OnBnClickedCheckSrtpTx2)
1199 ON_BN_CLICKED(IDC_CHECK_SRTP_RX_2, &CWinTestDlg::OnBnClickedCheckSrtpRx2)
1200 ON_BN_CLICKED(IDC_CHECK_EXT_ENCRYPTION_1, &CWinTestDlg::OnBnClickedCheckExtEncryption1)
1201 ON_BN_CLICKED(IDC_CHECK_EXT_ENCRYPTION_2, &CWinTestDlg::OnBnClickedCheckExtEncryption2)
1202 ON_BN_CLICKED(IDC_BUTTON_DTMF_1, &CWinTestDlg::OnBnClickedButtonDtmf1)
1203 ON_BN_CLICKED(IDC_CHECK_REC_MIC, &CWinTestDlg::OnBnClickedCheckRecMic)
1204 ON_BN_CLICKED(IDC_BUTTON_DTMF_2, &CWinTestDlg::OnBnClickedButtonDtmf2)
1205 ON_BN_CLICKED(IDC_BUTTON_TEST_1, &CWinTestDlg::OnBnClickedButtonTest1)
1206 ON_BN_CLICKED(IDC_CHECK_CONFERENCE_1, &CWinTestDlg::OnBnClickedCheckConference1)
1207 ON_BN_CLICKED(IDC_CHECK_CONFERENCE_2, &CWinTestDlg::OnBnClickedCheckConference2)
1208 ON_BN_CLICKED(IDC_CHECK_ON_HOLD_1, &CWinTestDlg::OnBnClickedCheckOnHold1)
1209 ON_BN_CLICKED(IDC_CHECK_ON_HOLD_2, &CWinTestDlg::OnBnClickedCheckOnHold2)
1210 ON_BN_CLICKED(IDC_CHECK_EXT_MEDIA_IN, &CWinTestDlg::OnBnClickedCheckExtMediaIn)
1211 ON_BN_CLICKED(IDC_CHECK_EXT_MEDIA_OUT, &CWinTestDlg::OnBnClickedCheckExtMediaOut)
1212 ON_LBN_SELCHANGE(IDC_LIST_CODEC_1, &CWinTestDlg::OnLbnSelchangeListCodec1)
1213 ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER_PAN_LEFT, &CWinTestDlg::OnNMReleasedcaptureSliderPanLeft)
1214 ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER_PAN_RIGHT, &CWinTestDlg::OnNMReleasedcaptureSliderPanRight)
1215 ON_BN_CLICKED(IDC_BUTTON_VERSION, &CWinTestDlg::OnBnClickedButtonVersion)
1216 ON_BN_CLICKED(IDC_CHECK_DELAY_ESTIMATE_1, &CWinTestDlg::OnBnClickedCheckDelayEstimate1)
1217 ON_BN_CLICKED(IDC_CHECK_RXVAD, &CWinTestDlg::OnBnClickedCheckRxvad)
1218 ON_BN_CLICKED(IDC_CHECK_AGC_1, &CWinTestDlg::OnBnClickedCheckAgc1)
1219 ON_BN_CLICKED(IDC_CHECK_NS_1, &CWinTestDlg::OnBnClickedCheckNs1)
1220 ON_BN_CLICKED(IDC_CHECK_REC_CALL, &CWinTestDlg::OnBnClickedCheckRecCall)
1221 ON_BN_CLICKED(IDC_CHECK_TYPING_DETECTION, &CWinTestDlg::OnBnClickedCheckTypingDetection)
1222 ON_BN_CLICKED(IDC_CHECK_RED, &CWinTestDlg::OnBnClickedCheckRED)
1223 ON_BN_CLICKED(IDC_BUTTON_CLEAR_ERROR_CALLBACK, &CWinTestDlg::OnBnClickedButtonClearErrorCallback)
1224 END_MESSAGE_MAP()
1225
1226 BOOL CWinTestDlg::UpdateTest(bool failed, const CString& strMsg)
1227 {
1228 if (failed)
1229 {
1230 SetDlgItemText(IDC_EDIT_MESSAGE, strMsg);
1231 _strErr.Format(_T("FAILED (error=%d)"), _veBasePtr->LastError());
1232 SetDlgItemText(IDC_EDIT_RESULT, _strErr);
1233 _failCount++;
1234 SetDlgItemInt(IDC_EDIT_N_FAILS, _failCount);
1235 SetDlgItemInt(IDC_EDIT_LAST_ERROR, _veBasePtr->LastError());
1236 }
1237 else
1238 {
1239 SetDlgItemText(IDC_EDIT_MESSAGE, strMsg);
1240 SetDlgItemText(IDC_EDIT_RESULT, _T("OK"));
1241 }
1242 return TRUE;
1243 }
1244
1245
1246 // CWinTestDlg message handlers
1247
OnInitDialog()1248 BOOL CWinTestDlg::OnInitDialog()
1249 {
1250 CDialog::OnInitDialog();
1251
1252 // Add "About..." menu item to system menu.
1253
1254 // IDM_ABOUTBOX must be in the system command range.
1255 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
1256 ASSERT(IDM_ABOUTBOX < 0xF000);
1257
1258 CMenu* pSysMenu = GetSystemMenu(FALSE);
1259 if (pSysMenu != NULL)
1260 {
1261 CString strAboutMenu;
1262 strAboutMenu.LoadString(IDS_ABOUTBOX);
1263 if (!strAboutMenu.IsEmpty())
1264 {
1265 pSysMenu->AppendMenu(MF_SEPARATOR);
1266 pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
1267 }
1268 }
1269
1270 // Set the icon for this dialog. The framework does this automatically
1271 // when the application's main window is not a dialog
1272 SetIcon(m_hIcon, TRUE); // Set big icon
1273 SetIcon(m_hIcon, FALSE); // Set small icon
1274
1275 // char version[1024];
1276 // _veBasePtr->GetVersion(version);
1277 // AfxMessageBox(version, MB_OK);
1278
1279 if (_veBasePtr->Init() != 0)
1280 {
1281 AfxMessageBox(_T("Init() failed "), MB_OKCANCEL);
1282 }
1283
1284 int ch = _veBasePtr->CreateChannel();
1285 if (_veBasePtr->SetSendDestination(ch, 1234, "127.0.0.1") == -1)
1286 {
1287 if (_veBasePtr->LastError() == VE_EXTERNAL_TRANSPORT_ENABLED)
1288 {
1289 _strMsg.Format(_T("*** External transport build ***"));
1290 SetDlgItemText(IDC_EDIT_MESSAGE, _strMsg);
1291 _externalTransportBuild = true;
1292 }
1293 }
1294 _veBasePtr->DeleteChannel(ch);
1295
1296 // --- Add (preferred) local IPv4 address in title
1297
1298 if (_veNetworkPtr)
1299 {
1300 char localIP[64];
1301 _veNetworkPtr->GetLocalIP(localIP);
1302 CString str;
1303 GetWindowText(str);
1304 str.AppendFormat(_T(" [Local IPv4 address: %s]"), CharToTchar(localIP, 64));
1305 SetWindowText(str);
1306 }
1307
1308 // --- Volume sliders
1309
1310 if (_veVolumeControlPtr)
1311 {
1312 unsigned int volume(0);
1313 CSliderCtrl* slider(NULL);
1314
1315 slider = (CSliderCtrl*)GetDlgItem(IDC_SLIDER_INPUT_VOLUME);
1316 slider->SetRangeMin(0);
1317 slider->SetRangeMax(255);
1318 _veVolumeControlPtr->GetMicVolume(volume);
1319 slider->SetPos(volume);
1320
1321 slider = (CSliderCtrl*)GetDlgItem(IDC_SLIDER_OUTPUT_VOLUME);
1322 slider->SetRangeMin(0);
1323 slider->SetRangeMax(255);
1324 _veVolumeControlPtr->GetSpeakerVolume(volume);
1325 slider->SetPos(volume);
1326 }
1327
1328 // --- Panning sliders
1329
1330 if (_veVolumeControlPtr)
1331 {
1332 float lVol(0.0);
1333 float rVol(0.0);
1334 int leftVol, rightVol;
1335 CSliderCtrl* slider(NULL);
1336
1337 _veVolumeControlPtr->GetOutputVolumePan(-1, lVol, rVol);
1338
1339 leftVol = (int)(lVol*10.0f); // [0,10]
1340 rightVol = (int)(rVol*10.0f); // [0,10]
1341
1342 slider = (CSliderCtrl*)GetDlgItem(IDC_SLIDER_PAN_LEFT);
1343 slider->SetRange(0,10);
1344 slider->SetPos(10-leftVol); // pos 0 <=> max pan 1.0 (top of slider)
1345
1346 slider = (CSliderCtrl*)GetDlgItem(IDC_SLIDER_PAN_RIGHT);
1347 slider->SetRange(0,10);
1348 slider->SetPos(10-rightVol);
1349 }
1350
1351 // --- APM settings
1352
1353 bool enable(false);
1354 CButton* button(NULL);
1355
1356 AgcModes agcMode(kAgcDefault);
1357 if (_veApmPtr->GetAgcStatus(enable, agcMode) == 0)
1358 {
1359 button = (CButton*)GetDlgItem(IDC_CHECK_AGC);
1360 enable ? button->SetCheck(BST_CHECKED) : button->SetCheck(BST_UNCHECKED);
1361 }
1362 else
1363 {
1364 // AGC is not supported
1365 GetDlgItem(IDC_CHECK_AGC)->EnableWindow(FALSE);
1366 }
1367
1368 NsModes nsMode(kNsDefault);
1369 if (_veApmPtr->GetNsStatus(enable, nsMode) == 0)
1370 {
1371 button = (CButton*)GetDlgItem(IDC_CHECK_NS);
1372 enable ? button->SetCheck(BST_CHECKED) : button->SetCheck(BST_UNCHECKED);
1373 }
1374 else
1375 {
1376 // NS is not supported
1377 GetDlgItem(IDC_CHECK_NS)->EnableWindow(FALSE);
1378 }
1379
1380 EcModes ecMode(kEcDefault);
1381 if (_veApmPtr->GetEcStatus(enable, ecMode) == 0)
1382 {
1383 button = (CButton*)GetDlgItem(IDC_CHECK_EC);
1384 enable ? button->SetCheck(BST_CHECKED) : button->SetCheck(BST_UNCHECKED);
1385 }
1386 else
1387 {
1388 // EC is not supported
1389 GetDlgItem(IDC_CHECK_EC)->EnableWindow(FALSE);
1390 }
1391
1392 // --- First channel section
1393
1394 GetDlgItem(IDC_COMBO_IP_1)->EnableWindow(FALSE);
1395 GetDlgItem(IDC_EDIT_TX_PORT_1)->EnableWindow(FALSE);
1396 GetDlgItem(IDC_EDIT_RX_PORT_1)->EnableWindow(FALSE);
1397 GetDlgItem(IDC_COMBO_CODEC_1)->EnableWindow(FALSE);
1398 GetDlgItem(IDC_LIST_CODEC_1)->EnableWindow(FALSE);
1399 GetDlgItem(IDC_EDIT_CODEC_1)->EnableWindow(FALSE);
1400 GetDlgItem(IDC_BUTTON_DELETE_1)->EnableWindow(FALSE);
1401 GetDlgItem(IDC_BUTTON_START_LISTEN_1)->EnableWindow(FALSE);
1402 GetDlgItem(IDC_BUTTON_STOP_LISTEN_1)->EnableWindow(FALSE);
1403 GetDlgItem(IDC_BUTTON_START_PLAYOUT_1)->EnableWindow(FALSE);
1404 GetDlgItem(IDC_BUTTON_STOP_PLAYOUT_1)->EnableWindow(FALSE);
1405 GetDlgItem(IDC_BUTTON_START_SEND_1)->EnableWindow(FALSE);
1406 GetDlgItem(IDC_BUTTON_STOP_SEND_1)->EnableWindow(FALSE);
1407 GetDlgItem(IDC_CHECK_EXT_TRANS_1)->EnableWindow(FALSE);
1408 GetDlgItem(IDC_CHECK_PLAY_FILE_IN_1)->EnableWindow(FALSE);
1409 GetDlgItem(IDC_CHECK_PLAY_FILE_OUT_1)->EnableWindow(FALSE);
1410 GetDlgItem(IDC_CHECK_EXT_MEDIA_IN_1)->EnableWindow(FALSE);
1411 GetDlgItem(IDC_CHECK_EXT_MEDIA_OUT_1)->EnableWindow(FALSE);
1412 GetDlgItem(IDC_CHECK_VAD_1)->EnableWindow(FALSE);
1413 GetDlgItem(IDC_CHECK_MUTE_IN_1)->EnableWindow(FALSE);
1414 GetDlgItem(IDC_CHECK_SRTP_TX_1)->EnableWindow(FALSE);
1415 GetDlgItem(IDC_CHECK_SRTP_RX_1)->EnableWindow(FALSE);
1416 GetDlgItem(IDC_CHECK_EXT_ENCRYPTION_1)->EnableWindow(FALSE);
1417 GetDlgItem(IDC_BUTTON_DTMF_1)->EnableWindow(FALSE);
1418 GetDlgItem(IDC_CHECK_CONFERENCE_1)->EnableWindow(FALSE);
1419 GetDlgItem(IDC_CHECK_ON_HOLD_1)->EnableWindow(FALSE);
1420 GetDlgItem(IDC_CHECK_DELAY_ESTIMATE_1)->EnableWindow(FALSE);
1421 GetDlgItem(IDC_CHECK_RXVAD)->EnableWindow(FALSE);
1422 GetDlgItem(IDC_CHECK_AGC_1)->EnableWindow(FALSE);
1423 GetDlgItem(IDC_CHECK_NS_1)->EnableWindow(FALSE);
1424 GetDlgItem(IDC_CHECK_RED)->EnableWindow(FALSE);
1425
1426 CComboBox* comboIP(NULL);
1427 comboIP = (CComboBox*)GetDlgItem(IDC_COMBO_IP_1);
1428 comboIP->AddString(_T("127.0.0.1"));
1429 comboIP->SetCurSel(0);
1430
1431 SetDlgItemInt(IDC_EDIT_TX_PORT_1, 1111);
1432 SetDlgItemInt(IDC_EDIT_RX_PORT_1, 1111);
1433
1434 // --- Add supported codecs to the codec combo box
1435
1436 CComboBox* comboCodec(NULL);
1437 comboCodec = (CComboBox*)GetDlgItem(IDC_COMBO_CODEC_1);
1438 comboCodec->ResetContent();
1439
1440 int numCodecs = _veCodecPtr->NumOfCodecs();
1441 for (int idx = 0; idx < numCodecs; idx++)
1442 {
1443 CodecInst codec;
1444 _veCodecPtr->GetCodec(idx, codec);
1445 if ((_stricmp(codec.plname, "CNNB") != 0) &&
1446 (_stricmp(codec.plname, "CNWB") != 0))
1447 {
1448 CString strCodec;
1449 if (_stricmp(codec.plname, "G7221") == 0)
1450 strCodec.Format(_T("%s (%d/%d/%d)"), CharToTchar(codec.plname, 32), codec.pltype, codec.plfreq/1000, codec.rate/1000);
1451 else
1452 strCodec.Format(_T("%s (%d/%d)"), CharToTchar(codec.plname, 32), codec.pltype, codec.plfreq/1000);
1453 comboCodec->AddString(strCodec);
1454 }
1455 if (idx == 0)
1456 {
1457 SetDlgItemInt(IDC_EDIT_CODEC_1, codec.pltype);
1458 }
1459 }
1460 comboCodec->SetCurSel(0);
1461
1462 CListBox* list = (CListBox*)GetDlgItem(IDC_LIST_CODEC_1);
1463 list->AddString(_T("pltype"));
1464 list->AddString(_T("plfreq"));
1465 list->AddString(_T("pacsize"));
1466 list->AddString(_T("channels"));
1467 list->AddString(_T("rate"));
1468 list->SetCurSel(0);
1469
1470 // --- Add available audio devices to the combo boxes
1471
1472 CComboBox* comboRecDevice(NULL);
1473 CComboBox* comboPlayDevice(NULL);
1474 comboRecDevice = (CComboBox*)GetDlgItem(IDC_COMBO_REC_DEVICE);
1475 comboPlayDevice = (CComboBox*)GetDlgItem(IDC_COMBO_PLAY_DEVICE);
1476 comboRecDevice->ResetContent();
1477 comboPlayDevice->ResetContent();
1478
1479 if (_veHardwarePtr)
1480 {
1481 int numPlayout(0);
1482 int numRecording(0);
1483 char nameStr[128];
1484 char guidStr[128];
1485 CString strDevice;
1486 AudioLayers audioLayer;
1487
1488 _veHardwarePtr->GetAudioDeviceLayer(audioLayer);
1489 if (kAudioWindowsWave == audioLayer)
1490 {
1491 strDevice.FormatMessage(_T("Audio Layer: Windows Wave API"));
1492 }
1493 else if (kAudioWindowsCore == audioLayer)
1494 {
1495 strDevice.FormatMessage(_T("Audio Layer: Windows Core API"));
1496 }
1497 else
1498 {
1499 strDevice.FormatMessage(_T("Audio Layer: ** UNKNOWN **"));
1500 }
1501 SetDlgItemText(IDC_EDIT_AUDIO_LAYER, (LPCTSTR)strDevice);
1502
1503 _veHardwarePtr->GetNumOfRecordingDevices(numRecording);
1504
1505 for (int idx = 0; idx < numRecording; idx++)
1506 {
1507 _veHardwarePtr->GetRecordingDeviceName(idx, nameStr, guidStr);
1508 strDevice.Format(_T("%s"), CharToTchar(nameStr, 128));
1509 comboRecDevice->AddString(strDevice);
1510 }
1511 // Select default (communication) device in the combo box
1512 _veHardwarePtr->GetRecordingDeviceName(-1, nameStr, guidStr);
1513 CString tmp = CString(nameStr);
1514 int nIndex = comboRecDevice->SelectString(-1, tmp);
1515 ASSERT(nIndex != CB_ERR);
1516
1517 _veHardwarePtr->GetNumOfPlayoutDevices(numPlayout);
1518
1519 for (int idx = 0; idx < numPlayout; idx++)
1520 {
1521 _veHardwarePtr->GetPlayoutDeviceName(idx, nameStr, guidStr);
1522 strDevice.Format(_T("%s"), CharToTchar(nameStr, 128));
1523 comboPlayDevice->AddString(strDevice);
1524 }
1525 // Select default (communication) device in the combo box
1526 _veHardwarePtr->GetPlayoutDeviceName(-1, nameStr, guidStr);
1527 nIndex = comboPlayDevice->SelectString(-1, CString(nameStr));
1528 ASSERT(nIndex != CB_ERR);
1529 }
1530
1531 // --- Second channel section
1532
1533 GetDlgItem(IDC_COMBO_IP_2)->EnableWindow(FALSE);
1534 GetDlgItem(IDC_EDIT_TX_PORT_2)->EnableWindow(FALSE);
1535 GetDlgItem(IDC_EDIT_RX_PORT_2)->EnableWindow(FALSE);
1536 GetDlgItem(IDC_COMBO_CODEC_2)->EnableWindow(FALSE);
1537 GetDlgItem(IDC_BUTTON_DELETE_2)->EnableWindow(FALSE);
1538 GetDlgItem(IDC_BUTTON_START_LISTEN_2)->EnableWindow(FALSE);
1539 GetDlgItem(IDC_BUTTON_STOP_LISTEN_2)->EnableWindow(FALSE);
1540 GetDlgItem(IDC_BUTTON_START_PLAYOUT_2)->EnableWindow(FALSE);
1541 GetDlgItem(IDC_BUTTON_STOP_PLAYOUT_2)->EnableWindow(FALSE);
1542 GetDlgItem(IDC_BUTTON_START_SEND_2)->EnableWindow(FALSE);
1543 GetDlgItem(IDC_BUTTON_STOP_SEND_2)->EnableWindow(FALSE);
1544 GetDlgItem(IDC_CHECK_EXT_TRANS_2)->EnableWindow(FALSE);
1545 GetDlgItem(IDC_CHECK_PLAY_FILE_IN_2)->EnableWindow(FALSE);
1546 GetDlgItem(IDC_CHECK_PLAY_FILE_OUT_2)->EnableWindow(FALSE);
1547 GetDlgItem(IDC_CHECK_EXT_MEDIA_IN_2)->EnableWindow(FALSE);
1548 GetDlgItem(IDC_CHECK_EXT_MEDIA_OUT_2)->EnableWindow(FALSE);
1549 GetDlgItem(IDC_CHECK_VAD_3)->EnableWindow(FALSE);
1550 GetDlgItem(IDC_CHECK_MUTE_IN_2)->EnableWindow(FALSE);
1551 GetDlgItem(IDC_CHECK_SRTP_TX_2)->EnableWindow(FALSE);
1552 GetDlgItem(IDC_CHECK_SRTP_RX_2)->EnableWindow(FALSE);
1553 GetDlgItem(IDC_CHECK_EXT_ENCRYPTION_2)->EnableWindow(FALSE);
1554 GetDlgItem(IDC_BUTTON_DTMF_2)->EnableWindow(FALSE);
1555 GetDlgItem(IDC_CHECK_CONFERENCE_2)->EnableWindow(FALSE);
1556 GetDlgItem(IDC_CHECK_ON_HOLD_2)->EnableWindow(FALSE);
1557
1558 comboIP = (CComboBox*)GetDlgItem(IDC_COMBO_IP_2);
1559 comboIP->AddString(_T("127.0.0.1"));
1560 comboIP->SetCurSel(0);
1561
1562 SetDlgItemInt(IDC_EDIT_TX_PORT_2, 2222);
1563 SetDlgItemInt(IDC_EDIT_RX_PORT_2, 2222);
1564
1565 comboCodec = (CComboBox*)GetDlgItem(IDC_COMBO_CODEC_2);
1566 comboCodec->ResetContent();
1567
1568 if (_veCodecPtr)
1569 {
1570 numCodecs = _veCodecPtr->NumOfCodecs();
1571 for (int idx = 0; idx < numCodecs; idx++)
1572 {
1573 CodecInst codec;
1574 _veCodecPtr->GetCodec(idx, codec);
1575 CString strCodec;
1576 strCodec.Format(_T("%s (%d/%d)"), CharToTchar(codec.plname, 32), codec.pltype, codec.plfreq/1000);
1577 comboCodec->AddString(strCodec);
1578 }
1579 comboCodec->SetCurSel(0);
1580 }
1581
1582 // --- Start windows timer
1583
1584 SetTimer(0, 1000, NULL);
1585
1586 return TRUE; // return TRUE unless you set the focus to a control
1587 }
1588
OnSysCommand(UINT nID,LPARAM lParam)1589 void CWinTestDlg::OnSysCommand(UINT nID, LPARAM lParam)
1590 {
1591 if ((nID & 0xFFF0) == IDM_ABOUTBOX)
1592 {
1593 CAboutDlg dlgAbout;
1594 dlgAbout.DoModal();
1595 }
1596 else if (nID == SC_CLOSE)
1597 {
1598 BOOL ret;
1599 int channel(0);
1600 channel = GetDlgItemInt(IDC_EDIT_1, &ret);
1601 if (ret == TRUE)
1602 {
1603 _veBasePtr->DeleteChannel(channel);
1604 }
1605 channel = GetDlgItemInt(IDC_EDIT_2, &ret);
1606 if (ret == TRUE)
1607 {
1608 _veBasePtr->DeleteChannel(channel);
1609 }
1610
1611 CDialog::OnSysCommand(nID, lParam);
1612 }
1613 else
1614 {
1615 CDialog::OnSysCommand(nID, lParam);
1616 }
1617
1618 }
1619
1620 // If you add a minimize button to your dialog, you will need the code below
1621 // to draw the icon. For MFC applications using the document/view model,
1622 // this is automatically done for you by the framework.
1623
OnPaint()1624 void CWinTestDlg::OnPaint()
1625 {
1626 if (IsIconic())
1627 {
1628 CPaintDC dc(this); // device context for painting
1629
1630 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
1631
1632 // Center icon in client rectangle
1633 int cxIcon = GetSystemMetrics(SM_CXICON);
1634 int cyIcon = GetSystemMetrics(SM_CYICON);
1635 CRect rect;
1636 GetClientRect(&rect);
1637 int x = (rect.Width() - cxIcon + 1) / 2;
1638 int y = (rect.Height() - cyIcon + 1) / 2;
1639
1640 // Draw the icon
1641 dc.DrawIcon(x, y, m_hIcon);
1642 }
1643 else
1644 {
1645 CDialog::OnPaint();
1646 }
1647 }
1648
1649 // The system calls this function to obtain the cursor to display while the user drags
1650 // the minimized window.
OnQueryDragIcon()1651 HCURSOR CWinTestDlg::OnQueryDragIcon()
1652 {
1653 return static_cast<HCURSOR>(m_hIcon);
1654 }
1655
1656
OnBnClickedButtonCreate1()1657 void CWinTestDlg::OnBnClickedButtonCreate1()
1658 {
1659 int channel(0);
1660 TEST((channel = _veBasePtr->CreateChannel()) >= 0, _T("CreateChannel(channel=%d)"), channel);
1661 if (channel >= 0)
1662 {
1663 _veRtpRtcpPtr->RegisterRTPObserver(channel, *this);
1664
1665 SetDlgItemInt(IDC_EDIT_1, channel);
1666 GetDlgItem(IDC_BUTTON_CREATE_1)->EnableWindow(FALSE);
1667 GetDlgItem(IDC_BUTTON_DELETE_1)->EnableWindow(TRUE);
1668 GetDlgItem(IDC_COMBO_IP_1)->EnableWindow(TRUE);
1669 GetDlgItem(IDC_EDIT_TX_PORT_1)->EnableWindow(TRUE);
1670 GetDlgItem(IDC_EDIT_RX_PORT_1)->EnableWindow(TRUE);
1671 GetDlgItem(IDC_COMBO_CODEC_1)->EnableWindow(TRUE);
1672 GetDlgItem(IDC_LIST_CODEC_1)->EnableWindow(TRUE);
1673 GetDlgItem(IDC_EDIT_CODEC_1)->EnableWindow(TRUE);
1674 GetDlgItem(IDC_BUTTON_START_LISTEN_1)->EnableWindow(TRUE);
1675 GetDlgItem(IDC_BUTTON_START_PLAYOUT_1)->EnableWindow(TRUE);
1676 GetDlgItem(IDC_BUTTON_START_SEND_1)->EnableWindow(TRUE);
1677 GetDlgItem(IDC_CHECK_EXT_TRANS_1)->EnableWindow(TRUE);
1678 GetDlgItem(IDC_CHECK_PLAY_FILE_IN_1)->EnableWindow(TRUE);
1679 GetDlgItem(IDC_CHECK_PLAY_FILE_OUT_1)->EnableWindow(TRUE);
1680 GetDlgItem(IDC_CHECK_EXT_MEDIA_IN_1)->EnableWindow(TRUE);
1681 GetDlgItem(IDC_CHECK_EXT_MEDIA_OUT_1)->EnableWindow(TRUE);
1682 GetDlgItem(IDC_CHECK_VAD_1)->EnableWindow(TRUE);
1683 GetDlgItem(IDC_CHECK_MUTE_IN_1)->EnableWindow(TRUE);
1684 GetDlgItem(IDC_CHECK_SRTP_TX_1)->EnableWindow(TRUE);
1685 GetDlgItem(IDC_CHECK_SRTP_RX_1)->EnableWindow(TRUE);
1686 GetDlgItem(IDC_CHECK_EXT_ENCRYPTION_1)->EnableWindow(TRUE);
1687 GetDlgItem(IDC_BUTTON_DTMF_1)->EnableWindow(TRUE);
1688 GetDlgItem(IDC_CHECK_ON_HOLD_1)->EnableWindow(TRUE);
1689 GetDlgItem(IDC_CHECK_DELAY_ESTIMATE_1)->EnableWindow(TRUE);
1690 GetDlgItem(IDC_CHECK_RXVAD)->EnableWindow(TRUE);
1691 GetDlgItem(IDC_CHECK_AGC_1)->EnableWindow(TRUE);
1692 GetDlgItem(IDC_CHECK_NS_1)->EnableWindow(TRUE);
1693 GetDlgItem(IDC_CHECK_RED)->EnableWindow(TRUE);
1694
1695 // Always set send codec to default codec <=> index 0.
1696 CodecInst codec;
1697 _veCodecPtr->GetCodec(0, codec);
1698 _veCodecPtr->SetSendCodec(channel, codec);
1699 }
1700 }
1701
OnBnClickedButtonCreate2()1702 void CWinTestDlg::OnBnClickedButtonCreate2()
1703 {
1704 int channel(0);
1705 TEST((channel = _veBasePtr->CreateChannel()) >=0 , _T("CreateChannel(%d)"), channel);
1706 if (channel >= 0)
1707 {
1708 _veRtpRtcpPtr->RegisterRTPObserver(channel, *this);
1709
1710 SetDlgItemInt(IDC_EDIT_2, channel);
1711 GetDlgItem(IDC_BUTTON_CREATE_2)->EnableWindow(FALSE);
1712 GetDlgItem(IDC_BUTTON_DELETE_2)->EnableWindow(TRUE);
1713 GetDlgItem(IDC_COMBO_IP_2)->EnableWindow(TRUE);
1714 GetDlgItem(IDC_EDIT_TX_PORT_2)->EnableWindow(TRUE);
1715 GetDlgItem(IDC_EDIT_RX_PORT_2)->EnableWindow(TRUE);
1716 GetDlgItem(IDC_COMBO_CODEC_2)->EnableWindow(TRUE);
1717 GetDlgItem(IDC_BUTTON_START_LISTEN_2)->EnableWindow(TRUE);
1718 GetDlgItem(IDC_BUTTON_START_PLAYOUT_2)->EnableWindow(TRUE);
1719 GetDlgItem(IDC_BUTTON_START_SEND_2)->EnableWindow(TRUE);
1720 GetDlgItem(IDC_CHECK_EXT_TRANS_2)->EnableWindow(TRUE);
1721 GetDlgItem(IDC_CHECK_PLAY_FILE_IN_2)->EnableWindow(TRUE);
1722 GetDlgItem(IDC_CHECK_PLAY_FILE_OUT_2)->EnableWindow(TRUE);
1723 GetDlgItem(IDC_CHECK_EXT_MEDIA_IN_2)->EnableWindow(TRUE);
1724 GetDlgItem(IDC_CHECK_EXT_MEDIA_OUT_2)->EnableWindow(TRUE);
1725 GetDlgItem(IDC_CHECK_VAD_3)->EnableWindow(TRUE);
1726 GetDlgItem(IDC_CHECK_MUTE_IN_2)->EnableWindow(TRUE);
1727 GetDlgItem(IDC_CHECK_SRTP_TX_2)->EnableWindow(TRUE);
1728 GetDlgItem(IDC_CHECK_SRTP_RX_2)->EnableWindow(TRUE);
1729 GetDlgItem(IDC_CHECK_EXT_ENCRYPTION_2)->EnableWindow(TRUE);
1730 GetDlgItem(IDC_BUTTON_DTMF_2)->EnableWindow(TRUE);
1731 GetDlgItem(IDC_CHECK_CONFERENCE_2)->EnableWindow(TRUE);
1732 GetDlgItem(IDC_CHECK_ON_HOLD_2)->EnableWindow(TRUE);
1733
1734 // Always set send codec to default codec <=> index 0.
1735 CodecInst codec;
1736 _veCodecPtr->GetCodec(0, codec);
1737 _veCodecPtr->SetSendCodec(channel, codec);
1738 }
1739 }
1740
OnBnClickedButtonDelete1()1741 void CWinTestDlg::OnBnClickedButtonDelete1()
1742 {
1743 BOOL ret;
1744 int channel = GetDlgItemInt(IDC_EDIT_1, &ret);
1745 if (ret == TRUE)
1746 {
1747 _delayEstimate1 = false;
1748 _rxVad = false;
1749 _veRtpRtcpPtr->DeRegisterRTPObserver(channel);
1750 TEST(_veBasePtr->DeleteChannel(channel) == 0, _T("DeleteChannel(channel=%d)"), channel);
1751 SetDlgItemText(IDC_EDIT_1, _T(""));
1752 GetDlgItem(IDC_BUTTON_CREATE_1)->EnableWindow(TRUE);
1753 GetDlgItem(IDC_BUTTON_DELETE_1)->EnableWindow(FALSE);
1754 GetDlgItem(IDC_COMBO_IP_1)->EnableWindow(FALSE);
1755 GetDlgItem(IDC_EDIT_TX_PORT_1)->EnableWindow(FALSE);
1756 GetDlgItem(IDC_EDIT_RX_PORT_1)->EnableWindow(FALSE);
1757 GetDlgItem(IDC_COMBO_CODEC_1)->EnableWindow(FALSE);
1758 GetDlgItem(IDC_LIST_CODEC_1)->EnableWindow(FALSE);
1759 GetDlgItem(IDC_EDIT_CODEC_1)->EnableWindow(FALSE);
1760 GetDlgItem(IDC_BUTTON_START_LISTEN_1)->EnableWindow(FALSE);
1761 GetDlgItem(IDC_BUTTON_START_PLAYOUT_1)->EnableWindow(FALSE);
1762 GetDlgItem(IDC_BUTTON_START_SEND_1)->EnableWindow(FALSE);
1763 GetDlgItem(IDC_BUTTON_STOP_LISTEN_1)->EnableWindow(FALSE);
1764 GetDlgItem(IDC_BUTTON_STOP_PLAYOUT_1)->EnableWindow(FALSE);
1765 GetDlgItem(IDC_BUTTON_STOP_SEND_1)->EnableWindow(FALSE);
1766 GetDlgItem(IDC_BUTTON_DTMF_1)->EnableWindow(FALSE);
1767 GetDlgItem(IDC_CHECK_EXT_TRANS_1)->EnableWindow(FALSE);
1768 GetDlgItem(IDC_CHECK_PLAY_FILE_IN_1)->EnableWindow(FALSE);
1769 GetDlgItem(IDC_CHECK_PLAY_FILE_OUT_1)->EnableWindow(FALSE);
1770 GetDlgItem(IDC_CHECK_EXT_MEDIA_IN_1)->EnableWindow(FALSE);
1771 GetDlgItem(IDC_CHECK_EXT_MEDIA_OUT_1)->EnableWindow(FALSE);
1772 GetDlgItem(IDC_CHECK_VAD_1)->EnableWindow(FALSE);
1773 GetDlgItem(IDC_CHECK_MUTE_IN_1)->EnableWindow(FALSE);
1774 GetDlgItem(IDC_CHECK_SRTP_TX_1)->EnableWindow(FALSE);
1775 GetDlgItem(IDC_CHECK_SRTP_RX_1)->EnableWindow(FALSE);
1776 GetDlgItem(IDC_CHECK_EXT_ENCRYPTION_1)->EnableWindow(FALSE);
1777 GetDlgItem(IDC_CHECK_CONFERENCE_1)->EnableWindow(FALSE);
1778 GetDlgItem(IDC_CHECK_ON_HOLD_1)->EnableWindow(FALSE);
1779 GetDlgItem(IDC_CHECK_DELAY_ESTIMATE_1)->EnableWindow(FALSE);
1780 GetDlgItem(IDC_CHECK_AGC_1)->EnableWindow(FALSE);
1781 GetDlgItem(IDC_CHECK_NS_1)->EnableWindow(FALSE);
1782 GetDlgItem(IDC_CHECK_RXVAD)->EnableWindow(FALSE);
1783 GetDlgItem(IDC_CHECK_RED)->EnableWindow(FALSE);
1784 SetDlgItemText(IDC_EDIT_RXVAD, _T(""));
1785 GetDlgItem(IDC_EDIT_RXVAD)->EnableWindow(FALSE);
1786 CButton* button = (CButton*)GetDlgItem(IDC_CHECK_EXT_TRANS_1);
1787 button->SetCheck(BST_UNCHECKED);
1788 button = (CButton*)GetDlgItem(IDC_CHECK_PLAY_FILE_IN_1);
1789 button->SetCheck(BST_UNCHECKED);
1790 button = (CButton*)GetDlgItem(IDC_CHECK_PLAY_FILE_OUT_1);
1791 button->SetCheck(BST_UNCHECKED);
1792 button = (CButton*)GetDlgItem(IDC_CHECK_EXT_MEDIA_IN_1);
1793 button->SetCheck(BST_UNCHECKED);
1794 button = (CButton*)GetDlgItem(IDC_CHECK_EXT_MEDIA_OUT_1);
1795 button->SetCheck(BST_UNCHECKED);
1796 button = (CButton*)GetDlgItem(IDC_CHECK_VAD_1);
1797 button->SetCheck(BST_UNCHECKED);
1798 button = (CButton*)GetDlgItem(IDC_CHECK_MUTE_IN_1);
1799 button->SetCheck(BST_UNCHECKED);
1800 button = (CButton*)GetDlgItem(IDC_CHECK_SRTP_TX_1);
1801 button->SetCheck(BST_UNCHECKED);
1802 button = (CButton*)GetDlgItem(IDC_CHECK_SRTP_RX_1);
1803 button->SetCheck(BST_UNCHECKED);
1804 button = (CButton*)GetDlgItem(IDC_CHECK_EXT_ENCRYPTION_1);
1805 button->SetCheck(BST_UNCHECKED);
1806 button = (CButton*)GetDlgItem(IDC_CHECK_CONFERENCE_1);
1807 button->SetCheck(BST_UNCHECKED);
1808 button = (CButton*)GetDlgItem(IDC_CHECK_ON_HOLD_1);
1809 button->SetCheck(BST_UNCHECKED);
1810 button = (CButton*)GetDlgItem(IDC_CHECK_DELAY_ESTIMATE_1);
1811 button->SetCheck(BST_UNCHECKED);
1812 button = (CButton*)GetDlgItem(IDC_CHECK_AGC_1);
1813 button->SetCheck(BST_UNCHECKED);
1814 button = (CButton*)GetDlgItem(IDC_CHECK_NS_1);
1815 button->SetCheck(BST_UNCHECKED);
1816 button = (CButton*)GetDlgItem(IDC_CHECK_RXVAD);
1817 button->SetCheck(BST_UNCHECKED);
1818 button = (CButton*)GetDlgItem(IDC_CHECK_RED);
1819 button->SetCheck(BST_UNCHECKED);
1820 }
1821 }
1822
OnBnClickedButtonDelete2()1823 void CWinTestDlg::OnBnClickedButtonDelete2()
1824 {
1825 BOOL ret;
1826 int channel = GetDlgItemInt(IDC_EDIT_2, &ret);
1827 if (ret == TRUE)
1828 {
1829 _delayEstimate2 = false;
1830 _veRtpRtcpPtr->DeRegisterRTPObserver(channel);
1831 TEST(_veBasePtr->DeleteChannel(channel) == 0, _T("DeleteChannel(%d)"), channel);
1832 SetDlgItemText(IDC_EDIT_2, _T(""));
1833 GetDlgItem(IDC_BUTTON_CREATE_2)->EnableWindow(TRUE);
1834 GetDlgItem(IDC_BUTTON_DELETE_2)->EnableWindow(FALSE);
1835 GetDlgItem(IDC_COMBO_IP_2)->EnableWindow(FALSE);
1836 GetDlgItem(IDC_EDIT_TX_PORT_2)->EnableWindow(FALSE);
1837 GetDlgItem(IDC_EDIT_RX_PORT_2)->EnableWindow(FALSE);
1838 GetDlgItem(IDC_COMBO_CODEC_2)->EnableWindow(FALSE);
1839 GetDlgItem(IDC_BUTTON_START_LISTEN_2)->EnableWindow(FALSE);
1840 GetDlgItem(IDC_BUTTON_START_PLAYOUT_2)->EnableWindow(FALSE);
1841 GetDlgItem(IDC_BUTTON_START_SEND_2)->EnableWindow(FALSE);
1842 GetDlgItem(IDC_BUTTON_STOP_LISTEN_2)->EnableWindow(FALSE);
1843 GetDlgItem(IDC_BUTTON_STOP_PLAYOUT_2)->EnableWindow(FALSE);
1844 GetDlgItem(IDC_BUTTON_STOP_SEND_2)->EnableWindow(FALSE);
1845 GetDlgItem(IDC_CHECK_EXT_TRANS_2)->EnableWindow(FALSE);
1846 GetDlgItem(IDC_CHECK_PLAY_FILE_IN_2)->EnableWindow(FALSE);
1847 GetDlgItem(IDC_CHECK_PLAY_FILE_OUT_2)->EnableWindow(FALSE);
1848 GetDlgItem(IDC_CHECK_EXT_MEDIA_IN_2)->EnableWindow(FALSE);
1849 GetDlgItem(IDC_CHECK_EXT_MEDIA_OUT_2)->EnableWindow(FALSE);
1850 GetDlgItem(IDC_CHECK_MUTE_IN_2)->EnableWindow(FALSE);
1851 GetDlgItem(IDC_CHECK_VAD_3)->EnableWindow(FALSE);
1852 GetDlgItem(IDC_CHECK_SRTP_TX_2)->EnableWindow(FALSE);
1853 GetDlgItem(IDC_CHECK_SRTP_RX_2)->EnableWindow(FALSE);
1854 GetDlgItem(IDC_CHECK_EXT_ENCRYPTION_2)->EnableWindow(FALSE);
1855 GetDlgItem(IDC_CHECK_CONFERENCE_2)->EnableWindow(FALSE);
1856 GetDlgItem(IDC_BUTTON_DTMF_2)->EnableWindow(FALSE);
1857 GetDlgItem(IDC_CHECK_ON_HOLD_2)->EnableWindow(FALSE);
1858 CButton* button = (CButton*)GetDlgItem(IDC_CHECK_EXT_TRANS_2);
1859 button->SetCheck(BST_UNCHECKED);
1860 button = (CButton*)GetDlgItem(IDC_CHECK_PLAY_FILE_IN_2);
1861 button->SetCheck(BST_UNCHECKED);
1862 button = (CButton*)GetDlgItem(IDC_CHECK_PLAY_FILE_OUT_2);
1863 button->SetCheck(BST_UNCHECKED);
1864 button = (CButton*)GetDlgItem(IDC_CHECK_EXT_MEDIA_IN_2);
1865 button->SetCheck(BST_UNCHECKED);
1866 button = (CButton*)GetDlgItem(IDC_CHECK_EXT_MEDIA_OUT_2);
1867 button->SetCheck(BST_UNCHECKED);
1868 button = (CButton*)GetDlgItem(IDC_CHECK_VAD_3);
1869 button->SetCheck(BST_UNCHECKED);
1870 button = (CButton*)GetDlgItem(IDC_CHECK_MUTE_IN_2);
1871 button->SetCheck(BST_UNCHECKED);
1872 button = (CButton*)GetDlgItem(IDC_CHECK_SRTP_TX_2);
1873 button->SetCheck(BST_UNCHECKED);
1874 button = (CButton*)GetDlgItem(IDC_CHECK_SRTP_RX_2);
1875 button->SetCheck(BST_UNCHECKED);
1876 button = (CButton*)GetDlgItem(IDC_CHECK_EXT_ENCRYPTION_2);
1877 button->SetCheck(BST_UNCHECKED);
1878 button = (CButton*)GetDlgItem(IDC_CHECK_CONFERENCE_2);
1879 button->SetCheck(BST_UNCHECKED);
1880 button = (CButton*)GetDlgItem(IDC_CHECK_ON_HOLD_2);
1881 button->SetCheck(BST_UNCHECKED);
1882 }
1883 }
1884
OnCbnSelchangeComboIp1()1885 void CWinTestDlg::OnCbnSelchangeComboIp1()
1886 {
1887 int channel = GetDlgItemInt(IDC_EDIT_1);
1888 CString str;
1889 int port = GetDlgItemInt(IDC_EDIT_TX_PORT_1);
1890 CComboBox* comboIP = (CComboBox*)GetDlgItem(IDC_COMBO_IP_1);
1891 int n = comboIP->GetLBTextLen(0);
1892 comboIP->GetLBText(0, str.GetBuffer(n));
1893 TEST(_veBasePtr->SetSendDestination(channel, port, TcharToChar(str.GetBuffer(n), -1)) == 0,
1894 _T("SetSendDestination(channel=%d, port=%d, ip=%s)"), channel, port, str.GetBuffer(n));
1895 str.ReleaseBuffer();
1896 }
1897
OnCbnSelchangeComboIp2()1898 void CWinTestDlg::OnCbnSelchangeComboIp2()
1899 {
1900 int channel = GetDlgItemInt(IDC_EDIT_2);
1901 CString str;
1902 int port = GetDlgItemInt(IDC_EDIT_TX_PORT_2);
1903 CComboBox* comboIP = (CComboBox*)GetDlgItem(IDC_COMBO_IP_2);
1904 int n = comboIP->GetLBTextLen(0);
1905 comboIP->GetLBText(0, str.GetBuffer(n));
1906 TEST(_veBasePtr->SetSendDestination(channel, port, TcharToChar(str.GetBuffer(n), -1)) == 0,
1907 _T("SetSendDestination(channel=%d, port=%d, ip=%s)"), channel, port, str.GetBuffer(n));
1908 str.ReleaseBuffer();
1909 }
1910
OnCbnSelchangeComboCodec1()1911 void CWinTestDlg::OnCbnSelchangeComboCodec1()
1912 {
1913 int channel = GetDlgItemInt(IDC_EDIT_1);
1914
1915 CodecInst codec;
1916 CComboBox* comboCodec(NULL);
1917 comboCodec = (CComboBox*)GetDlgItem(IDC_COMBO_CODEC_1);
1918 int index = comboCodec->GetCurSel();
1919 _veCodecPtr->GetCodec(index, codec);
1920 if (strncmp(codec.plname, "ISAC", 4) == 0)
1921 {
1922 // Set iSAC to adaptive mode by default.
1923 codec.rate = -1;
1924 }
1925 TEST(_veCodecPtr->SetSendCodec(channel, codec) == 0,
1926 _T("SetSendCodec(channel=%d, plname=%s, pltype=%d, plfreq=%d, rate=%d, pacsize=%d, channels=%d)"),
1927 channel, CharToTchar(codec.plname, 32), codec.pltype, codec.plfreq, codec.rate, codec.pacsize, codec.channels);
1928
1929 CListBox* list = (CListBox*)GetDlgItem(IDC_LIST_CODEC_1);
1930 list->SetCurSel(0);
1931 SetDlgItemInt(IDC_EDIT_CODEC_1, codec.pltype);
1932 }
1933
OnLbnSelchangeListCodec1()1934 void CWinTestDlg::OnLbnSelchangeListCodec1()
1935 {
1936 int channel = GetDlgItemInt(IDC_EDIT_1);
1937
1938 CListBox* list = (CListBox*)GetDlgItem(IDC_LIST_CODEC_1);
1939 int listIdx = list->GetCurSel();
1940 if (listIdx < 0)
1941 return;
1942 CString str;
1943 list->GetText(listIdx, str);
1944
1945 CodecInst codec;
1946 _veCodecPtr->GetSendCodec(channel, codec);
1947
1948 int value = GetDlgItemInt(IDC_EDIT_CODEC_1);
1949 if (str == _T("pltype"))
1950 {
1951 codec.pltype = value;
1952 }
1953 else if (str == _T("plfreq"))
1954 {
1955 codec.plfreq = value;
1956 }
1957 else if (str == _T("pacsize"))
1958 {
1959 codec.pacsize = value;
1960 }
1961 else if (str == _T("channels"))
1962 {
1963 codec.channels = value;
1964 }
1965 else if (str == _T("rate"))
1966 {
1967 codec.rate = value;
1968 }
1969 TEST(_veCodecPtr->SetSendCodec(channel, codec) == 0,
1970 _T("SetSendCodec(channel=%d, plname=%s, pltype=%d, plfreq=%d, rate=%d, pacsize=%d, channels=%d)"),
1971 channel, CharToTchar(codec.plname, 32), codec.pltype, codec.plfreq, codec.rate, codec.pacsize, codec.channels);
1972 }
1973
OnCbnSelchangeComboCodec2()1974 void CWinTestDlg::OnCbnSelchangeComboCodec2()
1975 {
1976 int channel = GetDlgItemInt(IDC_EDIT_2);
1977
1978 CodecInst codec;
1979 CComboBox* comboCodec(NULL);
1980 comboCodec = (CComboBox*)GetDlgItem(IDC_COMBO_CODEC_2);
1981 int index = comboCodec->GetCurSel();
1982 _veCodecPtr->GetCodec(index, codec);
1983 TEST(_veCodecPtr->SetSendCodec(channel, codec) == 0,
1984 _T("SetSendCodec(channel=%d, plname=%s, pltype=%d, plfreq=%d, rate=%d, pacsize=%d, channels=%d)"),
1985 channel, CharToTchar(codec.plname, 32), codec.pltype, codec.plfreq, codec.rate, codec.pacsize, codec.channels);
1986 }
1987
OnBnClickedButtonStartListen1()1988 void CWinTestDlg::OnBnClickedButtonStartListen1()
1989 {
1990 int ret1(0);
1991 int ret2(0);
1992 int channel = GetDlgItemInt(IDC_EDIT_1);
1993 int port = GetDlgItemInt(IDC_EDIT_RX_PORT_1);
1994 TEST((ret1 = _veBasePtr->SetLocalReceiver(channel, port)) == 0, _T("SetLocalReceiver(channel=%d, port=%d)"), channel, port);
1995 TEST((ret2 = _veBasePtr->StartReceive(channel)) == 0, _T("StartReceive(channel=%d)"), channel);
1996 if (ret1 == 0 && ret2 == 0)
1997 {
1998 GetDlgItem(IDC_BUTTON_START_LISTEN_1)->EnableWindow(FALSE);
1999 GetDlgItem(IDC_BUTTON_STOP_LISTEN_1)->EnableWindow(TRUE);
2000 }
2001 }
2002
OnBnClickedButtonStartListen2()2003 void CWinTestDlg::OnBnClickedButtonStartListen2()
2004 {
2005 int ret1(0);
2006 int ret2(0);
2007 int channel = GetDlgItemInt(IDC_EDIT_2);
2008 int port = GetDlgItemInt(IDC_EDIT_RX_PORT_2);
2009 TEST((ret1 = _veBasePtr->SetLocalReceiver(channel, port)) == 0, _T("SetLocalReceiver(channel=%d, port=%d)"), channel, port);
2010 TEST((ret2 = _veBasePtr->StartReceive(channel)) == 0, _T("StartReceive(channel=%d)"), channel);
2011 if (ret1 == 0 && ret2 == 0)
2012 {
2013 GetDlgItem(IDC_BUTTON_START_LISTEN_2)->EnableWindow(FALSE);
2014 GetDlgItem(IDC_BUTTON_STOP_LISTEN_2)->EnableWindow(TRUE);
2015 }
2016 }
2017
OnBnClickedButtonStopListen1()2018 void CWinTestDlg::OnBnClickedButtonStopListen1()
2019 {
2020 int ret(0);
2021 int channel = GetDlgItemInt(IDC_EDIT_1);
2022 TEST((ret = _veBasePtr->StopReceive(channel)) == 0, _T("StopListen(channel=%d)"), channel);
2023 if (ret == 0)
2024 {
2025 GetDlgItem(IDC_BUTTON_START_LISTEN_1)->EnableWindow(TRUE);
2026 GetDlgItem(IDC_BUTTON_STOP_LISTEN_1)->EnableWindow(FALSE);
2027 }
2028 }
2029
OnBnClickedButtonStopListen2()2030 void CWinTestDlg::OnBnClickedButtonStopListen2()
2031 {
2032 int ret(0);
2033 int channel = GetDlgItemInt(IDC_EDIT_2);
2034 TEST((ret = _veBasePtr->StopReceive(channel)) == 0, _T("StopListen(channel=%d)"), channel);
2035 if (ret == 0)
2036 {
2037 GetDlgItem(IDC_BUTTON_START_LISTEN_2)->EnableWindow(TRUE);
2038 GetDlgItem(IDC_BUTTON_STOP_LISTEN_2)->EnableWindow(FALSE);
2039 }
2040 }
2041
OnBnClickedButtonStartPlayout1()2042 void CWinTestDlg::OnBnClickedButtonStartPlayout1()
2043 {
2044 int ret(0);
2045 int channel = GetDlgItemInt(IDC_EDIT_1);
2046 TEST((ret = _veBasePtr->StartPlayout(channel)) == 0, _T("StartPlayout(channel=%d)"), channel);
2047 if (ret == 0)
2048 {
2049 GetDlgItem(IDC_BUTTON_START_PLAYOUT_1)->EnableWindow(FALSE);
2050 GetDlgItem(IDC_BUTTON_STOP_PLAYOUT_1)->EnableWindow(TRUE);
2051 }
2052 }
2053
OnBnClickedButtonStartPlayout2()2054 void CWinTestDlg::OnBnClickedButtonStartPlayout2()
2055 {
2056 int ret(0);
2057 int channel = GetDlgItemInt(IDC_EDIT_2);
2058 TEST((ret = _veBasePtr->StartPlayout(channel)) == 0, _T("StartPlayout(channel=%d)"), channel);
2059 if (ret == 0)
2060 {
2061 GetDlgItem(IDC_BUTTON_START_PLAYOUT_2)->EnableWindow(FALSE);
2062 GetDlgItem(IDC_BUTTON_STOP_PLAYOUT_2)->EnableWindow(TRUE);
2063 }
2064 }
2065
OnBnClickedButtonStopPlayout1()2066 void CWinTestDlg::OnBnClickedButtonStopPlayout1()
2067 {
2068 int ret(0);
2069 int channel = GetDlgItemInt(IDC_EDIT_1);
2070 TEST((ret = _veBasePtr->StopPlayout(channel)) == 0, _T("StopPlayout(channel=%d)"), channel);
2071 if (ret == 0)
2072 {
2073 GetDlgItem(IDC_BUTTON_START_PLAYOUT_1)->EnableWindow(TRUE);
2074 GetDlgItem(IDC_BUTTON_STOP_PLAYOUT_1)->EnableWindow(FALSE);
2075 }
2076 }
2077
OnBnClickedButtonStopPlayout2()2078 void CWinTestDlg::OnBnClickedButtonStopPlayout2()
2079 {
2080 int ret(0);
2081 int channel = GetDlgItemInt(IDC_EDIT_2);
2082 TEST((ret = _veBasePtr->StopPlayout(channel)) == 0, _T("StopPlayout(channel=%d)"));
2083 if (ret == 0)
2084 {
2085 GetDlgItem(IDC_BUTTON_START_PLAYOUT_2)->EnableWindow(TRUE);
2086 GetDlgItem(IDC_BUTTON_STOP_PLAYOUT_2)->EnableWindow(FALSE);
2087 }
2088 }
2089
OnBnClickedButtonStartSend1()2090 void CWinTestDlg::OnBnClickedButtonStartSend1()
2091 {
2092 UpdateData(TRUE); // update IP address
2093
2094 int ret(0);
2095 int channel = GetDlgItemInt(IDC_EDIT_1);
2096 if (!_externalTransport)
2097 {
2098 CString str;
2099 int port = GetDlgItemInt(IDC_EDIT_TX_PORT_1);
2100 TEST(_veBasePtr->SetSendDestination(channel, port, TcharToChar(_strComboIp1.GetBuffer(7), -1)) == 0,
2101 _T("SetSendDestination(channel=%d, port=%d, ip=%s)"), channel, port, _strComboIp1.GetBuffer(7));
2102 str.ReleaseBuffer();
2103 }
2104
2105 //_veVideoSyncPtr->SetInitTimestamp(0,0);
2106 // OnCbnSelchangeComboCodec1();
2107
2108 TEST((ret = _veBasePtr->StartSend(channel)) == 0, _T("StartSend(channel=%d)"), channel);
2109 if (ret == 0)
2110 {
2111 GetDlgItem(IDC_BUTTON_START_SEND_1)->EnableWindow(FALSE);
2112 GetDlgItem(IDC_BUTTON_STOP_SEND_1)->EnableWindow(TRUE);
2113 }
2114 }
2115
OnBnClickedButtonStartSend2()2116 void CWinTestDlg::OnBnClickedButtonStartSend2()
2117 {
2118 UpdateData(TRUE); // update IP address
2119
2120 int ret(0);
2121 int channel = GetDlgItemInt(IDC_EDIT_2);
2122 if (!_externalTransport)
2123 {
2124 CString str;
2125 int port = GetDlgItemInt(IDC_EDIT_TX_PORT_2);
2126 TEST(_veBasePtr->SetSendDestination(channel, port, TcharToChar(_strComboIp2.GetBuffer(7), -1)) == 0,
2127 _T("SetSendDestination(channel=%d, port=%d, ip=%s)"), channel, port, _strComboIp2.GetBuffer(7));
2128 str.ReleaseBuffer();
2129 }
2130
2131 // OnCbnSelchangeComboCodec2();
2132
2133 TEST((ret = _veBasePtr->StartSend(channel)) == 0, _T("StartSend(channel=%d)"), channel);
2134 if (ret == 0)
2135 {
2136 GetDlgItem(IDC_BUTTON_START_SEND_2)->EnableWindow(FALSE);
2137 GetDlgItem(IDC_BUTTON_STOP_SEND_2)->EnableWindow(TRUE);
2138 }
2139 }
2140
OnBnClickedButtonStopSend1()2141 void CWinTestDlg::OnBnClickedButtonStopSend1()
2142 {
2143 int ret(0);
2144 int channel = GetDlgItemInt(IDC_EDIT_1);
2145 TEST((ret = _veBasePtr->StopSend(channel)) == 0, _T("StopSend(channel=%d)"), channel);
2146 if (ret == 0)
2147 {
2148 GetDlgItem(IDC_BUTTON_START_SEND_1)->EnableWindow(TRUE);
2149 GetDlgItem(IDC_BUTTON_STOP_SEND_1)->EnableWindow(FALSE);
2150 }
2151 }
2152
OnBnClickedButtonStopSend2()2153 void CWinTestDlg::OnBnClickedButtonStopSend2()
2154 {
2155 int ret(0);
2156 int channel = GetDlgItemInt(IDC_EDIT_2);
2157 TEST((ret = _veBasePtr->StopSend(channel)) == 0, _T("StopSend(channel=%d)"), channel);
2158 if (ret == 0)
2159 {
2160 GetDlgItem(IDC_BUTTON_START_SEND_2)->EnableWindow(TRUE);
2161 GetDlgItem(IDC_BUTTON_STOP_SEND_2)->EnableWindow(FALSE);
2162 }
2163 }
2164
OnBnClickedCheckExtTrans1()2165 void CWinTestDlg::OnBnClickedCheckExtTrans1()
2166 {
2167 int ret(0);
2168 int channel = GetDlgItemInt(IDC_EDIT_1);
2169 CButton* button = (CButton*)GetDlgItem(IDC_CHECK_EXT_TRANS_1);
2170 int check = button->GetCheck();
2171 const bool enable = (check == BST_CHECKED);
2172 if (enable)
2173 {
2174 TEST((ret = _veNetworkPtr->RegisterExternalTransport(channel, *_transportPtr)) == 0,
2175 _T("RegisterExternalTransport(channel=%d, transport=0x%x)"), channel, _transportPtr);
2176 }
2177 else
2178 {
2179 TEST((ret = _veNetworkPtr->DeRegisterExternalTransport(channel)) == 0,
2180 _T("DeRegisterExternalTransport(channel=%d)"), channel);
2181 }
2182 if (ret == 0)
2183 {
2184 _externalTransport = enable;
2185 }
2186 else
2187 {
2188 // restore inital state since API call failed
2189 button->SetCheck((check == BST_CHECKED) ? BST_UNCHECKED : BST_CHECKED);
2190 }
2191 }
2192
OnBnClickedCheckExtTrans2()2193 void CWinTestDlg::OnBnClickedCheckExtTrans2()
2194 {
2195 int ret(0);
2196 int channel = GetDlgItemInt(IDC_EDIT_2);
2197 CButton* button = (CButton*)GetDlgItem(IDC_CHECK_EXT_TRANS_2);
2198 int check = button->GetCheck();
2199 const bool enable = (check == BST_CHECKED);
2200 if (enable)
2201 {
2202 TEST((ret = _veNetworkPtr->RegisterExternalTransport(channel, *_transportPtr)) == 0,
2203 _T("RegisterExternalTransport(channel=%d, transport=0x%x)"), channel, _transportPtr);
2204 }
2205 else
2206 {
2207 TEST((ret = _veNetworkPtr->DeRegisterExternalTransport(channel)) == 0,
2208 _T("DeRegisterExternalTransport(channel=%d)"), channel);
2209 }
2210 if (ret == 0)
2211 {
2212 _externalTransport = enable;
2213 }
2214 else
2215 {
2216 // restore inital state since API call failed
2217 button->SetCheck((check == BST_CHECKED) ? BST_UNCHECKED : BST_CHECKED);
2218 }
2219 }
2220
OnBnClickedCheckPlayFileIn1()2221 void CWinTestDlg::OnBnClickedCheckPlayFileIn1()
2222 {
2223 std::string micFile = _long_audio_file_path + "audio_short16.pcm";
2224
2225 int ret(0);
2226 int channel = GetDlgItemInt(IDC_EDIT_1);
2227 CButton* button = (CButton*)GetDlgItem(IDC_CHECK_PLAY_FILE_IN_1);
2228 int check = button->GetCheck();
2229 const bool enable = (check == BST_CHECKED);
2230 if (enable)
2231 {
2232 bool mix;
2233 const bool loop(true);
2234 const FileFormats format = kFileFormatPcm16kHzFile;
2235 const float scale(1.0);
2236
2237 (_checkPlayFileIn1 %2 == 0) ? mix = true : mix = false;
2238 TEST((ret = _veFilePtr->StartPlayingFileAsMicrophone(channel,
2239 micFile.c_str(), loop, mix, format, scale) == 0),
2240 _T("StartPlayingFileAsMicrophone(channel=%d, file=%s, loop=%d, ")
2241 _T("mix=%d, format=%d, scale=%2.1f)"),
2242 channel, CharToTchar(micFile.c_str(), -1),
2243 loop, mix, format, scale);
2244 _checkPlayFileIn1++;
2245 }
2246 else
2247 {
2248 TEST((ret = _veFilePtr->StopPlayingFileAsMicrophone(channel) == 0),
2249 _T("StopPlayingFileAsMicrophone(channel=%d)"), channel);
2250 }
2251 if (ret == -1)
2252 {
2253 // restore inital state since API call failed
2254 button->SetCheck((check == BST_CHECKED) ? BST_UNCHECKED : BST_CHECKED);
2255 }
2256 }
2257
OnBnClickedCheckPlayFileIn2()2258 void CWinTestDlg::OnBnClickedCheckPlayFileIn2()
2259 {
2260 std::string micFile = _long_audio_file_path + "audio_long16.pcm";
2261
2262 int ret(0);
2263 int channel = GetDlgItemInt(IDC_EDIT_2);
2264 CButton* button = (CButton*)GetDlgItem(IDC_CHECK_PLAY_FILE_IN_2);
2265 int check = button->GetCheck();
2266 const bool enable = (check == BST_CHECKED);
2267 if (enable)
2268 {
2269 bool mix;
2270 const bool loop(true);
2271 const FileFormats format = kFileFormatPcm16kHzFile;
2272 const float scale(1.0);
2273
2274 (_checkPlayFileIn2 %2 == 0) ? mix = true : mix = false;
2275 TEST((ret = _veFilePtr->StartPlayingFileAsMicrophone(channel,
2276 micFile.c_str(), loop, mix, format, scale) == 0),
2277 _T("StartPlayingFileAsMicrophone(channel=%d, file=%s, loop=%d, ")
2278 _T("mix=%d, format=%d, scale=%2.1f)"),
2279 channel, CharToTchar(micFile.c_str(), -1),
2280 loop, mix, format, scale);
2281 _checkPlayFileIn2++;
2282 }
2283 else
2284 {
2285 TEST((ret = _veFilePtr->StopPlayingFileAsMicrophone(channel) == 0),
2286 _T("StopPlayingFileAsMicrophone(channel=%d)"), channel);
2287 }
2288 if (ret == -1)
2289 {
2290 // restore inital state since API call failed
2291 button->SetCheck((check == BST_CHECKED) ? BST_UNCHECKED : BST_CHECKED);
2292 }
2293 }
2294
OnBnClickedCheckPlayFileOut1()2295 void CWinTestDlg::OnBnClickedCheckPlayFileOut1()
2296 {
2297 const FileFormats formats[8] = {{kFileFormatPcm16kHzFile},
2298 {kFileFormatWavFile},
2299 {kFileFormatWavFile},
2300 {kFileFormatWavFile},
2301 {kFileFormatWavFile},
2302 {kFileFormatWavFile},
2303 {kFileFormatWavFile},
2304 {kFileFormatWavFile}};
2305 // File path is relative to the location of 'voice_engine.gyp'.
2306 const char spkrFiles[8][64] = {{"audio_short16.pcm"},
2307 {"audio_tiny8.wav"},
2308 {"audio_tiny11.wav"},
2309 {"audio_tiny16.wav"},
2310 {"audio_tiny22.wav"},
2311 {"audio_tiny32.wav"},
2312 {"audio_tiny44.wav"},
2313 {"audio_tiny48.wav"}};
2314 int ret(0);
2315 int channel = GetDlgItemInt(IDC_EDIT_1);
2316 CButton* button = (CButton*)GetDlgItem(IDC_CHECK_PLAY_FILE_OUT_1);
2317 int check = button->GetCheck();
2318 const bool enable = (check == BST_CHECKED);
2319 if (enable)
2320 {
2321 const bool loop(true);
2322 const float volumeScaling(1.0);
2323 const int startPointMs(0);
2324 const int stopPointMs(0);
2325 const FileFormats format = formats[_checkPlayFileOut1 % 8];
2326 std::string spkrFile = _long_audio_file_path +
2327 spkrFiles[_checkPlayFileOut1 % 8];
2328
2329 CString str;
2330 if (_checkPlayFileOut1 % 8 == 0)
2331 {
2332 str = _T("kFileFormatPcm16kHzFile");
2333 }
2334 else
2335 {
2336 str = _T("kFileFormatWavFile");
2337 }
2338 // (_checkPlayFileOut1 %2 == 0) ? mix = true : mix = false;
2339 TEST((ret = _veFilePtr->StartPlayingFileLocally(channel,
2340 spkrFile.c_str(), loop, format, volumeScaling,
2341 startPointMs,stopPointMs) == 0),
2342 _T("StartPlayingFileLocally(channel=%d, file=%s, loop=%d, ")
2343 _T("format=%s, scale=%2.1f, start=%d, stop=%d)"),
2344 channel, CharToTchar(spkrFile.c_str(), -1),
2345 loop, str, volumeScaling, startPointMs, stopPointMs);
2346 _checkPlayFileOut1++;
2347 }
2348 else
2349 {
2350 TEST((ret = _veFilePtr->StopPlayingFileLocally(channel) == 0),
2351 _T("StopPlayingFileLocally(channel=%d)"), channel);
2352 }
2353 if (ret == -1)
2354 {
2355 // restore inital state since API call failed
2356 button->SetCheck((check == BST_CHECKED) ? BST_UNCHECKED : BST_CHECKED);
2357 }
2358 }
2359
OnBnClickedCheckPlayFileOut2()2360 void CWinTestDlg::OnBnClickedCheckPlayFileOut2()
2361 {
2362 std::string spkrFile = _long_audio_file_path + "audio_long16.pcm";
2363
2364 int ret(0);
2365 int channel = GetDlgItemInt(IDC_EDIT_2);
2366 CButton* button = (CButton*)GetDlgItem(IDC_CHECK_PLAY_FILE_OUT_2);
2367 int check = button->GetCheck();
2368 const bool enable = (check == BST_CHECKED);
2369 if (enable)
2370 {
2371 const bool loop(true);
2372 const FileFormats format = kFileFormatPcm16kHzFile;
2373 const float volumeScaling(1.0);
2374 const int startPointMs(0);
2375 const int stopPointMs(0);
2376
2377 // (_checkPlayFileOut2 %2 == 0) ? mix = true : mix = false;
2378 TEST((ret = _veFilePtr->StartPlayingFileLocally(channel,
2379 spkrFile.c_str(), loop, format, volumeScaling,
2380 startPointMs,stopPointMs) == 0),
2381 _T("StartPlayingFileLocally(channel=%d, file=%s, loop=%d, ")
2382 _T("format=%d, scale=%2.1f, start=%d, stop=%d)"),
2383 channel, CharToTchar(spkrFile.c_str(), -1),
2384 loop, format, volumeScaling, startPointMs, stopPointMs);
2385 // _checkPlayFileIn2++;
2386 }
2387 else
2388 {
2389 TEST((ret = _veFilePtr->StopPlayingFileLocally(channel) == 0),
2390 _T("StopPlayingFileLocally(channel=%d)"), channel);
2391 }
2392 if (ret == -1)
2393 {
2394 // restore inital state since API call failed
2395 button->SetCheck((check == BST_CHECKED) ? BST_UNCHECKED : BST_CHECKED);
2396 }
2397 }
2398
OnBnClickedCheckExtMediaIn1()2399 void CWinTestDlg::OnBnClickedCheckExtMediaIn1()
2400 {
2401 int channel = GetDlgItemInt(IDC_EDIT_1);
2402 CButton* buttonExtTrans = (CButton*)GetDlgItem(IDC_CHECK_EXT_MEDIA_IN_1);
2403 int check = buttonExtTrans->GetCheck();
2404 const bool enable = (check == BST_CHECKED);
2405 if (enable)
2406 {
2407 TEST(_veExternalMediaPtr->RegisterExternalMediaProcessing(channel, kRecordingPerChannel, *_externalMediaPtr) == 0,
2408 _T("RegisterExternalMediaProcessing(channel=%d, kRecordingPerChannel, processObject=0x%x)"), channel, _externalMediaPtr);
2409 }
2410 else
2411 {
2412 TEST(_veExternalMediaPtr->DeRegisterExternalMediaProcessing(channel, kRecordingPerChannel) == 0,
2413 _T("DeRegisterExternalMediaProcessing(channel=%d, kRecordingPerChannel)"), channel);
2414 }
2415 }
2416
OnBnClickedCheckExtMediaIn2()2417 void CWinTestDlg::OnBnClickedCheckExtMediaIn2()
2418 {
2419 int channel = GetDlgItemInt(IDC_EDIT_2);
2420 CButton* buttonExtTrans = (CButton*)GetDlgItem(IDC_CHECK_EXT_MEDIA_IN_2);
2421 int check = buttonExtTrans->GetCheck();
2422 const bool enable = (check == BST_CHECKED);
2423 if (enable)
2424 {
2425 TEST(_veExternalMediaPtr->RegisterExternalMediaProcessing(channel, kRecordingPerChannel, *_externalMediaPtr) == 0,
2426 _T("RegisterExternalMediaProcessing(channel=%d, kRecordingPerChannel, processObject=0x%x)"), channel, _externalMediaPtr);
2427 }
2428 else
2429 {
2430 TEST(_veExternalMediaPtr->DeRegisterExternalMediaProcessing(channel, kRecordingPerChannel) == 0,
2431 _T("DeRegisterExternalMediaProcessing(channel=%d, kRecordingPerChannel)"), channel);
2432 }
2433 }
2434
OnBnClickedCheckExtMediaOut1()2435 void CWinTestDlg::OnBnClickedCheckExtMediaOut1()
2436 {
2437 int channel = GetDlgItemInt(IDC_EDIT_1);
2438 CButton* buttonExtTrans = (CButton*)GetDlgItem(IDC_CHECK_EXT_MEDIA_OUT_1);
2439 int check = buttonExtTrans->GetCheck();
2440 const bool enable = (check == BST_CHECKED);
2441 if (enable)
2442 {
2443 TEST(_veExternalMediaPtr->RegisterExternalMediaProcessing(channel, kPlaybackPerChannel, *_externalMediaPtr) == 0,
2444 _T("RegisterExternalMediaProcessing(channel=%d, kPlaybackPerChannel, processObject=0x%x)"), channel, _externalMediaPtr);
2445 }
2446 else
2447 {
2448 TEST(_veExternalMediaPtr->DeRegisterExternalMediaProcessing(channel, kPlaybackPerChannel) == 0,
2449 _T("DeRegisterExternalMediaProcessing(channel=%d, kPlaybackPerChannel)"), channel);
2450 }
2451 }
2452
OnBnClickedCheckExtMediaOut2()2453 void CWinTestDlg::OnBnClickedCheckExtMediaOut2()
2454 {
2455 int channel = GetDlgItemInt(IDC_EDIT_2);
2456 CButton* buttonExtTrans = (CButton*)GetDlgItem(IDC_CHECK_EXT_MEDIA_OUT_2);
2457 int check = buttonExtTrans->GetCheck();
2458 const bool enable = (check == BST_CHECKED);
2459 if (enable)
2460 {
2461 TEST(_veExternalMediaPtr->RegisterExternalMediaProcessing(channel, kPlaybackPerChannel, *_externalMediaPtr) == 0,
2462 _T("RegisterExternalMediaProcessing(channel=%d, kPlaybackPerChannel, processObject=0x%x)"), channel, _externalMediaPtr);
2463 }
2464 else
2465 {
2466 TEST(_veExternalMediaPtr->DeRegisterExternalMediaProcessing(channel, kPlaybackPerChannel) == 0,
2467 _T("DeRegisterExternalMediaProcessing(channel=%d, kPlaybackPerChannel)"), channel);
2468 }
2469 }
2470
OnBnClickedCheckVad1()2471 void CWinTestDlg::OnBnClickedCheckVad1()
2472 {
2473 int ret(0);
2474 int channel = GetDlgItemInt(IDC_EDIT_1);
2475 CButton* button = (CButton*)GetDlgItem(IDC_CHECK_VAD_1);
2476 int check = button->GetCheck();
2477 const bool enable = (check == BST_CHECKED);
2478 if (enable)
2479 {
2480 CString str;
2481 VadModes mode(kVadConventional);
2482 if (_checkVAD1 % 4 == 0)
2483 {
2484 mode = kVadConventional;
2485 str = _T("kVadConventional");
2486 }
2487 else if (_checkVAD1 % 4 == 1)
2488 {
2489 mode = kVadAggressiveLow;
2490 str = _T("kVadAggressiveLow");
2491 }
2492 else if (_checkVAD1 % 4 == 2)
2493 {
2494 mode = kVadAggressiveMid;
2495 str = _T("kVadAggressiveMid");
2496 }
2497 else if (_checkVAD1 % 4 == 3)
2498 {
2499 mode = kVadAggressiveHigh;
2500 str = _T("kVadAggressiveHigh");
2501 }
2502 const bool disableDTX(false);
2503 TEST((ret = _veCodecPtr->SetVADStatus(channel, true, mode, disableDTX) == 0),
2504 _T("SetVADStatus(channel=%d, enable=%d, mode=%s, disableDTX=%d)"), channel, enable, str, disableDTX);
2505 _checkVAD1++;
2506 }
2507 else
2508 {
2509 TEST((ret = _veCodecPtr->SetVADStatus(channel, false)) == 0, _T("SetVADStatus(channel=%d, enable=%d)"), channel, false);
2510 }
2511 if (ret == -1)
2512 {
2513 // restore inital state since API call failed
2514 button->SetCheck((check == BST_CHECKED) ? BST_UNCHECKED : BST_CHECKED);
2515 }
2516 }
2517
OnBnClickedCheckVad2()2518 void CWinTestDlg::OnBnClickedCheckVad2()
2519 {
2520 int ret(0);
2521 int channel = GetDlgItemInt(IDC_EDIT_2);
2522 CButton* button = (CButton*)GetDlgItem(IDC_CHECK_VAD_2);
2523 int check = button->GetCheck();
2524 const bool enable = (check == BST_CHECKED);
2525 if (enable)
2526 {
2527 CString str;
2528 VadModes mode(kVadConventional);
2529 if (_checkVAD2 % 4 == 0)
2530 {
2531 mode = kVadConventional;
2532 str = _T("kVadConventional");
2533 }
2534 else if (_checkVAD2 % 4 == 1)
2535 {
2536 mode = kVadAggressiveLow;
2537 str = _T("kVadAggressiveLow");
2538 }
2539 else if (_checkVAD2 % 4 == 2)
2540 {
2541 mode = kVadAggressiveMid;
2542 str = _T("kVadAggressiveMid");
2543 }
2544 else if (_checkVAD2 % 4 == 3)
2545 {
2546 mode = kVadAggressiveHigh;
2547 str = _T("kVadAggressiveHigh");
2548 }
2549 const bool disableDTX(false);
2550 TEST((ret = _veCodecPtr->SetVADStatus(channel, true, mode, disableDTX)) == 0,
2551 _T("SetVADStatus(channel=%d, enable=%d, mode=%s, disableDTX=%d)"), channel, enable, str, disableDTX);
2552 _checkVAD2++;
2553 }
2554 else
2555 {
2556 TEST((ret = _veCodecPtr->SetVADStatus(channel, false) == 0), _T("SetVADStatus(channel=%d, enable=%d)"), channel, false);
2557 }
2558 if (ret == -1)
2559 {
2560 // restore inital state since API call failed
2561 button->SetCheck((check == BST_CHECKED) ? BST_UNCHECKED : BST_CHECKED);
2562 }
2563 }
2564
OnBnClickedCheckMuteIn1()2565 void CWinTestDlg::OnBnClickedCheckMuteIn1()
2566 {
2567 int channel = GetDlgItemInt(IDC_EDIT_1);
2568 CButton* buttonMute = (CButton*)GetDlgItem(IDC_CHECK_MUTE_IN_1);
2569 int check = buttonMute->GetCheck();
2570 const bool enable = (check == BST_CHECKED);
2571 TEST(_veVolumeControlPtr->SetInputMute(channel, enable) == 0,
2572 _T("SetInputMute(channel=%d, enable=%d)"), channel, enable);
2573 }
2574
OnBnClickedCheckMuteIn2()2575 void CWinTestDlg::OnBnClickedCheckMuteIn2()
2576 {
2577 int channel = GetDlgItemInt(IDC_EDIT_2);
2578 CButton* buttonMute = (CButton*)GetDlgItem(IDC_CHECK_MUTE_IN_2);
2579 int check = buttonMute->GetCheck();
2580 const bool enable = (check == BST_CHECKED);
2581 TEST(_veVolumeControlPtr->SetInputMute(channel, enable) == 0,
2582 _T("SetInputMute(channel=%d, enable=%d)"), channel, enable);
2583 }
2584
OnBnClickedCheckSrtpTx1()2585 void CWinTestDlg::OnBnClickedCheckSrtpTx1()
2586 {
2587 TEST(true, "Built-in SRTP support is deprecated.");
2588 }
2589
OnBnClickedCheckSrtpTx2()2590 void CWinTestDlg::OnBnClickedCheckSrtpTx2()
2591 {
2592 TEST(true, "Built-in SRTP support is deprecated.");
2593 }
2594
OnBnClickedCheckSrtpRx1()2595 void CWinTestDlg::OnBnClickedCheckSrtpRx1()
2596 {
2597 TEST(true, "Built-in SRTP support is deprecated.");
2598 }
2599
OnBnClickedCheckSrtpRx2()2600 void CWinTestDlg::OnBnClickedCheckSrtpRx2()
2601 {
2602 TEST(true, "Built-in SRTP support is deprecated.");
2603 }
2604
OnBnClickedCheckExtEncryption1()2605 void CWinTestDlg::OnBnClickedCheckExtEncryption1()
2606 {
2607 TEST(true, "External Encryption has been removed from the API!");
2608 }
2609
OnBnClickedCheckExtEncryption2()2610 void CWinTestDlg::OnBnClickedCheckExtEncryption2()
2611 {
2612 TEST(true, "External Encryption has been removed from the API!");
2613 }
2614
OnBnClickedButtonDtmf1()2615 void CWinTestDlg::OnBnClickedButtonDtmf1()
2616 {
2617 int channel = GetDlgItemInt(IDC_EDIT_1);
2618 CTelephonyEvent dlgTelephoneEvent(_vePtr, channel, this);
2619 dlgTelephoneEvent.DoModal();
2620 }
2621
OnBnClickedButtonDtmf2()2622 void CWinTestDlg::OnBnClickedButtonDtmf2()
2623 {
2624 int channel = GetDlgItemInt(IDC_EDIT_2);
2625 CTelephonyEvent dlgTelephoneEvent(_vePtr, channel, this);
2626 dlgTelephoneEvent.DoModal();
2627 }
2628
OnBnClickedCheckConference1()2629 void CWinTestDlg::OnBnClickedCheckConference1()
2630 {
2631 // Not supported yet
2632 }
2633
OnBnClickedCheckConference2()2634 void CWinTestDlg::OnBnClickedCheckConference2()
2635 {
2636 // Not supported yet
2637 }
2638
OnBnClickedCheckOnHold1()2639 void CWinTestDlg::OnBnClickedCheckOnHold1()
2640 {
2641 SHORT shiftKeyIsPressed = ::GetAsyncKeyState(VK_SHIFT);
2642
2643 CString str;
2644 int channel = GetDlgItemInt(IDC_EDIT_1);
2645 CButton* button = (CButton*)GetDlgItem(IDC_CHECK_ON_HOLD_1);
2646 int check = button->GetCheck();
2647
2648 if (shiftKeyIsPressed)
2649 {
2650 bool enabled(false);
2651 OnHoldModes mode(kHoldSendAndPlay);
2652 TEST(_veBasePtr->GetOnHoldStatus(channel, enabled, mode) == 0,
2653 _T("GetOnHoldStatus(channel=%d, enabled=?, mode=?)"), channel);
2654 button->SetCheck((check == BST_CHECKED) ? BST_UNCHECKED : BST_CHECKED);
2655
2656 switch (mode)
2657 {
2658 case kHoldSendAndPlay:
2659 str = _T("kHoldSendAndPlay");
2660 break;
2661 case kHoldSendOnly:
2662 str = _T("kHoldSendOnly");
2663 break;
2664 case kHoldPlayOnly:
2665 str = _T("kHoldPlayOnly");
2666 break;
2667 default:
2668 break;
2669 }
2670 PRINT_GET_RESULT(_T("enabled=%d, mode=%s"), enabled, str);
2671 return;
2672 }
2673
2674 int ret(0);
2675 const bool enable = (check == BST_CHECKED);
2676 if (enable)
2677 {
2678 OnHoldModes mode(kHoldSendAndPlay);
2679 if (_checkOnHold1 % 3 == 0)
2680 {
2681 mode = kHoldSendAndPlay;
2682 str = _T("kHoldSendAndPlay");
2683 }
2684 else if (_checkOnHold1 % 3 == 1)
2685 {
2686 mode = kHoldSendOnly;
2687 str = _T("kHoldSendOnly");
2688 }
2689 else if (_checkOnHold1 % 3 == 2)
2690 {
2691 mode = kHoldPlayOnly;
2692 str = _T("kHoldPlayOnly");
2693 }
2694 TEST((ret = _veBasePtr->SetOnHoldStatus(channel, enable, mode)) == 0,
2695 _T("SetOnHoldStatus(channel=%d, enable=%d, mode=%s)"), channel, enable, str);
2696 _checkOnHold1++;
2697 }
2698 else
2699 {
2700 TEST((ret = _veBasePtr->SetOnHoldStatus(channel, enable)) == 0,
2701 _T("SetOnHoldStatus(channel=%d, enable=%d)"), channel, enable);
2702 }
2703 }
2704
OnBnClickedCheckOnHold2()2705 void CWinTestDlg::OnBnClickedCheckOnHold2()
2706 {
2707 int ret(0);
2708 int channel = GetDlgItemInt(IDC_EDIT_2);
2709 CButton* button = (CButton*)GetDlgItem(IDC_CHECK_ON_HOLD_2);
2710 int check = button->GetCheck();
2711 const bool enable = (check == BST_CHECKED);
2712 if (enable)
2713 {
2714 CString str;
2715 OnHoldModes mode(kHoldSendAndPlay);
2716 if (_checkOnHold1 % 3 == 0)
2717 {
2718 mode = kHoldSendAndPlay;
2719 str = _T("kHoldSendAndPlay");
2720 }
2721 else if (_checkOnHold1 % 3 == 1)
2722 {
2723 mode = kHoldSendOnly;
2724 str = _T("kHoldSendOnly");
2725 }
2726 else if (_checkOnHold1 % 3 == 2)
2727 {
2728 mode = kHoldPlayOnly;
2729 str = _T("kHoldPlayOnly");
2730 }
2731 TEST((ret = _veBasePtr->SetOnHoldStatus(channel, enable, mode)) == 0,
2732 _T("SetOnHoldStatus(channel=%d, enable=%d, mode=%s)"), channel, enable, str);
2733 _checkOnHold1++;
2734 }
2735 else
2736 {
2737 TEST((ret = _veBasePtr->SetOnHoldStatus(channel, enable)) == 0,
2738 _T("SetOnHoldStatus(channel=%d, enable=%d)"), channel, enable);
2739 }
2740 }
2741
OnBnClickedCheckDelayEstimate1()2742 void CWinTestDlg::OnBnClickedCheckDelayEstimate1()
2743 {
2744 CButton* button = (CButton*)GetDlgItem(IDC_CHECK_DELAY_ESTIMATE_1);
2745 int check = button->GetCheck();
2746 const bool enable = (check == BST_CHECKED);
2747
2748 if (enable)
2749 {
2750 _delayEstimate1 = true;
2751 SetDlgItemInt(IDC_EDIT_DELAY_ESTIMATE_1, 0);
2752 }
2753 else
2754 {
2755 _delayEstimate1 = false;
2756 SetDlgItemText(IDC_EDIT_DELAY_ESTIMATE_1, _T(""));
2757 }
2758 }
2759
OnBnClickedCheckRxvad()2760 void CWinTestDlg::OnBnClickedCheckRxvad()
2761 {
2762 int channel = GetDlgItemInt(IDC_EDIT_1);
2763 CButton* button = (CButton*)GetDlgItem(IDC_CHECK_RXVAD);
2764 int check = button->GetCheck();
2765 const bool enable = (check == BST_CHECKED);
2766
2767 if (enable)
2768 {
2769 _rxVad = true;
2770 _veApmPtr->RegisterRxVadObserver(channel, *_rxVadObserverPtr);
2771 SetDlgItemInt(IDC_EDIT_RXVAD, 0);
2772 }
2773 else
2774 {
2775 _rxVad = false;
2776 _veApmPtr->DeRegisterRxVadObserver(channel);
2777 SetDlgItemText(IDC_EDIT_RXVAD, _T(""));
2778 }
2779 }
2780
OnBnClickedCheckAgc1()2781 void CWinTestDlg::OnBnClickedCheckAgc1()
2782 {
2783 SHORT shiftKeyIsPressed = ::GetAsyncKeyState(VK_SHIFT);
2784
2785 CString str;
2786 int channel = GetDlgItemInt(IDC_EDIT_1);
2787 CButton* button = (CButton*)GetDlgItem(IDC_CHECK_AGC_1);
2788 int check = button->GetCheck();
2789 const bool enable = (check == BST_CHECKED);
2790
2791 if (shiftKeyIsPressed)
2792 {
2793 bool enabled(false);
2794 AgcModes mode(kAgcAdaptiveDigital);
2795 TEST(_veApmPtr->GetRxAgcStatus(channel, enabled, mode) == 0,
2796 _T("GetRxAgcStatus(channel=%d, enabled=?, mode=?)"), channel);
2797 button->SetCheck((check == BST_CHECKED) ? BST_UNCHECKED : BST_CHECKED);
2798
2799 switch (mode)
2800 {
2801 case kAgcAdaptiveAnalog:
2802 str = _T("kAgcAdaptiveAnalog");
2803 break;
2804 case kAgcAdaptiveDigital:
2805 str = _T("kAgcAdaptiveDigital");
2806 break;
2807 case kAgcFixedDigital:
2808 str = _T("kAgcFixedDigital");
2809 break;
2810 default:
2811 break;
2812 }
2813 PRINT_GET_RESULT(_T("enabled=%d, mode=%s"), enabled, str);
2814 return;
2815 }
2816
2817 if (enable)
2818 {
2819 CString str;
2820 AgcModes mode(kAgcDefault);
2821 if (_checkAGC1 % 3 == 0)
2822 {
2823 mode = kAgcDefault;
2824 str = _T("kAgcDefault");
2825 }
2826 else if (_checkAGC1 % 3 == 1)
2827 {
2828 mode = kAgcAdaptiveDigital;
2829 str = _T("kAgcAdaptiveDigital");
2830 }
2831 else if (_checkAGC1 % 3 == 2)
2832 {
2833 mode = kAgcFixedDigital;
2834 str = _T("kAgcFixedDigital");
2835 }
2836 TEST(_veApmPtr->SetRxAgcStatus(channel, true, mode) == 0, _T("SetRxAgcStatus(channel=%d, enable=%d, %s)"), channel, enable, str);
2837 _checkAGC1++;
2838 }
2839 else
2840 {
2841 TEST(_veApmPtr->SetRxAgcStatus(channel, false, kAgcUnchanged) == 0, _T("SetRxAgcStatus(channel=%d, enable=%d)"), channel, enable);
2842 }
2843 }
2844
OnBnClickedCheckNs1()2845 void CWinTestDlg::OnBnClickedCheckNs1()
2846 {
2847 int channel = GetDlgItemInt(IDC_EDIT_1);
2848 CButton* buttonNS = (CButton*)GetDlgItem(IDC_CHECK_NS_1);
2849 int check = buttonNS->GetCheck();
2850 const bool enable = (check == BST_CHECKED);
2851 if (enable)
2852 {
2853 CString str;
2854 NsModes mode(kNsDefault);
2855 if (_checkNS1 % 6 == 0)
2856 {
2857 mode = kNsDefault;
2858 str = _T("kNsDefault");
2859 }
2860 else if (_checkNS1 % 6 == 1)
2861 {
2862 mode = kNsConference;
2863 str = _T("kNsConference");
2864 }
2865 else if (_checkNS1 % 6 == 2)
2866 {
2867 mode = kNsLowSuppression;
2868 str = _T("kNsLowSuppression");
2869 }
2870 else if (_checkNS1 % 6 == 3)
2871 {
2872 mode = kNsModerateSuppression;
2873 str = _T("kNsModerateSuppression");
2874 }
2875 else if (_checkNS1 % 6 == 4)
2876 {
2877 mode = kNsHighSuppression;
2878 str = _T("kNsHighSuppression");
2879 }
2880 else if (_checkNS1 % 6 == 5)
2881 {
2882 mode = kNsVeryHighSuppression;
2883 str = _T("kNsVeryHighSuppression");
2884 }
2885 TEST(_veApmPtr->SetRxNsStatus(channel, true, mode) == 0, _T("SetRxNsStatus(channel=%d, enable=%d, %s)"), channel, enable, str);
2886 _checkNS1++;
2887 }
2888 else
2889 {
2890 TEST(_veApmPtr->SetRxNsStatus(channel, false, kNsUnchanged) == 0, _T("SetRxNsStatus(channel=%d, enable=%d)"), enable, channel);
2891 }
2892 }
2893
2894 // ----------------------------------------------------------------------------
2895 // Channel-independent Operations
2896 // ----------------------------------------------------------------------------
2897
OnBnClickedCheckPlayFileIn()2898 void CWinTestDlg::OnBnClickedCheckPlayFileIn()
2899 {
2900 std::string micFile = _long_audio_file_path + "audio_short16.pcm";
2901 // std::string micFile = _long_audio_file_path + "audio_long16noise.pcm";
2902
2903 int channel(-1);
2904 CButton* buttonExtTrans = (CButton*)GetDlgItem(IDC_CHECK_PLAY_FILE_IN);
2905 int check = buttonExtTrans->GetCheck();
2906 const bool enable = (check == BST_CHECKED);
2907 if (enable)
2908 {
2909 bool mix;
2910 const bool loop(true);
2911 const FileFormats format = kFileFormatPcm16kHzFile;
2912 const float scale(1.0);
2913
2914 (_checkPlayFileIn %2 == 0) ? mix = true : mix = false;
2915 TEST(_veFilePtr->StartPlayingFileAsMicrophone(channel,
2916 micFile.c_str(), loop, mix, format, scale) == 0,
2917 _T("StartPlayingFileAsMicrophone(channel=%d, file=%s, ")
2918 _T("loop=%d, mix=%d, format=%d, scale=%2.1f)"),
2919 channel, CharToTchar(micFile.c_str(), -1),
2920 loop, mix, format, scale);
2921 _checkPlayFileIn++;
2922 }
2923 else
2924 {
2925 TEST(_veFilePtr->StopPlayingFileAsMicrophone(channel) == 0,
2926 _T("StopPlayingFileAsMicrophone(channel=%d)"), channel);
2927 }
2928 }
2929
OnBnClickedCheckRecMic()2930 void CWinTestDlg::OnBnClickedCheckRecMic()
2931 {
2932 std::string micFile = webrtc::test::OutputPath() +
2933 "rec_mic_mono_16kHz.pcm";
2934
2935 CButton* button = (CButton*)GetDlgItem(IDC_CHECK_REC_MIC);
2936 int check = button->GetCheck();
2937 const bool enable = (check == BST_CHECKED);
2938 if (enable)
2939 {
2940 TEST(_veFilePtr->StartRecordingMicrophone(micFile.c_str(), NULL) == 0,
2941 _T("StartRecordingMicrophone(file=%s)"),
2942 CharToTchar(micFile.c_str(), -1));
2943 }
2944 else
2945 {
2946 TEST(_veFilePtr->StopRecordingMicrophone() == 0,
2947 _T("StopRecordingMicrophone()"));
2948 }
2949 }
2950
OnBnClickedCheckAgc()2951 void CWinTestDlg::OnBnClickedCheckAgc()
2952 {
2953 CButton* buttonAGC = (CButton*)GetDlgItem(IDC_CHECK_AGC);
2954 int check = buttonAGC->GetCheck();
2955 const bool enable = (check == BST_CHECKED);
2956 if (enable)
2957 {
2958 CString str;
2959 AgcModes mode(kAgcDefault);
2960 if (_checkAGC % 4 == 0)
2961 {
2962 mode = kAgcDefault;
2963 str = _T("kAgcDefault");
2964 }
2965 else if (_checkAGC % 4 == 1)
2966 {
2967 mode = kAgcAdaptiveAnalog;
2968 str = _T("kAgcAdaptiveAnalog");
2969 }
2970 else if (_checkAGC % 4 == 2)
2971 {
2972 mode = kAgcAdaptiveDigital;
2973 str = _T("kAgcAdaptiveDigital");
2974 }
2975 else if (_checkAGC % 4 == 3)
2976 {
2977 mode = kAgcFixedDigital;
2978 str = _T("kAgcFixedDigital");
2979 }
2980 TEST(_veApmPtr->SetAgcStatus(true, mode) == 0, _T("SetAgcStatus(enable=%d, %s)"), enable, str);
2981 _checkAGC++;
2982 }
2983 else
2984 {
2985 TEST(_veApmPtr->SetAgcStatus(false, kAgcUnchanged) == 0, _T("SetAgcStatus(enable=%d)"), enable);
2986 }
2987 }
2988
OnBnClickedCheckNs()2989 void CWinTestDlg::OnBnClickedCheckNs()
2990 {
2991 CButton* buttonNS = (CButton*)GetDlgItem(IDC_CHECK_NS);
2992 int check = buttonNS->GetCheck();
2993 const bool enable = (check == BST_CHECKED);
2994 if (enable)
2995 {
2996 CString str;
2997 NsModes mode(kNsDefault);
2998 if (_checkNS % 6 == 0)
2999 {
3000 mode = kNsDefault;
3001 str = _T("kNsDefault");
3002 }
3003 else if (_checkNS % 6 == 1)
3004 {
3005 mode = kNsConference;
3006 str = _T("kNsConference");
3007 }
3008 else if (_checkNS % 6 == 2)
3009 {
3010 mode = kNsLowSuppression;
3011 str = _T("kNsLowSuppression");
3012 }
3013 else if (_checkNS % 6 == 3)
3014 {
3015 mode = kNsModerateSuppression;
3016 str = _T("kNsModerateSuppression");
3017 }
3018 else if (_checkNS % 6 == 4)
3019 {
3020 mode = kNsHighSuppression;
3021 str = _T("kNsHighSuppression");
3022 }
3023 else if (_checkNS % 6 == 5)
3024 {
3025 mode = kNsVeryHighSuppression;
3026 str = _T("kNsVeryHighSuppression");
3027 }
3028 TEST(_veApmPtr->SetNsStatus(true, mode) == 0, _T("SetNsStatus(enable=%d, %s)"), enable, str);
3029 _checkNS++;
3030 }
3031 else
3032 {
3033 TEST(_veApmPtr->SetNsStatus(false, kNsUnchanged) == 0, _T("SetNsStatus(enable=%d)"), enable);
3034 }
3035 }
3036
OnBnClickedCheckEc()3037 void CWinTestDlg::OnBnClickedCheckEc()
3038 {
3039 CButton* buttonEC = (CButton*)GetDlgItem(IDC_CHECK_EC);
3040 int check = buttonEC->GetCheck();
3041 const bool enable = (check == BST_CHECKED);
3042 if (enable)
3043 {
3044 CString str;
3045 EcModes mode(kEcDefault);
3046 if (_checkEC % 4 == 0)
3047 {
3048 mode = kEcDefault;
3049 str = _T("kEcDefault");
3050 }
3051 else if (_checkEC % 4 == 1)
3052 {
3053 mode = kEcConference;
3054 str = _T("kEcConference");
3055 }
3056 else if (_checkEC % 4 == 2)
3057 {
3058 mode = kEcAec;
3059 str = _T("kEcAec");
3060 }
3061 else if (_checkEC % 4 == 3)
3062 {
3063 mode = kEcAecm;
3064 str = _T("kEcAecm");
3065 }
3066 TEST(_veApmPtr->SetEcStatus(true, mode) == 0, _T("SetEcStatus(enable=%d, %s)"), enable, str);
3067 _checkEC++;
3068 }
3069 else
3070 {
3071 TEST(_veApmPtr->SetEcStatus(false, kEcUnchanged) == 0, _T("SetEcStatus(enable=%d)"), enable);
3072 }
3073 }
3074
OnBnClickedCheckMuteIn()3075 void CWinTestDlg::OnBnClickedCheckMuteIn()
3076 {
3077 CButton* buttonMute = (CButton*)GetDlgItem(IDC_CHECK_MUTE_IN);
3078 int check = buttonMute->GetCheck();
3079 const bool enable = (check == BST_CHECKED);
3080 const int channel(-1);
3081 TEST(_veVolumeControlPtr->SetInputMute(channel, enable) == 0,
3082 _T("SetInputMute(channel=%d, enable=%d)"), channel, enable);
3083 }
3084
OnBnClickedCheckExtMediaIn()3085 void CWinTestDlg::OnBnClickedCheckExtMediaIn()
3086 {
3087 const int channel(-1);
3088 CButton* button = (CButton*)GetDlgItem(IDC_CHECK_EXT_MEDIA_IN);
3089 int check = button->GetCheck();
3090 const bool enable = (check == BST_CHECKED);
3091 if (enable)
3092 {
3093 TEST(_veExternalMediaPtr->RegisterExternalMediaProcessing(channel, kRecordingAllChannelsMixed, *_externalMediaPtr) == 0,
3094 _T("RegisterExternalMediaProcessing(channel=%d, kRecordingAllChannelsMixed, processObject=0x%x)"), channel, _externalMediaPtr);
3095 }
3096 else
3097 {
3098 TEST(_veExternalMediaPtr->DeRegisterExternalMediaProcessing(channel, kRecordingAllChannelsMixed) == 0,
3099 _T("DeRegisterExternalMediaProcessing(channel=%d, kRecordingAllChannelsMixed)"), channel);
3100 }
3101 }
3102
OnBnClickedCheckExtMediaOut()3103 void CWinTestDlg::OnBnClickedCheckExtMediaOut()
3104 {
3105 const int channel(-1);
3106 CButton* button = (CButton*)GetDlgItem(IDC_CHECK_EXT_MEDIA_OUT);
3107 int check = button->GetCheck();
3108 const bool enable = (check == BST_CHECKED);
3109 if (enable)
3110 {
3111 TEST(_veExternalMediaPtr->RegisterExternalMediaProcessing(channel, kPlaybackAllChannelsMixed, *_externalMediaPtr) == 0,
3112 _T("RegisterExternalMediaProcessing(channel=%d, kPlaybackAllChannelsMixed, processObject=0x%x)"), channel, _externalMediaPtr);
3113 }
3114 else
3115 {
3116 TEST(_veExternalMediaPtr->DeRegisterExternalMediaProcessing(channel, kPlaybackAllChannelsMixed) == 0,
3117 _T("DeRegisterExternalMediaProcessing(channel=%d, kPlaybackAllChannelsMixed)"), channel);
3118 }
3119 }
3120
OnCbnSelchangeComboRecDevice()3121 void CWinTestDlg::OnCbnSelchangeComboRecDevice()
3122 {
3123 CComboBox* comboCodec(NULL);
3124 comboCodec = (CComboBox*)GetDlgItem(IDC_COMBO_REC_DEVICE);
3125 int index = comboCodec->GetCurSel();
3126 TEST(_veHardwarePtr->SetRecordingDevice(index) == 0,
3127 _T("SetRecordingDevice(index=%d)"), index);
3128 }
3129
OnCbnSelchangeComboPlayDevice()3130 void CWinTestDlg::OnCbnSelchangeComboPlayDevice()
3131 {
3132 CComboBox* comboCodec(NULL);
3133 comboCodec = (CComboBox*)GetDlgItem(IDC_COMBO_PLAY_DEVICE);
3134 int index = comboCodec->GetCurSel();
3135 TEST(_veHardwarePtr->SetPlayoutDevice(index) == 0,
3136 _T("SetPlayoutDevice(index=%d)"), index);
3137 }
3138
OnNMReleasedcaptureSliderInputVolume(NMHDR * pNMHDR,LRESULT * pResult)3139 void CWinTestDlg::OnNMReleasedcaptureSliderInputVolume(NMHDR *pNMHDR, LRESULT *pResult)
3140 {
3141 CSliderCtrl* slider = (CSliderCtrl*)GetDlgItem(IDC_SLIDER_INPUT_VOLUME);
3142 slider->SetRangeMin(0);
3143 slider->SetRangeMax(255);
3144 int pos = slider->GetPos();
3145
3146 TEST(_veVolumeControlPtr->SetMicVolume(pos) == 0, _T("SetMicVolume(volume=%d)"), pos);
3147
3148 *pResult = 0;
3149 }
3150
OnNMReleasedcaptureSliderOutputVolume(NMHDR * pNMHDR,LRESULT * pResult)3151 void CWinTestDlg::OnNMReleasedcaptureSliderOutputVolume(NMHDR *pNMHDR, LRESULT *pResult)
3152 {
3153 CSliderCtrl* slider = (CSliderCtrl*)GetDlgItem(IDC_SLIDER_OUTPUT_VOLUME);
3154 slider->SetRangeMin(0);
3155 slider->SetRangeMax(255);
3156 int pos = slider->GetPos();
3157
3158 TEST(_veVolumeControlPtr->SetSpeakerVolume(pos) == 0, _T("SetSpeakerVolume(volume=%d)"), pos);
3159
3160 *pResult = 0;
3161 }
3162
OnNMReleasedcaptureSliderPanLeft(NMHDR * pNMHDR,LRESULT * pResult)3163 void CWinTestDlg::OnNMReleasedcaptureSliderPanLeft(NMHDR *pNMHDR, LRESULT *pResult)
3164 {
3165 CSliderCtrl* slider = (CSliderCtrl*)GetDlgItem(IDC_SLIDER_PAN_LEFT);
3166 slider->SetRange(0,10);
3167 int pos = 10 - slider->GetPos(); // 0 <=> lower end, 10 <=> upper end
3168
3169 float left(0.0);
3170 float right(0.0);
3171 const int channel(-1);
3172
3173 // Only left channel will be modified
3174 _veVolumeControlPtr->GetOutputVolumePan(channel, left, right);
3175
3176 left = (float)((float)pos/10.0f);
3177
3178 TEST(_veVolumeControlPtr->SetOutputVolumePan(channel, left, right) == 0,
3179 _T("SetOutputVolumePan(channel=%d, left=%2.1f, right=%2.1f)"), channel, left, right);
3180
3181 *pResult = 0;
3182 }
3183
OnNMReleasedcaptureSliderPanRight(NMHDR * pNMHDR,LRESULT * pResult)3184 void CWinTestDlg::OnNMReleasedcaptureSliderPanRight(NMHDR *pNMHDR, LRESULT *pResult)
3185 {
3186 CSliderCtrl* slider = (CSliderCtrl*)GetDlgItem(IDC_SLIDER_PAN_RIGHT);
3187 slider->SetRange(0,10);
3188 int pos = 10 - slider->GetPos(); // 0 <=> lower end, 10 <=> upper end
3189
3190 float left(0.0);
3191 float right(0.0);
3192 const int channel(-1);
3193
3194 // Only right channel will be modified
3195 _veVolumeControlPtr->GetOutputVolumePan(channel, left, right);
3196
3197 right = (float)((float)pos/10.0f);
3198
3199 TEST(_veVolumeControlPtr->SetOutputVolumePan(channel, left, right) == 0,
3200 _T("SetOutputVolumePan(channel=%d, left=%2.1f, right=%2.1f)"), channel, left, right);
3201
3202 *pResult = 0;
3203 }
3204
OnBnClickedButtonVersion()3205 void CWinTestDlg::OnBnClickedButtonVersion()
3206 {
3207 if (_veBasePtr)
3208 {
3209 char version[1024];
3210 if (_veBasePtr->GetVersion(version) == 0)
3211 {
3212 AfxMessageBox(CString(version), MB_OK);
3213 }
3214 else
3215 {
3216 AfxMessageBox(_T("FAILED!"), MB_OK);
3217 }
3218 }
3219 }
3220
OnBnClickedCheckRecCall()3221 void CWinTestDlg::OnBnClickedCheckRecCall()
3222 {
3223 // Not supported
3224 }
3225
OnBnClickedCheckTypingDetection()3226 void CWinTestDlg::OnBnClickedCheckTypingDetection()
3227 {
3228 CButton* button = (CButton*)GetDlgItem(IDC_CHECK_TYPING_DETECTION);
3229 int check = button->GetCheck();
3230 const bool enable = (check == BST_CHECKED);
3231 TEST(_veApmPtr->SetTypingDetectionStatus(enable) == 0, _T("SetTypingDetectionStatus(enable=%d)"), enable);
3232 }
3233
OnBnClickedCheckRED()3234 void CWinTestDlg::OnBnClickedCheckRED()
3235 {
3236 CButton* button = (CButton*)GetDlgItem(IDC_CHECK_RED);
3237 int channel = GetDlgItemInt(IDC_EDIT_1);
3238 int check = button->GetCheck();
3239 const bool enable = (check == BST_CHECKED);
3240 TEST(_veRtpRtcpPtr->SetREDStatus(channel, enable) == 0,
3241 _T("SetREDStatus(enable=%d)"), enable);
3242 }
3243
3244 // ----------------------------------------------------------------------------
3245 // Message Handlers
3246 // ----------------------------------------------------------------------------
3247
OnTimer(UINT_PTR nIDEvent)3248 void CWinTestDlg::OnTimer(UINT_PTR nIDEvent)
3249 {
3250 CString str;
3251
3252 unsigned int svol(0);
3253 unsigned int mvol(0);
3254
3255 _timerTicks++;
3256
3257 // Get speaker and microphone volumes
3258 _veVolumeControlPtr->GetSpeakerVolume(svol);
3259 _veVolumeControlPtr->GetMicVolume(mvol);
3260
3261 // Update speaker volume slider
3262 CSliderCtrl* sliderSpkr = (CSliderCtrl*)GetDlgItem(IDC_SLIDER_OUTPUT_VOLUME);
3263 sliderSpkr->SetRangeMin(0);
3264 sliderSpkr->SetRangeMax(255);
3265 sliderSpkr->SetPos(svol);
3266
3267 // Update microphone volume slider
3268 CSliderCtrl* sliderMic = (CSliderCtrl*)GetDlgItem(IDC_SLIDER_INPUT_VOLUME);
3269 sliderMic->SetRangeMin(0);
3270 sliderMic->SetRangeMax(255);
3271 sliderMic->SetPos(mvol);
3272
3273 unsigned int micLevel;
3274 unsigned int combinedOutputLevel;
3275
3276 // Get audio levels
3277 _veVolumeControlPtr->GetSpeechInputLevel(micLevel);
3278 _veVolumeControlPtr->GetSpeechOutputLevel(-1, combinedOutputLevel);
3279
3280 // Update audio level controls
3281 CProgressCtrl* progressMic = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS_AUDIO_LEVEL_IN);
3282 progressMic->SetRange(0,9);
3283 progressMic->SetStep(1);
3284 progressMic->SetPos(micLevel);
3285 CProgressCtrl* progressOut = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS_AUDIO_LEVEL_OUT);
3286 progressOut->SetRange(0,9);
3287 progressOut->SetStep(1);
3288 progressOut->SetPos(combinedOutputLevel);
3289
3290 // Update playout delay (buffer size)
3291 if (_veVideoSyncPtr)
3292 {
3293 int bufferMs(0);
3294 _veVideoSyncPtr->GetPlayoutBufferSize(bufferMs);
3295 SetDlgItemInt(IDC_EDIT_PLAYOUT_BUFFER_SIZE, bufferMs);
3296 }
3297
3298 if (_delayEstimate1 && _veVideoSyncPtr)
3299 {
3300 const int channel = GetDlgItemInt(IDC_EDIT_1);
3301 int delayMs(0);
3302 _veVideoSyncPtr->GetDelayEstimate(channel, delayMs);
3303 SetDlgItemInt(IDC_EDIT_DELAY_ESTIMATE_1, delayMs);
3304 }
3305
3306 if (_rxVad && _veApmPtr && _rxVadObserverPtr)
3307 {
3308 SetDlgItemInt(IDC_EDIT_RXVAD, _rxVadObserverPtr->vad_decision);
3309 }
3310
3311 if (_veHardwarePtr)
3312 {
3313 int load1, load2;
3314 _veHardwarePtr->GetSystemCPULoad(load1);
3315 _veHardwarePtr->GetCPULoad(load2);
3316 str.Format(_T("CPU load (system/VoE): %d/%d [%%]"), load1, load2);
3317 SetDlgItemText(IDC_EDIT_CPU_LOAD, (LPCTSTR)str);
3318 }
3319
3320 BOOL ret;
3321 int channel = GetDlgItemInt(IDC_EDIT_1, &ret);
3322
3323 if (_veCodecPtr)
3324 {
3325 if (ret == TRUE)
3326 {
3327 CodecInst codec;
3328 if (_veCodecPtr->GetRecCodec(channel, codec) == 0)
3329 {
3330 str.Format(_T("RX codec: %s, freq=%d, pt=%d, rate=%d, size=%d"), CharToTchar(codec.plname, 32), codec.plfreq, codec.pltype, codec.rate, codec.pacsize);
3331 SetDlgItemText(IDC_EDIT_RX_CODEC_1, (LPCTSTR)str);
3332 }
3333 }
3334 }
3335
3336 if (_veRtpRtcpPtr)
3337 {
3338 if (ret == TRUE)
3339 {
3340 CallStatistics stats;
3341 if (_veRtpRtcpPtr->GetRTCPStatistics(channel, stats) == 0)
3342 {
3343 str.Format(_T("RTCP | RTP: cum=%u, ext=%d, frac=%u, jitter=%u | TX=%d, RX=%d, RTT=%d"),
3344 stats.cumulativeLost, stats.extendedMax, stats.fractionLost, stats.jitterSamples, stats.packetsSent, stats.packetsReceived, stats.rttMs);
3345 SetDlgItemText(IDC_EDIT_RTCP_STAT_1, (LPCTSTR)str);
3346 }
3347 }
3348 }
3349
3350 SetTimer(0, 1000, NULL);
3351 CDialog::OnTimer(nIDEvent);
3352 }
3353
OnBnClickedButtonClearErrorCallback()3354 void CWinTestDlg::OnBnClickedButtonClearErrorCallback()
3355 {
3356 _nErrorCallbacks = 0;
3357 SetDlgItemText(IDC_EDIT_ERROR_CALLBACK, _T(""));
3358 }
3359
3360 // ----------------------------------------------------------------------------
3361 // TEST
3362 // ----------------------------------------------------------------------------
3363
OnBnClickedButtonTest1()3364 void CWinTestDlg::OnBnClickedButtonTest1()
3365 {
3366 // add tests here...
3367 }
3368