Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(264)

Side by Side Diff: webrtc/voice_engine/transmit_mixer.cc

Issue 2049683003: FileRecorder + FilePlayer: Let Create functions return unique_ptr (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@remove3
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« webrtc/voice_engine/output_mixer.h ('K') | « webrtc/voice_engine/transmit_mixer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698