OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 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 | 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 | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
175 mixer = NULL; | 175 mixer = NULL; |
176 } | 176 } |
177 } | 177 } |
178 | 178 |
179 TransmitMixer::TransmitMixer(uint32_t instanceId) : | 179 TransmitMixer::TransmitMixer(uint32_t instanceId) : |
180 _engineStatisticsPtr(NULL), | 180 _engineStatisticsPtr(NULL), |
181 _channelManagerPtr(NULL), | 181 _channelManagerPtr(NULL), |
182 audioproc_(NULL), | 182 audioproc_(NULL), |
183 _voiceEngineObserverPtr(NULL), | 183 _voiceEngineObserverPtr(NULL), |
184 _processThreadPtr(NULL), | 184 _processThreadPtr(NULL), |
185 _filePlayerPtr(NULL), | |
186 _fileRecorderPtr(NULL), | |
187 _fileCallRecorderPtr(NULL), | |
188 // Avoid conflict with other channels by adding 1024 - 1026, | 185 // Avoid conflict with other channels by adding 1024 - 1026, |
189 // won't use as much as 1024 channels. | 186 // won't use as much as 1024 channels. |
190 _filePlayerId(instanceId + 1024), | 187 _filePlayerId(instanceId + 1024), |
191 _fileRecorderId(instanceId + 1025), | 188 _fileRecorderId(instanceId + 1025), |
192 _fileCallRecorderId(instanceId + 1026), | 189 _fileCallRecorderId(instanceId + 1026), |
193 _filePlaying(false), | 190 _filePlaying(false), |
194 _fileRecording(false), | 191 _fileRecording(false), |
195 _fileCallRecording(false), | 192 _fileCallRecording(false), |
196 _audioLevel(), | 193 _audioLevel(), |
197 #ifdef WEBRTC_VOICE_ENGINE_TYPING_DETECTION | 194 #ifdef WEBRTC_VOICE_ENGINE_TYPING_DETECTION |
(...skipping 20 matching lines...) Expand all Loading... |
218 "TransmitMixer::~TransmitMixer() - dtor"); | 215 "TransmitMixer::~TransmitMixer() - dtor"); |
219 _monitorModule.DeRegisterObserver(); | 216 _monitorModule.DeRegisterObserver(); |
220 if (_processThreadPtr) | 217 if (_processThreadPtr) |
221 { | 218 { |
222 _processThreadPtr->DeRegisterModule(&_monitorModule); | 219 _processThreadPtr->DeRegisterModule(&_monitorModule); |
223 } | 220 } |
224 DeRegisterExternalMediaProcessing(kRecordingAllChannelsMixed); | 221 DeRegisterExternalMediaProcessing(kRecordingAllChannelsMixed); |
225 DeRegisterExternalMediaProcessing(kRecordingPreprocessing); | 222 DeRegisterExternalMediaProcessing(kRecordingPreprocessing); |
226 { | 223 { |
227 rtc::CritScope cs(&_critSect); | 224 rtc::CritScope cs(&_critSect); |
228 if (_fileRecorderPtr) | 225 if (file_recorder_) { |
229 { | 226 file_recorder_->RegisterModuleFileCallback(NULL); |
230 _fileRecorderPtr->RegisterModuleFileCallback(NULL); | 227 file_recorder_->StopRecording(); |
231 _fileRecorderPtr->StopRecording(); | |
232 FileRecorder::DestroyFileRecorder(_fileRecorderPtr); | |
233 _fileRecorderPtr = NULL; | |
234 } | 228 } |
235 if (_fileCallRecorderPtr) | 229 if (file_call_recorder_) { |
236 { | 230 file_call_recorder_->RegisterModuleFileCallback(NULL); |
237 _fileCallRecorderPtr->RegisterModuleFileCallback(NULL); | 231 file_call_recorder_->StopRecording(); |
238 _fileCallRecorderPtr->StopRecording(); | |
239 FileRecorder::DestroyFileRecorder(_fileCallRecorderPtr); | |
240 _fileCallRecorderPtr = NULL; | |
241 } | 232 } |
242 if (_filePlayerPtr) | 233 if (file_player_) { |
243 { | 234 file_player_->RegisterModuleFileCallback(NULL); |
244 _filePlayerPtr->RegisterModuleFileCallback(NULL); | 235 file_player_->StopPlayingFile(); |
245 _filePlayerPtr->StopPlayingFile(); | |
246 FilePlayer::DestroyFilePlayer(_filePlayerPtr); | |
247 _filePlayerPtr = NULL; | |
248 } | 236 } |
249 } | 237 } |
250 } | 238 } |
251 | 239 |
252 int32_t | 240 int32_t |
253 TransmitMixer::SetEngineInformation(ProcessThread& processThread, | 241 TransmitMixer::SetEngineInformation(ProcessThread& processThread, |
254 Statistics& engineStatistics, | 242 Statistics& engineStatistics, |
255 ChannelManager& channelManager) | 243 ChannelManager& channelManager) |
256 { | 244 { |
257 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, -1), | 245 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, -1), |
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
489 { | 477 { |
490 _engineStatisticsPtr->SetLastError( | 478 _engineStatisticsPtr->SetLastError( |
491 VE_ALREADY_PLAYING, kTraceWarning, | 479 VE_ALREADY_PLAYING, kTraceWarning, |
492 "StartPlayingFileAsMicrophone() is already playing"); | 480 "StartPlayingFileAsMicrophone() is already playing"); |
493 return 0; | 481 return 0; |
494 } | 482 } |
495 | 483 |
496 rtc::CritScope cs(&_critSect); | 484 rtc::CritScope cs(&_critSect); |
497 | 485 |
498 // Destroy the old instance | 486 // Destroy the old instance |
499 if (_filePlayerPtr) | 487 if (file_player_) { |
500 { | 488 file_player_->RegisterModuleFileCallback(NULL); |
501 _filePlayerPtr->RegisterModuleFileCallback(NULL); | 489 file_player_.reset(); |
502 FilePlayer::DestroyFilePlayer(_filePlayerPtr); | |
503 _filePlayerPtr = NULL; | |
504 } | 490 } |
505 | 491 |
506 // Dynamically create the instance | 492 // Dynamically create the instance |
507 _filePlayerPtr | 493 file_player_ = |
508 = FilePlayer::CreateFilePlayer(_filePlayerId, | 494 FilePlayer::NewFilePlayer(_filePlayerId, (const FileFormats)format); |
509 (const FileFormats) format); | |
510 | 495 |
511 if (_filePlayerPtr == NULL) | 496 if (!file_player_) { |
512 { | 497 _engineStatisticsPtr->SetLastError( |
513 _engineStatisticsPtr->SetLastError( | 498 VE_INVALID_ARGUMENT, kTraceError, |
514 VE_INVALID_ARGUMENT, kTraceError, | 499 "StartPlayingFileAsMicrophone() filePlayer format isnot correct"); |
515 "StartPlayingFileAsMicrophone() filePlayer format isnot correct"); | 500 return -1; |
516 return -1; | |
517 } | 501 } |
518 | 502 |
519 const uint32_t notificationTime(0); | 503 const uint32_t notificationTime(0); |
520 | 504 |
521 if (_filePlayerPtr->StartPlayingFile( | 505 if (file_player_->StartPlayingFile( |
522 fileName, | 506 fileName, loop, startPosition, volumeScaling, notificationTime, |
523 loop, | 507 stopPosition, (const CodecInst*)codecInst) != 0) { |
524 startPosition, | 508 _engineStatisticsPtr->SetLastError( |
525 volumeScaling, | 509 VE_BAD_FILE, kTraceError, |
526 notificationTime, | 510 "StartPlayingFile() failed to start file playout"); |
527 stopPosition, | 511 file_player_->StopPlayingFile(); |
528 (const CodecInst*) codecInst) != 0) | 512 file_player_.reset(); |
529 { | 513 return -1; |
530 _engineStatisticsPtr->SetLastError( | |
531 VE_BAD_FILE, kTraceError, | |
532 "StartPlayingFile() failed to start file playout"); | |
533 _filePlayerPtr->StopPlayingFile(); | |
534 FilePlayer::DestroyFilePlayer(_filePlayerPtr); | |
535 _filePlayerPtr = NULL; | |
536 return -1; | |
537 } | 514 } |
538 | 515 |
539 _filePlayerPtr->RegisterModuleFileCallback(this); | 516 file_player_->RegisterModuleFileCallback(this); |
540 _filePlaying = true; | 517 _filePlaying = true; |
541 | 518 |
542 return 0; | 519 return 0; |
543 } | 520 } |
544 | 521 |
545 int TransmitMixer::StartPlayingFileAsMicrophone(InStream* stream, | 522 int TransmitMixer::StartPlayingFileAsMicrophone(InStream* stream, |
546 FileFormats format, | 523 FileFormats format, |
547 int startPosition, | 524 int startPosition, |
548 float volumeScaling, | 525 float volumeScaling, |
549 int stopPosition, | 526 int stopPosition, |
(...skipping 16 matching lines...) Expand all Loading... |
566 { | 543 { |
567 _engineStatisticsPtr->SetLastError( | 544 _engineStatisticsPtr->SetLastError( |
568 VE_ALREADY_PLAYING, kTraceWarning, | 545 VE_ALREADY_PLAYING, kTraceWarning, |
569 "StartPlayingFileAsMicrophone() is already playing"); | 546 "StartPlayingFileAsMicrophone() is already playing"); |
570 return 0; | 547 return 0; |
571 } | 548 } |
572 | 549 |
573 rtc::CritScope cs(&_critSect); | 550 rtc::CritScope cs(&_critSect); |
574 | 551 |
575 // Destroy the old instance | 552 // Destroy the old instance |
576 if (_filePlayerPtr) | 553 if (file_player_) { |
577 { | 554 file_player_->RegisterModuleFileCallback(NULL); |
578 _filePlayerPtr->RegisterModuleFileCallback(NULL); | 555 file_player_.reset(); |
579 FilePlayer::DestroyFilePlayer(_filePlayerPtr); | |
580 _filePlayerPtr = NULL; | |
581 } | 556 } |
582 | 557 |
583 // Dynamically create the instance | 558 // Dynamically create the instance |
584 _filePlayerPtr | 559 file_player_ = |
585 = FilePlayer::CreateFilePlayer(_filePlayerId, | 560 FilePlayer::NewFilePlayer(_filePlayerId, (const FileFormats)format); |
586 (const FileFormats) format); | |
587 | 561 |
588 if (_filePlayerPtr == NULL) | 562 if (!file_player_) { |
589 { | 563 _engineStatisticsPtr->SetLastError( |
590 _engineStatisticsPtr->SetLastError( | 564 VE_INVALID_ARGUMENT, kTraceWarning, |
591 VE_INVALID_ARGUMENT, kTraceWarning, | 565 "StartPlayingFileAsMicrophone() filePlayer format isnot correct"); |
592 "StartPlayingFileAsMicrophone() filePlayer format isnot correct"); | 566 return -1; |
593 return -1; | |
594 } | 567 } |
595 | 568 |
596 const uint32_t notificationTime(0); | 569 const uint32_t notificationTime(0); |
597 | 570 |
598 if (_filePlayerPtr->StartPlayingFile( | 571 if (file_player_->StartPlayingFile( |
599 (InStream&) *stream, | 572 (InStream&)*stream, startPosition, volumeScaling, notificationTime, |
600 startPosition, | 573 stopPosition, (const CodecInst*)codecInst) != 0) { |
601 volumeScaling, | 574 _engineStatisticsPtr->SetLastError( |
602 notificationTime, | 575 VE_BAD_FILE, kTraceError, |
603 stopPosition, | 576 "StartPlayingFile() failed to start file playout"); |
604 (const CodecInst*) codecInst) != 0) | 577 file_player_->StopPlayingFile(); |
605 { | 578 file_player_.reset(); |
606 _engineStatisticsPtr->SetLastError( | 579 return -1; |
607 VE_BAD_FILE, kTraceError, | |
608 "StartPlayingFile() failed to start file playout"); | |
609 _filePlayerPtr->StopPlayingFile(); | |
610 FilePlayer::DestroyFilePlayer(_filePlayerPtr); | |
611 _filePlayerPtr = NULL; | |
612 return -1; | |
613 } | 580 } |
614 _filePlayerPtr->RegisterModuleFileCallback(this); | 581 file_player_->RegisterModuleFileCallback(this); |
615 _filePlaying = true; | 582 _filePlaying = true; |
616 | 583 |
617 return 0; | 584 return 0; |
618 } | 585 } |
619 | 586 |
620 int TransmitMixer::StopPlayingFileAsMicrophone() | 587 int TransmitMixer::StopPlayingFileAsMicrophone() |
621 { | 588 { |
622 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,-1), | 589 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,-1), |
623 "TransmitMixer::StopPlayingFileAsMicrophone()"); | 590 "TransmitMixer::StopPlayingFileAsMicrophone()"); |
624 | 591 |
625 if (!_filePlaying) | 592 if (!_filePlaying) |
626 { | 593 { |
627 return 0; | 594 return 0; |
628 } | 595 } |
629 | 596 |
630 rtc::CritScope cs(&_critSect); | 597 rtc::CritScope cs(&_critSect); |
631 | 598 |
632 if (_filePlayerPtr->StopPlayingFile() != 0) | 599 if (file_player_->StopPlayingFile() != 0) { |
633 { | 600 _engineStatisticsPtr->SetLastError( |
634 _engineStatisticsPtr->SetLastError( | 601 VE_CANNOT_STOP_PLAYOUT, kTraceError, |
635 VE_CANNOT_STOP_PLAYOUT, kTraceError, | 602 "StopPlayingFile() couldnot stop playing file"); |
636 "StopPlayingFile() couldnot stop playing file"); | 603 return -1; |
637 return -1; | |
638 } | 604 } |
639 | 605 |
640 _filePlayerPtr->RegisterModuleFileCallback(NULL); | 606 file_player_->RegisterModuleFileCallback(NULL); |
641 FilePlayer::DestroyFilePlayer(_filePlayerPtr); | 607 file_player_.reset(); |
642 _filePlayerPtr = NULL; | |
643 _filePlaying = false; | 608 _filePlaying = false; |
644 | 609 |
645 return 0; | 610 return 0; |
646 } | 611 } |
647 | 612 |
648 int TransmitMixer::IsPlayingFileAsMicrophone() const | 613 int TransmitMixer::IsPlayingFileAsMicrophone() const |
649 { | 614 { |
650 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, -1), | 615 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, -1), |
651 "TransmitMixer::IsPlayingFileAsMicrophone()"); | 616 "TransmitMixer::IsPlayingFileAsMicrophone()"); |
652 return _filePlaying; | 617 return _filePlaying; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
687 (STR_CASE_CMP(codecInst->plname,"PCMU") == 0) || | 652 (STR_CASE_CMP(codecInst->plname,"PCMU") == 0) || |
688 (STR_CASE_CMP(codecInst->plname,"PCMA") == 0)) | 653 (STR_CASE_CMP(codecInst->plname,"PCMA") == 0)) |
689 { | 654 { |
690 format = kFileFormatWavFile; | 655 format = kFileFormatWavFile; |
691 } else | 656 } else |
692 { | 657 { |
693 format = kFileFormatCompressedFile; | 658 format = kFileFormatCompressedFile; |
694 } | 659 } |
695 | 660 |
696 // Destroy the old instance | 661 // Destroy the old instance |
697 if (_fileRecorderPtr) | 662 if (file_recorder_) { |
698 { | 663 file_recorder_->RegisterModuleFileCallback(NULL); |
699 _fileRecorderPtr->RegisterModuleFileCallback(NULL); | 664 file_recorder_.reset(); |
700 FileRecorder::DestroyFileRecorder(_fileRecorderPtr); | |
701 _fileRecorderPtr = NULL; | |
702 } | 665 } |
703 | 666 |
704 _fileRecorderPtr = | 667 file_recorder_ = FileRecorder::CreateFileRecorder( |
705 FileRecorder::CreateFileRecorder(_fileRecorderId, | 668 _fileRecorderId, (const FileFormats)format); |
706 (const FileFormats) format); | 669 if (!file_recorder_) { |
707 if (_fileRecorderPtr == NULL) | 670 _engineStatisticsPtr->SetLastError( |
708 { | 671 VE_INVALID_ARGUMENT, kTraceError, |
709 _engineStatisticsPtr->SetLastError( | 672 "StartRecordingMicrophone() fileRecorder format isnot correct"); |
710 VE_INVALID_ARGUMENT, kTraceError, | 673 return -1; |
711 "StartRecordingMicrophone() fileRecorder format isnot correct"); | |
712 return -1; | |
713 } | 674 } |
714 | 675 |
715 if (_fileRecorderPtr->StartRecordingAudioFile( | 676 if (file_recorder_->StartRecordingAudioFile( |
716 fileName, | 677 fileName, (const CodecInst&)*codecInst, notificationTime) != 0) { |
717 (const CodecInst&) *codecInst, | 678 _engineStatisticsPtr->SetLastError( |
718 notificationTime) != 0) | 679 VE_BAD_FILE, kTraceError, |
719 { | 680 "StartRecordingAudioFile() failed to start file recording"); |
720 _engineStatisticsPtr->SetLastError( | 681 file_recorder_->StopRecording(); |
721 VE_BAD_FILE, kTraceError, | 682 file_recorder_.reset(); |
722 "StartRecordingAudioFile() failed to start file recording"); | 683 return -1; |
723 _fileRecorderPtr->StopRecording(); | |
724 FileRecorder::DestroyFileRecorder(_fileRecorderPtr); | |
725 _fileRecorderPtr = NULL; | |
726 return -1; | |
727 } | 684 } |
728 _fileRecorderPtr->RegisterModuleFileCallback(this); | 685 file_recorder_->RegisterModuleFileCallback(this); |
729 _fileRecording = true; | 686 _fileRecording = true; |
730 | 687 |
731 return 0; | 688 return 0; |
732 } | 689 } |
733 | 690 |
734 int TransmitMixer::StartRecordingMicrophone(OutStream* stream, | 691 int TransmitMixer::StartRecordingMicrophone(OutStream* stream, |
735 const CodecInst* codecInst) | 692 const CodecInst* codecInst) |
736 { | 693 { |
737 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, -1), | 694 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, -1), |
738 "TransmitMixer::StartRecordingMicrophone()"); | 695 "TransmitMixer::StartRecordingMicrophone()"); |
(...skipping 26 matching lines...) Expand all Loading... |
765 (STR_CASE_CMP(codecInst->plname,"PCMU") == 0) || | 722 (STR_CASE_CMP(codecInst->plname,"PCMU") == 0) || |
766 (STR_CASE_CMP(codecInst->plname,"PCMA") == 0)) | 723 (STR_CASE_CMP(codecInst->plname,"PCMA") == 0)) |
767 { | 724 { |
768 format = kFileFormatWavFile; | 725 format = kFileFormatWavFile; |
769 } else | 726 } else |
770 { | 727 { |
771 format = kFileFormatCompressedFile; | 728 format = kFileFormatCompressedFile; |
772 } | 729 } |
773 | 730 |
774 // Destroy the old instance | 731 // Destroy the old instance |
775 if (_fileRecorderPtr) | 732 if (file_recorder_) { |
776 { | 733 file_recorder_->RegisterModuleFileCallback(NULL); |
777 _fileRecorderPtr->RegisterModuleFileCallback(NULL); | 734 file_recorder_.reset(); |
778 FileRecorder::DestroyFileRecorder(_fileRecorderPtr); | |
779 _fileRecorderPtr = NULL; | |
780 } | 735 } |
781 | 736 |
782 _fileRecorderPtr = | 737 file_recorder_ = FileRecorder::CreateFileRecorder( |
783 FileRecorder::CreateFileRecorder(_fileRecorderId, | 738 _fileRecorderId, (const FileFormats)format); |
784 (const FileFormats) format); | 739 if (!file_recorder_) { |
785 if (_fileRecorderPtr == NULL) | 740 _engineStatisticsPtr->SetLastError( |
786 { | 741 VE_INVALID_ARGUMENT, kTraceError, |
787 _engineStatisticsPtr->SetLastError( | 742 "StartRecordingMicrophone() fileRecorder format isnot correct"); |
788 VE_INVALID_ARGUMENT, kTraceError, | 743 return -1; |
789 "StartRecordingMicrophone() fileRecorder format isnot correct"); | |
790 return -1; | |
791 } | 744 } |
792 | 745 |
793 if (_fileRecorderPtr->StartRecordingAudioFile(*stream, | 746 if (file_recorder_->StartRecordingAudioFile(*stream, *codecInst, |
794 *codecInst, | 747 notificationTime) != 0) { |
795 notificationTime) != 0) | 748 _engineStatisticsPtr->SetLastError( |
796 { | 749 VE_BAD_FILE, kTraceError, |
797 _engineStatisticsPtr->SetLastError(VE_BAD_FILE, kTraceError, | 750 "StartRecordingAudioFile() failed to start file recording"); |
798 "StartRecordingAudioFile() failed to start file recording"); | 751 file_recorder_->StopRecording(); |
799 _fileRecorderPtr->StopRecording(); | 752 file_recorder_.reset(); |
800 FileRecorder::DestroyFileRecorder(_fileRecorderPtr); | 753 return -1; |
801 _fileRecorderPtr = NULL; | |
802 return -1; | |
803 } | 754 } |
804 | 755 |
805 _fileRecorderPtr->RegisterModuleFileCallback(this); | 756 file_recorder_->RegisterModuleFileCallback(this); |
806 _fileRecording = true; | 757 _fileRecording = true; |
807 | 758 |
808 return 0; | 759 return 0; |
809 } | 760 } |
810 | 761 |
811 | 762 |
812 int TransmitMixer::StopRecordingMicrophone() | 763 int TransmitMixer::StopRecordingMicrophone() |
813 { | 764 { |
814 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, -1), | 765 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, -1), |
815 "TransmitMixer::StopRecordingMicrophone()"); | 766 "TransmitMixer::StopRecordingMicrophone()"); |
816 | 767 |
817 rtc::CritScope cs(&_critSect); | 768 rtc::CritScope cs(&_critSect); |
818 | 769 |
819 if (!_fileRecording) | 770 if (!_fileRecording) |
820 { | 771 { |
821 WEBRTC_TRACE(kTraceWarning, kTraceVoice, VoEId(_instanceId, -1), | 772 WEBRTC_TRACE(kTraceWarning, kTraceVoice, VoEId(_instanceId, -1), |
822 "StopRecordingMicrophone() isnot recording"); | 773 "StopRecordingMicrophone() isnot recording"); |
823 return 0; | 774 return 0; |
824 } | 775 } |
825 | 776 |
826 if (_fileRecorderPtr->StopRecording() != 0) | 777 if (file_recorder_->StopRecording() != 0) { |
827 { | 778 _engineStatisticsPtr->SetLastError( |
828 _engineStatisticsPtr->SetLastError( | 779 VE_STOP_RECORDING_FAILED, kTraceError, |
829 VE_STOP_RECORDING_FAILED, kTraceError, | 780 "StopRecording(), could not stop recording"); |
830 "StopRecording(), could not stop recording"); | 781 return -1; |
831 return -1; | |
832 } | 782 } |
833 _fileRecorderPtr->RegisterModuleFileCallback(NULL); | 783 file_recorder_->RegisterModuleFileCallback(NULL); |
834 FileRecorder::DestroyFileRecorder(_fileRecorderPtr); | 784 file_recorder_.reset(); |
835 _fileRecorderPtr = NULL; | |
836 _fileRecording = false; | 785 _fileRecording = false; |
837 | 786 |
838 return 0; | 787 return 0; |
839 } | 788 } |
840 | 789 |
841 int TransmitMixer::StartRecordingCall(const char* fileName, | 790 int TransmitMixer::StartRecordingCall(const char* fileName, |
842 const CodecInst* codecInst) | 791 const CodecInst* codecInst) |
843 { | 792 { |
844 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, -1), | 793 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, -1), |
845 "TransmitMixer::StartRecordingCall(fileName=%s)", fileName); | 794 "TransmitMixer::StartRecordingCall(fileName=%s)", fileName); |
(...skipping 26 matching lines...) Expand all Loading... |
872 { | 821 { |
873 format = kFileFormatWavFile; | 822 format = kFileFormatWavFile; |
874 } else | 823 } else |
875 { | 824 { |
876 format = kFileFormatCompressedFile; | 825 format = kFileFormatCompressedFile; |
877 } | 826 } |
878 | 827 |
879 rtc::CritScope cs(&_critSect); | 828 rtc::CritScope cs(&_critSect); |
880 | 829 |
881 // Destroy the old instance | 830 // Destroy the old instance |
882 if (_fileCallRecorderPtr) | 831 if (file_call_recorder_) { |
883 { | 832 file_call_recorder_->RegisterModuleFileCallback(NULL); |
884 _fileCallRecorderPtr->RegisterModuleFileCallback(NULL); | 833 file_call_recorder_.reset(); |
885 FileRecorder::DestroyFileRecorder(_fileCallRecorderPtr); | |
886 _fileCallRecorderPtr = NULL; | |
887 } | 834 } |
888 | 835 |
889 _fileCallRecorderPtr | 836 file_call_recorder_ = FileRecorder::CreateFileRecorder( |
890 = FileRecorder::CreateFileRecorder(_fileCallRecorderId, | 837 _fileCallRecorderId, (const FileFormats)format); |
891 (const FileFormats) format); | 838 if (!file_call_recorder_) { |
892 if (_fileCallRecorderPtr == NULL) | 839 _engineStatisticsPtr->SetLastError( |
893 { | 840 VE_INVALID_ARGUMENT, kTraceError, |
894 _engineStatisticsPtr->SetLastError( | 841 "StartRecordingCall() fileRecorder format isnot correct"); |
895 VE_INVALID_ARGUMENT, kTraceError, | 842 return -1; |
896 "StartRecordingCall() fileRecorder format isnot correct"); | |
897 return -1; | |
898 } | 843 } |
899 | 844 |
900 if (_fileCallRecorderPtr->StartRecordingAudioFile( | 845 if (file_call_recorder_->StartRecordingAudioFile( |
901 fileName, | 846 fileName, (const CodecInst&)*codecInst, notificationTime) != 0) { |
902 (const CodecInst&) *codecInst, | 847 _engineStatisticsPtr->SetLastError( |
903 notificationTime) != 0) | 848 VE_BAD_FILE, kTraceError, |
904 { | 849 "StartRecordingAudioFile() failed to start file recording"); |
905 _engineStatisticsPtr->SetLastError( | 850 file_call_recorder_->StopRecording(); |
906 VE_BAD_FILE, kTraceError, | 851 file_call_recorder_.reset(); |
907 "StartRecordingAudioFile() failed to start file recording"); | 852 return -1; |
908 _fileCallRecorderPtr->StopRecording(); | |
909 FileRecorder::DestroyFileRecorder(_fileCallRecorderPtr); | |
910 _fileCallRecorderPtr = NULL; | |
911 return -1; | |
912 } | 853 } |
913 _fileCallRecorderPtr->RegisterModuleFileCallback(this); | 854 file_call_recorder_->RegisterModuleFileCallback(this); |
914 _fileCallRecording = true; | 855 _fileCallRecording = true; |
915 | 856 |
916 return 0; | 857 return 0; |
917 } | 858 } |
918 | 859 |
919 int TransmitMixer::StartRecordingCall(OutStream* stream, | 860 int TransmitMixer::StartRecordingCall(OutStream* stream, |
920 const CodecInst* codecInst) | 861 const CodecInst* codecInst) |
921 { | 862 { |
922 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, -1), | 863 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, -1), |
923 "TransmitMixer::StartRecordingCall()"); | 864 "TransmitMixer::StartRecordingCall()"); |
(...skipping 26 matching lines...) Expand all Loading... |
950 { | 891 { |
951 format = kFileFormatWavFile; | 892 format = kFileFormatWavFile; |
952 } else | 893 } else |
953 { | 894 { |
954 format = kFileFormatCompressedFile; | 895 format = kFileFormatCompressedFile; |
955 } | 896 } |
956 | 897 |
957 rtc::CritScope cs(&_critSect); | 898 rtc::CritScope cs(&_critSect); |
958 | 899 |
959 // Destroy the old instance | 900 // Destroy the old instance |
960 if (_fileCallRecorderPtr) | 901 if (file_call_recorder_) { |
961 { | 902 file_call_recorder_->RegisterModuleFileCallback(NULL); |
962 _fileCallRecorderPtr->RegisterModuleFileCallback(NULL); | 903 file_call_recorder_.reset(); |
963 FileRecorder::DestroyFileRecorder(_fileCallRecorderPtr); | |
964 _fileCallRecorderPtr = NULL; | |
965 } | 904 } |
966 | 905 |
967 _fileCallRecorderPtr = | 906 file_call_recorder_ = FileRecorder::CreateFileRecorder( |
968 FileRecorder::CreateFileRecorder(_fileCallRecorderId, | 907 _fileCallRecorderId, (const FileFormats)format); |
969 (const FileFormats) format); | 908 if (!file_call_recorder_) { |
970 if (_fileCallRecorderPtr == NULL) | 909 _engineStatisticsPtr->SetLastError( |
971 { | 910 VE_INVALID_ARGUMENT, kTraceError, |
972 _engineStatisticsPtr->SetLastError( | 911 "StartRecordingCall() fileRecorder format isnot correct"); |
973 VE_INVALID_ARGUMENT, kTraceError, | 912 return -1; |
974 "StartRecordingCall() fileRecorder format isnot correct"); | |
975 return -1; | |
976 } | 913 } |
977 | 914 |
978 if (_fileCallRecorderPtr->StartRecordingAudioFile(*stream, | 915 if (file_call_recorder_->StartRecordingAudioFile(*stream, *codecInst, |
979 *codecInst, | 916 notificationTime) != 0) { |
980 notificationTime) != 0) | 917 _engineStatisticsPtr->SetLastError( |
981 { | 918 VE_BAD_FILE, kTraceError, |
982 _engineStatisticsPtr->SetLastError(VE_BAD_FILE, kTraceError, | 919 "StartRecordingAudioFile() failed to start file recording"); |
983 "StartRecordingAudioFile() failed to start file recording"); | 920 file_call_recorder_->StopRecording(); |
984 _fileCallRecorderPtr->StopRecording(); | 921 file_call_recorder_.reset(); |
985 FileRecorder::DestroyFileRecorder(_fileCallRecorderPtr); | 922 return -1; |
986 _fileCallRecorderPtr = NULL; | |
987 return -1; | |
988 } | 923 } |
989 | 924 |
990 _fileCallRecorderPtr->RegisterModuleFileCallback(this); | 925 file_call_recorder_->RegisterModuleFileCallback(this); |
991 _fileCallRecording = true; | 926 _fileCallRecording = true; |
992 | 927 |
993 return 0; | 928 return 0; |
994 } | 929 } |
995 | 930 |
996 int TransmitMixer::StopRecordingCall() | 931 int TransmitMixer::StopRecordingCall() |
997 { | 932 { |
998 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, -1), | 933 WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, -1), |
999 "TransmitMixer::StopRecordingCall()"); | 934 "TransmitMixer::StopRecordingCall()"); |
1000 | 935 |
1001 if (!_fileCallRecording) | 936 if (!_fileCallRecording) |
1002 { | 937 { |
1003 WEBRTC_TRACE(kTraceError, kTraceVoice, VoEId(_instanceId, -1), | 938 WEBRTC_TRACE(kTraceError, kTraceVoice, VoEId(_instanceId, -1), |
1004 "StopRecordingCall() file isnot recording"); | 939 "StopRecordingCall() file isnot recording"); |
1005 return -1; | 940 return -1; |
1006 } | 941 } |
1007 | 942 |
1008 rtc::CritScope cs(&_critSect); | 943 rtc::CritScope cs(&_critSect); |
1009 | 944 |
1010 if (_fileCallRecorderPtr->StopRecording() != 0) | 945 if (file_call_recorder_->StopRecording() != 0) { |
1011 { | 946 _engineStatisticsPtr->SetLastError( |
1012 _engineStatisticsPtr->SetLastError( | 947 VE_STOP_RECORDING_FAILED, kTraceError, |
1013 VE_STOP_RECORDING_FAILED, kTraceError, | 948 "StopRecording(), could not stop recording"); |
1014 "StopRecording(), could not stop recording"); | 949 return -1; |
1015 return -1; | |
1016 } | 950 } |
1017 | 951 |
1018 _fileCallRecorderPtr->RegisterModuleFileCallback(NULL); | 952 file_call_recorder_->RegisterModuleFileCallback(NULL); |
1019 FileRecorder::DestroyFileRecorder(_fileCallRecorderPtr); | 953 file_call_recorder_.reset(); |
1020 _fileCallRecorderPtr = NULL; | |
1021 _fileCallRecording = false; | 954 _fileCallRecording = false; |
1022 | 955 |
1023 return 0; | 956 return 0; |
1024 } | 957 } |
1025 | 958 |
1026 void | 959 void |
1027 TransmitMixer::SetMixWithMicStatus(bool mix) | 960 TransmitMixer::SetMixWithMicStatus(bool mix) |
1028 { | 961 { |
1029 _mixFileWithMicrophone = mix; | 962 _mixFileWithMicrophone = mix; |
1030 } | 963 } |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1124 } | 1057 } |
1125 _audioFrame.num_channels_ = std::min(num_channels, num_codec_channels); | 1058 _audioFrame.num_channels_ = std::min(num_channels, num_codec_channels); |
1126 RemixAndResample(audio, samples_per_channel, num_channels, sample_rate_hz, | 1059 RemixAndResample(audio, samples_per_channel, num_channels, sample_rate_hz, |
1127 &resampler_, &_audioFrame); | 1060 &resampler_, &_audioFrame); |
1128 } | 1061 } |
1129 | 1062 |
1130 int32_t TransmitMixer::RecordAudioToFile( | 1063 int32_t TransmitMixer::RecordAudioToFile( |
1131 uint32_t mixingFrequency) | 1064 uint32_t mixingFrequency) |
1132 { | 1065 { |
1133 rtc::CritScope cs(&_critSect); | 1066 rtc::CritScope cs(&_critSect); |
1134 if (_fileRecorderPtr == NULL) | 1067 if (!file_recorder_) { |
1135 { | 1068 WEBRTC_TRACE(kTraceWarning, kTraceVoice, VoEId(_instanceId, -1), |
1136 WEBRTC_TRACE(kTraceWarning, kTraceVoice, VoEId(_instanceId, -1), | 1069 "TransmitMixer::RecordAudioToFile() filerecorder doesnot" |
1137 "TransmitMixer::RecordAudioToFile() filerecorder doesnot" | 1070 "exist"); |
1138 "exist"); | 1071 return -1; |
1139 return -1; | |
1140 } | 1072 } |
1141 | 1073 |
1142 if (_fileRecorderPtr->RecordAudioToFile(_audioFrame) != 0) | 1074 if (file_recorder_->RecordAudioToFile(_audioFrame) != 0) { |
1143 { | 1075 WEBRTC_TRACE(kTraceWarning, kTraceVoice, VoEId(_instanceId, -1), |
1144 WEBRTC_TRACE(kTraceWarning, kTraceVoice, VoEId(_instanceId, -1), | 1076 "TransmitMixer::RecordAudioToFile() file recording" |
1145 "TransmitMixer::RecordAudioToFile() file recording" | 1077 "failed"); |
1146 "failed"); | 1078 return -1; |
1147 return -1; | |
1148 } | 1079 } |
1149 | 1080 |
1150 return 0; | 1081 return 0; |
1151 } | 1082 } |
1152 | 1083 |
1153 int32_t TransmitMixer::MixOrReplaceAudioWithFile( | 1084 int32_t TransmitMixer::MixOrReplaceAudioWithFile( |
1154 int mixingFrequency) | 1085 int mixingFrequency) |
1155 { | 1086 { |
1156 std::unique_ptr<int16_t[]> fileBuffer(new int16_t[640]); | 1087 std::unique_ptr<int16_t[]> fileBuffer(new int16_t[640]); |
1157 | 1088 |
1158 size_t fileSamples(0); | 1089 size_t fileSamples(0); |
1159 { | 1090 { |
1160 rtc::CritScope cs(&_critSect); | 1091 rtc::CritScope cs(&_critSect); |
1161 if (_filePlayerPtr == NULL) | 1092 if (!file_player_) { |
1162 { | 1093 WEBRTC_TRACE(kTraceWarning, kTraceVoice, VoEId(_instanceId, -1), |
1163 WEBRTC_TRACE(kTraceWarning, kTraceVoice, | 1094 "TransmitMixer::MixOrReplaceAudioWithFile()" |
1164 VoEId(_instanceId, -1), | 1095 "fileplayer doesnot exist"); |
1165 "TransmitMixer::MixOrReplaceAudioWithFile()" | 1096 return -1; |
1166 "fileplayer doesnot exist"); | |
1167 return -1; | |
1168 } | 1097 } |
1169 | 1098 |
1170 if (_filePlayerPtr->Get10msAudioFromFile(fileBuffer.get(), | 1099 if (file_player_->Get10msAudioFromFile(fileBuffer.get(), fileSamples, |
1171 fileSamples, | 1100 mixingFrequency) == -1) { |
1172 mixingFrequency) == -1) | 1101 WEBRTC_TRACE(kTraceWarning, kTraceVoice, VoEId(_instanceId, -1), |
1173 { | 1102 "TransmitMixer::MixOrReplaceAudioWithFile() file" |
1174 WEBRTC_TRACE(kTraceWarning, kTraceVoice, VoEId(_instanceId, -1), | 1103 " mixing failed"); |
1175 "TransmitMixer::MixOrReplaceAudioWithFile() file" | 1104 return -1; |
1176 " mixing failed"); | |
1177 return -1; | |
1178 } | 1105 } |
1179 } | 1106 } |
1180 | 1107 |
1181 assert(_audioFrame.samples_per_channel_ == fileSamples); | 1108 assert(_audioFrame.samples_per_channel_ == fileSamples); |
1182 | 1109 |
1183 if (_mixFileWithMicrophone) | 1110 if (_mixFileWithMicrophone) |
1184 { | 1111 { |
1185 // Currently file stream is always mono. | 1112 // Currently file stream is always mono. |
1186 // TODO(xians): Change the code when FilePlayer supports real stereo. | 1113 // TODO(xians): Change the code when FilePlayer supports real stereo. |
1187 MixWithSat(_audioFrame.data_, | 1114 MixWithSat(_audioFrame.data_, |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1301 void TransmitMixer::EnableStereoChannelSwapping(bool enable) { | 1228 void TransmitMixer::EnableStereoChannelSwapping(bool enable) { |
1302 swap_stereo_channels_ = enable; | 1229 swap_stereo_channels_ = enable; |
1303 } | 1230 } |
1304 | 1231 |
1305 bool TransmitMixer::IsStereoChannelSwappingEnabled() { | 1232 bool TransmitMixer::IsStereoChannelSwappingEnabled() { |
1306 return swap_stereo_channels_; | 1233 return swap_stereo_channels_; |
1307 } | 1234 } |
1308 | 1235 |
1309 } // namespace voe | 1236 } // namespace voe |
1310 } // namespace webrtc | 1237 } // namespace webrtc |
OLD | NEW |